<?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>124630</bug_id>
          
          <creation_ts>2013-11-19 19:48:44 -0800</creation_ts>
          <short_desc>Infer constant closure variables</short_desc>
          <delta_ts>2013-12-04 11:29:12 -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>124464</dependson>
    
    <dependson>124760</dependson>
    
    <dependson>124812</dependson>
    
    <dependson>124883</dependson>
    
    <dependson>125052</dependson>
          <blocked>125205</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>952387</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-19 19:48:44 -0800</bug_when>
    <thetext>Because that would be super cool</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952717</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-11-20 12:18:28 -0800</bug_when>
    <thetext>Most of the time, a constant closure variable is assigned only once, and not inside a loop. Should we consider asking the parser to supply this information, instead of fancier run-time checks?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952725</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-20 12:29:50 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; Most of the time, a constant closure variable is assigned only once, and not inside a loop. Should we consider asking the parser to supply this information, instead of fancier run-time checks?

How would that solve the problem?

Consider the following examples that would probably not work with a non-fancy parser-based analysis:

Example #1:

function foo() {
    function bar() { x; }
    var x;
    bar();
    x = 42;  // Assigned once!
    bar();
}

There is no good way to naively fix this in the parser unless we required all constant closure variables to be assigned before anything that looked like a function call.

Example #2:

function foo() {
    var heap = new Array();
    function bar() {
        heap;
    }
}

&quot;heap&quot; is only constant if foo() is only called once.  You need at least some check for that.

Example #3:

function foo() {
    var heap = new Array();
    function bar() {
        var heap2 = heap;
        function baz() {
            heap2;
        }
    }
}

Here, bar() is called twice and heap2 is assigned multiple times - but it will have the same value so long as foo() runs only once.  It would be good to catch such cases.


Bottom line, I&apos;d like to build a closure variable inference that is powerful enough that I don&apos;t have to work on this problem again anytime soon.  The obvious way to do that is to just have a store barrier on closure variables, and make sure that the store barrier is elided if it&apos;s already been tripped (similarly to how the global variable constant inference works already).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952727</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-11-20 12:37:42 -0800</bug_when>
    <thetext>I&apos;ve considered this in the past, but basically came to the same conclusion that Fil has.

Interestingly let variables may actually be doable in the parser (they are block scoped so don&apos;t suffer the same problems we might get from vars, but I also recall at some point the logical behaviour of |let| was the the value itself was included in the closure, rather than a reference.  That said, it was a couple of years ago that that was the case, so who knows what the behaviour is now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>953827</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-23 16:51:25 -0800</bug_when>
    <thetext>It seems that the best way to do this is to combine watchpointing the fact that a scope is instantiated once and watchpointing the fact that the variable won&apos;t be assigned again.

Basically, we start out by not watching closure variables.  But we do set a watchpoint on whether create_activation was called once of more than once.

If in the DFG we encounter a load from a scoped variable and:

- We know that this scope has only been created once, and

- We know that the variable either has no watchpoint yet or has a still-valid watchpoint set, then:

We can create a watchpoint set for the variable (if necessary) and register watchpoints on both the created-once scope watchpoint set and the variable watchpoint set.

Then we just need to figure out how best to trigger a fireAll() when someone writes to the closure variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955595</commentid>
    <comment_count>5</comment_count>
      <attachid>218217</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 14:45:15 -0800</bug_when>
    <thetext>Created attachment 218217
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955623</commentid>
    <comment_count>6</comment_count>
      <attachid>218221</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 15:14:44 -0800</bug_when>
    <thetext>Created attachment 218221
it&apos;s about to get real</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955635</commentid>
    <comment_count>7</comment_count>
      <attachid>218224</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 15:26:24 -0800</bug_when>
    <thetext>Created attachment 218224
I wrote all of the code.

I&apos;m too chicken to see if it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955760</commentid>
    <comment_count>8</comment_count>
      <attachid>218262</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 20:39:02 -0800</bug_when>
    <thetext>Created attachment 218262
it successfully inferred things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955773</commentid>
    <comment_count>9</comment_count>
      <attachid>218264</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 22:05:06 -0800</bug_when>
    <thetext>Created attachment 218264
and now, with tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955776</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-02 22:32:45 -0800</bug_when>
    <thetext>Attachment 218264 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter.html&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/Instruction.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/VariableWatchpointSet.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Watchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.h&apos;, u&apos;Source/JavaScriptCore/runtime/ConstantMode.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.cpp&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:264:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 40 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>955781</commentid>
    <comment_count>11</comment_count>
      <attachid>218264</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 23:04:04 -0800</bug_when>
    <thetext>Comment on attachment 218264
and now, with tests!

Attachment 218264 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/40458104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955784</commentid>
    <comment_count>12</comment_count>
      <attachid>218264</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 23:19:32 -0800</bug_when>
    <thetext>Comment on attachment 218264
and now, with tests!

Attachment 218264 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/42088049</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955785</commentid>
    <comment_count>13</comment_count>
      <attachid>218264</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-02 23:20:11 -0800</bug_when>
    <thetext>Comment on attachment 218264
and now, with tests!

Attachment 218264 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/42518013</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956183</commentid>
    <comment_count>14</comment_count>
      <attachid>218355</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-03 15:44:05 -0800</bug_when>
    <thetext>Created attachment 218355
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956186</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-03 15:45:24 -0800</bug_when>
    <thetext>Attachment 218355 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter.html&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/Instruction.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/VariableWatchpointSet.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Watchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.h&apos;, u&apos;Source/JavaScriptCore/runtime/ConstantMode.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.cpp&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:261:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:262:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:264:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 43 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>956187</commentid>
    <comment_count>16</comment_count>
      <attachid>218355</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-03 15:46:13 -0800</bug_when>
    <thetext>Comment on attachment 218355
the patch

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

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.h:201
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_captured_mov);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_new_captured_func);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_not);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_eq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_neq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_stricteq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_nstricteq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_less);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_lesseq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_greater);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_greatereq);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_inc);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_dec);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_to_number);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_negate);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_add);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_mul);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_sub);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_div);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_mod);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_lshift);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_rshift);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_urshift);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_bitand);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_bitor);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_bitxor);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_typeof);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_is_object);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_is_function);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_in);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_del_by_val);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_strcat);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_to_primitive);
&gt; +SLOW_PATH_HIDDEN_DECL(slow_path_captured_mov);

I don&apos;t know what happened here.  I think I have some reverting to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956192</commentid>
    <comment_count>17</comment_count>
      <attachid>218357</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-03 15:51:42 -0800</bug_when>
    <thetext>Created attachment 218357
the patch

Fix some style issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956193</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-03 15:52:57 -0800</bug_when>
    <thetext>Attachment 218357 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter.html&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/Instruction.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/VariableWatchpointSet.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Watchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.h&apos;, u&apos;Source/JavaScriptCore/runtime/ConstantMode.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.cpp&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:265:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 43 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>956202</commentid>
    <comment_count>19</comment_count>
      <attachid>218357</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-03 16:12:18 -0800</bug_when>
    <thetext>Comment on attachment 218357
the patch

Attachment 218357 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/39218300</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956214</commentid>
    <comment_count>20</comment_count>
      <attachid>218357</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-03 16:50:35 -0800</bug_when>
    <thetext>Comment on attachment 218357
the patch

Attachment 218357 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/42948064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956241</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-03 18:14:06 -0800</bug_when>
    <thetext>This is a big deal for emscripten/asm.js code.  It does incur some small start-up costs so short-running or &quot;code load&quot; style tests are slightly penalized.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r160044)
&quot;InferConstClosure&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r160044)

Collected 10 samples per benchmark/VM, with 10 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree             InferConstClosure                                 
SunSpider:
   3d-cube                                            7.6387+-0.0644     ?      7.7471+-0.0767        ? might be 1.0142x slower
   3d-morph                                           8.8122+-0.0829     ?      8.8220+-0.0746        ?
   3d-raytrace                                        8.7783+-0.1044     ?      8.9295+-0.1573        ? might be 1.0172x slower
   access-binary-trees                                2.0191+-0.0077     ?      2.0459+-0.0674        ? might be 1.0133x slower
   access-fannkuch                                    7.9568+-0.1212            7.9172+-0.0872        
   access-nbody                                       4.2404+-0.0295            4.2378+-0.0213        
   access-nsieve                                      5.0054+-0.0435            4.9861+-0.0682        
   bitops-3bit-bits-in-byte                           1.8149+-0.0278            1.8092+-0.0064        
   bitops-bits-in-byte                                6.9592+-0.1195     ?      7.0121+-0.0519        ?
   bitops-bitwise-and                                 2.9390+-0.0212     ?      2.9572+-0.0181        ?
   bitops-nsieve-bits                                 4.5473+-0.0715     ?      4.6083+-0.0050        ? might be 1.0134x slower
   controlflow-recursive                              3.1231+-0.0115     ?      3.1307+-0.0138        ?
   crypto-aes                                         5.4359+-0.0189     ?      5.4702+-0.0389        ?
   crypto-md5                                         3.0878+-0.0112     !      3.2198+-0.0217        ! definitely 1.0427x slower
   crypto-sha1                                        2.9966+-0.0322            2.9633+-0.0085          might be 1.0112x faster
   date-format-tofte                                 11.3554+-0.0715     !     11.5464+-0.0723        ! definitely 1.0168x slower
   date-format-xparb                                  8.8198+-0.1266            8.6020+-0.0959          might be 1.0253x faster
   math-cordic                                        4.1979+-0.0133     ?      4.2147+-0.0203        ?
   math-partial-sums                                 10.1689+-0.1053     ?     10.2243+-0.0892        ?
   math-spectral-norm                                 2.7260+-0.0061            2.7256+-0.0047        
   regexp-dna                                        12.9910+-0.0866           12.9636+-0.0963        
   string-base64                                      5.4227+-0.0300     ?      5.4452+-0.0683        ?
   string-fasta                                      10.1692+-0.1796     ?     10.4419+-0.1741        ? might be 1.0268x slower
   string-tagcloud                                   14.9960+-0.1506     ?     15.0649+-0.0902        ?
   string-unpack-code                                31.0751+-0.4038     ?     31.1186+-0.1856        ?
   string-validate-input                              7.0238+-0.1051     ?      7.0292+-0.0589        ?

   &lt;arithmetic&gt; *                                     7.4731+-0.0149     !      7.5090+-0.0121        ! definitely 1.0048x slower
   &lt;geometric&gt;                                        5.9636+-0.0044     !      5.9948+-0.0098        ! definitely 1.0052x slower
   &lt;harmonic&gt;                                         4.8706+-0.0069     !      4.8962+-0.0139        ! definitely 1.0053x slower

                                                        TipOfTree             InferConstClosure                                 
LongSpider:
   3d-cube                                         2688.1418+-10.6655    ?   2694.1693+-6.0853        ?
   3d-morph                                        1505.6124+-1.4850         1505.2880+-1.4175        
   3d-raytrace                                     1546.8071+-20.7261        1538.3861+-4.5666        
   access-binary-trees                             2195.0808+-10.9519    ?   2200.0656+-12.1293       ?
   access-fannkuch                                  671.2556+-7.2202          666.8389+-3.0307        
   access-nbody                                    1496.0919+-1.2850         1495.8481+-0.8373        
   access-nsieve                                   1549.9365+-3.5279     ?   1561.5308+-28.1170       ?
   bitops-3bit-bits-in-byte                         121.4071+-0.1159     ?    121.5552+-0.3241        ?
   bitops-bits-in-byte                              619.4471+-2.5097          617.7735+-1.9121        
   bitops-nsieve-bits                              1045.9646+-0.7847     ?   1047.1044+-0.9716        ?
   controlflow-recursive                           1492.4583+-0.4425     ?   1492.6165+-0.6944        ?
   crypto-aes                                      1646.2260+-2.9662     ?   1648.5565+-6.3053        ?
   crypto-md5                                      1177.6470+-13.5925        1171.8501+-1.3995        
   crypto-sha1                                     1702.6676+-149.1954       1641.6657+-17.1778         might be 1.0372x faster
   date-format-tofte                               1177.7609+-6.5563     !   1209.3618+-17.8115       ! definitely 1.0268x slower
   date-format-xparb                               1462.3250+-9.3955     ^   1431.7562+-11.1928       ^ definitely 1.0214x faster
   math-cordic                                     1735.6093+-1.4208         1731.4899+-6.3273        
   math-partial-sums                               1306.1804+-2.3798         1305.6983+-1.8734        
   math-spectral-norm                              1826.9591+-1.5972         1826.3617+-0.6073        
   string-base64                                    506.0012+-1.5937          504.1431+-1.6183        
   string-fasta                                     988.9673+-2.6235     ?    994.8262+-5.2153        ?
   string-tagcloud                                  377.8290+-1.3537     !    384.8073+-0.9561        ! definitely 1.0185x slower

   &lt;arithmetic&gt;                                    1310.9262+-6.5843         1308.7133+-2.1479          might be 1.0017x faster
   &lt;geometric&gt; *                                   1115.6763+-3.7509         1115.0316+-1.6436          might be 1.0006x faster
   &lt;harmonic&gt;                                       799.2485+-1.1917     ?    800.2049+-0.9782        ? might be 1.0012x slower

                                                        TipOfTree             InferConstClosure                                 
V8Spider:
   crypto                                            79.4193+-0.2292     ?     79.4963+-0.4007        ?
   deltablue                                         97.8427+-0.7746     ?     97.9674+-0.7418        ?
   earley-boyer                                      71.3501+-0.6923           70.9401+-0.3431        
   raytrace                                          40.5313+-0.8088           40.3742+-0.3703        
   regexp                                           100.2500+-0.3853     ?    100.5651+-0.3583        ?
   richards                                         134.3512+-1.8194          133.2791+-0.9807        
   splay                                             46.8579+-1.4577           45.8055+-0.3641          might be 1.0230x faster

   &lt;arithmetic&gt;                                      81.5146+-0.3407           81.2040+-0.1909          might be 1.0038x faster
   &lt;geometric&gt; *                                     75.6379+-0.3897           75.2722+-0.1733          might be 1.0049x faster
   &lt;harmonic&gt;                                        69.7861+-0.5190           69.3500+-0.2073          might be 1.0063x faster

                                                        TipOfTree             InferConstClosure                                 
Octane and V8v7:
   encrypt                                           0.46508+-0.00042    ?     0.46567+-0.00043       ?
   decrypt                                           8.56674+-0.01046    ?     8.61606+-0.10372       ?
   deltablue                                x2       0.56078+-0.00360    ?     0.56582+-0.00800       ?
   earley                                            0.90335+-0.00520    ?     0.90517+-0.00615       ?
   boyer                                            12.25230+-0.03791    ?    12.37577+-0.11147       ? might be 1.0101x slower
   raytrace                                 x2       4.32045+-0.03102          4.28477+-0.02267       
   regexp                                   x2      33.06621+-0.30748         33.02849+-0.11323       
   richards                                 x2       0.43048+-0.00607          0.42611+-0.00602         might be 1.0103x faster
   splay                                    x2       0.64250+-0.00780    ^     0.63143+-0.00313       ^ definitely 1.0175x faster
   navier-stokes                            x2      10.70671+-0.00698    ?    10.75972+-0.12440       ?
   closure                                           0.42686+-0.00031    !     0.43352+-0.00099       ! definitely 1.0156x slower
   jquery                                            6.17270+-0.01945    !     6.34557+-0.00792       ! definitely 1.0280x slower
   gbemu                                    x2      71.81246+-0.66737         71.77826+-0.88062       
   mandreel                                 x2     141.81848+-0.23738        141.78387+-0.09789       
   pdfjs                                    x2     101.35605+-0.38267    ?   101.93625+-0.26740       ?
   box2d                                    x2      35.73520+-0.41931    ^    35.09301+-0.21133       ^ definitely 1.0183x faster

V8v7:
   &lt;arithmetic&gt;                                      7.60261+-0.04066    ?     7.60971+-0.02459       ? might be 1.0009x slower
   &lt;geometric&gt; *                                     2.50988+-0.00884          2.50556+-0.00737         might be 1.0017x faster
   &lt;harmonic&gt;                                        1.03273+-0.00563          1.02826+-0.00584         might be 1.0043x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.91099+-0.05836    ?    31.91220+-0.07783       ? might be 1.0000x slower
   &lt;geometric&gt; *                                     6.98526+-0.01532          6.98241+-0.01634         might be 1.0004x faster
   &lt;harmonic&gt;                                        1.43524+-0.00671          1.43304+-0.00717         might be 1.0015x faster

                                                        TipOfTree             InferConstClosure                                 
Kraken:
   ai-astar                                          494.064+-0.534            493.463+-0.652         
   audio-beat-detection                              237.347+-0.720            237.091+-0.428         
   audio-dft                                         289.929+-1.580            289.672+-0.681         
   audio-fft                                         143.069+-0.201            143.037+-0.207         
   audio-oscillator                                  244.545+-0.921            243.982+-0.372         
   imaging-darkroom                                  285.128+-0.690      ?     285.218+-0.621         ?
   imaging-desaturate                                158.438+-0.152            158.407+-0.115         
   imaging-gaussian-blur                             363.654+-0.387            363.580+-0.269         
   json-parse-financial                               79.881+-0.233      ?      80.735+-0.884         ? might be 1.0107x slower
   json-stringify-tinderbox                          105.025+-0.432            104.961+-0.240         
   stanford-crypto-aes                                90.684+-0.451      ?      91.121+-0.328         ?
   stanford-crypto-ccm                               101.625+-1.061      ?     101.931+-1.897         ?
   stanford-crypto-pbkdf2                            263.707+-0.997      ?     266.069+-2.690         ?
   stanford-crypto-sha256-iterative                  113.981+-0.445      ?     114.356+-0.493         ?

   &lt;arithmetic&gt; *                                    212.220+-0.290      ?     212.402+-0.213         ? might be 1.0009x slower
   &lt;geometric&gt;                                       182.482+-0.291      ?     182.794+-0.337         ? might be 1.0017x slower
   &lt;harmonic&gt;                                        157.640+-0.312      ?     158.075+-0.498         ? might be 1.0028x slower

                                                        TipOfTree             InferConstClosure                                 
JSRegress:
   adapt-to-double-divide                            22.7328+-0.0695           22.6688+-0.1014        
   aliased-arguments-getbyval                         0.9574+-0.0051     ?      0.9617+-0.0049        ?
   allocate-big-object                                2.6308+-0.0294            2.6263+-0.0094        
   arity-mismatch-inlining                            0.9253+-0.0054     ?      0.9389+-0.0368        ? might be 1.0148x slower
   array-access-polymorphic-structure                10.0620+-0.7100            9.8188+-0.0770          might be 1.0248x faster
   array-nonarray-polymorhpic-access                 56.5547+-0.3582           56.4829+-0.3402        
   array-with-double-add                              5.7442+-0.0737     ?      5.7852+-0.0248        ?
   array-with-double-increment                        4.2837+-0.0337     ?      4.3070+-0.0127        ?
   array-with-double-mul-add                          6.8137+-0.0557            6.7543+-0.0875        
   array-with-double-sum                              7.9785+-0.1222     ?      8.0089+-0.0239        ?
   array-with-int32-add-sub                          10.4180+-0.1122     ?     10.4293+-0.1137        ?
   array-with-int32-or-double-sum                     7.9658+-0.0809     ?      8.0337+-0.0422        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.7181+-0.8529     ?    118.8959+-0.7333        ?
   ArrayBuffer-DataView-alloc-long-lived             30.4118+-0.1161     ?     30.5505+-0.1382        ?
   ArrayBuffer-Int32Array-byteOffset                  7.0755+-0.0510            7.0550+-0.0718        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.7998+-2.1402     ?    217.0345+-1.9527        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.6461+-1.4534     ?    167.6655+-1.1342        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    120.2743+-1.7025          119.8776+-1.7932        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.8003+-1.2617     ^     48.3267+-0.2586        ^ definitely 1.0512x faster
   ArrayBuffer-Int8Array-alloc-long-lived            31.4243+-0.7813           30.8441+-0.1706          might be 1.0188x faster
   ArrayBuffer-Int8Array-alloc                       27.6349+-0.8288     ^     26.6049+-0.1229        ^ definitely 1.0387x faster
   asmjs_bool_bug                                     9.4795+-0.0649     ?      9.5421+-0.0579        ?
   basic-set                                         26.3323+-0.2748     ^     21.7538+-0.2551        ^ definitely 1.2105x faster
   big-int-mul                                        5.5120+-0.0256     ?      5.5482+-0.0408        ?
   boolean-test                                       4.3297+-0.0071     ?      4.3707+-0.0583        ?
   branch-fold                                        4.9608+-0.0061     ?      4.9675+-0.0170        ?
   captured-assignments                               0.6116+-0.0366            0.5934+-0.0085          might be 1.0307x faster
   cast-int-to-double                                12.4823+-0.1455           12.4045+-0.1003        
   cell-argument                                     15.7777+-0.4046     ?     16.2226+-0.3642        ? might be 1.0282x slower
   cfg-simplify                                       3.9512+-0.0119            3.9466+-0.0060        
   cmpeq-obj-to-obj-other                            13.2437+-0.3604           12.8109+-0.7073          might be 1.0338x faster
   constant-test                                      8.8807+-0.1129            8.7993+-0.0971        
   DataView-custom-properties                       125.3973+-0.9066     ?    126.0536+-0.6077        ?
   delay-tear-off-arguments-strictmode                3.5124+-0.0102     ?      3.5180+-0.0074        ?
   destructuring-arguments-length                   171.7488+-0.6448          171.6874+-1.3538        
   destructuring-arguments                            8.5639+-0.0927     !      8.7638+-0.0589        ! definitely 1.0234x slower
   destructuring-swap                                 8.5542+-0.0500            8.5489+-0.0471        
   direct-arguments-getbyval                          0.8478+-0.0139     ?      0.8584+-0.0040        ? might be 1.0125x slower
   double-pollution-getbyval                         11.1129+-0.1036           11.1000+-0.1234        
   double-pollution-putbyoffset                       6.6234+-0.0369            6.5860+-0.0231        
   empty-string-plus-int                             11.0492+-0.0786     ?     11.1739+-0.0752        ? might be 1.0113x slower
   emscripten-cube2hash                              53.4529+-0.2841     !     54.9739+-0.1216        ! definitely 1.0285x slower
   emscripten-memops                               7795.4755+-51.3751    ^   6979.9327+-95.2383       ^ definitely 1.1168x faster
   external-arguments-getbyval                        2.0111+-0.0185     ?      2.0432+-0.0663        ? might be 1.0160x slower
   external-arguments-putbyval                        3.0772+-0.0163            3.0449+-0.0209          might be 1.0106x faster
   Float32Array-matrix-mult                           6.5115+-0.0345     ?      6.5156+-0.0468        ?
   Float32Array-to-Float64Array-set                  95.7622+-0.4151           94.6017+-1.2150          might be 1.0123x faster
   Float64Array-alloc-long-lived                    103.7769+-0.6520          103.3845+-0.3392        
   Float64Array-to-Int16Array-set                   122.7161+-1.1848     ^    117.3658+-0.6867        ^ definitely 1.0456x faster
   fold-double-to-int                                21.0493+-0.1417           20.9068+-0.0728        
   for-of-iterate-array-entries                       8.6530+-0.1280            8.5061+-0.0431          might be 1.0173x faster
   for-of-iterate-array-keys                          3.4605+-0.0747     ?      3.4756+-0.0410        ?
   for-of-iterate-array-values                        2.9547+-0.0462     ?      2.9898+-0.0790        ? might be 1.0119x slower
   function-dot-apply                                 3.1245+-0.0138     ?      3.1263+-0.0042        ?
   function-test                                      4.6676+-0.0802     ?      4.7811+-0.0428        ? might be 1.0243x slower
   get-by-id-chain-from-try-block                     7.9956+-0.1289     ?      8.0783+-0.0672        ? might be 1.0103x slower
   get-by-id-proto-or-self                           26.0391+-0.2496           25.9992+-0.1710        
   get-by-id-self-or-proto                           23.7499+-0.6781           23.5318+-0.5851        
   get_callee_monomorphic                             4.7693+-0.0354     !      4.8813+-0.0542        ! definitely 1.0235x slower
   get_callee_polymorphic                             4.4665+-0.0129     ?      4.4921+-0.0226        ?
   global-var-const-infer-fire-from-opt               0.9463+-0.0121     ?      0.9529+-0.0102        ?
   global-var-const-infer                             0.7613+-0.0034     !      0.7720+-0.0057        ! definitely 1.0140x slower
   HashMap-put-get-iterate-keys                      41.5692+-0.4400     ?     42.0465+-0.1471        ? might be 1.0115x slower
   HashMap-put-get-iterate                           63.0926+-2.4861           61.1107+-1.1143          might be 1.0324x faster
   HashMap-string-put-get-iterate                    55.4212+-0.7306           54.0280+-0.6852          might be 1.0258x faster
   imul-double-only                                  17.7911+-0.1716           17.7389+-0.1048        
   imul-int-only                                     14.7243+-0.1353     ?     14.8227+-0.1041        ?
   imul-mixed                                        21.9117+-0.0920     ?     22.4463+-0.8797        ? might be 1.0244x slower
   in-four-cases                                     25.9424+-0.1089     ?     25.9730+-0.1128        ?
   in-one-case-false                                 12.0701+-0.1327     ?     12.0870+-0.0435        ?
   in-one-case-true                                  12.0993+-0.1424           12.0729+-0.0884        
   in-two-cases                                      13.0198+-0.0918           12.8709+-0.0935          might be 1.0116x faster
   indexed-properties-in-objects                      4.6358+-0.0512     ?      4.6704+-0.0099        ?
   infer-closure-const-then-mov-no-inline             7.3790+-0.0764     !     15.4794+-0.1261        ! definitely 2.0978x slower
   infer-closure-const-then-mov                      88.1257+-0.1026     ^     28.8633+-0.1170        ^ definitely 3.0532x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     27.2998+-0.2236     ^     17.7046+-0.1079        ^ definitely 1.5420x faster
   infer-closure-const-then-put-to-scope             80.3574+-0.0869     ^     35.7252+-0.0820        ^ definitely 2.2493x faster
   infer-closure-const-then-reenter-no-inline   
                                                    131.8811+-0.1285     ^     84.2390+-0.2008        ^ definitely 1.5656x faster
   infer-closure-const-then-reenter                  84.4510+-0.2728     ^     36.0372+-0.2965        ^ definitely 2.3434x faster
   infer-one-time-closure-ten-vars                   92.1990+-0.1100     ^     29.0712+-0.2669        ^ definitely 3.1715x faster
   infer-one-time-closure-two-vars                   28.7893+-0.1183           28.7515+-0.1431        
   infer-one-time-closure                            28.8128+-0.2159     ?     28.9166+-0.2181        ?
   infer-one-time-deep-closure                       60.8296+-0.1261     ^     58.5076+-0.1740        ^ definitely 1.0397x faster
   inline-arguments-access                            1.6119+-0.0166     ?      1.6176+-0.0040        ?
   inline-arguments-local-escape                     22.4428+-0.1992     ?     22.8501+-0.2138        ? might be 1.0181x slower
   inline-get-scoped-var                              7.3817+-0.1379     ?      7.4612+-0.0731        ? might be 1.0108x slower
   inlined-put-by-id-transition                      15.2557+-0.2052           14.9467+-0.2515          might be 1.0207x faster
   int-or-other-abs-then-get-by-val                   9.4083+-0.0508     ?      9.4113+-0.0821        ?
   int-or-other-abs-zero-then-get-by-val             41.4324+-0.2700           41.2165+-0.3582        
   int-or-other-add-then-get-by-val                  10.4694+-0.1289     ?     10.4840+-0.0197        ?
   int-or-other-add                                  10.7401+-0.1033     ?     10.8850+-0.0923        ? might be 1.0135x slower
   int-or-other-div-then-get-by-val                   6.3512+-0.0498     ?      6.3980+-0.1033        ?
   int-or-other-max-then-get-by-val                   8.7746+-0.1471            8.7323+-0.1245        
   int-or-other-min-then-get-by-val                   6.9771+-0.0239     ?      6.9904+-0.1203        ?
   int-or-other-mod-then-get-by-val                   6.1162+-0.0127     ?      6.1181+-0.0173        ?
   int-or-other-mul-then-get-by-val                   6.5173+-0.0879     ?      6.5293+-0.0868        ?
   int-or-other-neg-then-get-by-val                   7.8571+-0.0154     ?      7.8729+-0.0324        ?
   int-or-other-neg-zero-then-get-by-val             42.6450+-1.0077           42.0935+-0.1698          might be 1.0131x faster
   int-or-other-sub-then-get-by-val                  10.4290+-0.0794     ?     10.5828+-0.1117        ? might be 1.0147x slower
   int-or-other-sub                                   8.7681+-0.1312     ?      8.8729+-0.0754        ? might be 1.0120x slower
   int-overflow-local                                 6.4192+-0.0992     ?      6.4325+-0.0642        ?
   Int16Array-alloc-long-lived                       67.4344+-0.3356           67.4165+-0.4927        
   Int16Array-bubble-sort-with-byteLength            49.0290+-0.1237     ?     49.0698+-0.2043        ?
   Int16Array-bubble-sort                            48.4399+-0.1559           48.3439+-0.1189        
   Int16Array-load-int-mul                            1.8048+-0.0116     ?      1.8205+-0.0205        ?
   Int16Array-to-Int32Array-set                      94.1709+-0.6158     ^     88.4683+-0.5921        ^ definitely 1.0645x faster
   Int32Array-alloc-huge-long-lived                 707.4789+-6.3190          705.2322+-5.4013        
   Int32Array-alloc-huge                            801.1260+-7.8242     ?    802.7616+-6.5923        ?
   Int32Array-alloc-large-long-lived                968.5314+-6.9465     ?    979.0441+-7.6307        ? might be 1.0109x slower
   Int32Array-alloc-large                            45.1514+-0.9163     ?     45.2350+-0.9358        ?
   Int32Array-alloc-long-lived                       80.2466+-0.6802     ?     80.5690+-0.5625        ?
   Int32Array-alloc                                   4.4883+-0.0152     ?      4.4987+-0.0090        ?
   Int32Array-Int8Array-view-alloc                   15.8532+-0.3394     ^     15.2002+-0.3081        ^ definitely 1.0430x faster
   int52-spill                                       13.3227+-0.1608     ?     13.6355+-0.2333        ? might be 1.0235x slower
   Int8Array-alloc-long-lived                        67.4277+-1.0180           66.8928+-0.6107        
   Int8Array-load-with-byteLength                     5.0249+-0.0575     ?      5.0605+-0.0084        ?
   Int8Array-load                                     5.0525+-0.0486            5.0479+-0.0462        
   integer-divide                                    14.8829+-0.0750     ?     14.9689+-0.1694        ?
   integer-modulo                                     2.0001+-0.0101     ?      2.0065+-0.0098        ?
   large-int-captured                                 9.7005+-0.1350     !     10.0284+-0.1024        ! definitely 1.0338x slower
   large-int-neg                                     26.3249+-0.2677     ?     26.5246+-0.1809        ?
   large-int                                         23.5454+-0.1817           23.5243+-0.1900        
   lots-of-fields                                    11.0478+-0.1527           10.9352+-0.1043          might be 1.0103x faster
   make-indexed-storage                               4.2604+-0.0561     ?      4.3024+-0.0799        ?
   make-rope-cse                                      5.9810+-0.0662     ?      5.9939+-0.1483        ?
   marsaglia-larger-ints                            112.0397+-0.2621          112.0026+-0.3080        
   marsaglia-osr-entry                               47.0259+-0.0985     ?     47.1119+-0.1815        ?
   marsaglia                                        463.9281+-0.3487     ?    465.5078+-4.7632        ?
   method-on-number                                  30.8364+-0.4381     ?     31.1339+-0.4830        ?
   negative-zero-divide                               0.4240+-0.0033     !      0.4343+-0.0018        ! definitely 1.0244x slower
   negative-zero-modulo                               0.4065+-0.0026     !      0.4191+-0.0023        ! definitely 1.0310x slower
   negative-zero-negate                               0.3953+-0.0060     ?      0.4221+-0.0263        ? might be 1.0678x slower
   nested-function-parsing-random                   381.4915+-0.3715     !    383.0010+-0.7066        ! definitely 1.0040x slower
   nested-function-parsing                           48.0322+-0.0804           48.0255+-0.2124        
   new-array-buffer-dead                              3.7207+-0.0472            3.7160+-0.0150        
   new-array-buffer-push                             10.4829+-0.1496     ?     10.6141+-0.1380        ? might be 1.0125x slower
   new-array-dead                                    28.5293+-0.1136     ?     28.5826+-0.1340        ?
   new-array-push                                     6.8304+-0.0811     ?      6.8945+-0.0544        ?
   number-test                                        4.2705+-0.0137     !      4.2975+-0.0073        ! definitely 1.0063x slower
   object-closure-call                               13.2238+-0.0787     ?     13.2758+-0.0283        ?
   object-test                                        4.8460+-0.0493     ?      4.8700+-0.0356        ?
   poly-stricteq                                     75.9438+-0.1864     ?     76.8582+-1.3692        ? might be 1.0120x slower
   polymorphic-structure                             21.1963+-0.0887           21.0806+-0.0678        
   polyvariant-monomorphic-get-by-id                 11.9407+-0.0738     ?     12.0076+-0.1596        ?
   put-by-id                                         19.1250+-0.3711     ?     19.3291+-0.1985        ? might be 1.0107x slower
   put-by-val-large-index-blank-indexing-type   
                                                     10.8350+-0.1058           10.8255+-0.1102        
   rare-osr-exit-on-local                            20.2508+-0.1127     ?     20.2563+-0.1010        ?
   register-pressure-from-osr                        31.2747+-0.0515           31.2624+-0.0973        
   simple-activation-demo                            35.0997+-0.0641     !     39.0609+-0.1438        ! definitely 1.1129x slower
   slow-array-profile-convergence                     4.0331+-0.0223     ?      4.1010+-0.1713        ? might be 1.0168x slower
   slow-convergence                                   4.1750+-0.0223     ?      4.2023+-0.0142        ?
   sparse-conditional                                 1.3463+-0.0019     !      1.3604+-0.0068        ! definitely 1.0105x slower
   splice-to-remove                                  77.3097+-0.1252           77.2926+-0.1994        
   stepanov_container                             10574.1981+-35.3169    ^  10079.5626+-25.7090       ^ definitely 1.0491x faster
   string-concat-object                               2.9823+-0.0115     ?      2.9914+-0.0107        ?
   string-concat-pair-object                          2.9503+-0.0253            2.9310+-0.0098        
   string-concat-pair-simple                         16.9589+-0.2881     ?     17.0600+-0.2501        ?
   string-concat-simple                              17.2697+-0.2101           16.8959+-0.3971          might be 1.0221x faster
   string-cons-repeat                                10.4980+-0.0299     ?     10.5032+-0.0149        ?
   string-cons-tower                                 11.1196+-0.0404           11.0422+-0.0424        
   string-equality                                   42.1516+-0.1052     !     42.4629+-0.0902        ! definitely 1.0074x slower
   string-get-by-val-big-char                        12.7971+-0.0625     !     13.1920+-0.1001        ! definitely 1.0309x slower
   string-get-by-val-out-of-bounds-insane             5.8139+-0.1233            5.8003+-0.0759        
   string-get-by-val-out-of-bounds                    5.3495+-0.0302            5.3453+-0.0103        
   string-get-by-val                                  4.8937+-0.0652            4.8299+-0.0793          might be 1.0132x faster
   string-hash                                        2.7448+-0.0119     ?      2.7519+-0.0048        ?
   string-long-ident-equality                        37.7510+-0.6113     ?     38.0123+-0.7714        ?
   string-repeat-arith                               49.9212+-0.3825     ?     50.4378+-0.2920        ? might be 1.0103x slower
   string-sub                                        98.1765+-0.4327     ?     98.8461+-0.6513        ?
   string-test                                        4.2326+-0.0096     !      4.2617+-0.0063        ! definitely 1.0069x slower
   string-var-equality                               70.2884+-0.1626     ?     73.3425+-6.8271        ? might be 1.0435x slower
   structure-hoist-over-transitions                   3.3966+-0.0687            3.3779+-0.0231        
   switch-char-constant                               3.4608+-0.0121     ?      3.4846+-0.0203        ?
   switch-char                                        8.1564+-0.0824     ?      8.1569+-0.0759        ?
   switch-constant                                    9.2999+-0.1213            9.2564+-0.1251        
   switch-string-basic-big-var                       20.2915+-0.1369     ?     20.3280+-0.1411        ?
   switch-string-basic-big                           21.6543+-0.8716           21.5615+-0.7276        
   switch-string-basic-var                           20.1884+-0.0842           20.1300+-0.1272        
   switch-string-basic                               21.4617+-0.7202           21.4024+-0.8822        
   switch-string-big-length-tower-var                29.0044+-0.0918           28.9097+-0.1448        
   switch-string-length-tower-var                    21.5760+-0.1213           21.4601+-0.0878        
   switch-string-length-tower                        16.4781+-0.1013     ?     16.4801+-0.1352        ?
   switch-string-short                               16.4452+-0.0536           16.4339+-0.0612        
   switch                                            13.5520+-0.1113           13.5406+-0.0907        
   tear-off-arguments-simple                          2.2378+-0.0419            2.2256+-0.0057        
   tear-off-arguments                                 3.5557+-0.0074     ?      3.5689+-0.0150        ?
   temporal-structure                                17.0236+-0.1554     ?     17.0538+-0.0568        ?
   to-int32-boolean                                  21.8172+-0.1498           21.7991+-0.1510        
   undefined-test                                     4.4914+-0.0292            4.4691+-0.0360        
   weird-inlining-const-prop                          2.2844+-0.0058     ?      2.2939+-0.0080        ?

   &lt;arithmetic&gt;                                     139.8108+-0.3185     ^    131.5298+-0.4734        ^ definitely 1.0630x faster
   &lt;geometric&gt; *                                     14.7927+-0.0134     ^     14.4775+-0.0148        ^ definitely 1.0218x faster
   &lt;harmonic&gt;                                         5.3339+-0.0130     !      5.3819+-0.0224        ! definitely 1.0090x slower

                                                        TipOfTree             InferConstClosure                                 
All benchmarks:
   &lt;arithmetic&gt;                                     210.4214+-0.6744     ^    204.7346+-0.3765        ^ definitely 1.0278x faster
   &lt;geometric&gt;                                       20.9056+-0.0182     ^     20.6150+-0.0137        ^ definitely 1.0141x faster
   &lt;harmonic&gt;                                         4.8067+-0.0077     !      4.8326+-0.0143        ! definitely 1.0054x slower

                                                        TipOfTree             InferConstClosure                                 
Geomean of preferred means:
   &lt;scaled-result&gt;                                   48.9925+-0.0579     ^     48.8156+-0.0278        ^ definitely 1.0036x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956243</commentid>
    <comment_count>22</comment_count>
      <attachid>218371</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-03 18:26:12 -0800</bug_when>
    <thetext>Created attachment 218371
the patch

Fix a bunch of build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956244</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-03 18:27:54 -0800</bug_when>
    <thetext>Attachment 218371 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-mov.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-put-to-scope.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline-expected.txt&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter-no-inline.html&apos;, u&apos;LayoutTests/js/regress/infer-closure-const-then-reenter.html&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-mov.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-put-to-scope.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter-no-inline.js&apos;, u&apos;LayoutTests/js/regress/script-tests/infer-closure-const-then-reenter.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/Instruction.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/VariableWatchpointSet.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Watchpoint.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGGraph.h&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.h&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITOpcodes32_64.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.h&apos;, u&apos;Source/JavaScriptCore/runtime/ConstantMode.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalObject.h&apos;, u&apos;Source/JavaScriptCore/runtime/JSScope.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.cpp&apos;]&quot; exit_code: 1
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:251:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:265:  The parameter name &quot;set&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 46 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>956375</commentid>
    <comment_count>24</comment_count>
      <attachid>218371</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-04 06:28:30 -0800</bug_when>
    <thetext>Comment on attachment 218371
the patch

Attachment 218371 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/40778074</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956406</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-04 09:12:16 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 218371 [details])
&gt; Attachment 218371 [details] did not pass efl-wk2-ews (efl-wk2):
&gt; Output: http://webkit-queues.appspot.com/results/40778074

Internal compiler error.  I will ignore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956454</commentid>
    <comment_count>26</comment_count>
      <attachid>218371</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-04 10:55:27 -0800</bug_when>
    <thetext>Comment on attachment 218371
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>956483</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-04 11:29:12 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/160109</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218217</attachid>
            <date>2013-12-02 14:45:15 -0800</date>
            <delta_ts>2013-12-02 15:14:44 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30568</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FwdHVyZWRfbW92Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CkBAIC0xMjI0LDkgKzEyMjUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2hvdWxkQ2hlY2sg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19jYXB0dXJlZF9mdW5jIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hv
dWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CisgICAgICAg
ICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6IHsKQEAgLTE1NTEsMTAgKzE1NTIsMTMgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CiAKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKKyAgICAKICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmUoKm1fdm0pKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkQ2xvbmVT
eW1ib2xUYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgfQogICAgIApAQCAtMTgyMCwxMSArMTgyNCwyNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3Bl
cmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9w
ZXJhbmQoKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAg
ICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUudWlkOworICAg
ICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2Nr
ZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxlLT5lbmQo
bG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAg
ICAgICAgICAgcGNbaSArIDNdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9p
bnRTZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNiAr
OTAsMTMgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICBJbnN0cnVjdGlvbihQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXJGdW5jKSB7IHUuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7
IH0KICAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykgeyB1LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQotICAgICAgICAKICAgICBJ
bnN0cnVjdGlvbihWYWx1ZVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsg
fQogICAgIEluc3RydWN0aW9uKEFycmF5UHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5UHJvZmls
ZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBw
cm9maWxlKSB7IHUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0
cnVjdGlvbihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlID0gcHJvZmlsZTsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikgeyB1LnJlZ2lzdGVyUG9pbnRlciA9
IHJlZ2lzdGVyUG9pbnRlcjsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihTcGVjaWFsOjpQ
b2ludGVyIHBvaW50ZXIpIHsgdS5zcGVjaWFsUG9pbnRlciA9IHBvaW50ZXI7IH0KLSAgICAgICAg
CisgICAgSW5zdHJ1Y3Rpb24oU3RyaW5nSW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAg
SW5zdHJ1Y3Rpb24oYm9vbCogcHJlZGljYXRlUG9pbnRlcikgeyB1LnByZWRpY2F0ZVBvaW50ZXIg
PSBwcmVkaWNhdGVQb2ludGVyOyB9CiAKICAgICB1bmlvbiB7CkBAIC0xMTIsNiArMTA5LDcgQEAg
c3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgU3BlY2lhbDo6UG9pbnRlciBzcGVjaWFsUG9p
bnRlcjsKICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAg
ICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgU3RyaW5nSW1w
bCogdWlkOwogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAgICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwogICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGNvZGUuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIG1hY3JvKG9wX25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9u
ZXdfcmVnZXhwLCAzKSBcCiAgICAgbWFjcm8ob3BfbW92LCAzKSBcCi0gICAgbWFjcm8ob3BfY2Fw
dHVyZWRfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCA0KSBcCiAgICAgXAog
ICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksMTEgQEAgc3RydWN0
IFVubGlua2VkSW5zdHJ1Y3Rpb24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3Bl
cmFuZCA9IDA7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1
Lm9wY29kZSA9IG9wY29kZTsgfQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQp
IHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oU3RyaW5n
SW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGU7CiAgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICAgICAgU3RyaW5nSW1wbCog
dWlkOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE1OTk0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUp
OwotICAgICAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dhdGNoZWQpOwogICAgICAgICBtX2luZmVy
cmVkVmFsdWUgPSBKU1ZhbHVlKCk7Ci0gICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgV2F0Y2hw
b2ludDo6aW52YWxpZGF0ZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNo
cG9pbnQuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZpcmVBbGwoKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0
Y2hlZCkKKyAgICAgICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgbV9zdGF0ZSA9IElzSW52YWxp
ZGF0ZWQ7CisgICAgfQogCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZt
X3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4g
Jm1fc2V0SXNOb3RFbXB0eTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTk0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTkgKzExNSwzMSBAQCBQYXJzZXJFcnJvciBC
eXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNl
ckVycm9yOjpFcnJvck5vbmUpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComIHIw
KQorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAorICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlLCBS
ZWdpc3RlcklEKiYgcjApCiB7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2Rl
QmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAKICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1fbG9jayk7CiAgICAg
aW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6
ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0Nv
bnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGlu
ZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICBpZiAo
d2F0Y2hNb2RlID09IElzV2F0Y2hhYmxlKSB7CisgICAgICAgIHdoaWxlIChtX3dhdGNoYWJsZVZh
cmlhYmxlcy5zaXplKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpKQorICAgICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKG51bGxwdHIpOwor
ICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICB9
CisgICAgCiAgICAgcjAgPSBhZGRWYXIoKTsKKyAgICAKKyAgICBBU1NFUlQod2F0Y2hNb2RlID09
IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CisgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIzNiw3ICsyNDgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAKICAgICBpZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwg
Y29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0Lgog
ICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIo
KTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCi0g
ICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIGZhbHNlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgorICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9IGFk
ZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUp
OyAvLyBDYW4gYmUgY2hhbmdlZCBieSBhc3NpZ25pbmcgdG8gJ2FyZ3VtZW50cycuCiAKICAgICAg
ICAgLy8gV2UgY2FuIHNhdmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3ds
ZWRnZSB0aGF0IHRoZSB0d28KICAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9y
ZWQgaW4gY29uc2VjdXRpdmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwpAQCAtMzA3LDEzICszMTks
MTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5h
ZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFy
KGlkZW50LCBmYWxzZSksIElzQ2FwdHVyZWQsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBl
bWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIElz
Q2FwdHVyZWQsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwogICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAgICAgIGFk
ZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29u
ZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgYm9vbCBjYW5MYXppbHlD
cmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhh
blZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwpAQCAtMzMxLDcgKzM0Myw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAgICAgaWYgKCFm
dW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkgewogICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVnID0g
YWRkVmFyKGlkZW50LCBmYWxzZSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVn
ID0gYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUpOwogICAgICAgICAgICAg
Ly8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAn
YXJndW1lbnRzJwogICAgICAgICAgICAgLy8gYXMgdGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkg
aW5zdGFudGlhdGlvbiBvZiBhY3R1YWwgYXJndW1lbnRzLgogICAgICAgICAgICAgaWYgKCFjYW5M
YXppbHlDcmVhdGVGdW5jdGlvbnMgfHwgaWRlbnQgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cykKQEAgLTM0Niw3ICszNTgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0Owog
ICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAg
YWRkVmFyKGlkZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXND
b25zdGFudCk7CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJTdGFja1tpXS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJs
ZSwgTm90V2F0Y2hhYmxlKTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRo
aW5ncykKQEAgLTQ1Nyw2ICs0NjksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluaXRMCiB7CiAgICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVnLT5pbmRleCgpKTsKKyAgICBBU1NFUlQoIXdhdGNoYWJsZVZh
cmlhYmxlKHJlZy0+aW5kZXgoKSkpOwogICAgIHJldHVybiByZWc7CiB9CiAKQEAgLTEwMDcsNiAr
MTAyMCw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSgKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9jYXB0dXJlZF9tb3YgOiBv
cF9tb3YpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIGlmIChjYXB0dXJlTW9kZSA9
PSBJc0NhcHR1cmVkKQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFy
aWFibGUoZHN0LT5pbmRleCgpKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTU3OSw3ICsx
NTk0LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnUKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRfZnVu
YyA6IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkb051bGxDaGVjayk7CisgICAgaWYgKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQp
IHsKKyAgICAgICAgQVNTRVJUKCFkb051bGxDaGVjayk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh3YXRjaGFibGVWYXJpYWJsZShkc3QtPmluZGV4KCkpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRvTnVsbENoZWNrKTsKICAgICByZXR1cm4gZHN0
OwogfQogCkBAIC0xNjIxLDYgKzE2NDAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBcmd1bWVudHNJCiAKICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5v
ZmZzZXQoKSk7CisgICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShtX2NvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsMTUgKzQ5NywxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAogICAgICAgICAv
LyBBZGRzIGEgdmFyIHNsb3QgYW5kIG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3ltYm9s
VGFibGUoKS4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIGlzQ29uc3RhbnQpCisgICAgICAgIGVudW0gV2F0Y2hNb2RlIHsgSXNXYXRjaGFi
bGUsIE5vdFdhdGNoYWJsZSB9OworICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRj
aE1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsOwotICAgICAg
ICAgICAgYWRkVmFyKGlkZW50LCBpc0NvbnN0YW50LCBsb2NhbCk7CisgICAgICAgICAgICBhZGRW
YXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEaXR0by4gUmV0dXJucyB0cnVl
IGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVkLCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBS
ZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAgICBib29sIGFkZFZhcihjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlcklEKiYpOworICAgICAgICBib29sIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUsIFJlZ2lzdGVySUQq
Jik7CiAgICAgICAgIAogICAgICAgICAvLyBBZGRzIGFuIGFub255bW91cyB2YXIgc2xvdC4gVG8g
Z2l2ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQgaXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAg
UmVnaXN0ZXJJRCogYWRkVmFyKCkKQEAgLTU5MCw2ICs1OTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAg
ICAgICAgCisgICAgICAgIFN0cmluZ0ltcGwqIHdhdGNoYWJsZVZhcmlhYmxlKGludCBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwor
ICAgICAgICAgICAgaWYgKCFyZWcuaXNMb2NhbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvTG9jYWwoKSkgPj0g
bV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIG1fd2F0Y2hhYmxlVmFyaWFibGVzW3JlZy50b0xvY2FsKCldOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0RGVidWdIb29rczsKQEAgLTYwOSw2ICs2MjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgICAgIFJl
Z2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyOworICAgICAgICBWZWN0b3I8U3RyaW5nSW1wbCosIDE2PiBtX3dh
dGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMy
PiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lz
dGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJl
Z2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNDYsMTIgKzIxNDYsMTcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmVha3BvaW50KTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgotICAgICAgICBjYXNlIG9wX21vdjoK
LSAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgY2FzZSBvcF9tb3Y6IHsK
ICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9tb3YpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9j
YXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYXB0dXJlZF9tb3YpOworICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSGFzSW5zdGFuY2UsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpKTsKQEAgLTMyMjcsOCArMzIzMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1
bWVudF9ieV92YWwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBvcF9u
ZXdfZnVuYzoKLSAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzogeworICAgICAgICBj
YXNlIG9wX25ld19mdW5jOiB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKE5ld0Z1bmN0aW9uTm9DaGVjaywgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKSk7CkBAIC0zMjQyLDYgKzMyNDYsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2Z1bmMpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uTm9D
aGVjaywgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CisgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwgT3BJbmZvKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAg
ICAgIERFRklORV9PUChvcF9sc2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAg
ICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRf
bW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVs
KQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19h
cnJheSkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAg
IERFRklORV9PUChvcF9uZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0
dXJlZF9mdW5jOgogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklO
RV9PUChvcF9uZXdfY2FwdHVyZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5j
X2V4cCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9P
UChvcF9uZXdfcmVnZXhwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAx
NTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NjMsNiArNDYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9jYWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX2V2YWwoSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
Y2FsbGVlKEluc3RydWN0aW9uKik7CkBAIC01MTUsNiArNTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfYnVmZmVyKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfbmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
bmV3X29iamVjdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X3JlZ2V4
cChJbnN0cnVjdGlvbiopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihkc3QpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKworICAgIC8vIFVzZSBzaW1wbGVyIGFwcHJvYWNoLCBzaW5jZSB0aGUgREZHIHRoaW5r
cyB0aGF0IHRoZSBsYXN0IHJlc3VsdCByZWdpc3RlcgorICAgIC8vIGlzIGFsd2F5cyBzZXQgdG8g
dGhlIGRlc3RpbmF0aW9uIG9uIGV2ZXJ5IG9wZXJhdGlvbi4KKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIGN1
cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIg
IT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMTE4MCw2ICsxMTkyLDEzIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19mdW5jKEluc3RydWN0aW9uKiAKICAgICAgICAgbGF6eUp1bXAubGluayh0aGlz
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9jb2Rl
QmxvY2stPmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsIGZ1bmNFeGVjKTsKK30K
Kwogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTU0OSw3ICs1NDksNyBAQCBfbGxpbnRfb3BfY2FwdHVyZWRfbW92OgogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKICAgICBzdG9yZWkgdDIsIFRhZ09mZnNl
dFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQot
ICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRfb3Bfbm90OgpAQCAt
MTY3NCwxMiArMTY3NCw3IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogX2xsaW50X29wX25ld19j
YXB0dXJlZF9mdW5jOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBidGl6IDEyW1BDXSwgLm9w
TmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCi0gICAgbG9hZGkgNFtQQ10sIHQxCi0gICAgYmluZXEg
VGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BOZXdDYXB0dXJlZEZ1bmNE
b25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGlu
dF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25lOgogICAgIGRpc3Bh
dGNoKDQpCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC00MTgsMTMgKzQxOCwzOCBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRpc3BhdGNoKDMp
CiAKIAorbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKKyAgICBs
b2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAorICAgIGJp
ZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKKyAgICBiaW5lcSBzY3JhdGNoLCBDbGVh
cldhdGNocG9pbnQsIC5vdmVyd3JpdGUKKyAgICBzdG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQorICAgIGptcCAuZG9uZQorCisub3Zlcndy
aXRlOgorICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZh
bHVlW3NldF0sIC5kb25lCisgICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3NldElz
Tm90RW1wdHlbc2V0XSwgc2xvdworICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZVtzZXRdCisgICAgc3RvcmViIElzSW52YWxpZGF0ZWQsIFZhcmlhYmxl
V2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisKKy5kb25lOiAgICAKK2VuZAorCiBfbGxpbnRf
b3BfY2FwdHVyZWRfbW92OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMiwgdDEpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDMs
IHQwKQorICAgIGJ0cHogdDAsIC5vcENhcHR1cmVkTW92UmVhZHkKKyAgICBub3RpZnlXcml0ZSh0
MCwgdDIsIHQxLCAub3BDYXB0dXJlZE1vdlNsb3cpCisub3BDYXB0dXJlZE1vdlJlYWR5OgorICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBzdG9yZXEgdDIsIFtjZnIsIHQwLCA4
XQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNCkKKworLm9wQ2FwdHVyZWRNb3ZTbG93
OgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NhcHR1cmVkX21vdikKKyAgICBkaXNwYXRo
KDQpCiAKIAogX2xsaW50X29wX25vdDoKQEAgLTE1MjUsMTMgKzE1NTAsNyBAQCBfbGxpbnRfb3Bf
bmV3X2Z1bmM6CiAKIF9sbGludF9vcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1
dGlvbigpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQotICAgIGJ0aXogdDIsIC5v
cE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZAotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0
MSkKLSAgICBidHFueiBbY2ZyLCB0MSwgOF0sIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5l
d0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoKLSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9uZXdfZnVuYykKLS5vcE5ld0NhcHR1cmVkRnVuY0RvbmU6CisgICAgY2FsbFNsb3dQYXRoKF9z
bG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCiAgICAgZGlzcGF0Y2goNCkKIAogCkBAIC0xOTcz
LDIzICsxOTkyLDYgQEAgbWFjcm8gcHV0UHJvcGVydHkoKQogICAgIHN0b3JlUHJvcGVydHlBdFZh
cmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCiBlbmQKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2
YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1f
c3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRv
bmUKLSAgICBiaW5lcSBzY3JhdGNoLCBDbGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKLSAgICBz
dG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0K
LSAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0
XQotICAgIGptcCAuZG9uZQotCi0ub3ZlcndyaXRlOgotICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxl
V2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0sIC5kb25lCi0gICAgYnRibnogVmFy
aWFibGVXYXRjaHBvaW50U2V0OjptX3NldElzTm90RW1wdHlbc2V0XSwgc2xvdwotICAgIHN0b3Jl
cSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3Rv
cmViIElzSW52YWxpZGF0ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCi0K
LS5kb25lOiAgICAKLWVuZAotCiBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwyOCBAQCBT
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICBSRVRVUk4odjEudG9UaGlzKGV4
ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RT
dHJpY3RNb2RlKSk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3Yp
Cit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7
CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50
U2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUp
OworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCit7Cisg
ICAgQkVHSU4oKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OworICAgIEFTU0VSVChjb2RlQmxvY2stPmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCisgICAg
ICAgICAgIHx8ICFjb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKQorICAgICAgICAgICB8
fCBleGVjLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0
KCkpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wocGNbMl0udS5vcGVyYW5kKSwgZXhlYy0+c2NvcGUo
KSk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBv
aW50U2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFs
dWUpOworfQorCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNDAgQEAgU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfYQogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2dldF9jYWxsZWUpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlz
KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpOworU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9lcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CitTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmljdGVxKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfbnN0cmljdGVxKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
bGVzcyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2xlc3NlcSk7CitTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dyZWF0ZXIpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9ncmVhdGVyZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9p
bmMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kZWMpOworU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90b19udW1iZXIpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9uZWdhdGUpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9hZGQpOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9tdWwpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9zdWIpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kaXYp
OworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9tb2QpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9sc2hpZnQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9yc2hpZnQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF91cnNoaWZ0KTsKK1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYml0YW5kKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfYml0b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9i
aXR4b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90eXBlb2YpOworU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pc19vYmplY3QpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9pc19mdW5jdGlvbik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19w
YXRoX2luKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CitT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmNhdCk7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhcHR1cmVkX21vdik7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25v
dCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2VxKTsKIFNMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfbmVxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbnN0YW50TW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbnN0YW50TW9kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uc3RhbnRNb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IENvbnN0YW50TW9kZV9oCisjZGVmaW5lIENvbnN0YW50TW9kZV9oCisKK25hbWVzcGFjZSBKU0Mg
eworCitlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb25zdGFudE1vZGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9u
IDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUgSlNHbG9iYWxPYmpl
Y3RfaAogCiAjaW5jbHVkZSAiQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkNv
bnN0YW50TW9kZS5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0FycmF5QnVm
ZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDbGFzc1JlZi5oIgpAQCAtMjg4LDcgKzI4OSw2
IEBAIHByb3RlY3RlZDoKICAgICAgICAgaW5pdCh0aGlzVmFsdWUpOwogICAgIH0KIAotICAgIGVu
dW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwgSXNWYXJpYWJsZSB9OwogICAgIHN0cnVjdCBO
ZXdHbG9iYWxWYXIgewogICAgICAgICBpbnQgcmVnaXN0ZXJOdW1iZXI7CiAgICAgICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICAgICAgfQogCiAgICAg
ICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1h
a2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFj
dGl2YXRpb24sIDAsIGVudHJ5LmdldEluZGV4KCkpOworICAgICAgICAgICAgb3AgPSBSZXNvbHZl
T3AobWFrZVR5cGUoQ2xvc3VyZVZhciwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwg
MCwgYWN0aXZhdGlvbiwgZW50cnkud2F0Y2hwb2ludFNldCgpLCBlbnRyeS5nZXRJbmRleCgpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE1OTk0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBAQCBKU1ZhbHVlIFN5bWJvbFRhYmxlRW50cnk6OmluZmVy
cmVkVmFsdWUoCiB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAg
ICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7Ci0gICAgQVNTRVJUKCFlbnRyeS0+bV93YXRj
aHBvaW50cyk7CisgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQorICAgICAgICByZXR1cm47
CiAgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgVmFyaWFibGVXYXRjaHBv
aW50U2V0KCkpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218221</attachid>
            <date>2013-12-02 15:14:44 -0800</date>
            <delta_ts>2013-12-02 15:26:24 -0800</delta_ts>
            <desc>it&apos;s about to get real</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34871</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FwdHVyZWRfbW92Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CkBAIC0xMjI0LDkgKzEyMjUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2hvdWxkQ2hlY2sg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19jYXB0dXJlZF9mdW5jIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hv
dWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CisgICAgICAg
ICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6IHsKQEAgLTE1NTEsMTAgKzE1NTIsMTMgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CiAKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKKyAgICAKICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmUoKm1fdm0pKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkQ2xvbmVT
eW1ib2xUYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgfQogICAgIApAQCAtMTgyMCwxMSArMTgyNCwyNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3Bl
cmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9w
ZXJhbmQoKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAg
ICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUudWlkOworICAg
ICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2Nr
ZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxlLT5lbmQo
bG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAg
ICAgICAgICAgcGNbaSArIDNdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9p
bnRTZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNiAr
OTAsMTMgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICBJbnN0cnVjdGlvbihQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXJGdW5jKSB7IHUuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7
IH0KICAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykgeyB1LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQotICAgICAgICAKICAgICBJ
bnN0cnVjdGlvbihWYWx1ZVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsg
fQogICAgIEluc3RydWN0aW9uKEFycmF5UHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5UHJvZmls
ZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBw
cm9maWxlKSB7IHUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0
cnVjdGlvbihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlID0gcHJvZmlsZTsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikgeyB1LnJlZ2lzdGVyUG9pbnRlciA9
IHJlZ2lzdGVyUG9pbnRlcjsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihTcGVjaWFsOjpQ
b2ludGVyIHBvaW50ZXIpIHsgdS5zcGVjaWFsUG9pbnRlciA9IHBvaW50ZXI7IH0KLSAgICAgICAg
CisgICAgSW5zdHJ1Y3Rpb24oU3RyaW5nSW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAg
SW5zdHJ1Y3Rpb24oYm9vbCogcHJlZGljYXRlUG9pbnRlcikgeyB1LnByZWRpY2F0ZVBvaW50ZXIg
PSBwcmVkaWNhdGVQb2ludGVyOyB9CiAKICAgICB1bmlvbiB7CkBAIC0xMTIsNiArMTA5LDcgQEAg
c3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgU3BlY2lhbDo6UG9pbnRlciBzcGVjaWFsUG9p
bnRlcjsKICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAg
ICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgU3RyaW5nSW1w
bCogdWlkOwogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAgICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwogICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGNvZGUuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIG1hY3JvKG9wX25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9u
ZXdfcmVnZXhwLCAzKSBcCiAgICAgbWFjcm8ob3BfbW92LCAzKSBcCi0gICAgbWFjcm8ob3BfY2Fw
dHVyZWRfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCA0KSBcCiAgICAgXAog
ICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksMTEgQEAgc3RydWN0
IFVubGlua2VkSW5zdHJ1Y3Rpb24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3Bl
cmFuZCA9IDA7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1
Lm9wY29kZSA9IG9wY29kZTsgfQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQp
IHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oU3RyaW5n
SW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGU7CiAgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICAgICAgU3RyaW5nSW1wbCog
dWlkOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE1OTk0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUp
OwotICAgICAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dhdGNoZWQpOwogICAgICAgICBtX2luZmVy
cmVkVmFsdWUgPSBKU1ZhbHVlKCk7Ci0gICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgV2F0Y2hw
b2ludDo6aW52YWxpZGF0ZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNo
cG9pbnQuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZpcmVBbGwoKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0
Y2hlZCkKKyAgICAgICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgbV9zdGF0ZSA9IElzSW52YWxp
ZGF0ZWQ7CisgICAgfQogCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZt
X3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4g
Jm1fc2V0SXNOb3RFbXB0eTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTk0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTkgKzExNSwzMSBAQCBQYXJzZXJFcnJvciBC
eXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNl
ckVycm9yOjpFcnJvck5vbmUpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComIHIw
KQorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAorICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlLCBS
ZWdpc3RlcklEKiYgcjApCiB7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2Rl
QmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAKICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1fbG9jayk7CiAgICAg
aW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6
ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0Nv
bnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGlu
ZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICBpZiAo
d2F0Y2hNb2RlID09IElzV2F0Y2hhYmxlKSB7CisgICAgICAgIHdoaWxlIChtX3dhdGNoYWJsZVZh
cmlhYmxlcy5zaXplKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpKQorICAgICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKG51bGxwdHIpOwor
ICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICB9
CisgICAgCiAgICAgcjAgPSBhZGRWYXIoKTsKKyAgICAKKyAgICBBU1NFUlQod2F0Y2hNb2RlID09
IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CisgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIzNiw3ICsyNDgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAKICAgICBpZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwg
Y29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0Lgog
ICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIo
KTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCi0g
ICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIGZhbHNlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgorICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9IGFk
ZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUp
OyAvLyBDYW4gYmUgY2hhbmdlZCBieSBhc3NpZ25pbmcgdG8gJ2FyZ3VtZW50cycuCiAKICAgICAg
ICAgLy8gV2UgY2FuIHNhdmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3ds
ZWRnZSB0aGF0IHRoZSB0d28KICAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9y
ZWQgaW4gY29uc2VjdXRpdmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwpAQCAtMzA3LDEzICszMTks
MTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5h
ZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFy
KGlkZW50LCBmYWxzZSksIElzQ2FwdHVyZWQsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBl
bWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIElz
Q2FwdHVyZWQsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwogICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAgICAgIGFk
ZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29u
ZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgYm9vbCBjYW5MYXppbHlD
cmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhh
blZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwpAQCAtMzMxLDcgKzM0Myw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAgICAgaWYgKCFm
dW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkgewogICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVnID0g
YWRkVmFyKGlkZW50LCBmYWxzZSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVn
ID0gYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUpOwogICAgICAgICAgICAg
Ly8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAn
YXJndW1lbnRzJwogICAgICAgICAgICAgLy8gYXMgdGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkg
aW5zdGFudGlhdGlvbiBvZiBhY3R1YWwgYXJndW1lbnRzLgogICAgICAgICAgICAgaWYgKCFjYW5M
YXppbHlDcmVhdGVGdW5jdGlvbnMgfHwgaWRlbnQgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cykKQEAgLTM0Niw3ICszNTgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0Owog
ICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAg
YWRkVmFyKGlkZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXND
b25zdGFudCk7CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJTdGFja1tpXS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJs
ZSwgTm90V2F0Y2hhYmxlKTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRo
aW5ncykKQEAgLTQ1Nyw2ICs0NjksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluaXRMCiB7CiAgICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVnLT5pbmRleCgpKTsKKyAgICBBU1NFUlQoIXdhdGNoYWJsZVZh
cmlhYmxlKHJlZy0+aW5kZXgoKSkpOwogICAgIHJldHVybiByZWc7CiB9CiAKQEAgLTEwMDcsNiAr
MTAyMCw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSgKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9jYXB0dXJlZF9tb3YgOiBv
cF9tb3YpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIGlmIChjYXB0dXJlTW9kZSA9
PSBJc0NhcHR1cmVkKQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFy
aWFibGUoZHN0LT5pbmRleCgpKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTU3OSw3ICsx
NTk0LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnUKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRfZnVu
YyA6IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkb051bGxDaGVjayk7CisgICAgaWYgKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQp
IHsKKyAgICAgICAgQVNTRVJUKCFkb051bGxDaGVjayk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh3YXRjaGFibGVWYXJpYWJsZShkc3QtPmluZGV4KCkpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRvTnVsbENoZWNrKTsKICAgICByZXR1cm4gZHN0
OwogfQogCkBAIC0xNjIxLDYgKzE2NDAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBcmd1bWVudHNJCiAKICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5v
ZmZzZXQoKSk7CisgICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShtX2NvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsMTUgKzQ5NywxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAogICAgICAgICAv
LyBBZGRzIGEgdmFyIHNsb3QgYW5kIG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3ltYm9s
VGFibGUoKS4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIGlzQ29uc3RhbnQpCisgICAgICAgIGVudW0gV2F0Y2hNb2RlIHsgSXNXYXRjaGFi
bGUsIE5vdFdhdGNoYWJsZSB9OworICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRj
aE1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsOwotICAgICAg
ICAgICAgYWRkVmFyKGlkZW50LCBpc0NvbnN0YW50LCBsb2NhbCk7CisgICAgICAgICAgICBhZGRW
YXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEaXR0by4gUmV0dXJucyB0cnVl
IGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVkLCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBS
ZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAgICBib29sIGFkZFZhcihjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlcklEKiYpOworICAgICAgICBib29sIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUsIFJlZ2lzdGVySUQq
Jik7CiAgICAgICAgIAogICAgICAgICAvLyBBZGRzIGFuIGFub255bW91cyB2YXIgc2xvdC4gVG8g
Z2l2ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQgaXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAg
UmVnaXN0ZXJJRCogYWRkVmFyKCkKQEAgLTU5MCw2ICs1OTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAg
ICAgICAgCisgICAgICAgIFN0cmluZ0ltcGwqIHdhdGNoYWJsZVZhcmlhYmxlKGludCBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwor
ICAgICAgICAgICAgaWYgKCFyZWcuaXNMb2NhbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvTG9jYWwoKSkgPj0g
bV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIG1fd2F0Y2hhYmxlVmFyaWFibGVzW3JlZy50b0xvY2FsKCldOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0RGVidWdIb29rczsKQEAgLTYwOSw2ICs2MjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgICAgIFJl
Z2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyOworICAgICAgICBWZWN0b3I8U3RyaW5nSW1wbCosIDE2PiBtX3dh
dGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMy
PiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lz
dGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJl
Z2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4NCw2ICs2ODQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CiAgICAgfQogICAgIAorICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQo
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1
cm4gZ2V0SlNDb25zdGFudEZvclZhbHVlKHZhbHVlLCAwKTsKKyAgICB9CisgICAgCiAgICAgSW5s
aW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
aW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtMjE0NiwxMiArMjE1MywxOSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBh
ZGRUb0dyYXBoKEJyZWFrcG9pbnQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZGVidWcp
OwogI2VuZGlmCi0gICAgICAgIGNhc2Ugb3BfbW92OgotICAgICAgICBjYXNlIG9wX2NhcHR1cmVk
X21vdjogeworICAgICAgICBjYXNlIG9wX21vdjogewogICAgICAgICAgICAgTm9kZSogb3AgPSBn
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCksIG9wKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX21vdik7CiAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjogeworICAgICAgICAg
ICAgTm9kZSogb3AgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHNldCksIG9wKTsKKyAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG9wKTsK
KyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhcHR1cmVkX21vdik7CisgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tIYXNJbnN0YW5jZSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSkpOwpAQCAtMzA3OCwxNSArMzA5MiwyNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBP
cEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
IGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldEpT
Q29uc3RhbnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZh
dGlvbiA9IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRh
YmxlKCk7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6TWFw
OjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCB1aWQpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwor
ICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZh
bHVlLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNldCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFs
dWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
c2NvcGVOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlh
YmxlV2F0Y2hwb2ludCwgT3BJbmZvKHNldCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFudCh2YWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChHZXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
CiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVSZWdpc3RlcnMs
IHNjb3BlTm9kZSkpKTsKQEAgLTMyMjcsOCArMzI1Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1
bWVudF9ieV92YWwpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBvcF9u
ZXdfZnVuYzoKLSAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzogeworICAgICAgICBj
YXNlIG9wX25ld19mdW5jOiB7CiAgICAgICAgICAgICBpZiAoIWN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKE5ld0Z1bmN0aW9uTm9DaGVjaywgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKSk7CkBAIC0zMjQyLDYgKzMyNjcsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbmV3X2Z1bmMpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgTm9kZSogZnVuY3Rpb24gPSBhZGRUb0dyYXBoKAorICAgICAgICAg
ICAgICAgIE5ld0Z1bmN0aW9uTm9DaGVjaywgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHNldCksIGZ1bmN0aW9uKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19jYXB0dXJlZF9mdW5j
KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhw
OiB7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rpb25FeHBy
ZXNzaW9uLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTk5NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIzLDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
R3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFwaDo6
dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
anNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkpOworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVn
aXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gdHJ5
R2V0QWN0aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJldHVy
biAwOwogICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwog
ICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsK
ICAgICAKKyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCiAg
ICAgVk0mIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
NTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChvcF9s
c2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2FwdHVy
ZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBERUZJ
TkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVf
T1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdf
YXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAgICAg
ICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2FwdHVy
ZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhwKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNiArNDYzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9jYXRjaChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY29uc3RydWN0KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9u
Kik7CkBAIC01MTUsNiArNTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9uZXdfYXJyYXlfYnVmZmVyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9uZXdfZnVuYyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2NhcHR1
cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25ld19mdW5jX2V4
cChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X3JlZ2V4cChJbnN0cnVjdGlvbiopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAx
NTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxMiArNTUsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3Ry
dWN0aW9uKiBjdXJyZQogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCi0g
ICAgLy8gVXNlIHNpbXBsZXIgYXBwcm9hY2gsIHNpbmNlIHRoZSBERkcgdGhpbmtzIHRoYXQgdGhl
IGxhc3QgcmVzdWx0IHJlZ2lzdGVyCi0gICAgLy8gaXMgYWx3YXlzIHNldCB0byB0aGUgZGVzdGlu
YXRpb24gb24gZXZlcnkgb3BlcmF0aW9uLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCBy
ZWdUMSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FwdHVy
ZWRfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS53YXRjaHBvaW50U2V0OworICAgIGlmICghc2V0IHx8
IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQorICAgICAgICByZXR1cm47CisgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAh
PSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0xMTgwLDYgKzExOTgsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogICAgICAgICBsYXp5SnVtcC5saW5rKHRoaXMp
OwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfY2FwdHVyZWRfZnVuYyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpOwor
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5j
X2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJl
dmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgX2xs
aW50X29wX2NhcHR1cmVkX21vdjoKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0Miwg
dDMpCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KICAgICBzdG9yZWkgdDMs
IFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNo
KDQpCiAKIAogX2xsaW50X29wX25vdDoKQEAgLTE2NzQsMTIgKzE2NzQsNyBAQCBfbGxpbnRfb3Bf
bmV3X2Z1bmM6CiAKIF9sbGludF9vcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1
dGlvbigpCi0gICAgYnRpeiAxMltQQ10sIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZAotICAg
IGxvYWRpIDRbUENdLCB0MQotICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQxLCA4XSwgRW1wdHlW
YWx1ZVRhZywgLm9wTmV3Q2FwdHVyZWRGdW5jRG9uZQotLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVj
a2VkOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25ld19mdW5jKQotLm9wTmV3
Q2FwdHVyZWRGdW5jRG9uZToKICAgICBkaXNwYXRjaCg0KQogCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDE4LDEzICs0MTgsMzggQEAgX2xs
aW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwg
dmFsdWUsIHNjcmF0Y2gsIHNsb3cpCisgICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpt
X3N0YXRlW3NldF0sIHNjcmF0Y2gKKyAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5k
b25lCisgICAgYmluZXEgc2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3ZlcndyaXRlCisgICAg
c3RvcmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRd
CisgICAgc3RvcmViIElzV2F0Y2hlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3Nl
dF0KKyAgICBqbXAgLmRvbmUKKworLm92ZXJ3cml0ZToKKyAgICBicWVxIHZhbHVlLCBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdLCAuZG9uZQorICAgIGJ0Ym56IFZh
cmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNsb3cKKyAgICBzdG9y
ZXEgMCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XQorICAgIHN0
b3JlYiBJc0ludmFsaWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQor
CisuZG9uZTogICAgCitlbmQKKwogX2xsaW50X29wX2NhcHR1cmVkX21vdjoKICAgICB0cmFjZUV4
ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQotICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikK
KyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigzLCB0MCkKKyAgICBidHB6IHQwLCAub3BDYXB0dXJl
ZE1vdlJlYWR5CisgICAgbm90aWZ5V3JpdGUodDAsIHQyLCB0MSwgLm9wQ2FwdHVyZWRNb3ZTbG93
KQorLm9wQ2FwdHVyZWRNb3ZSZWFkeToKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDAp
CiAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3Bh
dGNoKDQpCisKKy5vcENhcHR1cmVkTW92U2xvdzoKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9jYXB0dXJlZF9tb3YpCisgICAgZGlzcGF0aCg0KQogCiAKIF9sbGludF9vcF9ub3Q6CkBAIC0x
NTI1LDEzICsxNTUwLDcgQEAgX2xsaW50X29wX25ld19mdW5jOgogCiBfbGxpbnRfb3BfbmV3X2Nh
cHR1cmVkX2Z1bmM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0MikKLSAgICBidGl6IHQyLCAub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQKLSAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCi0gICAgYnRxbnogW2NmciwgdDEsIDhdLCAu
b3BOZXdDYXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAg
Y2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1
bmNEb25lOgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQog
ICAgIGRpc3BhdGNoKDQpCiAKIApAQCAtMTk3MywyMyArMTk5Miw2IEBAIG1hY3JvIHB1dFByb3Bl
cnR5KCkKICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQogZW5k
CiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9h
ZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVx
IHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEgc2NyYXRjaCwgQ2xlYXJX
YXRjaHBvaW50LCAub3ZlcndyaXRlCi0gICAgc3RvcmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzV2F0Y2hlZCwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0KLSAgICBqbXAgLmRvbmUKLQotLm92ZXJ3cml0
ZToKLSAgICBicWVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1
ZVtzZXRdLCAuZG9uZQotICAgIGJ0Ym56IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05v
dEVtcHR5W3NldF0sIHNsb3cKLSAgICBzdG9yZXEgMCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpt
X2luZmVycmVkVmFsdWVbc2V0XQotICAgIHN0b3JlYiBJc0ludmFsaWRhdGVkLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotCi0uZG9uZTogICAgCi1lbmQKLQogbWFjcm8gcHV0
R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsMjggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3Ro
aXMpCiAgICAgUkVUVVJOKHYxLnRvVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZSkpOwogfQogCitTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IE9QX0MoMikuanNWYWx1ZSgpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlXcml0
ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19jYXB0dXJlZF9mdW5jKQoreworICAgIEJFR0lOKCk7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2Rl
VHlwZSgpICE9IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCkKKyAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2st
PmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKHBj
WzJdLnUub3BlcmFuZCksIGV4ZWMtPnNjb3BlKCkpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlX
cml0ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKwogU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25vdCkKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNiArMTY1LDQwIEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y3JlYXRlX2EKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfdG9fdGhpcyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhcHR1cmVkX21vdik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25l
d19jYXB0dXJlZF9mdW5jKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbm90KTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZXEpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9uZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJp
Y3RlcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25zdHJpY3RlcSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2xlc3MpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9sZXNzZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ncmVh
dGVyKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ3JlYXRlcmVxKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaW5jKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfZGVjKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fbnVtYmVy
KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmVnYXRlKTsKK1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfYWRkKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfbXVsKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3ViKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZGl2KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfbW9kKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbHNoaWZ0KTsKK1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcnNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfdXJzaGlmdCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2JpdGFuZCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2JpdG9yKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYml0eG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfdHlwZW9mKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNf
b2JqZWN0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNfZnVuY3Rpb24pOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pbik7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2RlbF9ieV92YWwpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9zdHJjYXQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUp
OworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9lcSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb25zdGFudE1vZGVfaAorI2RlZmluZSBDb25z
dGFudE1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBDb25zdGFudE1vZGUgeyBJc0Nv
bnN0YW50LCBJc1ZhcmlhYmxlIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
Q29uc3RhbnRNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsy
Myw3IEBACiAjZGVmaW5lIEpTR2xvYmFsT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUuaCIKKyNpbmNsdWRlICJDb25zdGFudE1vZGUuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpT
Q2xhc3NSZWYuaCIKQEAgLTI4OCw3ICsyODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGluaXQo
dGhpc1ZhbHVlKTsKICAgICB9CiAKLSAgICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQs
IElzVmFyaWFibGUgfTsKICAgICBzdHJ1Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAgICAgaW50IHJl
Z2lzdGVyTnVtYmVyOwogICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTk5
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nl
c3MoRXhlY1N0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgp
KTsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIGVudHJ5LndhdGNocG9p
bnRTZXQoKSwgZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgSlNW
YWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKAogdm9pZCBTeW1ib2xUYWJsZUVu
dHJ5OjpwcmVwYXJlVG9XYXRjaCgpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgp
OwotICAgIEFTU0VSVCghZW50cnktPm1fd2F0Y2hwb2ludHMpOworICAgIGlmIChlbnRyeS0+bV93
YXRjaHBvaW50cykKKyAgICAgICAgcmV0dXJuOwogICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0g
YWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218224</attachid>
            <date>2013-12-02 15:26:24 -0800</date>
            <delta_ts>2013-12-02 20:39:02 -0800</delta_ts>
            <desc>I wrote all of the code.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36923</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FwdHVyZWRfbW92Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CkBAIC0xMjI0LDkgKzEyMjUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2hvdWxkQ2hlY2sg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19jYXB0dXJlZF9mdW5jIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hv
dWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CisgICAgICAg
ICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6IHsKQEAgLTE1NTEsMTAgKzE1NTIsMTMgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CiAKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKKyAgICAKICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmUoKm1fdm0pKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkQ2xvbmVT
eW1ib2xUYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgfQogICAgIApAQCAtMTgyMCwxMSArMTgyNCwyNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3Bl
cmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9w
ZXJhbmQoKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAg
ICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUudWlkOworICAg
ICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2Nr
ZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxlLT5lbmQo
bG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAg
ICAgICAgICAgcGNbaSArIDNdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9p
bnRTZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxNiAr
OTAsMTMgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICBJbnN0cnVjdGlvbihQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBnZXR0ZXJGdW5jKSB7IHUuZ2V0dGVyRnVuYyA9IGdldHRlckZ1bmM7
IH0KICAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbykgeyB1LmNhbGxMaW5rSW5mbyA9IGNhbGxMaW5rSW5mbzsgfQotICAgICAgICAKICAgICBJ
bnN0cnVjdGlvbihWYWx1ZVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5wcm9maWxlID0gcHJvZmlsZTsg
fQogICAgIEluc3RydWN0aW9uKEFycmF5UHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5UHJvZmls
ZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBw
cm9maWxlKSB7IHUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0
cnVjdGlvbihPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1Lm9iamVjdEFsbG9j
YXRpb25Qcm9maWxlID0gcHJvZmlsZTsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihXcml0
ZUJhcnJpZXI8VW5rbm93bj4qIHJlZ2lzdGVyUG9pbnRlcikgeyB1LnJlZ2lzdGVyUG9pbnRlciA9
IHJlZ2lzdGVyUG9pbnRlcjsgfQotICAgICAgICAKICAgICBJbnN0cnVjdGlvbihTcGVjaWFsOjpQ
b2ludGVyIHBvaW50ZXIpIHsgdS5zcGVjaWFsUG9pbnRlciA9IHBvaW50ZXI7IH0KLSAgICAgICAg
CisgICAgSW5zdHJ1Y3Rpb24oU3RyaW5nSW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAg
SW5zdHJ1Y3Rpb24oYm9vbCogcHJlZGljYXRlUG9pbnRlcikgeyB1LnByZWRpY2F0ZVBvaW50ZXIg
PSBwcmVkaWNhdGVQb2ludGVyOyB9CiAKICAgICB1bmlvbiB7CkBAIC0xMTIsNiArMTA5LDcgQEAg
c3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgU3BlY2lhbDo6UG9pbnRlciBzcGVjaWFsUG9p
bnRlcjsKICAgICAgICAgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYzsKICAg
ICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbzsKKyAgICAgICAgU3RyaW5nSW1w
bCogdWlkOwogICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGU7CiAgICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwogICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
cGNvZGUuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIG1hY3JvKG9wX25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9u
ZXdfcmVnZXhwLCAzKSBcCiAgICAgbWFjcm8ob3BfbW92LCAzKSBcCi0gICAgbWFjcm8ob3BfY2Fw
dHVyZWRfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCA0KSBcCiAgICAgXAog
ICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAko
cmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksMTEgQEAgc3RydWN0
IFVubGlua2VkSW5zdHJ1Y3Rpb24gewogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oKSB7IHUub3Bl
cmFuZCA9IDA7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKE9wY29kZUlEIG9wY29kZSkgeyB1
Lm9wY29kZSA9IG9wY29kZTsgfQogICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oaW50IG9wZXJhbmQp
IHsgdS5vcGVyYW5kID0gb3BlcmFuZDsgfQorICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24oU3RyaW5n
SW1wbCogdWlkKSB7IHUudWlkID0gdWlkOyB9CiAgICAgdW5pb24gewogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGU7CiAgICAgICAgIGludDMyX3Qgb3BlcmFuZDsKKyAgICAgICAgU3RyaW5nSW1wbCog
dWlkOwogICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE1OTk0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDggQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgaW52YWxpZGF0ZSgpCiAgICAgewotICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUp
OwotICAgICAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dhdGNoZWQpOwogICAgICAgICBtX2luZmVy
cmVkVmFsdWUgPSBKU1ZhbHVlKCk7Ci0gICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgV2F0Y2hw
b2ludDo6aW52YWxpZGF0ZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpbmFsaXplVW5jb25k
aXRpb25hbGx5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNo
cG9pbnQuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZpcmVBbGwoKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBpbnZhbGlkYXRlKCkKKyAgICB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0
Y2hlZCkKKyAgICAgICAgICAgIGZpcmVBbGwoKTsKKyAgICAgICAgbV9zdGF0ZSA9IElzSW52YWxp
ZGF0ZWQ7CisgICAgfQogCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZt
X3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4g
Jm1fc2V0SXNOb3RFbXB0eTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTk0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsMTkgKzExNSwzMSBAQCBQYXJzZXJFcnJvciBC
eXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAgICAgcmV0dXJuIFBhcnNlckVycm9yKFBhcnNl
ckVycm9yOjpFcnJvck5vbmUpOwogfQogCi1ib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComIHIw
KQorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKAorICAgIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlLCBS
ZWdpc3RlcklEKiYgcjApCiB7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4obV9jb2Rl
QmxvY2stPm1fbnVtVmFycykgPT0gbV9jYWxsZWVSZWdpc3RlcnMuc2l6ZSgpKTsKKyAgICAKICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLm1fbG9jayk7CiAgICAg
aW50IGluZGV4ID0gdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwobV9jYWxsZWVSZWdpc3RlcnMuc2l6
ZSgpKS5vZmZzZXQoKTsKLSAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0Nv
bnN0YW50ID8gUmVhZE9ubHkgOiAwKTsKKyAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGlu
ZGV4LCBjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CiAgICAgU3lt
Ym9sVGFibGU6Ok1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlKCkuYWRkKGxvY2tl
ciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAKICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KSB7CiAgICAgICAgIHIwID0gJnJlZ2lzdGVyRm9yKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0
SW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICBpZiAo
d2F0Y2hNb2RlID09IElzV2F0Y2hhYmxlKSB7CisgICAgICAgIHdoaWxlIChtX3dhdGNoYWJsZVZh
cmlhYmxlcy5zaXplKCkgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpKQorICAgICAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKG51bGxwdHIpOwor
ICAgICAgICBtX3dhdGNoYWJsZVZhcmlhYmxlcy5hcHBlbmQoaWRlbnQuaW1wbCgpKTsKKyAgICB9
CisgICAgCiAgICAgcjAgPSBhZGRWYXIoKTsKKyAgICAKKyAgICBBU1NFUlQod2F0Y2hNb2RlID09
IE5vdFdhdGNoYWJsZSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZh
cnMpID09IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSk7CisgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTIzNiw3ICsyNDgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVH
ZW5lcmF0b3IoVk0mCiAKICAgICBpZiAoZnVuY3Rpb25Cb2R5LT51c2VzQXJndW1lbnRzKCkgfHwg
Y29kZUJsb2NrLT51c2VzRXZhbCgpKSB7IC8vIE1heSByZWlmeSBhcmd1bWVudHMgb2JqZWN0Lgog
ICAgICAgICBSZWdpc3RlcklEKiB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIo
KTsgLy8gQW5vbnltb3VzLCBzbyBpdCBjYW4ndCBiZSBtb2RpZmllZCBieSB1c2VyIGNvZGUuCi0g
ICAgICAgIFJlZ2lzdGVySUQqIGFyZ3VtZW50c1JlZ2lzdGVyID0gYWRkVmFyKHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMsIGZhbHNlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgorICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9IGFk
ZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUp
OyAvLyBDYW4gYmUgY2hhbmdlZCBieSBhc3NpZ25pbmcgdG8gJ2FyZ3VtZW50cycuCiAKICAgICAg
ICAgLy8gV2UgY2FuIHNhdmUgYSBsaXR0bGUgc3BhY2UgYnkgaGFyZC1jb2RpbmcgdGhlIGtub3ds
ZWRnZSB0aGF0IHRoZSB0d28KICAgICAgICAgLy8gJ2FyZ3VtZW50cycgdmFsdWVzIGFyZSBzdG9y
ZWQgaW4gY29uc2VjdXRpdmUgcmVnaXN0ZXJzLCBhbmQgc3RvcmluZwpAQCAtMzA3LDEzICszMTks
MTMgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgICAgICAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9hY3RpdmF0aW9uUmVnaXN0ZXItPmlu
ZGV4KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX2Z1bmN0aW9ucy5h
ZGQoaWRlbnQuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFy
KGlkZW50LCBmYWxzZSksIElzQ2FwdHVyZWQsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICBl
bWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBJc1dhdGNoYWJsZSksIElz
Q2FwdHVyZWQsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0OwogICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAgICAgIGFk
ZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgIGFkZFZhcihpZGVudCwgKHZhclN0YWNrW2ldLnNlY29u
ZCAmIERlY2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KSA/IElzQ29uc3RhbnQgOiBJc1Zhcmlh
YmxlLCBJc1dhdGNoYWJsZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgYm9vbCBjYW5MYXppbHlD
cmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhh
blZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOwpAQCAtMzMxLDcgKzM0Myw3
IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSBmdW5jdGlvbi0+aWRlbnQoKTsKICAgICAgICAgaWYgKCFm
dW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkgewogICAgICAgICAgICAgbV9mdW5jdGlvbnMu
YWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVnID0g
YWRkVmFyKGlkZW50LCBmYWxzZSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVn
ID0gYWRkVmFyKGlkZW50LCBJc1ZhcmlhYmxlLCBOb3RXYXRjaGFibGUpOwogICAgICAgICAgICAg
Ly8gRG9uJ3QgbGF6aWx5IGNyZWF0ZSBmdW5jdGlvbnMgdGhhdCBvdmVycmlkZSB0aGUgbmFtZSAn
YXJndW1lbnRzJwogICAgICAgICAgICAgLy8gYXMgdGhpcyB3b3VsZCBjb21wbGljYXRlIGxhenkg
aW5zdGFudGlhdGlvbiBvZiBhY3R1YWwgYXJndW1lbnRzLgogICAgICAgICAgICAgaWYgKCFjYW5M
YXppbHlDcmVhdGVGdW5jdGlvbnMgfHwgaWRlbnQgPT0gcHJvcGVydHlOYW1lcygpLmFyZ3VtZW50
cykKQEAgLTM0Niw3ICszNTgsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHZhclN0YWNrW2ldLmZpcnN0Owog
ICAgICAgICBpZiAoIWZ1bmN0aW9uQm9keS0+Y2FwdHVyZXMoaWRlbnQpKQotICAgICAgICAgICAg
YWRkVmFyKGlkZW50LCB2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXND
b25zdGFudCk7CisgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJTdGFja1tpXS5zZWNvbmQg
JiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0YW50IDogSXNWYXJpYWJs
ZSwgTm90V2F0Y2hhYmxlKTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkQ2FwdHVyZUFsbFRoZVRo
aW5ncykKQEAgLTQ1Nyw2ICs0NjksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluaXRMCiB7CiAgICAgZW1pdE9wY29kZShvcF9pbml0X2xhenlfcmVnKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVnLT5pbmRleCgpKTsKKyAgICBBU1NFUlQoIXdhdGNoYWJsZVZh
cmlhYmxlKHJlZy0+aW5kZXgoKSkpOwogICAgIHJldHVybiByZWc7CiB9CiAKQEAgLTEwMDcsNiAr
MTAyMCw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSgKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9jYXB0dXJlZF9tb3YgOiBv
cF9tb3YpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIGlmIChjYXB0dXJlTW9kZSA9
PSBJc0NhcHR1cmVkKQorICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFy
aWFibGUoZHN0LT5pbmRleCgpKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTU3OSw3ICsx
NTk0LDExIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnUKICAgICBl
bWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRfZnVu
YyA6IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChkb051bGxDaGVjayk7CisgICAgaWYgKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQp
IHsKKyAgICAgICAgQVNTRVJUKCFkb051bGxDaGVjayk7CisgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCh3YXRjaGFibGVWYXJpYWJsZShkc3QtPmluZGV4KCkpKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRvTnVsbENoZWNrKTsKICAgICByZXR1cm4gZHN0
OwogfQogCkBAIC0xNjIxLDYgKzE2NDAsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVh
dGVBcmd1bWVudHNJCiAKICAgICBlbWl0T3Bjb2RlKG9wX2NyZWF0ZV9hcmd1bWVudHMpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChtX2NvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKS5v
ZmZzZXQoKSk7CisgICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShtX2NvZGVCbG9jay0+YXJn
dW1lbnRzUmVnaXN0ZXIoKS5vZmZzZXQoKSkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpjcmVhdGVBY3RpdmF0aW9uSWZOZWNlc3NhcnkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNp
b24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTcsMTUgKzQ5NywxNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogbmV3UmVnaXN0ZXIoKTsKIAogICAgICAgICAv
LyBBZGRzIGEgdmFyIHNsb3QgYW5kIG1hcHMgaXQgdG8gdGhlIG5hbWUgaWRlbnQgaW4gc3ltYm9s
VGFibGUoKS4KLSAgICAgICAgUmVnaXN0ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBib29sIGlzQ29uc3RhbnQpCisgICAgICAgIGVudW0gV2F0Y2hNb2RlIHsgSXNXYXRjaGFi
bGUsIE5vdFdhdGNoYWJsZSB9OworICAgICAgICBSZWdpc3RlcklEKiBhZGRWYXIoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIENvbnN0YW50TW9kZSBjb25zdGFudE1vZGUsIFdhdGNoTW9kZSB3YXRj
aE1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsOwotICAgICAg
ICAgICAgYWRkVmFyKGlkZW50LCBpc0NvbnN0YW50LCBsb2NhbCk7CisgICAgICAgICAgICBhZGRW
YXIoaWRlbnQsIGNvbnN0YW50TW9kZSwgd2F0Y2hNb2RlLCBsb2NhbCk7CiAgICAgICAgICAgICBy
ZXR1cm4gbG9jYWw7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEaXR0by4gUmV0dXJucyB0cnVl
IGlmIGEgbmV3IFJlZ2lzdGVySUQgd2FzIGFkZGVkLCBmYWxzZSBpZiBhIHByZS1leGlzdGluZyBS
ZWdpc3RlcklEIHdhcyByZS11c2VkLgotICAgICAgICBib29sIGFkZFZhcihjb25zdCBJZGVudGlm
aWVyJiwgYm9vbCBpc0NvbnN0YW50LCBSZWdpc3RlcklEKiYpOworICAgICAgICBib29sIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlLCBXYXRjaE1vZGUsIFJlZ2lzdGVySUQq
Jik7CiAgICAgICAgIAogICAgICAgICAvLyBBZGRzIGFuIGFub255bW91cyB2YXIgc2xvdC4gVG8g
Z2l2ZSB0aGlzIHNsb3QgYSBuYW1lLCBhZGQgaXQgdG8gc3ltYm9sVGFibGUoKS4KICAgICAgICAg
UmVnaXN0ZXJJRCogYWRkVmFyKCkKQEAgLTU5MCw2ICs1OTEsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgY3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCk7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KFJlZ2lzdGVySUQqKTsKICAg
ICAgICAgCisgICAgICAgIFN0cmluZ0ltcGwqIHdhdGNoYWJsZVZhcmlhYmxlKGludCBvcGVyYW5k
KQorICAgICAgICB7CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnKG9wZXJhbmQpOwor
ICAgICAgICAgICAgaWYgKCFyZWcuaXNMb2NhbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4ocmVnLnRvTG9jYWwoKSkgPj0g
bV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgcmV0dXJuIG1fd2F0Y2hhYmxlVmFyaWFibGVzW3JlZy50b0xvY2FsKCldOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBWZWN0b3I8VW5saW5rZWRJbnN0cnVjdGlvbiwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1faW5zdHJ1Y3Rpb25zOwogCiAgICAgICAgIGJvb2wg
bV9zaG91bGRFbWl0RGVidWdIb29rczsKQEAgLTYwOSw2ICs2MjAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgUmVnaXN0ZXJJRCogbV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAgICAgICAgIFJl
Z2lzdGVySUQqIG1fZW1wdHlWYWx1ZVJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2ds
b2JhbE9iamVjdFJlZ2lzdGVyOworICAgICAgICBWZWN0b3I8U3RyaW5nSW1wbCosIDE2PiBtX3dh
dGNoYWJsZVZhcmlhYmxlczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMy
PiBtX2NvbnN0YW50UG9vbFJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lz
dGVySUQsIDMyPiBtX2NhbGxlZVJlZ2lzdGVyczsKICAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJl
Z2lzdGVySUQsIDMyPiBtX3BhcmFtZXRlcnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNiw2ICsyMTYsMTYgQEAgcHJpdmF0ZToKIAogICAgIE5vZGUqIGdldChWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CisgICAgICAgIGlmIChvcGVyYW5kLmlzTG9jYWwoKQor
ICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihvcGVyYW5kLnRvTG9jYWwoKSkgPCBt
X2xvY2FsV2F0Y2hwb2ludHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRj
aHBvaW50U2V0KiBzZXQgPSBtX2xvY2FsV2F0Y2hwb2ludHNbb3BlcmFuZC50b0xvY2FsKCldKSB7
CisgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9uUmVlbnRyeVdhdGNo
cG9pbnQsIE9wSW5mbyhtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkpOworICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHNldCkpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaW5mZXJyZWRDb25zdGFudCh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUoKSkgewogICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKS0+aXNDbG9z
dXJlQ2FsbCkgewogICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNh
bGxGcmFtZSgpLT5jYWxsZWVDb25zdGFudCgpOwpAQCAtNjg0LDYgKzY5NCwxMyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAgICAgCisg
ICAgTm9kZSogaW5mZXJyZWRDb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudCh2YWx1
ZS5hc0NlbGwoKSk7CisgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUodmFsdWUs
IDApOworICAgIH0KKyAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJh
bWU7CkBAIC0xMDAwLDYgKzEwMTcsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxDb25zdGFu
dEJ1ZmZlcktleSwgdW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJDYWNoZTsKICAgICAKKyAgICBW
ZWN0b3I8VmFyaWFibGVXYXRjaHBvaW50U2V0KiwgMTY+IG1fbG9jYWxXYXRjaHBvaW50czsKKyAg
ICAKICAgICBzdHJ1Y3QgSW5saW5lU3RhY2tFbnRyeSB7CiAgICAgICAgIEJ5dGVDb2RlUGFyc2Vy
KiBtX2J5dGVDb2RlUGFyc2VyOwogICAgICAgICAKQEAgLTIxNDYsMTIgKzIxNjUsMTkgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9H
cmFwaChCcmVha3BvaW50KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNl
bmRpZgotICAgICAgICBjYXNlIG9wX21vdjoKLSAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6
IHsKKyAgICAgICAgY2FzZSBvcF9tb3Y6IHsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
LCBvcCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9tb3YpOwogICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIE5v
ZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyhzZXQpLCBvcCk7CisgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYXB0dXJlZF9tb3YpOworICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrSGFzSW5zdGFuY2UsIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpKTsKQEAgLTMwNzgsMTUgKzMxMDQsMjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZv
KHdhdGNocG9pbnRTZXQpKTsKLSAgICAgICAgICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxs
Q29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0NlbGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRKU0NvbnN0
YW50Rm9yVmFsdWUoc3BlY2lmaWNWYWx1ZSwgMCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihzY29wZSkpOworICAgICAgICAgICAgICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24g
PSBtX2dyYXBoLnRyeUdldEFjdGl2YXRpb24oc2NvcGVOb2RlKSkgeworICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgp
OworICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xU
YWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRl
cmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKKyAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53
YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzZXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0LT5pbmZlcnJlZFZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHNjb3Bl
Tm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdh
dGNocG9pbnQsIE9wSW5mbyhzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
R2V0Q2xvc3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAogICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29w
ZU5vZGUpKSk7CkBAIC0zMjI3LDggKzMyNjUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRf
YnlfdmFsKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1
bmM6Ci0gICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgY2FzZSBv
cF9uZXdfZnVuYzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChO
ZXdGdW5jdGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkpOwpAQCAtMzI0Miw2ICszMjc5LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsK
KyAgICAgICAgICAgIE5vZGUqIGZ1bmN0aW9uID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAg
ICBOZXdGdW5jdGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSk7CisgICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyhzZXQpLCBmdW5jdGlvbik7CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBmdW5j
dGlvbik7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewog
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lv
biwgT3BJbmZvKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkBAIC0zNjExLDYg
KzM2NTcsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJp
bmcgY29uc3RydWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAg
IGlmIChtX2NvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpIHsKKyAgICAgICAgU3ltYm9sVGFibGUq
IHN5bWJvbFRhYmxlID0gbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBTeW1i
b2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7
CisgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5l
bmQobG9ja2VyKTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAg
ICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+d2F0Y2hwb2ludFNldCgp
OworICAgICAgICAgICAgaWYgKCFzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3Rl
cihpdGVyLT5nZXRJbmRleCgpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgd2hpbGUgKG1fbG9j
YWxXYXRjaHBvaW50cy5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgICAgICAgICAgbV9sb2NhbFdh
dGNocG9pbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBvaW50
c1tpbmRleF0gPSBzZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5saW5lU3RhY2tF
bnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9m
aWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAg
ICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTk5NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIzLDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWlyZWRS
ZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
R3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFwaDo6
dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
anNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Cisg
ICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkpOworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVn
aXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gdHJ5
R2V0QWN0aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJldHVy
biAwOwogICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEsNyBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwog
ICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsK
ICAgICAKKyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCiAg
ICAgVk0mIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAx
NTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChvcF9s
c2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2FwdHVy
ZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBERUZJ
TkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVf
T1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdf
YXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAgICAg
ICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2FwdHVy
ZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAgREVG
SU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhwKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNiArNDYzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9jYXRjaChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY29uc3RydWN0KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9u
Kik7CkBAIC01MTUsNiArNTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9uZXdfYXJyYXlfYnVmZmVyKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9uZXdfZnVuYyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2NhcHR1
cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25ld19mdW5jX2V4
cChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X3JlZ2V4cChJbnN0cnVjdGlvbiopOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAx
NTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSwxMiArNTUsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3Ry
dWN0aW9uKiBjdXJyZQogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogCi0g
ICAgLy8gVXNlIHNpbXBsZXIgYXBwcm9hY2gsIHNpbmNlIHRoZSBERkcgdGhpbmtzIHRoYXQgdGhl
IGxhc3QgcmVzdWx0IHJlZ2lzdGVyCi0gICAgLy8gaXMgYWx3YXlzIHNldCB0byB0aGUgZGVzdGlu
YXRpb24gb24gZXZlcnkgb3BlcmF0aW9uLgogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3Jj
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCBy
ZWdUMSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FwdHVy
ZWRfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS53YXRjaHBvaW50U2V0OworICAgIGlmICghc2V0IHx8
IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQorICAgICAgICByZXR1cm47CisgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAh
PSBjYWxsRnJhbWVSZWdpc3Rlcik7CkBAIC0xMTgwLDYgKzExOTgsMTIgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X2Z1bmMoSW5zdHJ1Y3Rpb24qIAogICAgICAgICBsYXp5SnVtcC5saW5rKHRoaXMp
OwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfY2FwdHVyZWRfZnVuYyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpOwor
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5j
X2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJl
dmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgX2xs
aW50X29wX2NhcHR1cmVkX21vdjoKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0Miwg
dDMpCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0KICAgICBzdG9yZWkgdDMs
IFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3BhdGNo
KDQpCiAKIAogX2xsaW50X29wX25vdDoKQEAgLTE2NzQsMTIgKzE2NzQsNyBAQCBfbGxpbnRfb3Bf
bmV3X2Z1bmM6CiAKIF9sbGludF9vcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1
dGlvbigpCi0gICAgYnRpeiAxMltQQ10sIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZAotICAg
IGxvYWRpIDRbUENdLCB0MQotICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQxLCA4XSwgRW1wdHlW
YWx1ZVRhZywgLm9wTmV3Q2FwdHVyZWRGdW5jRG9uZQotLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVj
a2VkOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25ld19mdW5jKQotLm9wTmV3
Q2FwdHVyZWRGdW5jRG9uZToKICAgICBkaXNwYXRjaCg0KQogCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDE4LDEzICs0MTgsMzggQEAgX2xs
aW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwg
dmFsdWUsIHNjcmF0Y2gsIHNsb3cpCisgICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpt
X3N0YXRlW3NldF0sIHNjcmF0Y2gKKyAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5k
b25lCisgICAgYmluZXEgc2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3ZlcndyaXRlCisgICAg
c3RvcmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRd
CisgICAgc3RvcmViIElzV2F0Y2hlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3Nl
dF0KKyAgICBqbXAgLmRvbmUKKworLm92ZXJ3cml0ZToKKyAgICBicWVxIHZhbHVlLCBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdLCAuZG9uZQorICAgIGJ0Ym56IFZh
cmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNsb3cKKyAgICBzdG9y
ZXEgMCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XQorICAgIHN0
b3JlYiBJc0ludmFsaWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQor
CisuZG9uZTogICAgCitlbmQKKwogX2xsaW50X29wX2NhcHR1cmVkX21vdjoKICAgICB0cmFjZUV4
ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQotICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikK
KyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigzLCB0MCkKKyAgICBidHB6IHQwLCAub3BDYXB0dXJl
ZE1vdlJlYWR5CisgICAgbm90aWZ5V3JpdGUodDAsIHQyLCB0MSwgLm9wQ2FwdHVyZWRNb3ZTbG93
KQorLm9wQ2FwdHVyZWRNb3ZSZWFkeToKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDAp
CiAgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgzKQorICAgIGRpc3Bh
dGNoKDQpCisKKy5vcENhcHR1cmVkTW92U2xvdzoKKyAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0
aF9jYXB0dXJlZF9tb3YpCisgICAgZGlzcGF0aCg0KQogCiAKIF9sbGludF9vcF9ub3Q6CkBAIC0x
NTI1LDEzICsxNTUwLDcgQEAgX2xsaW50X29wX25ld19mdW5jOgogCiBfbGxpbnRfb3BfbmV3X2Nh
cHR1cmVkX2Z1bmM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigzLCB0MikKLSAgICBidGl6IHQyLCAub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQKLSAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEpCi0gICAgYnRxbnogW2NmciwgdDEsIDhdLCAu
b3BOZXdDYXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAg
Y2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1
bmNEb25lOgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQog
ICAgIGRpc3BhdGNoKDQpCiAKIApAQCAtMTk3MywyMyArMTk5Miw2IEBAIG1hY3JvIHB1dFByb3Bl
cnR5KCkKICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQogZW5k
CiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9h
ZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVx
IHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEgc2NyYXRjaCwgQ2xlYXJX
YXRjaHBvaW50LCAub3ZlcndyaXRlCi0gICAgc3RvcmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzV2F0Y2hlZCwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0KLSAgICBqbXAgLmRvbmUKLQotLm92ZXJ3cml0
ZToKLSAgICBicWVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1
ZVtzZXRdLCAuZG9uZQotICAgIGJ0Ym56IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05v
dEVtcHR5W3NldF0sIHNsb3cKLSAgICBzdG9yZXEgMCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpt
X2luZmVycmVkVmFsdWVbc2V0XQotICAgIHN0b3JlYiBJc0ludmFsaWRhdGVkLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotCi0uZG9uZTogICAgCi1lbmQKLQogbWFjcm8gcHV0
R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENv
bnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0NCw2ICsyNDQsMjggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3Ro
aXMpCiAgICAgUkVUVVJOKHYxLnRvVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJp
Y3RNb2RlKCkgPyBTdHJpY3RNb2RlIDogTm90U3RyaWN0TW9kZSkpOwogfQogCitTTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IE9QX0MoMikuanNWYWx1ZSgpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlXcml0
ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19w
YXRoX25ld19jYXB0dXJlZF9mdW5jKQoreworICAgIEJFR0lOKCk7CisgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2Rl
VHlwZSgpICE9IEZ1bmN0aW9uQ29kZQorICAgICAgICAgICB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1
bGxTY29wZUNoYWluKCkKKyAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2st
PmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUg
dmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKHBj
WzJdLnUub3BlcmFuZCksIGV4ZWMtPnNjb3BlKCkpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlX
cml0ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKwogU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX25vdCkKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNiArMTY1LDQwIEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y3JlYXRlX2EKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfdG9fdGhpcyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhcHR1cmVkX21vdik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25l
d19jYXB0dXJlZF9mdW5jKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbm90KTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZXEpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9uZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJp
Y3RlcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25zdHJpY3RlcSk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2xlc3MpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9sZXNzZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ncmVh
dGVyKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ3JlYXRlcmVxKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaW5jKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfZGVjKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fbnVtYmVy
KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmVnYXRlKTsKK1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfYWRkKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfbXVsKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3ViKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZGl2KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfbW9kKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbHNoaWZ0KTsKK1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcnNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfdXJzaGlmdCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2JpdGFuZCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2JpdG9yKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYml0eG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfdHlwZW9mKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNf
b2JqZWN0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNfZnVuY3Rpb24pOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pbik7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2RlbF9ieV92YWwpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9zdHJjYXQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUp
OworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9lcSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb25zdGFudE1vZGVfaAorI2RlZmluZSBDb25z
dGFudE1vZGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBDb25zdGFudE1vZGUgeyBJc0Nv
bnN0YW50LCBJc1ZhcmlhYmxlIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
Q29uc3RhbnRNb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsy
Myw3IEBACiAjZGVmaW5lIEpTR2xvYmFsT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFycmF5QWxsb2Nh
dGlvblByb2ZpbGUuaCIKKyNpbmNsdWRlICJDb25zdGFudE1vZGUuaCIKICNpbmNsdWRlICJKU0Fy
cmF5LmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpT
Q2xhc3NSZWYuaCIKQEAgLTI4OCw3ICsyODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGluaXQo
dGhpc1ZhbHVlKTsKICAgICB9CiAKLSAgICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQs
IElzVmFyaWFibGUgfTsKICAgICBzdHJ1Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAgICAgaW50IHJl
Z2lzdGVyTnVtYmVyOwogICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTk5
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nl
c3MoRXhlY1N0CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0g
ICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgp
KTsKKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIGVudHJ5LndhdGNocG9p
bnRTZXQoKSwgZW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9s
VGFibGUuY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgSlNW
YWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKAogdm9pZCBTeW1ib2xUYWJsZUVu
dHJ5OjpwcmVwYXJlVG9XYXRjaCgpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgp
OwotICAgIEFTU0VSVCghZW50cnktPm1fd2F0Y2hwb2ludHMpOworICAgIGlmIChlbnRyeS0+bV93
YXRjaHBvaW50cykKKyAgICAgICAgcmV0dXJuOwogICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0g
YWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218262</attachid>
            <date>2013-12-02 20:39:02 -0800</date>
            <delta_ts>2013-12-02 22:05:06 -0800</delta_ts>
            <desc>it successfully inferred things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38618</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FwdHVyZWRfbW92Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CkBAIC0xMjI0LDkgKzEyMjUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2hvdWxkQ2hlY2sg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19jYXB0dXJlZF9mdW5jIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hv
dWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CisgICAgICAg
ICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6IHsKQEAgLTE1NTEsMTAgKzE1NTIsMTMgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CiAKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKKyAgICAKICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmUoKm1fdm0pKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkQ2xvbmVT
eW1ib2xUYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgfQogICAgIApAQCAtMTgyMCwxMSArMTgyNCwyNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3Bl
cmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9w
ZXJhbmQoKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAg
ICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUudWlkOworICAg
ICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2Nr
ZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxlLT5lbmQo
bG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1
ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtOTAsMTYgKzkwLDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgSW5zdHJ1Y3Rpb24o
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRlckZ1bmMgPSBn
ZXR0ZXJGdW5jOyB9CiAgICAgICAgIAogICAgIEluc3RydWN0aW9uKExMSW50Q2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8pIHsgdS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87IH0KLSAgICAg
ICAgCiAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUucHJvZmlsZSA9
IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5h
cnJheVByb2ZpbGUgPSBwcm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBwcm9maWxlOyB9
CiAgICAgSW5zdHJ1Y3Rpb24oT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUpIHsgdS5v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1
Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsgdS5yZWdpc3Rl
clBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24o
U3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKSB7IHUuc3BlY2lhbFBvaW50ZXIgPSBwb2ludGVyOyB9
Ci0gICAgICAgIAorICAgIEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVp
ZDsgfQogICAgIEluc3RydWN0aW9uKGJvb2wqIHByZWRpY2F0ZVBvaW50ZXIpIHsgdS5wcmVkaWNh
dGVQb2ludGVyID0gcHJlZGljYXRlUG9pbnRlcjsgfQogCiAgICAgdW5pb24gewpAQCAtMTEyLDYg
KzEwOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIFNwZWNpYWw6OlBvaW50ZXIg
c3BlY2lhbFBvaW50ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
ckZ1bmM7CiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFN0cmluZ0ltcGwqIHVpZDsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlOwogICAgICAg
ICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1KSBcCiAgICAg
bWFjcm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykgXAotICAgIG1h
Y3JvKG9wX2NhcHR1cmVkX21vdiwgMykgXAorICAgIG1hY3JvKG9wX2NhcHR1cmVkX21vdiwgNCkg
XAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAgICBtYWNybyhvcF9lcSwgNCkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOSArMjI5LDEx
IEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZEluc3RydWN0aW9u
KCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBv
cGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKGlu
dCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0
aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVpZDsgfQogICAgIHVuaW9uIHsKICAgICAg
ICAgT3Bjb2RlSUQgb3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CisgICAgICAgIFN0
cmluZ0ltcGwqIHVpZDsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCShyZXZpc2lv
biAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRj
aHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEhbV9pbmZl
cnJlZFZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKICAgICAg
ICAgbV9pbmZlcnJlZFZhbHVlID0gSlNWYWx1ZSgpOwotICAgICAgICBmaXJlQWxsKCk7CisgICAg
ICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsMTMgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJlQWxsKCk7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgeworICAgICAgICBpZiAoc3Rh
dGUoKSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAgICAgIG1fc3Rh
dGUgPSBJc0ludmFsaWRhdGVkOworICAgIH0KIAogICAgIGludDhfdCogYWRkcmVzc09mU3RhdGUo
KSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RFbXB0
eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE5ICsxMTUsMzEgQEAg
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIHJldHVybiBQYXJz
ZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJl
Z2lzdGVySUQqJiByMCkKK2Jvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcigKKyAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2Rl
IHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5t
X2xvY2spOwogICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRy
eShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6
IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJs
ZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCisg
ICAgCisgICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgeworICAgICAgICB3aGlsZSAo
bV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVC
bG9jay0+bV9udW1WYXJzKSkKKyAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVu
ZChudWxscHRyKTsKKyAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlkZW50Lmlt
cGwoKSk7CisgICAgfQorICAgIAogICAgIHIwID0gYWRkVmFyKCk7CisgICAgCisgICAgQVNTRVJU
KHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVC
bG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkpOworICAgIAog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzYsNyArMjQ4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc0Fy
Z3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVpZnkgYXJndW1l
bnRzIG9iamVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9kaWZpZWQgYnkg
dXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9IGFkZFZh
cihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBmYWxzZSk7IC8vIENhbiBiZSBjaGFuZ2VkIGJ5
IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRz
UmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNWYXJpYWJsZSwg
Tm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRvICdhcmd1bWVu
dHMnLgogCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5IGhhcmQtY29k
aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1bWVudHMnIHZh
bHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0b3JpbmcKQEAg
LTMwNywxMyArMzE5LDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlv
blJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
bV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdE5ld0Z1
bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CisgICAg
ICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgSXNX
YXRjaGFibGUpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJz
dDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkKLSAgICAg
ICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9u
U3RhY2tzOjpJc0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJT
dGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0
YW50IDogSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAgfQogICAgIGJv
b2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0
aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsKQEAg
LTMzMSw3ICszNDMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7CiAg
ICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpIHsKICAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgZmFsc2UpOworICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsK
ICAgICAgICAgICAgIC8vIERvbid0IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgb3ZlcnJp
ZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMgd291bGQgY29t
cGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgICAg
ICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMpCkBAIC0zNDYsNyArMzU4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2su
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgaWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkK
LSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRp
b25TdGFja3M6OklzQ29uc3RhbnQpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3Rh
Y2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFu
dCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZENh
cHR1cmVBbGxUaGVUaGluZ3MpCkBAIC00NTcsNiArNDY5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJbml0TAogewogICAgIGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3Jl
Zyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7CisgICAgQVNTRVJU
KCF3YXRjaGFibGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKICAgICByZXR1cm4gcmVnOwogfQog
CkBAIC0xMDA3LDYgKzEwMjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE1vdmUoCiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVkID8gb3BfY2Fw
dHVyZWRfbW92IDogb3BfbW92KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsKKyAgICBpZiAo
Y2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCkKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAK
QEAgLTE1NzksNyArMTU5NCwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE5ld0Z1CiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVkID8gb3BfbmV3
X2NhcHR1cmVkX2Z1bmMgOiBvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOworICAgIGlmIChjYXB0dXJlTW9kZSA9
PSBJc0NhcHR1cmVkKSB7CisgICAgICAgIEFTU0VSVCghZG9OdWxsQ2hlY2spOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRleCgpKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb051bGxDaGVjayk7CiAg
ICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTYyMSw2ICsxNjQwLDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSQogCiAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJn
dW1lbnRzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50
c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgIEFTU0VSVCghd2F0Y2hhYmxlVmFyaWFibGUobV9j
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpKTsKIH0KIAogdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDE1ICs0OTcs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7
CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0IHRvIHRoZSBuYW1lIGlk
ZW50IGluIHN5bWJvbFRhYmxlKCkuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50KQorICAgICAgICBlbnVtIFdhdGNoTW9k
ZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYWRk
VmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBX
YXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKiBs
b2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgaXNDb25zdGFudCwgbG9jYWwpOworICAg
ICAgICAgICAgYWRkVmFyKGlkZW50LCBjb25zdGFudE1vZGUsIHdhdGNoTW9kZSwgbG9jYWwpOwog
ICAgICAgICAgICAgcmV0dXJuIGxvY2FsOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGl0dG8u
IFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFsc2UgaWYgYSBw
cmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9vbCBhZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComKTsKKyAgICAg
ICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgV2F0Y2hNb2Rl
LCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMg
dmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxl
KCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC01OTAsNiArNTkxLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgp
OwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdp
c3RlcklEKik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiB3YXRjaGFibGVWYXJpYWJs
ZShpbnQgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyhvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50
b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcu
dG9Mb2NhbCgpXTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgVmVjdG9yPFVubGlua2Vk
SW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0aW9uczsKIAog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9va3M7CkBAIC02MDksNiArNjIwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlvblJlZ2lzdGVy
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlcjsKICAgICAgICAgUmVn
aXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICAgICAgVmVjdG9yPFN0cmluZ0lt
cGwqLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1
OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNiArMjE2LDIzIEBAIHByaXZhdGU6CiAKICAgICBOb2Rl
KiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFu
ZC5pc0xvY2FsKCkKKyAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PHNpemVfdD4ob3BlcmFuZC50
b0xvY2FsKCkpIDwgbV9sb2NhbFdhdGNocG9pbnRzLnNpemUoKSkgeworICAgICAgICAgICAgaWYg
KFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gbV9sb2NhbFdhdGNocG9pbnRzW29wZXJhbmQu
dG9Mb2NhbCgpXSkgeworICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0LT5p
bmZlcnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGdW5jdGlv
blJlZW50cnlXYXRjaHBvaW50LCBPcEluZm8obV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5m
byhzZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBpcyB2ZXJ5IHNwZWNp
YWwgZnJvbSBhbiBPU1IgZXhpdCBzdGFuZHBvaW50LiBXZSB3b3VsZG4ndCBiZQorICAgICAgICAg
ICAgICAgICAgICAvLyBhYmxlIHRvIGRvIHRoaXMgZm9yIG1vc3QgbG9jYWxzLCBidXQgaXQgd29y
a3MgaGVyZSBiZWNhdXNlIHdlJ3JlIGRlYWxpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gd2l0
aCBhIGZsdXNoZWQgbG9jYWwuIEZvciBtb3N0IGxvY2FscyB3ZSB3b3VsZCBuZWVkIHRvIGlzc3Vl
IGEgR2V0TG9jYWwKKyAgICAgICAgICAgICAgICAgICAgLy8gaGVyZSBhbmQgZW5zdXJlIHRoYXQg
d2UgaGF2ZSB1c2VzIGluIERGRyBJUiB3aGVyZXZlciB0aGVyZSB3b3VsZCBoYXZlCisgICAgICAg
ICAgICAgICAgICAgIC8vIGJlZW4gdXNlcyBpbiBieXRlY29kZS4gQ2xlYXJseSB0aGlzIG9wdGlt
aXphdGlvbiBkb2VzIG5vdCBkbyB0aGlzLiBCdXQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhh
dCdzIGZpbmUsIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBsaXZlbmVzcyBmb3IgY2Fw
dHVyZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWxzLCBhbmQgdGhpcyBvcHRpbWl6YXRp
b24gb25seSBraWNrcyBpbiBmb3IgY2FwdHVyZWQgbG9jYWxzLgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaW5mZXJyZWRDb25zdGFudCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewog
ICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKS0+aXNDbG9zdXJlQ2FsbCkgewogICAg
ICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZSgpLT5jYWxs
ZWVDb25zdGFudCgpOwpAQCAtNjg0LDYgKzcwMSwxMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICB9CiAgICAgCisgICAgTm9kZSogaW5mZXJy
ZWRDb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudCh2YWx1ZS5hc0NlbGwoKSk7Cisg
ICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUodmFsdWUsIDApOworICAgIH0KKyAg
ICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpCiAgICAgewogICAgICAg
ICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWU7CkBAIC0xMDAwLDYg
KzEwMjQsOCBAQCBwcml2YXRlOgogCiAgICAgSGFzaE1hcDxDb25zdGFudEJ1ZmZlcktleSwgdW5z
aWduZWQ+IG1fY29uc3RhbnRCdWZmZXJDYWNoZTsKICAgICAKKyAgICBWZWN0b3I8VmFyaWFibGVX
YXRjaHBvaW50U2V0KiwgMTY+IG1fbG9jYWxXYXRjaHBvaW50czsKKyAgICAKICAgICBzdHJ1Y3Qg
SW5saW5lU3RhY2tFbnRyeSB7CiAgICAgICAgIEJ5dGVDb2RlUGFyc2VyKiBtX2J5dGVDb2RlUGFy
c2VyOwogICAgICAgICAKQEAgLTIxNDYsMTIgKzIxNzIsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmVha3BvaW50
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgotICAgICAgICBj
YXNlIG9wX21vdjoKLSAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgY2Fz
ZSBvcF9tb3Y6IHsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9tb3YpOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAg
ICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3Jp
dGUsIE9wSW5mbyhzZXQpLCBvcCk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9jYXB0dXJlZF9tb3YpOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9jaGVj
a19oYXNfaW5zdGFuY2U6CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSGFzSW5zdGFuY2Us
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsK
QEAgLTMwNzgsMTUgKzMxMTEsMjcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQp
KTsKLSAgICAgICAgICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZS5pc0NlbGwoKSkKLSAgICAgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lm
aWNWYWx1ZS5hc0NlbGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoc3Bl
Y2lmaWNWYWx1ZSwgMCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgaW5mZXJyZWRDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAg
ICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpOworICAg
ICAgICAgICAgICAgIGlmIChKU0FjdGl2YXRpb24qIGFjdGl2YXRpb24gPSBtX2dyYXBoLnRyeUdl
dEFjdGl2YXRpb24oc2NvcGVOb2RlKSkgeworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOworICAgICAgICAgICAg
ICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5
bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0ZXIgIT0gc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hw
b2ludFNldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludFNldCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB3YXRjaHBvaW50U2V0LT5p
bmZlcnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIHNjb3BlTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENv
bnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLAogICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEdldENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwg
T3BJbmZvKHByZWRpY3Rpb24pLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
R2V0Q2xvc3VyZVJlZ2lzdGVycywgc2NvcGVOb2RlKSkpOwpAQCAtMzIyNyw4ICszMjcyLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2FyZ3VtZW50X2J5X3ZhbCk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIG9wX25ld19mdW5jOgotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJl
ZF9mdW5jOiB7CisgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6IHsKICAgICAgICAgICAgIGlmICgh
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkgewogICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3RnVuY3Rpb25Ob0NoZWNrLCBPcEluZm8oY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKTsKQEAgLTMyNDIsNiArMzI4NiwxNSBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9uZXdfZnVuYyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNl
IG9wX25ld19jYXB0dXJlZF9mdW5jOiB7CisgICAgICAgICAgICBOb2RlKiBmdW5jdGlvbiA9IGFk
ZFRvR3JhcGgoCisgICAgICAgICAgICAgICAgTmV3RnVuY3Rpb25Ob0NoZWNrLCBPcEluZm8oY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNl
dCkKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8oc2V0KSwg
ZnVuY3Rpb24pOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgZnVuY3Rpb24pOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfbmV3X2NhcHR1cmVkX2Z1bmMpOworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBvcF9uZXdfZnVuY19leHA6IHsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChOZXdGdW5jdGlvbkV4cHJlc3Npb24sIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpOwpAQCAtMzYxMSw2ICszNjY0LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNvbnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1f
Y3VycmVudEluZGV4KTsKICAgICAKKyAgICBpZiAobV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgp
KSB7CisgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpOworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJs
ZS0+bV9sb2NrKTsKKyAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5
bWJvbFRhYmxlLT5iZWdpbihsb2NrZXIpOworICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVy
YXRvciBlbmQgPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcik7CisgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIGlmICghc2V0KQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2l6ZV90IGluZGV4ID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihWaXJ0dWFsUmVnaXN0ZXIoaXRlci0+dmFsdWUuZ2V0SW5kZXgoKSku
dG9Mb2NhbCgpKTsKKyAgICAgICAgICAgIHdoaWxlIChtX2xvY2FsV2F0Y2hwb2ludHMuc2l6ZSgp
IDw9IGluZGV4KQorICAgICAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBvaW50cy5hcHBlbmQobnVs
bHB0cik7CisgICAgICAgICAgICBtX2xvY2FsV2F0Y2hwb2ludHNbaW5kZXhdID0gc2V0OworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRy
eSgKICAgICAgICAgdGhpcywgbV9jb2RlQmxvY2ssIG1fcHJvZmlsZWRCbG9jaywgMCwgMCwgVmly
dHVhbFJlZ2lzdGVyKCksIFZpcnR1YWxSZWdpc3RlcigpLAogICAgICAgICBtX2NvZGVCbG9jay0+
bnVtUGFyYW1ldGVycygpLCBDb2RlRm9yQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyMywxMSArNzIzLDE2IEBA
IHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3IKICAgICByZXR1cm4gc3Rk
OjptYXgoZnJhbWVSZWdpc3RlckNvdW50KCksIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQo
KSk7CiB9CiAKLVdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIEdyYXBoOjp0cnlHZXRSZWdpc3Rl
cnMoTm9kZSogbm9kZSkKK0pTQWN0aXZhdGlvbiogR3JhcGg6OnRyeUdldEFjdGl2YXRpb24oTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgIHJldHVy
biAwOwotICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNBY3Rp
dmF0aW9uKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PEpTQWN0aXZhdGlvbio+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKK30KKworV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQor
eworICAgIEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9IHRyeUdldEFjdGl2YXRpb24obm9kZSk7
CiAgICAgaWYgKCFhY3RpdmF0aW9uKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIWFjdGl2
YXRpb24tPmlzVG9ybk9mZigpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OTEsNiArNzkxLDcgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKTsKICAgICB1bnNpZ25lZCByZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7CiAgICAgCisgICAgSlNBY3RpdmF0
aW9uKiB0cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIAogICAgIFZNJiBtX3ZtOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsNyArMjI2LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQogICAgICAgICBERUZJ
TkVfT1Aob3BfbW9kKQotICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgREVG
SU5FX09QKG9wX2NhcHR1cmVkX21vdikKICAgICAgICAgREVGSU5FX09QKG9wX21vdikKICAgICAg
ICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkKQEAgLTIz
NSw4ICsyMzUsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9uZXdfYXJyYXkpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfYXJyYXlf
d2l0aF9zaXplKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5X2J1ZmZlcikKLSAgICAg
ICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICAgICAgREVGSU5FX09QKG9wX25ld19m
dW5jKQorICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2NhcHR1cmVkX2Z1bmMpCiAgICAgICAgIERF
RklORV9PUChvcF9uZXdfZnVuY19leHApCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfb2JqZWN0
KQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X3JlZ2V4cCkKQEAgLTM2OSw2ICszNjksNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfY29uc3RydWN0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfdG9fdGhp
cykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NyZWF0ZV90aGlzKQorICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfZGl2KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZXEpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfY2FsbGVlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NjMsNiArNDYzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxf
dmFyYXJncyhJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfY2FwdHVyZWRfbW92
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKik7CkBAIC01MTUsNiArNTE2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9z
aXplKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfYXJyYXlfYnVmZmVy
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVjdGlv
biopOworICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX25ld19mdW5jX2V4cChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfbmV3X3JlZ2V4cChJbnN0cnVjdGlvbiopOwpAQCAtNTU5LDYgKzU2MSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY29uc3RydWN0KEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3RvX3RoaXMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDEyICs1NSwzMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAg
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgaW50IHNy
YyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKLSAgICAvLyBVc2Ugc2ltcGxl
ciBhcHByb2FjaCwgc2luY2UgdGhlIERGRyB0aGlua3MgdGhhdCB0aGUgbGFzdCByZXN1bHQgcmVn
aXN0ZXIKLSAgICAvLyBpcyBhbHdheXMgc2V0IHRvIHRoZSBkZXN0aW5hdGlvbiBvbiBldmVyeSBv
cGVyYXRpb24uCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2NhcHR1
cmVkX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihz
cmMsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDAsIHJlZ1QxLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51LndhdGNocG9pbnRTZXQ7CisgICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09
IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9
CisKIHZvaWQgSklUOjplbWl0X29wX2VuZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewogICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKQEAgLTExODAsNiArMTE5OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuYyhJ
bnN0cnVjdGlvbiogCiAgICAgICAgIGxhenlKdW1wLmxpbmsodGhpcyk7CiB9CiAKK3ZvaWQgSklU
OjplbWl0X29wX25ld19jYXB0dXJlZF9mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTU5OTQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksNyBAQCBfbGxpbnRfb3BfY2FwdHVyZWRf
bW92OgogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKICAgICBzdG9yZWkg
dDIsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQogICAgIHN0b3JlaSB0MywgUGF5bG9hZE9mZnNldFtj
ZnIsIHQwLCA4XQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRf
b3Bfbm90OgpAQCAtMTY3NCwxMiArMTY3NCw3IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogX2xs
aW50X29wX25ld19jYXB0dXJlZF9mdW5jOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBidGl6
IDEyW1BDXSwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCi0gICAgbG9hZGkgNFtQQ10sIHQx
Ci0gICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BOZXdD
YXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6CiAgICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25l
OgogICAgIGRpc3BhdGNoKDQpCiAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTk0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC00MTgsMTMgKzQxOCwzOCBAQCBfbGxpbnRfb3BfbW92OgogICAg
IGRpc3BhdGNoKDMpCiAKIAorbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwg
c2xvdykKKyAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2Ny
YXRjaAorICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKKyAgICBiaW5lcSBz
Y3JhdGNoLCBDbGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKKyAgICBzdG9yZXEgdmFsdWUsIFZh
cmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAgICBzdG9yZWIgSXNX
YXRjaGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQorICAgIGptcCAuZG9u
ZQorCisub3ZlcndyaXRlOgorICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6
bV9pbmZlcnJlZFZhbHVlW3NldF0sIC5kb25lCisgICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50
U2V0OjptX3NldElzTm90RW1wdHlbc2V0XSwgc2xvdworICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCisgICAgc3RvcmViIElzSW52YWxpZGF0
ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisKKy5kb25lOiAgICAKK2Vu
ZAorCiBfbGxpbnRfb3BfY2FwdHVyZWRfbW92OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQorICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDMsIHQwKQorICAgIGJ0cHogdDAsIC5vcENhcHR1cmVkTW92UmVhZHkKKyAgICBu
b3RpZnlXcml0ZSh0MCwgdDIsIHQxLCAub3BDYXB0dXJlZE1vdlNsb3cpCisub3BDYXB0dXJlZE1v
dlJlYWR5OgorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkKICAgICBzdG9yZXEgdDIs
IFtjZnIsIHQwLCA4XQotICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goNCkKKworLm9wQ2Fw
dHVyZWRNb3ZTbG93OgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NhcHR1cmVkX21vdikK
KyAgICBkaXNwYXRjaCg0KQogCiAKIF9sbGludF9vcF9ub3Q6CkBAIC0xNTI1LDEzICsxNTUwLDcg
QEAgX2xsaW50X29wX25ld19mdW5jOgogCiBfbGxpbnRfb3BfbmV3X2NhcHR1cmVkX2Z1bmM6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKLSAg
ICBidGl6IHQyLCAub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQKLSAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMSwgdDEpCi0gICAgYnRxbnogW2NmciwgdDEsIDhdLCAub3BOZXdDYXB0dXJlZEZ1
bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAgY2FsbFNsb3dQYXRoKF9s
bGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25lOgorICAgIGNh
bGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQogICAgIGRpc3BhdGNoKDQp
CiAKIApAQCAtMTk3MywyMyArMTk5Miw2IEBAIG1hY3JvIHB1dFByb3BlcnR5KCkKICAgICBzdG9y
ZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyKQogZW5kCiAKLW1hY3JvIG5vdGlm
eVdyaXRlKHNldCwgdmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRj
aHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52
YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEgc2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3Zl
cndyaXRlCi0gICAgc3RvcmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJy
ZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzV2F0Y2hlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0
OjptX3N0YXRlW3NldF0KLSAgICBqbXAgLmRvbmUKLQotLm92ZXJ3cml0ZToKLSAgICBicWVxIHZh
bHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdLCAuZG9uZQot
ICAgIGJ0Ym56IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNs
b3cKLSAgICBzdG9yZXEgMCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVb
c2V0XQotICAgIHN0b3JlYiBJc0ludmFsaWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1f
c3RhdGVbc2V0XQotCi0uZG9uZTogICAgCi1lbmQKLQogbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MCwgdDEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw2
ICsyNDQsMjggQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvX3RoaXMpCiAgICAgUkVUVVJO
KHYxLnRvVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkgPyBTdHJp
Y3RNb2RlIDogTm90U3RyaWN0TW9kZSkpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y2FwdHVyZWRfbW92KQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IE9QX0Mo
MikuanNWYWx1ZSgpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzNd
LnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2YWx1ZSk7CisgICAg
UkVUVVJOKHZhbHVlKTsKK30KKworU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25ld19jYXB0dXJl
ZF9mdW5jKQoreworICAgIEJFR0lOKCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVj
LT5jb2RlQmxvY2soKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0
aW9uQ29kZQorICAgICAgICAgICB8fCAhY29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkK
KyAgICAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihjb2RlQmxvY2stPmFjdGl2YXRpb25SZWdp
c3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0
aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKHBjWzJdLnUub3BlcmFuZCks
IGV4ZWMtPnNjb3BlKCkpOworICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBj
WzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2YWx1ZSk7Cisg
ICAgUkVUVVJOKHZhbHVlKTsKK30KKwogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX25vdCkKIHsK
ICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNiAr
MTY1LDQwIEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2EKIFNMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpOwogU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9nZXRfY2FsbGVlKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfdG9fdGhpcyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhcHR1cmVk
X21vdik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5j
KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbm90KTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9u
ZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJpY3RlcSk7CitTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25zdHJpY3RlcSk7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2xlc3MpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9sZXNz
ZXEpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ncmVhdGVyKTsKK1NMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfZ3JlYXRlcmVxKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfaW5jKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZGVjKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG9fbnVtYmVyKTsKK1NMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfbmVnYXRlKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfYWRkKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbXVsKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfc3ViKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChz
bG93X3BhdGhfZGl2KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbW9kKTsKK1NM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbHNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfcnNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
dXJzaGlmdCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2JpdGFuZCk7CitTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2JpdG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfYml0eG9yKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdHlw
ZW9mKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNfb2JqZWN0KTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfaXNfZnVuY3Rpb24pOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF9pbik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2Rl
bF9ieV92YWwpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdHJjYXQpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOworU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOwogU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9lcSk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db25zdGFudE1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBDb25zdGFudE1vZGVfaAorI2RlZmluZSBDb25zdGFudE1vZGVfaAorCitu
YW1lc3BhY2UgSlNDIHsKKworZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1Zhcmlh
YmxlIH07CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29uc3RhbnRNb2RlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5l
IEpTR2xvYmFsT2JqZWN0X2gKIAogI2luY2x1ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIK
KyNpbmNsdWRlICJDb25zdGFudE1vZGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKQEAg
LTI4OCw3ICsyODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGluaXQodGhpc1ZhbHVlKTsKICAg
ICB9CiAKLSAgICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsK
ICAgICBzdHJ1Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyOwog
ICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUs
NyArNjUsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBvcCA9
IFJlc29sdmVPcChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyks
IGRlcHRoLCAwLCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAg
IG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIGVudHJ5LndhdGNocG9pbnRTZXQoKSwgZW50cnku
Z2V0SW5kZXgoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZp
c2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgSlNWYWx1ZSBTeW1ib2xUYWJs
ZUVudHJ5OjppbmZlcnJlZFZhbHVlKAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9X
YXRjaCgpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwotICAgIEFTU0VSVCgh
ZW50cnktPm1fd2F0Y2hwb2ludHMpOworICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKKyAg
ICAgICAgcmV0dXJuOwogICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFZh
cmlhYmxlV2F0Y2hwb2ludFNldCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218264</attachid>
            <date>2013-12-02 22:05:06 -0800</date>
            <delta_ts>2013-12-03 15:44:05 -0800</delta_ts>
            <desc>and now, with tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53119</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDYgKzc2OCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+
dS5vcGVyYW5kOwogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FwdHVyZWRfbW92Iik7CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
JXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwor
ICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3Bfbm90OiB7CkBAIC0xMjI0LDkgKzEyMjUsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6
IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAg
aW50IGYwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBpbnQgc2hvdWxkQ2hlY2sg
PSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgIm5ld19jYXB0dXJlZF9mdW5jIik7Ci0gICAgICAgICAgICBv
dXQucHJpbnRmKCIlcywgZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hv
dWxkQ2hlY2sgPyAiPENoZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOworICAgICAgICAgICAgb3V0
LnByaW50ZigiJXMsIGYlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCk7CisgICAgICAg
ICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBv
cF9uZXdfZnVuY19leHA6IHsKQEAgLTE1NTEsMTAgKzE1NTIsMTMgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVmZXJy
ZWQoKSk7CiAKKyAgICBib29sIGRpZENsb25lU3ltYm9sVGFibGUgPSBmYWxzZTsKKyAgICAKICAg
ICBpZiAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCkpIHsKLSAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIHN5
bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkKKyAgICAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVu
Y3Rpb25Db2RlICYmIHN5bWJvbFRhYmxlLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICAgICAg
bV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xU
YWJsZS0+Y2xvbmUoKm1fdm0pKTsKLSAgICAgICAgZWxzZQorICAgICAgICAgICAgZGlkQ2xvbmVT
eW1ib2xUYWJsZSA9IHRydWU7CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9zeW1ib2xU
YWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1ib2xUYWJsZSk7CiAg
ICAgfQogICAgIApAQCAtMTgyMCwxMSArMTgyNCwyNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3Bl
cmFuZCA9IFJlc29sdmVNb2RlQW5kVHlwZShtb2RlQW5kVHlwZS5tb2RlKCksIG9wLnR5cGUpLm9w
ZXJhbmQoKTsKICAgICAgICAgICAgIGlmIChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBl
ID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAgaW5z
dHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0OworICAg
ICAgICAgICAgZWxzZSBpZiAob3AudHlwZSA9PSBDbG9zdXJlVmFyIHx8IG9wLnR5cGUgPT0gQ2xv
c3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgICAgICAgICAgb3Aud2F0Y2hw
b2ludFNldC0+aW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2
bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJh
bmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVu
YzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUudWlkOworICAg
ICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2Nr
ZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRhYmxlLT5lbmQo
bG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaCgpOworICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1
ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtOTAsMTYgKzkwLDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgSW5zdHJ1Y3Rpb24o
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRlckZ1bmMgPSBn
ZXR0ZXJGdW5jOyB9CiAgICAgICAgIAogICAgIEluc3RydWN0aW9uKExMSW50Q2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8pIHsgdS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87IH0KLSAgICAg
ICAgCiAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUucHJvZmlsZSA9
IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheVByb2ZpbGUqIHByb2ZpbGUpIHsgdS5h
cnJheVByb2ZpbGUgPSBwcm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBwcm9maWxlOyB9
CiAgICAgSW5zdHJ1Y3Rpb24oT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIHByb2ZpbGUpIHsgdS5v
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1
Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsgdS5yZWdpc3Rl
clBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24o
U3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKSB7IHUuc3BlY2lhbFBvaW50ZXIgPSBwb2ludGVyOyB9
Ci0gICAgICAgIAorICAgIEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVp
ZDsgfQogICAgIEluc3RydWN0aW9uKGJvb2wqIHByZWRpY2F0ZVBvaW50ZXIpIHsgdS5wcmVkaWNh
dGVQb2ludGVyID0gcHJlZGljYXRlUG9pbnRlcjsgfQogCiAgICAgdW5pb24gewpAQCAtMTEyLDYg
KzEwOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIFNwZWNpYWw6OlBvaW50ZXIg
c3BlY2lhbFBvaW50ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGdldHRl
ckZ1bmM7CiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87CisgICAgICAg
IFN0cmluZ0ltcGwqIHVpZDsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlOwogICAgICAg
ICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1KSBcCiAgICAg
bWFjcm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykgXAotICAgIG1h
Y3JvKG9wX2NhcHR1cmVkX21vdiwgMykgXAorICAgIG1hY3JvKG9wX2NhcHR1cmVkX21vdiwgNCkg
XAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAgICBtYWNybyhvcF9lcSwgNCkgXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjksOSArMjI5LDEx
IEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZEluc3RydWN0aW9u
KCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihPcGNvZGVJRCBv
cGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3RydWN0aW9uKGlu
dCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICBVbmxpbmtlZEluc3RydWN0
aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVpZDsgfQogICAgIHVuaW9uIHsKICAgICAg
ICAgT3Bjb2RlSUQgb3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7CisgICAgICAgIFN0
cmluZ0ltcGwqIHVpZDsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCShyZXZpc2lv
biAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRj
aHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKCEhbV9pbmZl
cnJlZFZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKICAgICAg
ICAgbV9pbmZlcnJlZFZhbHVlID0gSlNWYWx1ZSgpOwotICAgICAgICBmaXJlQWxsKCk7CisgICAg
ICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsx
MTUsMTMgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJlQWxsKCk7CiAg
ICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgeworICAgICAgICBpZiAoc3Rh
dGUoKSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAgICAgIG1fc3Rh
dGUgPSBJc0ludmFsaWRhdGVkOworICAgIH0KIAogICAgIGludDhfdCogYWRkcmVzc09mU3RhdGUo
KSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RFbXB0
eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE5ICsxMTUsMzEgQEAg
UGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIHJldHVybiBQYXJz
ZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29uc3RhbnQsIFJl
Z2lzdGVySUQqJiByMCkKK2Jvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcigKKyAgICBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwgV2F0Y2hNb2Rl
IHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIEFTU0VSVChzdGF0aWNfY2FzdDxz
aXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUo
KSk7CisgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS5t
X2xvY2spOwogICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKG1fY2FsbGVl
UmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRy
eShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBSZWFkT25seSA6
IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJs
ZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCisg
ICAgCisgICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgeworICAgICAgICB3aGlsZSAo
bV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVC
bG9jay0+bV9udW1WYXJzKSkKKyAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFibGVzLmFwcGVu
ZChudWxscHRyKTsKKyAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5kKGlkZW50Lmlt
cGwoKSk7CisgICAgfQorICAgIAogICAgIHIwID0gYWRkVmFyKCk7CisgICAgCisgICAgQVNTRVJU
KHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2NvZGVC
bG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkpOworICAgIAog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzYsNyArMjQ4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKGZ1bmN0aW9uQm9keS0+dXNlc0Fy
Z3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVpZnkgYXJndW1l
bnRzIG9iamVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lz
dGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9kaWZpZWQgYnkg
dXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlciA9IGFkZFZh
cihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBmYWxzZSk7IC8vIENhbiBiZSBjaGFuZ2VkIGJ5
IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KKyAgICAgICAgUmVnaXN0ZXJJRCogYXJndW1lbnRz
UmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNWYXJpYWJsZSwg
Tm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRvICdhcmd1bWVu
dHMnLgogCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5IGhhcmQtY29k
aW5nIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1bWVudHMnIHZh
bHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0b3JpbmcKQEAg
LTMwNywxMyArMzE5LDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihW
TSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlv
blJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
bV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdE5ld0Z1
bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CisgICAg
ICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgSXNX
YXRjaGFibGUpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFja1tpXS5maXJz
dDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkKLSAgICAg
ICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9u
U3RhY2tzOjpJc0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsICh2YXJT
dGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkgPyBJc0NvbnN0
YW50IDogSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAgfQogICAgIGJv
b2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0
aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsKQEAg
LTMzMSw3ICszNDMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0m
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlkZW50KCk7CiAg
ICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpIHsKICAgICAgICAgICAg
IG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgZmFsc2UpOworICAgICAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsK
ICAgICAgICAgICAgIC8vIERvbid0IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgb3ZlcnJp
ZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMgd291bGQgY29t
cGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgICAg
ICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFt
ZXMoKS5hcmd1bWVudHMpCkBAIC0zNDYsNyArMzU4LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5
dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyU3RhY2su
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgaWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50KSkK
LSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRp
b25TdGFja3M6OklzQ29uc3RhbnQpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50LCAodmFyU3Rh
Y2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8gSXNDb25zdGFu
dCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZENh
cHR1cmVBbGxUaGVUaGluZ3MpCkBAIC00NTcsNiArNDY5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJbml0TAogewogICAgIGVtaXRPcGNvZGUob3BfaW5pdF9sYXp5X3Jl
Zyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7CisgICAgQVNTRVJU
KCF3YXRjaGFibGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKICAgICByZXR1cm4gcmVnOwogfQog
CkBAIC0xMDA3LDYgKzEwMjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE1vdmUoCiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVkID8gb3BfY2Fw
dHVyZWRfbW92IDogb3BfbW92KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsKKyAgICBpZiAo
Y2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCkKKyAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogICAgIHJldHVybiBkc3Q7CiB9CiAK
QEAgLTE1NzksNyArMTU5NCwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dE5ld0Z1CiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVkID8gb3BfbmV3
X2NhcHR1cmVkX2Z1bmMgOiBvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4KTsKLSAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOworICAgIGlmIChjYXB0dXJlTW9kZSA9
PSBJc0NhcHR1cmVkKSB7CisgICAgICAgIEFTU0VSVCghZG9OdWxsQ2hlY2spOworICAgICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRleCgpKSk7Cisg
ICAgfSBlbHNlCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb051bGxDaGVjayk7CiAg
ICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTYyMSw2ICsxNjQwLDcgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSQogCiAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfYXJn
dW1lbnRzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3VtZW50
c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgIEFTU0VSVCghd2F0Y2hhYmxlVmFyaWFibGUobV9j
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpKTsKIH0KIAogdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3LDE1ICs0OTcs
MTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG5ld1JlZ2lzdGVyKCk7
CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0IHRvIHRoZSBuYW1lIGlk
ZW50IGluIHN5bWJvbFRhYmxlKCkuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcihjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50KQorICAgICAgICBlbnVtIFdhdGNoTW9k
ZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKKyAgICAgICAgUmVnaXN0ZXJJRCogYWRk
VmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3RhbnRNb2RlLCBX
YXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdpc3RlcklEKiBs
b2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgaXNDb25zdGFudCwgbG9jYWwpOworICAg
ICAgICAgICAgYWRkVmFyKGlkZW50LCBjb25zdGFudE1vZGUsIHdhdGNoTW9kZSwgbG9jYWwpOwog
ICAgICAgICAgICAgcmV0dXJuIGxvY2FsOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGl0dG8u
IFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFsc2UgaWYgYSBw
cmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9vbCBhZGRWYXIo
Y29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComKTsKKyAgICAg
ICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwgV2F0Y2hNb2Rl
LCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBhbm9ueW1vdXMg
dmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5bWJvbFRhYmxl
KCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC01OTAsNiArNTkxLDE2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5lY2Vzc2FyeSgp
OwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeShSZWdp
c3RlcklEKik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiB3YXRjaGFibGVWYXJpYWJs
ZShpbnQgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyhvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50
b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZhcmlhYmxlc1tyZWcu
dG9Mb2NhbCgpXTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgVmVjdG9yPFVubGlua2Vk
SW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0aW9uczsKIAog
ICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9va3M7CkBAIC02MDksNiArNjIwLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlvblJlZ2lzdGVy
OwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlcjsKICAgICAgICAgUmVn
aXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICAgICAgVmVjdG9yPFN0cmluZ0lt
cGwqLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxS
ZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CiAgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1
OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDI0IEBAIHByaXZhdGU6CiAgICAgTm9kZSog
Z2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAgICB1bnNpZ25l
ZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOworCisgICAgICAgIGlmIChsb2NhbCA8IG1fbG9j
YWxXYXRjaHBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IG1fbG9jYWxXYXRjaHBvaW50c1tsb2NhbF0pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKG1f
Y29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQgc3RhbmRwb2lu
dC4gV2Ugd291bGRuJ3QgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0byBkbyB0aGlz
IGZvciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdyZSBkZWFsaW5n
CisgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBGb3IgbW9zdCBs
b2NhbHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCisgICAgICAgICAgICAgICAg
ICAgIC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcgSVIgd2hlcmV2
ZXIgdGhlcmUgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIHVzZXMgaW4g
Ynl0ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8gdGhpcy4gQnV0
CisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdlIGRvbid0IG5l
ZWQgdG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCisgICAgICAgICAgICAgICAgICAgIC8v
IGxvY2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9yIGNhcHR1cmVk
IGxvY2Fscy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29uc3RhbnQodmFs
dWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxv
Y2FsKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlzQ2FwdHVyZWQo
b3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKQEAgLTY4NCw2ICs3MDIsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAg
fQogICAgIAorICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBjZWxsQ29u
c3RhbnQodmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudEZvclZh
bHVlKHZhbHVlLCAwKTsKKyAgICB9CisgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVD
YWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tUb3AtPm1faW5s
aW5lQ2FsbEZyYW1lOwpAQCAtMTAwMCw2ICsxMDI1LDggQEAgcHJpdmF0ZToKIAogICAgIEhhc2hN
YXA8Q29uc3RhbnRCdWZmZXJLZXksIHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVyQ2FjaGU7CiAg
ICAgCisgICAgVmVjdG9yPFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIDE2PiBtX2xvY2FsV2F0Y2hw
b2ludHM7CisgICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAgICAgICBCeXRl
Q29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC0yMTQ2LDEyICsyMTcz
LDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoQnJlYWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9k
ZWJ1Zyk7CiAjZW5kaWYKLSAgICAgICAgY2FzZSBvcF9tb3Y6Ci0gICAgICAgIGNhc2Ugb3BfY2Fw
dHVyZWRfbW92OiB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7CiAgICAgICAgICAgICBOb2RlKiBv
cCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OiB7CisgICAg
ICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCog
c2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8oc2V0KSwgb3ApOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
b3ApOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FwdHVyZWRfbW92KTsKKyAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgogICAgICAgICAgICAgYWRk
VG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CkBAIC0zMDI3LDcgKzMwNjEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZTogewogICAgICAgICAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9
IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCkudHlwZSgpOwpAQCAtMzA3OCwxNSArMzExMiwyNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8o
d2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxD
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldEpTQ29uc3Rh
bnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0aXZhdGlvbiA9
IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5vZGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCk7
CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRh
YmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVy
YXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCB1aWQpOworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOworICAgICAg
ICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPSBpdGVy
LT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3YXRjaHBv
aW50U2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHdh
dGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRT
ZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3VyZVZhciwgT3BJ
bmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAogICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5vZGUpKSk7CkBAIC0zMjI3
LDggKzMyNzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAgICAgIGNhc2Ug
b3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogewogICAg
ICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7CiAgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdGdW5jdGlvbk5vQ2hlY2ss
IE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwpAQCAtMzI0Miw2ICsz
Mjg3LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgICAgIE5vZGUq
IGZ1bmN0aW9uID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBOZXdGdW5jdGlvbk5vQ2hl
Y2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUs
IE9wSW5mbyhzZXQpLCBmdW5jdGlvbik7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBmdW5jdGlvbik7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwgT3BJbmZvKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkBAIC0zNjExLDYgKzM2NjUsMjIgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3RydWN0aW9uLgog
ICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAgIGlmIChtX2NvZGVCbG9jay0+
Y2FwdHVyZUNvdW50KCkpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbV9j
b2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVy
YXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7CisgICAgICAgIFN5bWJvbFRh
YmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2VyKTsKKyAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOworICAgICAgICAg
ICAgaWYgKCFzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzaXpl
X3QgaW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3RlcihpdGVyLT52YWx1
ZS5nZXRJbmRleCgpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgd2hpbGUgKG1fbG9jYWxXYXRj
aHBvaW50cy5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgICAgICAgICAgbV9sb2NhbFdhdGNocG9p
bnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBvaW50c1tpbmRl
eF0gPSBzZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5saW5lU3RhY2tFbnRyeSBp
bmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9wcm9maWxlZEJs
b2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCksCiAgICAgICAg
IG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIz
LDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvcgog
ICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWlyZWRSZWdpc3Rl
ckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogR3JhcGg6
OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFwaDo6dHJ5R2V0
QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0ganNEeW5h
bWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkp
OworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJz
KE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0gdHJ5R2V0QWN0
aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVu
c2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAK
KyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAgIFdyaXRlQmFy
cmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCiAgICAgVk0m
IG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTk5NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQp
CiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBERUZJTkVfT1Ao
b3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3Bf
bmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5Q
YXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAgREVGSU5FX09Q
KG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfYXJyYXlf
YnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAgICAgICBERUZJ
TkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2FwdHVyZWRfZnVu
YykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAgREVGSU5FX09Q
KG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhwKQpAQCAtMzY5
LDYgKzM2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9jb25zdHJ1Y3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF90b190aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY3JlYXRlX3Ro
aXMpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jYXB0dXJlZF9tb3YpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9jYWxsZWUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhdGNo
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rpb24qKTsKQEAg
LTUxNSw2ICs1MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX25l
d19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25l
d19hcnJheV9idWZmZXIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX25ld19m
dW5jKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfY2FwdHVyZWRfZnVu
YyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKik7CkBAIC01NTks
NiArNTYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2Fs
bChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbF92YXJh
cmdzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworICAg
ICAgICB2b2lkIGVtaXRTbG93X29wX2NhcHR1cmVkX21vdihJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jb25z
dHJ1Y3QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAg
ICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jcmVhdGVf
dGhpcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTU5
OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVj
dGlvbiogY3VycmUKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKIAotICAg
IC8vIFVzZSBzaW1wbGVyIGFwcHJvYWNoLCBzaW5jZSB0aGUgREZHIHRoaW5rcyB0aGF0IHRoZSBs
YXN0IHJlc3VsdCByZWdpc3RlcgotICAgIC8vIGlzIGFsd2F5cyBzZXQgdG8gdGhlIGRlc3RpbmF0
aW9uIG9uIGV2ZXJ5IG9wZXJhdGlvbi4KICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywg
cmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKIH0KIAordm9pZCBKSVQ6
OmVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVn
VDEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhcHR1cmVk
X21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldDsKKyAgICBpZiAoIXNldCB8fCBz
ZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2NhcHR1cmVkX21vdik7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAtMTE4MCw2ICsxMTk4LDEyIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19mdW5jKEluc3RydWN0aW9uKiAKICAgICAgICAgbGF6eUp1bXAubGluayh0aGlzKTsK
IH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKTsKKyAg
ICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19l
eHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZp
c2lvbiAxNTk5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIF9sbGlu
dF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQz
KQogICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0W2NmciwgdDAsIDhdCiAgICAgc3RvcmVpIHQzLCBQ
YXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRjaCg0
KQogCiAKIF9sbGludF9vcF9ub3Q6CkBAIC0xNjc0LDEyICsxNjc0LDcgQEAgX2xsaW50X29wX25l
d19mdW5jOgogCiBfbGxpbnRfb3BfbmV3X2NhcHR1cmVkX2Z1bmM6CiAgICAgdHJhY2VFeGVjdXRp
b24oKQotICAgIGJ0aXogMTJbUENdLCAub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQKLSAgICBs
b2FkaSA0W1BDXSwgdDEKLSAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MSwgOF0sIEVtcHR5VmFs
dWVUYWcsIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tl
ZDoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfZnVuYykKLS5vcE5ld0Nh
cHR1cmVkRnVuY0RvbmU6CiAgICAgZGlzcGF0Y2goNCkKIAogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2
aXNpb24gMTU5OTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQxOCwxMyArNDE4LDM4IEBAIF9sbGlu
dF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCittYWNybyBub3RpZnlXcml0ZShzZXQsIHZh
bHVlLCBzY3JhdGNoLCBzbG93KQorICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9z
dGF0ZVtzZXRdLCBzY3JhdGNoCisgICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9u
ZQorICAgIGJpbmVxIHNjcmF0Y2gsIENsZWFyV2F0Y2hwb2ludCwgLm92ZXJ3cml0ZQorICAgIHN0
b3JlcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XQor
ICAgIHN0b3JlYiBJc1dhdGNoZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRd
CisgICAgam1wIC5kb25lCisKKy5vdmVyd3JpdGU6CisgICAgYnFlcSB2YWx1ZSwgVmFyaWFibGVX
YXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XSwgLmRvbmUKKyAgICBidGJueiBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1fc2V0SXNOb3RFbXB0eVtzZXRdLCBzbG93CisgICAgc3RvcmVx
IDAsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAgICBzdG9y
ZWIgSXNJbnZhbGlkYXRlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0KKwor
LmRvbmU6ICAgIAorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJhY2VFeGVj
dXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKLSAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCisg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCisgICAgYnRweiB0MCwgLm9wQ2FwdHVyZWRN
b3ZSZWFkeQorICAgIG5vdGlmeVdyaXRlKHQwLCB0MiwgdDEsIC5vcENhcHR1cmVkTW92U2xvdykK
Ky5vcENhcHR1cmVkTW92UmVhZHk6CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQog
ICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNwYXRj
aCg0KQorCisub3BDYXB0dXJlZE1vdlNsb3c6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhf
Y2FwdHVyZWRfbW92KQorICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX25vdDoKQEAgLTE1
MjUsMTMgKzE1NTAsNyBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIF9sbGludF9vcF9uZXdfY2Fw
dHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDMsIHQyKQotICAgIGJ0aXogdDIsIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZAotICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MSwgOF0sIC5v
cE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoKLSAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfZnVuYykKLS5vcE5ld0NhcHR1cmVkRnVu
Y0RvbmU6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCiAg
ICAgZGlzcGF0Y2goNCkKIAogCkBAIC0xOTczLDIzICsxOTkyLDYgQEAgbWFjcm8gcHV0UHJvcGVy
dHkoKQogICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIpCiBlbmQK
IAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2Fk
YiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEg
c2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSBzY3JhdGNoLCBDbGVhcldh
dGNocG9pbnQsIC5vdmVyd3JpdGUKLSAgICBzdG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3ZlcndyaXRl
OgotICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVl
W3NldF0sIC5kb25lCi0gICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3NldElzTm90
RW1wdHlbc2V0XSwgc2xvdwotICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1f
aW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzSW52YWxpZGF0ZWQsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCi0KLS5kb25lOiAgICAKLWVuZAotCiBtYWNybyBwdXRH
bG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDYgKzI0NCwyOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhp
cykKICAgICBSRVRVUk4odjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pc1N0cmlj
dE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKK1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVl
IHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdyaXRl
KHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCitTTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfbmV3X2NhcHR1cmVkX2Z1bmMpCit7CisgICAgQkVHSU4oKTsKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2stPmNvZGVU
eXBlKCkgIT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgIHx8ICFjb2RlQmxvY2stPm5lZWRzRnVs
bFNjb3BlQ2hhaW4oKQorICAgICAgICAgICB8fCBleGVjLT51bmNoZWNrZWRSKGNvZGVCbG9jay0+
YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSB2
YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRlY2wocGNb
Ml0udS5vcGVyYW5kKSwgZXhlYy0+c2NvcGUoKSk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5vdGlmeVdy
aXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCiBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTU5OTQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw2ICsxNjUsNDAgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfYQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhpcyk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9jYWxsZWUpOwogU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY2FwdHVyZWRfbW92KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmV3
X2NhcHR1cmVkX2Z1bmMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ub3QpOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9lcSk7CitTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX25lcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3N0cmlj
dGVxKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbnN0cmljdGVxKTsKK1NMT1df
UEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbGVzcyk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0wo
c2xvd19wYXRoX2xlc3NlcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dyZWF0
ZXIpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ncmVhdGVyZXEpOworU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pbmMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9kZWMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19udW1iZXIp
OworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpOworU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9hZGQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9tdWwpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdWIpOworU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kaXYpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9tb2QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9sc2hpZnQpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yc2hpZnQpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF91cnNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Yml0YW5kKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYml0b3IpOworU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9iaXR4b3IpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF90eXBlb2YpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pc19v
YmplY3QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pc19mdW5jdGlvbik7CitT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3N0cmNhdCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7
CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhcHR1cmVkX21vdik7CiBTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25vdCk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2VxKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmVxKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RhbnRNb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbnN0YW50TW9kZV9oCisjZGVmaW5lIENvbnN0
YW50TW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIENvbnN0YW50TW9kZSB7IElzQ29u
c3RhbnQsIElzVmFyaWFibGUgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBD
b25zdGFudE1vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYgKzIz
LDcgQEAKICNkZWZpbmUgSlNHbG9iYWxPYmplY3RfaAogCiAjaW5jbHVkZSAiQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkNvbnN0YW50TW9kZS5oIgogI2luY2x1ZGUgIkpTQXJy
YXkuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlND
bGFzc1JlZi5oIgpAQCAtMjg4LDcgKzI4OSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAgaW5pdCh0
aGlzVmFsdWUpOwogICAgIH0KIAotICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25zdGFudCwg
SXNWYXJpYWJsZSB9OwogICAgIHN0cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBpbnQgcmVn
aXN0ZXJOdW1iZXI7CiAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE1OTk0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2Vz
cyhFeGVjU3QKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkpIHsKLSAg
ICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIDAsIGVudHJ5LmdldEluZGV4KCkp
OworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoQ2xvc3VyZVZhciwgbmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgYWN0aXZhdGlvbiwgZW50cnkud2F0Y2hwb2lu
dFNldCgpLCBlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5jcHAJKHJldmlzaW9uIDE1OTk0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBAQCBKU1Zh
bHVlIFN5bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUoCiB2b2lkIFN5bWJvbFRhYmxlRW50
cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAgICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7
Ci0gICAgQVNTRVJUKCFlbnRyeS0+bV93YXRjaHBvaW50cyk7CisgICAgaWYgKGVudHJ5LT5tX3dh
dGNocG9pbnRzKQorICAgICAgICByZXR1cm47CiAgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBh
ZG9wdFJlZihuZXcgVmFyaWFibGVXYXRjaHBvaW50U2V0KCkpOwogfQogCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLW1vdi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tbW92CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3Ytbm8taW5saW5lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3Vy
ZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5v
LWlubGluZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tbW92LW5vLWlubGluZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
di1uby1pbmxpbmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tbW92LW5vLWlubGluZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1t
b3YuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLW1vdi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1tb3YuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1
cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNj
b3BlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZQorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGlu
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZl
ci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1
dC10by1zY29wZS1uby1pbmxpbmUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUtbm8taW5saW5lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1u
by1pbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cHV0LXRvLXNjb3BlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1j
b25zdC10aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tcmVlbnRlci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlu
bGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tcmVlbnRlci1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1u
by1pbmxpbmUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LXJlZW50ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVy
LWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLW1vdi1uby1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGlu
ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACisoZnVuY3Rpb24oKXsKKyAgICB2
YXIgYSA9IDQyOworICAgIHZhciBiID0gMjM7CisgICAgdmFyIGMgPSA4NDsKKyAgICB2YXIgZCA9
IDEzOworICAgIHZhciBlID0gOTA7CisgICAgdmFyIGYgPSAzNDsKKyAgICB2YXIgZyA9IDUyOwor
ICAgIAorICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQg
KyBlICsgZiArIGc7CisgICAgfQorICAgIAorICAgIG5vSW5saW5lKGZvbyk7CisgICAgCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyArIDkwICsg
MzQgKyA1MikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgYSA9IDE7CisgICAgYiA9IDI7CisgICAgYyA9IDM7CisgICAg
ZCA9IDQ7CisgICAgZSA9IDU7CisgICAgZiA9IDY7CisgICAgZyA9IDc7CisgICAgCisgICAgdmFy
IHJlc3VsdCA9IGZvbygpOworICAgIGlmIChyZXN1bHQgIT0gMSArIDIgKyAzICsgNCArIDUgKyA2
ICsgNykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSko
KTsKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLW1vdi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3Vy
ZS1jb25zdC10aGVuLW1vdi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACisoZnVu
Y3Rpb24oKXsKKyAgICB2YXIgYSA9IDQyOworICAgIHZhciBiID0gMjM7CisgICAgdmFyIGMgPSA4
NDsKKyAgICB2YXIgZCA9IDEzOworICAgIHZhciBlID0gOTA7CisgICAgdmFyIGYgPSAzNDsKKyAg
ICB2YXIgZyA9IDUyOworICAgIAorICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgcmV0dXJu
IGEgKyBiICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgfQorICAgIAorICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIGEgPSAxOworICAgIGIgPSAyOworICAgIGMgPSAzOworICAgIGQgPSA0OworICAg
IGUgPSA1OworICAgIGYgPSA2OworICAgIGcgPSA3OworICAgIAorICAgIHZhciByZXN1bHQgPSBm
b28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUtbm8taW5saW5lLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1p
bmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAordmFyIHRoaW5neSA9IChm
dW5jdGlvbigpeworICAgIHZhciBhID0gNDI7CisgICAgdmFyIGIgPSAyMzsKKyAgICB2YXIgYyA9
IDg0OworICAgIHZhciBkID0gMTM7CisgICAgdmFyIGUgPSA5MDsKKyAgICB2YXIgZiA9IDM0Owor
ICAgIHZhciBnID0gNTI7CisgICAgcmV0dXJuIHsKKyAgICAgICAgZm9vOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOworICAgICAgICB9
LAorICAgICAgICBiYXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYSA9IDE7CisgICAgICAg
ICAgICBiID0gMjsKKyAgICAgICAgICAgIGMgPSAzOworICAgICAgICAgICAgZCA9IDQ7CisgICAg
ICAgICAgICBlID0gNTsKKyAgICAgICAgICAgIGYgPSA2OworICAgICAgICAgICAgZyA9IDc7Cisg
ICAgICAgIH0KKyAgICB9OworfSkoKTsKKworbm9JbmxpbmUodGhpbmd5LmZvbyk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSB0aGluZ3ku
Zm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyArIDkwICsgMzQgKyA1
MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit0
aGluZ3kuYmFyKCk7Cit2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOworaWYgKHJlc3VsdCAhPSAx
ICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LXB1dC10by1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAordmFyIHRoaW5neSA9IChmdW5jdGlvbigpewor
ICAgIHZhciBhID0gNDI7CisgICAgdmFyIGIgPSAyMzsKKyAgICB2YXIgYyA9IDg0OworICAgIHZh
ciBkID0gMTM7CisgICAgdmFyIGUgPSA5MDsKKyAgICB2YXIgZiA9IDM0OworICAgIHZhciBnID0g
NTI7CisgICAgcmV0dXJuIHsKKyAgICAgICAgZm9vOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOworICAgICAgICB9LAorICAgICAgICBi
YXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYSA9IDE7CisgICAgICAgICAgICBiID0gMjsK
KyAgICAgICAgICAgIGMgPSAzOworICAgICAgICAgICAgZCA9IDQ7CisgICAgICAgICAgICBlID0g
NTsKKyAgICAgICAgICAgIGYgPSA2OworICAgICAgICAgICAgZyA9IDc7CisgICAgICAgIH0KKyAg
ICB9OworfSkoKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7CisgICAg
dmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsgMjMgKyA4
NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9CisKK3RoaW5neS5iYXIoKTsKK3ZhciByZXN1bHQgPSB0aGluZ3kuZm9v
KCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5s
aW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcwkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI4IEBACitmdW5jdGlvbiBmb28oYV8sIGJfLCBjXywgZF8sIGVfLCBmXywgZ18pIHsKKyAgICB2
YXIgYSA9IGFfOworICAgIHZhciBiID0gYl87CisgICAgdmFyIGMgPSBjXzsKKyAgICB2YXIgZCA9
IGRfOworICAgIHZhciBlID0gZV87CisgICAgdmFyIGYgPSBmXzsKKyAgICB2YXIgZyA9IGdfOwor
ICAgIHJldHVybiB7CisgICAgICAgIGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1
cm4gYSArIGIgKyBjICsgZCArIGUgKyBmICsgZzsKKyAgICAgICAgfQorICAgIH07Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK3ZhciB0aGluZ3kgPSBmb28oNDIsIDIzLCA4NCwgMTMsIDkwLCAzNCwg
NTIpOworbm9JbmxpbmUodGhpbmd5LmZvbyk7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDAw
OyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOworICAgIGlmIChyZXN1bHQg
IT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygxLCAyLCAz
LCA0LCA1LCA2LCA3KS5mb28oKTsKK2lmIChyZXN1bHQgIT0gMSArIDIgKyAzICsgNCArIDUgKyA2
ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcmVlbnRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1yZWVudGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0
aW9uIGZvbyhhXywgYl8sIGNfLCBkXywgZV8sIGZfLCBnXykgeworICAgIHZhciBhID0gYV87Cisg
ICAgdmFyIGIgPSBiXzsKKyAgICB2YXIgYyA9IGNfOworICAgIHZhciBkID0gZF87CisgICAgdmFy
IGUgPSBlXzsKKyAgICB2YXIgZiA9IGZfOworICAgIHZhciBnID0gZ187CisgICAgcmV0dXJuIHsK
KyAgICAgICAgZm9vOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMg
KyBkICsgZSArIGYgKyBnOworICAgICAgICB9CisgICAgfTsKK30KKwordmFyIHRoaW5neSA9IGZv
byg0MiwgMjMsIDg0LCAxMywgOTAsIDM0LCA1Mik7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOworICAgIGlmIChyZXN1
bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGZvbygxLCAy
LCAzLCA0LCA1LCA2LCA3KS5mb28oKTsKK2lmIChyZXN1bHQgIT0gMSArIDIgKyAzICsgNCArIDUg
KyA2ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>
<flag name="commit-queue"
          id="241626"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218355</attachid>
            <date>2013-12-03 15:44:05 -0800</date>
            <delta_ts>2013-12-03 15:51:42 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>62602</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDEzLTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgY29uc3RhbnQgY2xvc3VyZSB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQ2FwdHVyZWQgdmFyaWFibGVzIHRoYXQg
YXJlIGFzc2lnbmVkIG9uY2UgKG5vdCBjb3VudGluZyBvcF9lbnRlcidzIFVuZGVmaW5lZAorICAg
ICAgICBpbml0aWFsaXphdGlvbikgYW5kIHRoYXQgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBmdW5j
dGlvbiB0aGF0IGhhcyB0aHVzIGZhciBvbmx5IGJlZW4KKyAgICAgICAgZW50ZXJlZCBvbmNlIGFy
ZSBub3cgY29uc3RhbnQgZm9sZGVkLiBJdCdzIHByZXR0eSBhd2Vzb21lLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBpbnZvbHZlcyBhIHdhdGNocG9pbnQgb24gdGhlIGFzc2lnbm1lbnQgdG8gdmFy
aWFibGVzIGFuZCBhIHdhdGNocG9pbnQgb24gZW50cnkKKyAgICAgICAgaW50byB0aGUgZnVuY3Rp
b24uIFRoZSBmb3JtZXIgaXMgcmV1c2VkIGZyb20gZ2xvYmFsIHZhcmlhYmxlIGNvbnN0YW50IGlu
ZmVyZW5jZSBhbmQgdGhlCisgICAgICAgIGxhdHRlciBpcyByZXVzZWQgZnJvbSBvbmUtdGltZSBj
bG9zdXJlIGluZmVyZW5jZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6Cisg
ICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNv
ZGUvT3Bjb2RlLmg6CisgICAgICAgIChKU0M6OnBhZE9wY29kZU5hbWUpOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSW5zdHJ1
Y3Rpb246OlVubGlua2VkSW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxl
V2F0Y2hwb2ludFNldC5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Omlu
dmFsaWRhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuaDoKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdExhenlSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6d2F0Y2hhYmxlVmFyaWFibGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5mZXJyZWRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldFJlZ2lzdGVycyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
d19jYXB0dXJlZF9mdW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhcHR1cmVk
X21vdik6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9D
b25zdGFudE1vZGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0
QWNjZXNzKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2gpOgorCiAyMDEzLTEyLTAzICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGppdC9KSVRBcml0aG1l
dGljLmNwcCBkb2Vzbid0IGJ1aWxkIGZvciBub24tWDg2IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2OCw2ICs3NjgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhcHR1
cmVkX21vdiIpOwogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraXQ7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewpA
QCAtMTIyNCw5ICsxMjI1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0
cmVhbQogICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOiB7CiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNob3VsZENoZWNrID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJuZXdfY2FwdHVyZWRfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsIGYl
ZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjAsIHNob3VsZENoZWNrID8gIjxDaGVj
a2VkPiIgOiAiPFVuY2hlY2tlZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjApOworICAgICAgICAgICAgKytpdDsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7
CkBAIC0xNTUxLDEwICsxNTUyLDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KIHsKICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogCisgICAgYm9v
bCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisgICAgCiAgICAgaWYgKFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSB7Ci0gICAg
ICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+Y2FwdHVy
ZUNvdW50KCkpCisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1i
b2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpIHsKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0
KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUtPmNsb25lKCptX3Zt
KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBt
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKQEAgLTE4
MjAsMTEgKzE4MjQsMjggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9k
ZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7CiAgICAgICAg
ICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0u
dS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgIGVsc2UgaWYg
KG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCBvcC50eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wLndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAgICAgIG9w
LndhdGNocG9pbnRTZXQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Au
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG9wLm9wZXJhbmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2Fw
dHVyZWRfZnVuYzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUu
dWlkOworICAgICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAg
ICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRh
YmxlLT5lbmQobG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRj
aCgpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51LndhdGNocG9pbnRTZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsMTYgKzkwLDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgSW5z
dHJ1Y3Rpb24oUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRl
ckZ1bmMgPSBnZXR0ZXJGdW5jOyB9CiAgICAgICAgIAogICAgIEluc3RydWN0aW9uKExMSW50Q2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pIHsgdS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87
IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUu
cHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheVByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5hcnJheVByb2ZpbGUgPSBwcm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBw
cm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KLSAgICAgICAgCiAg
ICAgSW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsg
dS5yZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KLSAgICAgICAgCiAgICAgSW5z
dHJ1Y3Rpb24oU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKSB7IHUuc3BlY2lhbFBvaW50ZXIgPSBw
b2ludGVyOyB9Ci0gICAgICAgIAorICAgIEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1
LnVpZCA9IHVpZDsgfQogICAgIEluc3RydWN0aW9uKGJvb2wqIHByZWRpY2F0ZVBvaW50ZXIpIHsg
dS5wcmVkaWNhdGVQb2ludGVyID0gcHJlZGljYXRlUG9pbnRlcjsgfQogCiAgICAgdW5pb24gewpA
QCAtMTEyLDYgKzEwOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIFNwZWNpYWw6
OlBvaW50ZXIgc3BlY2lhbFBvaW50ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGdldHRlckZ1bmM7CiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
CisgICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
OwogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1
KSBcCiAgICAgbWFjcm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykg
XAotICAgIG1hY3JvKG9wX2NhcHR1cmVkX21vdiwgMykgXAorICAgIG1hY3JvKG9wX2NhcHR1cmVk
X21vdiwgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAgICBtYWNybyhvcF9l
cSwgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
OSArMjI5LDExIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihP
cGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVpZDsgfQogICAgIHVuaW9u
IHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7Cisg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5o
CShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCEhbV9pbmZlcnJlZFZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVk
KTsKICAgICAgICAgbV9pbmZlcnJlZFZhbHVlID0gSlNWYWx1ZSgpOwotICAgICAgICBmaXJlQWxs
KCk7CisgICAgICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw2ICsxMTUsMTMgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJl
QWxsKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgeworICAgICAg
ICBpZiAoc3RhdGUoKSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAg
ICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOworICAgIH0KIAogICAgIGludDhfdCogYWRkcmVz
c09mU3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0
SXNOb3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE5ICsx
MTUsMzEgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIHJl
dHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotYm9vbCBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29u
c3RhbnQsIFJlZ2lzdGVySUQqJiByMCkKK2Jvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcigK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUoKS5tX2xvY2spOwogICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgU3ltYm9s
VGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBS
ZWFkT25seSA6IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
eW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotCisgICAgCisgICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgeworICAgICAg
ICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKKyAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFi
bGVzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5k
KGlkZW50LmltcGwoKSk7CisgICAgfQorICAgIAogICAgIHIwID0gYWRkVmFyKCk7CisgICAgCisg
ICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkp
OworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzYsNyArMjQ4LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKGZ1bmN0aW9uQm9k
eS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVp
ZnkgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9k
aWZpZWQgYnkgdXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3Rl
ciA9IGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBmYWxzZSk7IC8vIENhbiBiZSBj
aGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KKyAgICAgICAgUmVnaXN0ZXJJRCog
YXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNW
YXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgogCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5
IGhhcmQtY29kaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1
bWVudHMnIHZhbHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0
b3JpbmcKQEAgLTMwNywxMyArMzE5LDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlv
bik7CisgICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgSXNWYXJp
YWJsZSwgSXNXYXRjaGFibGUpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50
KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERl
Y2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkg
PyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVl
ZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdI
b29rczsKQEAgLTMzMSw3ICszNDMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlk
ZW50KCk7CiAgICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpIHsKICAg
ICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgZmFsc2UpOworICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0
Y2hhYmxlKTsKICAgICAgICAgICAgIC8vIERvbid0IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRo
YXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMg
d291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHBy
b3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCkBAIC0zNDYsNyArMzU4LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSB2YXJTdGFja1tpXS5maXJzdDsKICAgICAgICAgaWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVz
KGlkZW50KSkKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50
LCAodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8g
SXNDb25zdGFudCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCkBAIC00NTcsNiArNDY5LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TAogewogICAgIGVtaXRPcGNvZGUob3BfaW5p
dF9sYXp5X3JlZyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7Cisg
ICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKICAgICByZXR1cm4g
cmVnOwogfQogCkBAIC0xMDA3LDYgKzEwMjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE1vdmUoCiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfY2FwdHVyZWRfbW92IDogb3BfbW92KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsK
KyAgICBpZiAoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCkKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogICAgIHJldHVybiBk
c3Q7CiB9CiAKQEAgLTE1NzksNyArMTU5NCwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1CiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfbmV3X2NhcHR1cmVkX2Z1bmMgOiBvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOworICAgIGlmIChjYXB0
dXJlTW9kZSA9PSBJc0NhcHR1cmVkKSB7CisgICAgICAgIEFTU0VSVCghZG9OdWxsQ2hlY2spOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRl
eCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb051bGxD
aGVjayk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTYyMSw2ICsxNjQwLDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSQogCiAgICAgZW1pdE9wY29kZShvcF9j
cmVhdGVfYXJndW1lbnRzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgIEFTU0VSVCghd2F0Y2hhYmxlVmFy
aWFibGUobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpKTsKIH0KIAog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3
LDE1ICs0OTcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG5ld1Jl
Z2lzdGVyKCk7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0IHRvIHRo
ZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50KQorICAgICAgICBlbnVt
IFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3Rh
bnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgaXNDb25zdGFudCwgbG9j
YWwpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBjb25zdGFudE1vZGUsIHdhdGNoTW9kZSwg
bG9jYWwpOwogICAgICAgICAgICAgcmV0dXJuIGxvY2FsOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRGl0dG8uIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFs
c2UgaWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9v
bCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRCom
KTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlLCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBh
bm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5
bWJvbFRhYmxlKCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC01OTAsNiArNTkx
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5l
Y2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiB3YXRjaGFi
bGVWYXJpYWJsZShpbnQgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXpl
X3Q+KHJlZy50b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZhcmlh
Ymxlc1tyZWcudG9Mb2NhbCgpXTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgVmVjdG9y
PFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0
aW9uczsKIAogICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9va3M7CkBAIC02MDksNiAr
NjIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlv
blJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlcjsKICAg
ICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICAgICAgVmVjdG9y
PFN0cmluZ0ltcGwqLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDI0IEBAIHByaXZhdGU6CiAg
ICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOworCisgICAgICAgIGlmIChsb2Nh
bCA8IG1fbG9jYWxXYXRjaHBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbG9jYWxXYXRjaHBvaW50c1tsb2NhbF0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwg
T3BJbmZvKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQg
c3RhbmRwb2ludC4gV2Ugd291bGRuJ3QgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0
byBkbyB0aGlzIGZvciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdy
ZSBkZWFsaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBG
b3IgbW9zdCBsb2NhbHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCisgICAgICAg
ICAgICAgICAgICAgIC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcg
SVIgd2hlcmV2ZXIgdGhlcmUgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBiZWVu
IHVzZXMgaW4gYnl0ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8g
dGhpcy4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdl
IGRvbid0IG5lZWQgdG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9y
IGNhcHR1cmVkIGxvY2Fscy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29u
c3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlz
Q2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKQEAgLTY4NCw2
ICs3MDIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgfQogICAgIAorICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudEZvclZhbHVlKHZhbHVlLCAwKTsKKyAgICB9CisgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtMTAwMCw2ICsxMDI1LDggQEAgcHJpdmF0ZToKIAog
ICAgIEhhc2hNYXA8Q29uc3RhbnRCdWZmZXJLZXksIHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVy
Q2FjaGU7CiAgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIDE2PiBtX2xv
Y2FsV2F0Y2hwb2ludHM7CisgICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAg
ICAgICBCeXRlQ29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC0yMTQ1
LDEyICsyMTcyLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJlYWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKLSAgICAgICAgY2FzZSBvcF9tb3Y6Ci0gICAgICAgIGNh
c2Ugb3BfY2FwdHVyZWRfbW92OiB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7CiAgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92
KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OiB7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCkKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8oc2V0KSwgb3ApOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgb3ApOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FwdHVyZWRfbW92KTsK
KyAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CkBAIC0zMDI2LDcgKzMwNjAsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZTogewogICAgICAgICAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkudHlwZSgpOwpAQCAtMzA3NywxNSArMzExMSwyNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50
LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1Zh
bHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdl
dEpTQ29uc3RhbnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJv
bFRhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCB1aWQpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh3YXRjaHBvaW50U2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2
YWx1ZSA9IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdh
dGNocG9pbnRTZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3Vy
ZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5vZGUpKSk7
CkBAIC0zMjI2LDggKzMyNzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAg
ICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgY2FzZSBvcF9uZXdfZnVu
YzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdGdW5jdGlv
bk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwpAQCAt
MzI0MSw2ICszMjg2LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAg
ICAgIE5vZGUqIGZ1bmN0aW9uID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBOZXdGdW5j
dGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90
aWZ5V3JpdGUsIE9wSW5mbyhzZXQpLCBmdW5jdGlvbik7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBmdW5jdGlvbik7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwK
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwgT3BJbmZv
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkBAIC0zNjEwLDYgKzM2NjQsMjIg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3Ry
dWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7CisgICAgICAg
IFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2Vy
KTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwor
ICAgICAgICAgICAgaWYgKCFzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3Rlcihp
dGVyLT52YWx1ZS5nZXRJbmRleCgpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgd2hpbGUgKG1f
bG9jYWxXYXRjaHBvaW50cy5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgICAgICAgICAgbV9sb2Nh
bFdhdGNocG9pbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBv
aW50c1tpbmRleF0gPSBzZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5saW5lU3Rh
Y2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9w
cm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCks
CiAgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIzLDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWly
ZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFw
aDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpOworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0
UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
dHJ5R2V0QWN0aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgp
OwogICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKICAgICAKKyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAg
CiAgICAgVk0mIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChv
cF9sc2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2Fw
dHVyZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBE
RUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJ
TkVfT1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9u
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAg
ICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2Fw
dHVyZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhw
KQpAQCAtMzY5LDYgKzM2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jb25zdHJ1Y3QpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF90b190aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Y3JlYXRlX3RoaXMpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jYXB0dXJlZF9tb3Yp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9jYWxsZWUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rp
b24qKTsKQEAgLTUxNSw2ICs1MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV9idWZmZXIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX25ld19mdW5jKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfY2Fw
dHVyZWRfZnVuYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKik7
CkBAIC01NTksNiArNTYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhcHR1cmVkX21vdihJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKIHsKICAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLQorICAgIAogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykpOwogICAgIGVsc2UgewpAQCAtMTYxLDYgKzE2MSwxNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgfQogfQogCit2b2lkIEpJVDo6
ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCByZWdU
MiwgY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCk7CisgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDIwIEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKICAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKIAotICAgIC8vIFVzZSBzaW1wbGVyIGFwcHJvYWNoLCBzaW5jZSB0
aGUgREZHIHRoaW5rcyB0aGF0IHRoZSBsYXN0IHJlc3VsdCByZWdpc3RlcgotICAgIC8vIGlzIGFs
d2F5cyBzZXQgdG8gdGhlIGRlc3RpbmF0aW9uIG9uIGV2ZXJ5IG9wZXJhdGlvbi4KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNo
cG9pbnRTZXQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwogdm9pZCBK
SVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAt
MTE2OSw2ICsxMTc3LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3RydWN0aW9u
KiAKICAgICAgICAgbGF6eUp1bXAubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKQEAgLTEyMTAsNiArMTIyNCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
YnVmZmVyKEluc3RyCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldp
dGhQcm9maWxlLCBkc3QsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHZhbHVlcywgc2l6ZSk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQ7CisgICAgaWYgKCFzZXQgfHwg
c2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTQyLDE0ICs1NDIsNDMgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRj
aCgzKQogCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwg
c2NyYXRjaCwgc2xvdykKKyAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVb
c2V0XSwgc2NyYXRjaAorICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKKyAg
ICBiaW5lcSBzY3JhdGNoLCBDbGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKKyAgICBzdG9yZWkg
dmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgVGFnT2Zm
c2V0W3NldF0KKyAgICBzdG9yZWkgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQorICAgIHN0b3JlYiBJc1dhdGNo
ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisgICAgam1wIC5kb25lCisK
Ky5vdmVyd3JpdGU6CisgICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwgLmRlZmluaXRlbHlEaWZm
ZXJlbnQKKyAgICBiaWVxIHZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJy
ZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdLCAuZG9uZQorLmRlZmluaXRlbHlEaWZmZXJlbnQ6Cisg
ICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3NldElzTm90RW1wdHlbc2V0XSwgc2xv
dworICAgIHN0b3JlaSBFbXB0eVZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5m
ZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdCisgICAgc3RvcmVpIDAsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdCisgICAgc3RvcmVi
IElzSW52YWxpZGF0ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisKKy5k
b25lOgorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJhY2VFeGVjdXRpb24o
KQogICAgIGxvYWRpIDhbUENdLCB0MQotICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigzLCB0
MCkKKyAgICBidHB6IHQwLCAub3BDYXB0dXJlZE1vdlJlYWR5CisgICAgbm90aWZ5V3JpdGUodDAs
IHQyLCB0MywgdDEsIC5vcENhcHR1cmVkTW92U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6Cisg
ICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0K
ICAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgz
KQorICAgIGRpc3BhdGNoKDQpCisKKy5vcENhcHR1cmVkTW92U2xvdzoKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCisgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRf
b3Bfbm90OgpAQCAtMTY3NCwxMiArMTcwMyw3IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogX2xs
aW50X29wX25ld19jYXB0dXJlZF9mdW5jOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBidGl6
IDEyW1BDXSwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCi0gICAgbG9hZGkgNFtQQ10sIHQx
Ci0gICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BOZXdD
YXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25l
OgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQogICAgIGRp
c3BhdGNoKDQpCiAKIApAQCAtMjE1MywyNyArMjE3Nyw2IEBAIG1hY3JvIHB1dFByb3BlcnR5KCkK
ICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKIGVuZAog
Ci1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIHNjcmF0Y2gs
IHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNj
cmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEg
c2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3ZlcndyaXRlCi0gICAgc3RvcmVpIHZhbHVlVGFn
LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRd
Ci0gICAgc3RvcmVpIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVy
cmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zlcndy
aXRlOgotICAgIGJpbmVxIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2lu
ZmVycmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0sIC5kZWZpbml0ZWx5RGlmZmVyZW50Ci0g
ICAgYmllcSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUg
KyBUYWdPZmZzZXRbc2V0XSwgLmRvbmUKLS5kZWZpbml0ZWx5RGlmZmVyZW50OgotICAgIGJ0Ym56
IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNsb3cKLSAgICBz
dG9yZWkgRW1wdHlWYWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFs
dWUgKyBUYWdPZmZzZXRbc2V0XQotICAgIHN0b3JlaSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQotICAgIHN0b3JlYiBJc0ludmFs
aWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotCi0uZG9uZToKLWVu
ZAotCiBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQxOCwxMyArNDE4LDM4IEBA
IF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCittYWNybyBub3RpZnlXcml0ZShz
ZXQsIHZhbHVlLCBzY3JhdGNoLCBzbG93KQorICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCisgICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVk
LCAuZG9uZQorICAgIGJpbmVxIHNjcmF0Y2gsIENsZWFyV2F0Y2hwb2ludCwgLm92ZXJ3cml0ZQor
ICAgIHN0b3JlcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVb
c2V0XQorICAgIHN0b3JlYiBJc1dhdGNoZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0
ZVtzZXRdCisgICAgam1wIC5kb25lCisKKy5vdmVyd3JpdGU6CisgICAgYnFlcSB2YWx1ZSwgVmFy
aWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XSwgLmRvbmUKKyAgICBidGJu
eiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc2V0SXNOb3RFbXB0eVtzZXRdLCBzbG93CisgICAg
c3RvcmVxIDAsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAg
ICBzdG9yZWIgSXNJbnZhbGlkYXRlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3Nl
dF0KKworLmRvbmU6ICAgIAorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKLSAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwg
dDIpCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCisgICAgYnRweiB0MCwgLm9wQ2Fw
dHVyZWRNb3ZSZWFkeQorICAgIG5vdGlmeVdyaXRlKHQwLCB0MiwgdDEsIC5vcENhcHR1cmVkTW92
U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQwKQogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBk
aXNwYXRjaCg0KQorCisub3BDYXB0dXJlZE1vdlNsb3c6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfY2FwdHVyZWRfbW92KQorICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX25vdDoK
QEAgLTE1MjUsMTMgKzE1NTAsNyBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIF9sbGludF9vcF9u
ZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDMsIHQyKQotICAgIGJ0aXogdDIsIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tl
ZAotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MSwg
OF0sIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoK
LSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfZnVuYykKLS5vcE5ld0NhcHR1
cmVkRnVuY0RvbmU6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1
bmMpCiAgICAgZGlzcGF0Y2goNCkKIAogCkBAIC0xOTczLDIzICsxOTkyLDYgQEAgbWFjcm8gcHV0
UHJvcGVydHkoKQogICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIp
CiBlbmQKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAg
ICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAg
IGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSBzY3JhdGNoLCBD
bGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKLSAgICBzdG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zl
cndyaXRlOgotICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJl
ZFZhbHVlW3NldF0sIC5kb25lCi0gICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3Nl
dElzTm90RW1wdHlbc2V0XSwgc2xvdwotICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzSW52YWxpZGF0ZWQsIFZhcmlh
YmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCi0KLS5kb25lOiAgICAKLWVuZAotCiBtYWNy
byBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwyOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fdGhpcykKICAgICBSRVRVUk4odjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKK1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCit7CisgICAgQkVHSU4oKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5vdGlm
eVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCitTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCit7CisgICAgQkVHSU4oKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVChjb2RlQmxvY2st
PmNvZGVUeXBlKCkgIT0gRnVuY3Rpb25Db2RlCisgICAgICAgICAgIHx8ICFjb2RlQmxvY2stPm5l
ZWRzRnVsbFNjb3BlQ2hhaW4oKQorICAgICAgICAgICB8fCBleGVjLT51bmNoZWNrZWRSKGNvZGVC
bG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkub2Zmc2V0KCkpLmpzVmFsdWUoKSk7CisgICAgSlNW
YWx1ZSB2YWx1ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgY29kZUJsb2NrLT5mdW5jdGlvbkRl
Y2wocGNbMl0udS5vcGVyYW5kKSwgZXhlYy0+c2NvcGUoKSk7CisgICAgaWYgKFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5v
dGlmeVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCiBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfbm90KQogewogICAgIEJFR0lOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE2NSw2ICsxNjUsNDAgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jcmVhdGVfYQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGhp
cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9jYWxsZWUpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsKK1NMT1dfUEFUSF9ISURERU5fREVD
TChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3Bh
dGhfbmV3X2NhcHR1cmVkX2Z1bmMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9u
b3QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9lcSk7CitTTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX25lcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3N0cmljdGVxKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbnN0cmljdGVxKTsK
K1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbGVzcyk7CitTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX2xlc3NlcSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2dyZWF0ZXIpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9ncmVhdGVyZXEpOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pbmMpOworU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9kZWMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b19u
dW1iZXIpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9uZWdhdGUpOworU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9hZGQpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9tdWwpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9zdWIpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9kaXYpOworU0xPV19QQVRIX0hJRERFTl9ERUNM
KHNsb3dfcGF0aF9tb2QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9sc2hpZnQp
OworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9yc2hpZnQpOworU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF91cnNoaWZ0KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfYml0YW5kKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfYml0b3IpOwor
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9iaXR4b3IpOworU0xPV19QQVRIX0hJRERF
Tl9ERUNMKHNsb3dfcGF0aF90eXBlb2YpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9pc19vYmplY3QpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9pc19mdW5jdGlv
bik7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2luKTsKK1NMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfZGVsX2J5X3ZhbCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3N0cmNhdCk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvX3ByaW1p
dGl2ZSk7CitTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhcHR1cmVkX21vdik7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX25vdCk7CiBTTE9XX1BBVEhfSElEREVOX0RF
Q0woc2xvd19wYXRoX2VxKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfbmVxKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uc3RhbnRNb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvbnN0YW50TW9kZV9oCisjZGVmaW5l
IENvbnN0YW50TW9kZV9oCisKK25hbWVzcGFjZSBKU0MgeworCitlbnVtIENvbnN0YW50TW9kZSB7
IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBDb25zdGFudE1vZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDYgKzIzLDcgQEAKICNkZWZpbmUgSlNHbG9iYWxPYmplY3RfaAogCiAjaW5jbHVkZSAiQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1ZGUgIkNvbnN0YW50TW9kZS5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiSlNDbGFzc1JlZi5oIgpAQCAtMjg4LDcgKzI4OSw2IEBAIHByb3RlY3RlZDoKICAgICAgICAg
aW5pdCh0aGlzVmFsdWUpOwogICAgIH0KIAotICAgIGVudW0gQ29uc3RhbnRNb2RlIHsgSXNDb25z
dGFudCwgSXNWYXJpYWJsZSB9OwogICAgIHN0cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBp
bnQgcmVnaXN0ZXJOdW1iZXI7CiAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9u
IDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFj
dEFjY2VzcyhFeGVjU3QKICAgICAgICAgfQogCiAgICAgICAgIGlmICghZW50cnkuaXNOdWxsKCkp
IHsKLSAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIGFjdGl2YXRpb24sIDAsIGVudHJ5LmdldElu
ZGV4KCkpOworICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoQ2xvc3VyZVZhciwg
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgYWN0aXZhdGlvbiwgZW50cnkud2F0
Y2hwb2ludFNldCgpLCBlbnRyeS5nZXRJbmRleCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJv
bFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsOCBA
QCBKU1ZhbHVlIFN5bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUoCiB2b2lkIFN5bWJvbFRh
YmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAgICBGYXRFbnRyeSogZW50cnkgPSBpbmZs
YXRlKCk7Ci0gICAgQVNTRVJUKCFlbnRyeS0+bV93YXRjaHBvaW50cyk7CisgICAgaWYgKGVudHJ5
LT5tX3dhdGNocG9pbnRzKQorICAgICAgICByZXR1cm47CiAgICAgZW50cnktPm1fd2F0Y2hwb2lu
dHMgPSBhZG9wdFJlZihuZXcgVmFyaWFibGVXYXRjaHBvaW50U2V0KCkpOwogfQogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjAwNTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSw0MCBAQAorMjAxMy0xMi0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgorCisgICAgICAgIEluZmVyIGNvbnN0YW50IGNsb3N1cmUgdmFyaWFibGVzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ2MzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
YWRkcyBib3RoIGNvcnJlY3RuZXNzIGFuZCBwZXJmb3JtYW5jZSB0ZXN0cyBmb3IgY29uc3RhbnQg
Y2xvc3VyZSB2YXJpYWJsZQorICAgICAgICBpbmZlcmVuY2UuCisKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5l
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJl
LWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuaHRtbDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxp
bmUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tcHV0LXRvLXNjb3BlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5m
ZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGlu
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3Vy
ZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LW1vdi1uby1pbmxpbmUuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanM6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2Nv
cGUtbm8taW5saW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaW5neS4pOgorICAgICAgICAodGhp
bmd5KToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzOiBBZGRlZC4KKyAgICAgICAgKHRoaW5neS4pOgorICAg
ICAgICAodGhpbmd5KToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUuanM6IEFkZGVkLgorICAgICAgICAo
LnJldHVybi5mb28pOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci5qczogQWRkZWQuCisgICAg
ICAgICgucmV0dXJuLmZvbyk6CisgICAgICAgIChmb28pOgorCiAyMDEzLTEyLTAzICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIExheW91dCBUZXN0IHBsYXRm
b3JtL21hYy9hY2Nlc3NpYmlsaXR5L3NlYXJjaC1wcmVkaWNhdGUtZWxlbWVudC1jb3VudC5odG1s
IGlzIGZsYWt5CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1tb3YtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1t
b3YtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVz
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3Ytbm8taW5saW5lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1u
by1pbmxpbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5m
ZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1M
Ly9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1tb3YuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10
by1zY29wZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3Bl
LW5vLWlubGluZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5m
ZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1p
bmxpbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNs
b3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQt
dG8tc2NvcGUtbm8taW5saW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1j
b25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cHV0LXRvLXNjb3BlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0
LXRvLXNjb3BlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1yZWVudGVyCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1u
by1pbmxpbmUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUtZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cmVlbnRlci1uby1pbmxpbmUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5l
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
aW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1yZWVudGVyLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLXJlZW50ZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1u
by1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJl
LWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0
IEBACisoZnVuY3Rpb24oKXsKKyAgICB2YXIgYSA9IDQyOworICAgIHZhciBiID0gMjM7CisgICAg
dmFyIGMgPSA4NDsKKyAgICB2YXIgZCA9IDEzOworICAgIHZhciBlID0gOTA7CisgICAgdmFyIGYg
PSAzNDsKKyAgICB2YXIgZyA9IDUyOworICAgIAorICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAg
ICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgfQorICAgIAorICAgIG5v
SW5saW5lKGZvbyk7CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gNDIg
KyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGEgPSAxOworICAgIGIg
PSAyOworICAgIGMgPSAzOworICAgIGQgPSA0OworICAgIGUgPSA1OworICAgIGYgPSA2OworICAg
IGcgPSA3OworICAgIAorICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9
IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIHJlc3VsdDsKK30pKCk7CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLW1vdi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMiBAQAorKGZ1bmN0aW9uKCl7CisgICAgdmFyIGEgPSA0MjsKKyAgICB2YXIg
YiA9IDIzOworICAgIHZhciBjID0gODQ7CisgICAgdmFyIGQgPSAxMzsKKyAgICB2YXIgZSA9IDkw
OworICAgIHZhciBmID0gMzQ7CisgICAgdmFyIGcgPSA1MjsKKyAgICAKKyAgICBmdW5jdGlvbiBm
b28oKSB7CisgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOworICAgIH0K
KyAgICAKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9IDQyICsgMjMgKyA4NCAr
IDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBhID0gMTsKKyAgICBiID0gMjsKKyAgICBj
ID0gMzsKKyAgICBkID0gNDsKKyAgICBlID0gNTsKKyAgICBmID0gNjsKKyAgICBnID0gNzsKKyAg
ICAKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSAxICsgMiArIDMg
KyA0ICsgNSArIDYgKyA3KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9KSgpOworCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzYgQEAKK3ZhciB0aGluZ3kgPSAoZnVuY3Rpb24oKXsKKyAgICB2YXIgYSA9IDQyOworICAgIHZh
ciBiID0gMjM7CisgICAgdmFyIGMgPSA4NDsKKyAgICB2YXIgZCA9IDEzOworICAgIHZhciBlID0g
OTA7CisgICAgdmFyIGYgPSAzNDsKKyAgICB2YXIgZyA9IDUyOworICAgIHJldHVybiB7CisgICAg
ICAgIGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCAr
IGUgKyBmICsgZzsKKyAgICAgICAgfSwKKyAgICAgICAgYmFyOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgIGEgPSAxOworICAgICAgICAgICAgYiA9IDI7CisgICAgICAgICAgICBjID0gMzsKKyAg
ICAgICAgICAgIGQgPSA0OworICAgICAgICAgICAgZSA9IDU7CisgICAgICAgICAgICBmID0gNjsK
KyAgICAgICAgICAgIGcgPSA3OworICAgICAgICB9CisgICAgfTsKK30pKCk7CisKK25vSW5saW5l
KHRoaW5neS5mb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDA7ICsraSkgeworICAg
IHZhciByZXN1bHQgPSB0aGluZ3kuZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDIzICsg
ODQgKyAxMyArIDkwICsgMzQgKyA1MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfQorCit0aGluZ3kuYmFyKCk7Cit2YXIgcmVzdWx0ID0gdGhpbmd5LmZv
bygpOworaWYgKHJlc3VsdCAhPSAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQorICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5m
ZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1wdXQtdG8tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAordmFyIHRo
aW5neSA9IChmdW5jdGlvbigpeworICAgIHZhciBhID0gNDI7CisgICAgdmFyIGIgPSAyMzsKKyAg
ICB2YXIgYyA9IDg0OworICAgIHZhciBkID0gMTM7CisgICAgdmFyIGUgPSA5MDsKKyAgICB2YXIg
ZiA9IDM0OworICAgIHZhciBnID0gNTI7CisgICAgcmV0dXJuIHsKKyAgICAgICAgZm9vOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOwor
ICAgICAgICB9LAorICAgICAgICBiYXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgYSA9IDE7
CisgICAgICAgICAgICBiID0gMjsKKyAgICAgICAgICAgIGMgPSAzOworICAgICAgICAgICAgZCA9
IDQ7CisgICAgICAgICAgICBlID0gNTsKKyAgICAgICAgICAgIGYgPSA2OworICAgICAgICAgICAg
ZyA9IDc7CisgICAgICAgIH0KKyAgICB9OworfSkoKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAo
cmVzdWx0ICE9IDQyICsgMjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3RoaW5neS5iYXIoKTsKK3Zh
ciByZXN1bHQgPSB0aGluZ3kuZm9vKCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1
ICsgNiArIDcpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLXJlZW50ZXItbm8taW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5v
LWlubGluZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBmb28oYV8sIGJfLCBjXywgZF8s
IGVfLCBmXywgZ18pIHsKKyAgICB2YXIgYSA9IGFfOworICAgIHZhciBiID0gYl87CisgICAgdmFy
IGMgPSBjXzsKKyAgICB2YXIgZCA9IGRfOworICAgIHZhciBlID0gZV87CisgICAgdmFyIGYgPSBm
XzsKKyAgICB2YXIgZyA9IGdfOworICAgIHJldHVybiB7CisgICAgICAgIGZvbzogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUgKyBmICsgZzsKKyAgICAg
ICAgfQorICAgIH07Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciB0aGluZ3kgPSBmb28oNDIs
IDIzLCA4NCwgMTMsIDkwLCAzNCwgNTIpOworbm9JbmxpbmUodGhpbmd5LmZvbyk7Citmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5LmZv
bygpOworICAgIGlmIChyZXN1bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFy
IHJlc3VsdCA9IGZvbygxLCAyLCAzLCA0LCA1LCA2LCA3KS5mb28oKTsKK2lmIChyZXN1bHQgIT0g
MSArIDIgKyAzICsgNCArIDUgKyA2ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9p
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVl
bnRlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZvbyhhXywgYl8sIGNfLCBkXywgZV8sIGZfLCBnXykg
eworICAgIHZhciBhID0gYV87CisgICAgdmFyIGIgPSBiXzsKKyAgICB2YXIgYyA9IGNfOworICAg
IHZhciBkID0gZF87CisgICAgdmFyIGUgPSBlXzsKKyAgICB2YXIgZiA9IGZfOworICAgIHZhciBn
ID0gZ187CisgICAgcmV0dXJuIHsKKyAgICAgICAgZm9vOiBmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSArIGYgKyBnOworICAgICAgICB9CisgICAgfTsK
K30KKwordmFyIHRoaW5neSA9IGZvbyg0MiwgMjMsIDg0LCAxMywgOTAsIDM0LCA1Mik7Citmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5
LmZvbygpOworICAgIGlmIChyZXN1bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsg
NTIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwor
dmFyIHJlc3VsdCA9IGZvbygxLCAyLCAzLCA0LCA1LCA2LCA3KS5mb28oKTsKK2lmIChyZXN1bHQg
IT0gMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218357</attachid>
            <date>2013-12-03 15:51:42 -0800</date>
            <delta_ts>2013-12-03 18:26:12 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61262</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMDUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBA
CisyMDEzLTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgY29uc3RhbnQgY2xvc3VyZSB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQ2FwdHVyZWQgdmFyaWFibGVzIHRoYXQg
YXJlIGFzc2lnbmVkIG9uY2UgKG5vdCBjb3VudGluZyBvcF9lbnRlcidzIFVuZGVmaW5lZAorICAg
ICAgICBpbml0aWFsaXphdGlvbikgYW5kIHRoYXQgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBmdW5j
dGlvbiB0aGF0IGhhcyB0aHVzIGZhciBvbmx5IGJlZW4KKyAgICAgICAgZW50ZXJlZCBvbmNlIGFy
ZSBub3cgY29uc3RhbnQgZm9sZGVkLiBJdCdzIHByZXR0eSBhd2Vzb21lLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBpbnZvbHZlcyBhIHdhdGNocG9pbnQgb24gdGhlIGFzc2lnbm1lbnQgdG8gdmFy
aWFibGVzIGFuZCBhIHdhdGNocG9pbnQgb24gZW50cnkKKyAgICAgICAgaW50byB0aGUgZnVuY3Rp
b24uIFRoZSBmb3JtZXIgaXMgcmV1c2VkIGZyb20gZ2xvYmFsIHZhcmlhYmxlIGNvbnN0YW50IGlu
ZmVyZW5jZSBhbmQgdGhlCisgICAgICAgIGxhdHRlciBpcyByZXVzZWQgZnJvbSBvbmUtdGltZSBj
bG9zdXJlIGluZmVyZW5jZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6Cisg
ICAgICAgIChKU0M6Okluc3RydWN0aW9uOjpJbnN0cnVjdGlvbik6CisgICAgICAgICogYnl0ZWNv
ZGUvT3Bjb2RlLmg6CisgICAgICAgIChKU0M6OnBhZE9wY29kZU5hbWUpOgorICAgICAgICAqIGJ5
dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkSW5zdHJ1
Y3Rpb246OlVubGlua2VkSW5zdHJ1Y3Rpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxl
V2F0Y2hwb2ludFNldC5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Omlu
dmFsaWRhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuaDoKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFk
ZFZhcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5pdExhenlSZWdpc3Rl
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSk6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6d2F0Y2hhYmxlVmFyaWFibGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5mZXJyZWRDb25zdGFudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldFJlZ2lzdGVycyk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rl
cy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
d19jYXB0dXJlZF9mdW5jKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhcHR1cmVk
X21vdik6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOgor
ICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9D
b25zdGFudE1vZGUuaDogQWRkZWQuCisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0
QWNjZXNzKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2gpOgorCiAyMDEzLTEyLTAzICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIGppdC9KSVRBcml0aG1l
dGljLmNwcCBkb2Vzbid0IGJ1aWxkIGZvciBub24tWDg2IHBvcnRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2OCw2ICs3NjgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhcHR1
cmVkX21vdiIpOwogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraXQ7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewpA
QCAtMTIyNCw5ICsxMjI1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0
cmVhbQogICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOiB7CiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNob3VsZENoZWNrID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJuZXdfY2FwdHVyZWRfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsIGYl
ZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjAsIHNob3VsZENoZWNrID8gIjxDaGVj
a2VkPiIgOiAiPFVuY2hlY2tlZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjApOworICAgICAgICAgICAgKytpdDsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7
CkBAIC0xNTUxLDEwICsxNTUyLDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KIHsKICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogCisgICAgYm9v
bCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisgICAgCiAgICAgaWYgKFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSB7Ci0gICAg
ICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+Y2FwdHVy
ZUNvdW50KCkpCisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1i
b2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpIHsKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0
KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUtPmNsb25lKCptX3Zt
KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBt
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKQEAgLTE4
MjAsMTEgKzE4MjQsMjggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9k
ZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7CiAgICAgICAg
ICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0u
dS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgIGVsc2UgaWYg
KG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCBvcC50eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wLndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAgICAgIG9w
LndhdGNocG9pbnRTZXQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Au
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG9wLm9wZXJhbmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2Fw
dHVyZWRfZnVuYzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUu
dWlkOworICAgICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAg
ICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRh
YmxlLT5lbmQobG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRj
aCgpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51LndhdGNocG9pbnRTZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsMTYgKzkwLDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgSW5z
dHJ1Y3Rpb24oUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRl
ckZ1bmMgPSBnZXR0ZXJGdW5jOyB9CiAgICAgICAgIAogICAgIEluc3RydWN0aW9uKExMSW50Q2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pIHsgdS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87
IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUu
cHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheVByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5hcnJheVByb2ZpbGUgPSBwcm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBw
cm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KLSAgICAgICAgCiAg
ICAgSW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsg
dS5yZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KLSAgICAgICAgCiAgICAgSW5z
dHJ1Y3Rpb24oU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKSB7IHUuc3BlY2lhbFBvaW50ZXIgPSBw
b2ludGVyOyB9Ci0gICAgICAgIAorICAgIEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1
LnVpZCA9IHVpZDsgfQogICAgIEluc3RydWN0aW9uKGJvb2wqIHByZWRpY2F0ZVBvaW50ZXIpIHsg
dS5wcmVkaWNhdGVQb2ludGVyID0gcHJlZGljYXRlUG9pbnRlcjsgfQogCiAgICAgdW5pb24gewpA
QCAtMTEyLDYgKzEwOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIFNwZWNpYWw6
OlBvaW50ZXIgc3BlY2lhbFBvaW50ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGdldHRlckZ1bmM7CiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
CisgICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
OwogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1
KSBcCiAgICAgbWFjcm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykg
XAotICAgIG1hY3JvKG9wX2NhcHR1cmVkX21vdiwgMykgXAorICAgIG1hY3JvKG9wX2NhcHR1cmVk
X21vdiwgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAgICBtYWNybyhvcF9l
cSwgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
OSArMjI5LDExIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihP
cGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVpZDsgfQogICAgIHVuaW9u
IHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7Cisg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5o
CShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCEhbV9pbmZlcnJlZFZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVk
KTsKICAgICAgICAgbV9pbmZlcnJlZFZhbHVlID0gSlNWYWx1ZSgpOwotICAgICAgICBmaXJlQWxs
KCk7CisgICAgICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw2ICsxMTUsMTMgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJl
QWxsKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgeworICAgICAg
ICBpZiAoc3RhdGUoKSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAg
ICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOworICAgIH0KIAogICAgIGludDhfdCogYWRkcmVz
c09mU3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0
SXNOb3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE5ICsx
MTUsMzEgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIHJl
dHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotYm9vbCBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29u
c3RhbnQsIFJlZ2lzdGVySUQqJiByMCkKK2Jvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcigK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUoKS5tX2xvY2spOwogICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgU3ltYm9s
VGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBS
ZWFkT25seSA6IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
eW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotCisgICAgCisgICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgeworICAgICAg
ICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKKyAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFi
bGVzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5k
KGlkZW50LmltcGwoKSk7CisgICAgfQorICAgIAogICAgIHIwID0gYWRkVmFyKCk7CisgICAgCisg
ICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkp
OworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzYsNyArMjQ4LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKGZ1bmN0aW9uQm9k
eS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVp
ZnkgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9k
aWZpZWQgYnkgdXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3Rl
ciA9IGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBmYWxzZSk7IC8vIENhbiBiZSBj
aGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KKyAgICAgICAgUmVnaXN0ZXJJRCog
YXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNW
YXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgogCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5
IGhhcmQtY29kaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1
bWVudHMnIHZhbHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0
b3JpbmcKQEAgLTMwNywxMyArMzE5LDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlv
bik7CisgICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgSXNWYXJp
YWJsZSwgSXNXYXRjaGFibGUpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50
KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERl
Y2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkg
PyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVl
ZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdI
b29rczsKQEAgLTMzMSw3ICszNDMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlk
ZW50KCk7CiAgICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpIHsKICAg
ICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgZmFsc2UpOworICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0
Y2hhYmxlKTsKICAgICAgICAgICAgIC8vIERvbid0IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRo
YXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMg
d291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHBy
b3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCkBAIC0zNDYsNyArMzU4LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSB2YXJTdGFja1tpXS5maXJzdDsKICAgICAgICAgaWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVz
KGlkZW50KSkKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50
LCAodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8g
SXNDb25zdGFudCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCkBAIC00NTcsNiArNDY5LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TAogewogICAgIGVtaXRPcGNvZGUob3BfaW5p
dF9sYXp5X3JlZyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7Cisg
ICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKICAgICByZXR1cm4g
cmVnOwogfQogCkBAIC0xMDA3LDYgKzEwMjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE1vdmUoCiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfY2FwdHVyZWRfbW92IDogb3BfbW92KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsK
KyAgICBpZiAoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCkKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogICAgIHJldHVybiBk
c3Q7CiB9CiAKQEAgLTE1NzksNyArMTU5NCwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1CiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfbmV3X2NhcHR1cmVkX2Z1bmMgOiBvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOworICAgIGlmIChjYXB0
dXJlTW9kZSA9PSBJc0NhcHR1cmVkKSB7CisgICAgICAgIEFTU0VSVCghZG9OdWxsQ2hlY2spOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRl
eCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb051bGxD
aGVjayk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTYyMSw2ICsxNjQwLDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSQogCiAgICAgZW1pdE9wY29kZShvcF9j
cmVhdGVfYXJndW1lbnRzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgIEFTU0VSVCghd2F0Y2hhYmxlVmFy
aWFibGUobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpKTsKIH0KIAog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3
LDE1ICs0OTcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG5ld1Jl
Z2lzdGVyKCk7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0IHRvIHRo
ZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50KQorICAgICAgICBlbnVt
IFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3Rh
bnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgaXNDb25zdGFudCwgbG9j
YWwpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBjb25zdGFudE1vZGUsIHdhdGNoTW9kZSwg
bG9jYWwpOwogICAgICAgICAgICAgcmV0dXJuIGxvY2FsOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRGl0dG8uIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFs
c2UgaWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9v
bCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRCom
KTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlLCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBh
bm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5
bWJvbFRhYmxlKCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC01OTAsNiArNTkx
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5l
Y2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiB3YXRjaGFi
bGVWYXJpYWJsZShpbnQgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXpl
X3Q+KHJlZy50b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZhcmlh
Ymxlc1tyZWcudG9Mb2NhbCgpXTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgVmVjdG9y
PFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0
aW9uczsKIAogICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9va3M7CkBAIC02MDksNiAr
NjIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlv
blJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlcjsKICAg
ICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICAgICAgVmVjdG9y
PFN0cmluZ0ltcGwqLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDI0IEBAIHByaXZhdGU6CiAg
ICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOworCisgICAgICAgIGlmIChsb2Nh
bCA8IG1fbG9jYWxXYXRjaHBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbG9jYWxXYXRjaHBvaW50c1tsb2NhbF0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwg
T3BJbmZvKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQg
c3RhbmRwb2ludC4gV2Ugd291bGRuJ3QgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0
byBkbyB0aGlzIGZvciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdy
ZSBkZWFsaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBG
b3IgbW9zdCBsb2NhbHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCisgICAgICAg
ICAgICAgICAgICAgIC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcg
SVIgd2hlcmV2ZXIgdGhlcmUgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBiZWVu
IHVzZXMgaW4gYnl0ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8g
dGhpcy4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdl
IGRvbid0IG5lZWQgdG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9y
IGNhcHR1cmVkIGxvY2Fscy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29u
c3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlz
Q2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKQEAgLTY4NCw2
ICs3MDIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgfQogICAgIAorICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudEZvclZhbHVlKHZhbHVlLCAwKTsKKyAgICB9CisgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtMTAwMCw2ICsxMDI1LDggQEAgcHJpdmF0ZToKIAog
ICAgIEhhc2hNYXA8Q29uc3RhbnRCdWZmZXJLZXksIHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVy
Q2FjaGU7CiAgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIDE2PiBtX2xv
Y2FsV2F0Y2hwb2ludHM7CisgICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAg
ICAgICBCeXRlQ29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC0yMTQ1
LDEyICsyMTcyLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJlYWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKLSAgICAgICAgY2FzZSBvcF9tb3Y6Ci0gICAgICAgIGNh
c2Ugb3BfY2FwdHVyZWRfbW92OiB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7CiAgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92
KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OiB7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCkKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8oc2V0KSwgb3ApOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgb3ApOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FwdHVyZWRfbW92KTsK
KyAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CkBAIC0zMDI2LDcgKzMwNjAsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZTogewogICAgICAgICAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkudHlwZSgpOwpAQCAtMzA3NywxNSArMzExMSwyNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50
LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1Zh
bHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdl
dEpTQ29uc3RhbnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJv
bFRhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCB1aWQpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh3YXRjaHBvaW50U2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2
YWx1ZSA9IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdh
dGNocG9pbnRTZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3Vy
ZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5vZGUpKSk7
CkBAIC0zMjI2LDggKzMyNzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAg
ICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgY2FzZSBvcF9uZXdfZnVu
YzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdGdW5jdGlv
bk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwpAQCAt
MzI0MSw2ICszMjg2LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAg
ICAgIE5vZGUqIGZ1bmN0aW9uID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBOZXdGdW5j
dGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90
aWZ5V3JpdGUsIE9wSW5mbyhzZXQpLCBmdW5jdGlvbik7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBmdW5jdGlvbik7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwK
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwgT3BJbmZv
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkBAIC0zNjEwLDYgKzM2NjQsMjIg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3Ry
dWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7CisgICAgICAg
IFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2Vy
KTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwor
ICAgICAgICAgICAgaWYgKCFzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3Rlcihp
dGVyLT52YWx1ZS5nZXRJbmRleCgpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgd2hpbGUgKG1f
bG9jYWxXYXRjaHBvaW50cy5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgICAgICAgICAgbV9sb2Nh
bFdhdGNocG9pbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBv
aW50c1tpbmRleF0gPSBzZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5saW5lU3Rh
Y2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9w
cm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCks
CiAgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIzLDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWly
ZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFw
aDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpOworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0
UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
dHJ5R2V0QWN0aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgp
OwogICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKICAgICAKKyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAg
CiAgICAgVk0mIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChv
cF9sc2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2Fw
dHVyZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBE
RUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJ
TkVfT1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9u
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAg
ICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2Fw
dHVyZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhw
KQpAQCAtMzY5LDYgKzM2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jb25zdHJ1Y3QpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF90b190aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Y3JlYXRlX3RoaXMpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jYXB0dXJlZF9tb3Yp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9jYWxsZWUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rp
b24qKTsKQEAgLTUxNSw2ICs1MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV9idWZmZXIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX25ld19mdW5jKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfY2Fw
dHVyZWRfZnVuYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKik7
CkBAIC01NTksNiArNTYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhcHR1cmVkX21vdihJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKIHsKICAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLQorICAgIAogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykpOwogICAgIGVsc2UgewpAQCAtMTYxLDYgKzE2MSwxNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgfQogfQogCit2b2lkIEpJVDo6
ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCByZWdU
MiwgY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCk7CisgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDIwIEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKICAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKIAotICAgIC8vIFVzZSBzaW1wbGVyIGFwcHJvYWNoLCBzaW5jZSB0
aGUgREZHIHRoaW5rcyB0aGF0IHRoZSBsYXN0IHJlc3VsdCByZWdpc3RlcgotICAgIC8vIGlzIGFs
d2F5cyBzZXQgdG8gdGhlIGRlc3RpbmF0aW9uIG9uIGV2ZXJ5IG9wZXJhdGlvbi4KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNo
cG9pbnRTZXQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwogdm9pZCBK
SVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAt
MTE2OSw2ICsxMTc3LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3RydWN0aW9u
KiAKICAgICAgICAgbGF6eUp1bXAubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKQEAgLTEyMTAsNiArMTIyNCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
YnVmZmVyKEluc3RyCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldp
dGhQcm9maWxlLCBkc3QsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHZhbHVlcywgc2l6ZSk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQ7CisgICAgaWYgKCFzZXQgfHwg
c2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTQyLDE0ICs1NDIsNDMgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRj
aCgzKQogCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwg
c2NyYXRjaCwgc2xvdykKKyAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVb
c2V0XSwgc2NyYXRjaAorICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKKyAg
ICBiaW5lcSBzY3JhdGNoLCBDbGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKKyAgICBzdG9yZWkg
dmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgVGFnT2Zm
c2V0W3NldF0KKyAgICBzdG9yZWkgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQorICAgIHN0b3JlYiBJc1dhdGNo
ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisgICAgam1wIC5kb25lCisK
Ky5vdmVyd3JpdGU6CisgICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwgLmRlZmluaXRlbHlEaWZm
ZXJlbnQKKyAgICBiaWVxIHZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJy
ZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdLCAuZG9uZQorLmRlZmluaXRlbHlEaWZmZXJlbnQ6Cisg
ICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3NldElzTm90RW1wdHlbc2V0XSwgc2xv
dworICAgIHN0b3JlaSBFbXB0eVZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5m
ZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdCisgICAgc3RvcmVpIDAsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdCisgICAgc3RvcmVi
IElzSW52YWxpZGF0ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisKKy5k
b25lOgorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJhY2VFeGVjdXRpb24o
KQogICAgIGxvYWRpIDhbUENdLCB0MQotICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigzLCB0
MCkKKyAgICBidHB6IHQwLCAub3BDYXB0dXJlZE1vdlJlYWR5CisgICAgbm90aWZ5V3JpdGUodDAs
IHQyLCB0MywgdDEsIC5vcENhcHR1cmVkTW92U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6Cisg
ICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0K
ICAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgz
KQorICAgIGRpc3BhdGNoKDQpCisKKy5vcENhcHR1cmVkTW92U2xvdzoKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCisgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRf
b3Bfbm90OgpAQCAtMTY3NCwxMiArMTcwMyw3IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogX2xs
aW50X29wX25ld19jYXB0dXJlZF9mdW5jOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBidGl6
IDEyW1BDXSwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCi0gICAgbG9hZGkgNFtQQ10sIHQx
Ci0gICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BOZXdD
YXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25l
OgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQogICAgIGRp
c3BhdGNoKDQpCiAKIApAQCAtMjE1MywyNyArMjE3Nyw2IEBAIG1hY3JvIHB1dFByb3BlcnR5KCkK
ICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKIGVuZAog
Ci1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIHNjcmF0Y2gs
IHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNj
cmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEg
c2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3ZlcndyaXRlCi0gICAgc3RvcmVpIHZhbHVlVGFn
LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRd
Ci0gICAgc3RvcmVpIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVy
cmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zlcndy
aXRlOgotICAgIGJpbmVxIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2lu
ZmVycmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0sIC5kZWZpbml0ZWx5RGlmZmVyZW50Ci0g
ICAgYmllcSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUg
KyBUYWdPZmZzZXRbc2V0XSwgLmRvbmUKLS5kZWZpbml0ZWx5RGlmZmVyZW50OgotICAgIGJ0Ym56
IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNsb3cKLSAgICBz
dG9yZWkgRW1wdHlWYWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFs
dWUgKyBUYWdPZmZzZXRbc2V0XQotICAgIHN0b3JlaSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQotICAgIHN0b3JlYiBJc0ludmFs
aWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotCi0uZG9uZToKLWVu
ZAotCiBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQxOCwxMyArNDE4LDM4IEBA
IF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCittYWNybyBub3RpZnlXcml0ZShz
ZXQsIHZhbHVlLCBzY3JhdGNoLCBzbG93KQorICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCisgICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVk
LCAuZG9uZQorICAgIGJpbmVxIHNjcmF0Y2gsIENsZWFyV2F0Y2hwb2ludCwgLm92ZXJ3cml0ZQor
ICAgIHN0b3JlcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVb
c2V0XQorICAgIHN0b3JlYiBJc1dhdGNoZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0
ZVtzZXRdCisgICAgam1wIC5kb25lCisKKy5vdmVyd3JpdGU6CisgICAgYnFlcSB2YWx1ZSwgVmFy
aWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XSwgLmRvbmUKKyAgICBidGJu
eiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc2V0SXNOb3RFbXB0eVtzZXRdLCBzbG93CisgICAg
c3RvcmVxIDAsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAg
ICBzdG9yZWIgSXNJbnZhbGlkYXRlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3Nl
dF0KKworLmRvbmU6ICAgIAorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKLSAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwg
dDIpCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCisgICAgYnRweiB0MCwgLm9wQ2Fw
dHVyZWRNb3ZSZWFkeQorICAgIG5vdGlmeVdyaXRlKHQwLCB0MiwgdDEsIC5vcENhcHR1cmVkTW92
U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQwKQogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBk
aXNwYXRjaCg0KQorCisub3BDYXB0dXJlZE1vdlNsb3c6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfY2FwdHVyZWRfbW92KQorICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX25vdDoK
QEAgLTE1MjUsMTMgKzE1NTAsNyBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIF9sbGludF9vcF9u
ZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDMsIHQyKQotICAgIGJ0aXogdDIsIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tl
ZAotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MSwg
OF0sIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoK
LSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfZnVuYykKLS5vcE5ld0NhcHR1
cmVkRnVuY0RvbmU6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1
bmMpCiAgICAgZGlzcGF0Y2goNCkKIAogCkBAIC0xOTczLDIzICsxOTkyLDYgQEAgbWFjcm8gcHV0
UHJvcGVydHkoKQogICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIp
CiBlbmQKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAg
ICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAg
IGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSBzY3JhdGNoLCBD
bGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKLSAgICBzdG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zl
cndyaXRlOgotICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJl
ZFZhbHVlW3NldF0sIC5kb25lCi0gICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3Nl
dElzTm90RW1wdHlbc2V0XSwgc2xvdwotICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzSW52YWxpZGF0ZWQsIFZhcmlh
YmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCi0KLS5kb25lOiAgICAKLWVuZAotCiBtYWNy
byBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwyOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fdGhpcykKICAgICBSRVRVUk4odjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKK1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCit7CisgICAgQkVHSU4oKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5vdGlm
eVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCitTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCit7CisgICAgQkVHSU4oKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVCgKKyAgICAgICAg
Y29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZQorICAgICAgICB8fCAhY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkKKyAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihj
b2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rp
b25EZWNsKHBjWzJdLnUub3BlcmFuZCksIGV4ZWMtPnNjb3BlKCkpOworICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0
LT5ub3RpZnlXcml0ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKwogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25vdCkKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE2MDA0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDggQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jcmVhdGVfYQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
dGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9jYWxsZWUpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9lcSk7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdGFudE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdGFudE1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBDb25zdGFudE1vZGVfaAorI2RlZmluZSBDb25zdGFudE1vZGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29uc3RhbnRNb2RlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIEpTR2xvYmFs
T2JqZWN0X2gKIAogI2luY2x1ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJDb25zdGFudE1vZGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKQEAgLTI4OCw3ICsy
ODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGluaXQodGhpc1ZhbHVlKTsKICAgICB9CiAKLSAg
ICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKICAgICBzdHJ1
Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyOwogICAgICAgICBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBvcCA9IFJlc29sdmVP
cChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAw
LCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIG9wID0gUmVz
b2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVw
dGgsIDAsIGFjdGl2YXRpb24sIGVudHJ5LndhdGNocG9pbnRTZXQoKSwgZW50cnkuZ2V0SW5kZXgo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNjAw
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5Ojpp
bmZlcnJlZFZhbHVlKAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaCgpCiB7
CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwotICAgIEFTU0VSVCghZW50cnktPm1f
d2F0Y2hwb2ludHMpOworICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKKyAgICAgICAgcmV0
dXJuOwogICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0
Y2hwb2ludFNldCgpKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMDU0KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTMtMTIt
MDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbmZlciBjb25z
dGFudCBjbG9zdXJlIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI0NjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYm90aCBjb3JyZWN0bmVzcyBhbmQgcGVy
Zm9ybWFuY2UgdGVzdHMgZm9yIGNvbnN0YW50IGNsb3N1cmUgdmFyaWFibGUKKyAgICAgICAgaW5m
ZXJlbmNlLgorCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLXB1dC10by1zY29wZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJl
LWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGlu
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1yZWVudGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5qczogQWRkZWQuCisgICAg
ICAgICh0aGluZ3kuKToKKyAgICAgICAgKHRoaW5neSk6CisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5qczogQWRk
ZWQuCisgICAgICAgICh0aGluZ3kuKToKKyAgICAgICAgKHRoaW5neSk6CisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8t
aW5saW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKC5yZXR1cm4uZm9vKToKKyAgICAgICAgKGZvbyk6
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXIuanM6IEFkZGVkLgorICAgICAgICAoLnJldHVybi5mb28pOgorICAgICAgICAo
Zm9vKToKKwogMjAxMy0xMi0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
IAogICAgICAgICBMYXlvdXQgVGVzdCBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWFyY2gt
cHJlZGljYXRlLWVsZW1lbnQtY291bnQuaHRtbCBpcyBmbGFreQpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3YtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
dgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhy
b3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92
LW5vLWlubGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1tb3Ytbm8taW5saW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxp
bmUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
di1uby1pbmxpbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8t
aW5saW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
di1uby1pbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNz
LXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92Lmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1tb3YuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tbW92LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUtbm8taW5saW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3Bl
LW5vLWlubGluZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5s
aW5lLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10
by1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZl
ci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
aW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1yZWVudGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlcgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXIt
Y2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LXJlZW50ZXItbm8taW5saW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5s
aW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1y
ZWVudGVyLW5vLWlubGluZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1yZWVudGVyLW5vLWlubGluZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVu
dGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcmVlbnRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3Ytbm8taW5saW5lLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorKGZ1bmN0aW9uKCl7CisgICAgdmFyIGEg
PSA0MjsKKyAgICB2YXIgYiA9IDIzOworICAgIHZhciBjID0gODQ7CisgICAgdmFyIGQgPSAxMzsK
KyAgICB2YXIgZSA9IDkwOworICAgIHZhciBmID0gMzQ7CisgICAgdmFyIGcgPSA1MjsKKyAgICAK
KyAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSAr
IGYgKyBnOworICAgIH0KKyAgICAKKyAgICBub0lubGluZShmb28pOworICAgIAorICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgNTAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbygp
OworICAgICAgICBpZiAocmVzdWx0ICE9IDQyICsgMjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUy
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBhID0gMTsKKyAgICBiID0gMjsKKyAgICBjID0gMzsKKyAgICBkID0gNDsK
KyAgICBlID0gNTsKKyAgICBmID0gNjsKKyAgICBnID0gNzsKKyAgICAKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOworCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tbW92LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tbW92LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKyhmdW5jdGlvbigp
eworICAgIHZhciBhID0gNDI7CisgICAgdmFyIGIgPSAyMzsKKyAgICB2YXIgYyA9IDg0OworICAg
IHZhciBkID0gMTM7CisgICAgdmFyIGUgPSA5MDsKKyAgICB2YXIgZiA9IDM0OworICAgIHZhciBn
ID0gNTI7CisgICAgCisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICByZXR1cm4gYSArIGIg
KyBjICsgZCArIGUgKyBmICsgZzsKKyAgICB9CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyArIDkwICsgMzQgKyA1MikKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgYSA9IDE7CisgICAgYiA9IDI7CisgICAgYyA9IDM7CisgICAgZCA9IDQ7CisgICAgZSA9IDU7
CisgICAgZiA9IDY7CisgICAgZyA9IDc7CisgICAgCisgICAgdmFyIHJlc3VsdCA9IGZvbygpOwor
ICAgIGlmIChyZXN1bHQgIT0gMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNykKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1
dC10by1zY29wZS1uby1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1u
by1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACit2YXIgdGhpbmd5ID0gKGZ1bmN0aW9u
KCl7CisgICAgdmFyIGEgPSA0MjsKKyAgICB2YXIgYiA9IDIzOworICAgIHZhciBjID0gODQ7Cisg
ICAgdmFyIGQgPSAxMzsKKyAgICB2YXIgZSA9IDkwOworICAgIHZhciBmID0gMzQ7CisgICAgdmFy
IGcgPSA1MjsKKyAgICByZXR1cm4geworICAgICAgICBmb286IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgICAgIH0sCisgICAg
ICAgIGJhcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhID0gMTsKKyAgICAgICAgICAgIGIg
PSAyOworICAgICAgICAgICAgYyA9IDM7CisgICAgICAgICAgICBkID0gNDsKKyAgICAgICAgICAg
IGUgPSA1OworICAgICAgICAgICAgZiA9IDY7CisgICAgICAgICAgICBnID0gNzsKKyAgICAgICAg
fQorICAgIH07Cit9KSgpOworCitub0lubGluZSh0aGluZ3kuZm9vKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAyMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOwor
ICAgIGlmIChyZXN1bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordGhpbmd5LmJh
cigpOwordmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKK2lmIChyZXN1bHQgIT0gMSArIDIgKyAz
ICsgNCArIDUgKyA2ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzQgQEAKK3ZhciB0aGluZ3kgPSAoZnVuY3Rpb24oKXsKKyAgICB2YXIg
YSA9IDQyOworICAgIHZhciBiID0gMjM7CisgICAgdmFyIGMgPSA4NDsKKyAgICB2YXIgZCA9IDEz
OworICAgIHZhciBlID0gOTA7CisgICAgdmFyIGYgPSAzNDsKKyAgICB2YXIgZyA9IDUyOworICAg
IHJldHVybiB7CisgICAgICAgIGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4g
YSArIGIgKyBjICsgZCArIGUgKyBmICsgZzsKKyAgICAgICAgfSwKKyAgICAgICAgYmFyOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGEgPSAxOworICAgICAgICAgICAgYiA9IDI7CisgICAgICAg
ICAgICBjID0gMzsKKyAgICAgICAgICAgIGQgPSA0OworICAgICAgICAgICAgZSA9IDU7CisgICAg
ICAgICAgICBmID0gNjsKKyAgICAgICAgICAgIGcgPSA3OworICAgICAgICB9CisgICAgfTsKK30p
KCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1
bHQgPSB0aGluZ3kuZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyAr
IDkwICsgMzQgKyA1MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCit0aGluZ3kuYmFyKCk7Cit2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOworaWYg
KHJlc3VsdCAhPSAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQorICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcmVlbnRlci1uby1pbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAor
ZnVuY3Rpb24gZm9vKGFfLCBiXywgY18sIGRfLCBlXywgZl8sIGdfKSB7CisgICAgdmFyIGEgPSBh
XzsKKyAgICB2YXIgYiA9IGJfOworICAgIHZhciBjID0gY187CisgICAgdmFyIGQgPSBkXzsKKyAg
ICB2YXIgZSA9IGVfOworICAgIHZhciBmID0gZl87CisgICAgdmFyIGcgPSBnXzsKKyAgICByZXR1
cm4geworICAgICAgICBmb286IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIGEgKyBi
ICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgICAgIH0KKyAgICB9OworfQorCitub0lubGluZShm
b28pOworCit2YXIgdGhpbmd5ID0gZm9vKDQyLCAyMywgODQsIDEzLCA5MCwgMzQsIDUyKTsKK25v
SW5saW5lKHRoaW5neS5mb28pOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7
CisgICAgdmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsg
MjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oMSwgMiwgMywgNCwgNSwg
NiwgNykuZm9vKCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
aW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cmVlbnRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBmb28o
YV8sIGJfLCBjXywgZF8sIGVfLCBmXywgZ18pIHsKKyAgICB2YXIgYSA9IGFfOworICAgIHZhciBi
ID0gYl87CisgICAgdmFyIGMgPSBjXzsKKyAgICB2YXIgZCA9IGRfOworICAgIHZhciBlID0gZV87
CisgICAgdmFyIGYgPSBmXzsKKyAgICB2YXIgZyA9IGdfOworICAgIHJldHVybiB7CisgICAgICAg
IGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUg
KyBmICsgZzsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3ZhciB0aGluZ3kgPSBmb28oNDIsIDIz
LCA4NCwgMTMsIDkwLCAzNCwgNTIpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytp
KSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
ICsgMjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oMSwgMiwgMywgNCwg
NSwgNiwgNykuZm9vKCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>
<flag name="commit-queue"
          id="241752"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218371</attachid>
            <date>2013-12-03 18:26:12 -0800</date>
            <delta_ts>2013-12-04 10:55:27 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66734</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMDYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDEzLTEyLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SW5mZXIgY29uc3RhbnQgY2xvc3VyZSB2YXJpYWJsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDYzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQ2FwdHVyZWQgdmFyaWFibGVzIHRoYXQg
YXJlIGFzc2lnbmVkIG9uY2UgKG5vdCBjb3VudGluZyBvcF9lbnRlcidzIFVuZGVmaW5lZAorICAg
ICAgICBpbml0aWFsaXphdGlvbikgYW5kIHRoYXQgYXJlIGNvbnRhaW5lZCB3aXRoaW4gYSBmdW5j
dGlvbiB0aGF0IGhhcyB0aHVzIGZhciBvbmx5IGJlZW4KKyAgICAgICAgZW50ZXJlZCBvbmNlIGFy
ZSBub3cgY29uc3RhbnQgZm9sZGVkLiBJdCdzIHByZXR0eSBhd2Vzb21lLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBpbnZvbHZlcyBhIHdhdGNocG9pbnQgb24gdGhlIGFzc2lnbm1lbnQgdG8gdmFy
aWFibGVzIGFuZCBhIHdhdGNocG9pbnQgb24gZW50cnkKKyAgICAgICAgaW50byB0aGUgZnVuY3Rp
b24uIFRoZSBmb3JtZXIgaXMgcmV1c2VkIGZyb20gZ2xvYmFsIHZhcmlhYmxlIGNvbnN0YW50IGlu
ZmVyZW5jZSBhbmQgdGhlCisgICAgICAgIGxhdHRlciBpcyByZXVzZWQgZnJvbSBvbmUtdGltZSBj
bG9zdXJlIGluZmVyZW5jZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAg
ICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246Oklu
c3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKEpTQzo6
cGFkT3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6VW5saW5rZWRJbnN0cnVjdGlvbjo6VW5saW5rZWRJbnN0cnVjdGlvbik6
CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg6CisgICAgICAgIChK
U0M6OlZhcmlhYmxlV2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgICogYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6YWRkVmFyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRJbml0TGF6eVJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRNb3ZlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXROZXdGdW5jdGlvbkludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmNyZWF0ZUFyZ3VtZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZh
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjp3YXRjaGFibGVWYXJpYWJsZSk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6Z2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjppbmZlcnJlZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBh
cnNlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjp0cnlHZXRBY3RpdmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0
UmVnaXN0ZXJzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX21vdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXB0dXJlZF9tb3YpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2NhcHR1cmVkX2Z1bmMpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhcHR1cmVkX21vdik6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAg
ICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93
UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbnN0YW50TW9kZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9KU1Njb3Bl
LmNwcDoKKyAgICAgICAgKEpTQzo6YWJzdHJhY3RBY2Nlc3MpOgorICAgICAgICAqIHJ1bnRpbWUv
U3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJl
VG9XYXRjaCk6CisKIDIwMTMtMTItMDMgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgog
CiAgICAgICAgIHRlc3RhcGkgdGVzdCBjcmFzaGVzIG9uIFdpbmRvd3MgaW4gV1RGOjpWZWN0b3I8
d2NoYXJfdCw2NCxXVEY6OlVuc2FmZVZlY3Rvck92ZXJmbG93Pjo6c2l6ZSgpLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2MDA0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNv
cHkpCkBAIC04MTksNiArODE5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGxldGlvbi5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBsZXRpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uY3VycmVudEpJVExvY2suaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uc3RhbnRNb2RlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bnN0cnVjdERhdGEuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25zdHJ1
Y3REYXRhLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGFWaWV3LmNwcCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2
MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExMTMsNiArMTExMyw3IEBA
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbW1vblNsb3dQYXRoc0V4Y2Vw
dGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGlsYXRp
b25SZXN1bHQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGxl
dGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb25zdGFudE1v
ZGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0
YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5oIiAv
PgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0b3IuaCIg
Lz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjAwNDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQxLDYgKzU0MSw3IEBACiAJCTBGRkI5MjFFMTZE
MDJGNDcwMDU1QTVEQiAvKiBERkdWYXJpYWRpY0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyog
REZHVmFyaWFkaWNGdW5jdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGRkI5MjFGMTZEMDMzMDUwMDU1QTVEQiAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25z
dHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkzMERBRDAzMEZCMUVCMUEwMDgyRDIwNSAvKiBOb2RlQ29uc3RydWN0b3JzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGQzk5RDExODRFQzhB
RDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9k
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZGQzk0QjE0RUY5MDk1MDBDNzI1MzIg
LyogREZHQ0ZBUGhhc2UuY3BwICovOyB9OwogCQkwRkZGQzk1ODE0RUY5MEEyMDBDNzI1MzIgLyog
REZHQ0ZBUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRkZDOTRDMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRkZDOTU5MTRFRjkwQTYw
MEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NFUGhhc2Uu
Y3BwICovOyB9OwpAQCAtMTgzMiw2ICsxODMzLDcgQEAKIAkJMEZGNzI5QTExNjZBRDM0NzAwMEY1
QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9m
aWxlck9yaWdpblN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5
QTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBwYXRoID0gcHJvZmls
ZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBKU0NMTEludE9mZnNl
dHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGRkM5
OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBDb25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRkZDOTRCMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkFQaGFzZS5jcHA7IHBhdGggPSBkZmcv
REZHQ0ZBUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZGQzk0QzE0
RUY5MDk1MDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ0ZBUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDRkFQaGFzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZGQzk0RDE0RUY5MDk1MDBDNzI1MzIgLyogREZHQ1NF
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ1NFUGhh
c2UuY3BwOyBwYXRoID0gZGZnL0RGR0NTRVBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMzNzQsNiArMzM3Niw3IEBACiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgx
IC8qIENvbXBsZXRpb24uY3BwICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBD
b21wbGV0aW9uLmggKi8sCiAJCQkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJl
bnRKSVRMb2NrLmggKi8sCisJCQkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50
TW9kZS5oICovLAogCQkJCUJDQTYyREZGMEUyODI2MzEwMDA0RjMwRCAvKiBDb25zdHJ1Y3REYXRh
LmNwcCAqLywKIAkJCQlCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29uc3RydWN0RGF0YS5o
ICovLAogCQkJCTBGMkI2NkIwMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5jcHAgKi8sCkBA
IC00MzU5LDYgKzQzNjIsNyBAQAogCQkJCTBGRDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdP
U1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMw
OTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZGQzk5RDExODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhpdENvbXBp
bGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQy
IC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc2OCw2ICs3NjgsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhcHR1
cmVkX21vdiIpOwogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1l
KHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgICsraXQ7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewpA
QCAtMTIyNCw5ICsxMjI1LDkgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0
cmVhbQogICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOiB7CiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmMCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHNob3VsZENoZWNrID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJuZXdfY2FwdHVyZWRfZnVuYyIpOwotICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsIGYl
ZCwgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjAsIHNob3VsZENoZWNrID8gIjxDaGVj
a2VkPiIgOiAiPFVuY2hlY2tlZD4iKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQi
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgZjApOworICAgICAgICAgICAgKytpdDsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOiB7
CkBAIC0xNTUxLDEwICsxNTUyLDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1
dGFibGUqIG8KIHsKICAgICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogCisgICAgYm9v
bCBkaWRDbG9uZVN5bWJvbFRhYmxlID0gZmFsc2U7CisgICAgCiAgICAgaWYgKFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSB7Ci0gICAg
ICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1ib2xUYWJsZS0+Y2FwdHVy
ZUNvdW50KCkpCisgICAgICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBzeW1i
b2xUYWJsZS0+Y2FwdHVyZUNvdW50KCkpIHsKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0
KCptX3ZtLCBtX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUtPmNsb25lKCptX3Zt
KSk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRpZENsb25lU3ltYm9sVGFibGUgPSB0cnVl
OworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KCptX3ZtLCBt
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgc3ltYm9sVGFibGUpOwogICAgIH0KICAgICAKQEAgLTE4
MjAsMTEgKzE4MjQsMjggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBSZXNvbHZlTW9k
ZUFuZFR5cGUobW9kZUFuZFR5cGUubW9kZSgpLCBvcC50eXBlKS5vcGVyYW5kKCk7CiAgICAgICAg
ICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0u
dS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hwb2ludFNldDsKLSAgICAgICAgICAgIGVsc2UgaWYg
KG9wLnN0cnVjdHVyZSkKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wLnR5cGUgPT0gQ2xvc3VyZVZh
ciB8fCBvcC50eXBlID09IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG9wLndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICAgICAgICAgIG9w
LndhdGNocG9pbnRTZXQtPmludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob3Au
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG9wLm9wZXJhbmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2Fw
dHVyZWRfZnVuYzogeworICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gcGNbaSArIDNdLnUu
dWlkOworICAgICAgICAgICAgaWYgKCF1aWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRDbG9uZVN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CisgICAg
ICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+
ZmluZChsb2NrZXIsIHVpZCk7CisgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRh
YmxlLT5lbmQobG9ja2VyKSk7CisgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRj
aCgpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAzXS51LndhdGNocG9pbnRTZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsMTYgKzkwLDEzIEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgSW5z
dHJ1Y3Rpb24oUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZ2V0dGVyRnVuYykgeyB1LmdldHRl
ckZ1bmMgPSBnZXR0ZXJGdW5jOyB9CiAgICAgICAgIAogICAgIEluc3RydWN0aW9uKExMSW50Q2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8pIHsgdS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87
IH0KLSAgICAgICAgCiAgICAgSW5zdHJ1Y3Rpb24oVmFsdWVQcm9maWxlKiBwcm9maWxlKSB7IHUu
cHJvZmlsZSA9IHByb2ZpbGU7IH0KICAgICBJbnN0cnVjdGlvbihBcnJheVByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5hcnJheVByb2ZpbGUgPSBwcm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSogcHJvZmlsZSkgeyB1LmFycmF5QWxsb2NhdGlvblByb2ZpbGUgPSBw
cm9maWxlOyB9CiAgICAgSW5zdHJ1Y3Rpb24oT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIHByb2Zp
bGUpIHsgdS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZSA9IHByb2ZpbGU7IH0KLSAgICAgICAgCiAg
ICAgSW5zdHJ1Y3Rpb24oV3JpdGVCYXJyaWVyPFVua25vd24+KiByZWdpc3RlclBvaW50ZXIpIHsg
dS5yZWdpc3RlclBvaW50ZXIgPSByZWdpc3RlclBvaW50ZXI7IH0KLSAgICAgICAgCiAgICAgSW5z
dHJ1Y3Rpb24oU3BlY2lhbDo6UG9pbnRlciBwb2ludGVyKSB7IHUuc3BlY2lhbFBvaW50ZXIgPSBw
b2ludGVyOyB9Ci0gICAgICAgIAorICAgIEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1
LnVpZCA9IHVpZDsgfQogICAgIEluc3RydWN0aW9uKGJvb2wqIHByZWRpY2F0ZVBvaW50ZXIpIHsg
dS5wcmVkaWNhdGVQb2ludGVyID0gcHJlZGljYXRlUG9pbnRlcjsgfQogCiAgICAgdW5pb24gewpA
QCAtMTEyLDYgKzEwOSw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIFNwZWNpYWw6
OlBvaW50ZXIgc3BlY2lhbFBvaW50ZXI7CiAgICAgICAgIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jIGdldHRlckZ1bmM7CiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm87
CisgICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
OwogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1
KSBcCiAgICAgbWFjcm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykg
XAotICAgIG1hY3JvKG9wX2NhcHR1cmVkX21vdiwgMykgXAorICAgIG1hY3JvKG9wX2NhcHR1cmVk
X21vdiwgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAgICBtYWNybyhvcF9l
cSwgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjks
OSArMjI5LDExIEBAIHN0cnVjdCBVbmxpbmtlZEluc3RydWN0aW9uIHsKICAgICBVbmxpbmtlZElu
c3RydWN0aW9uKCkgeyB1Lm9wZXJhbmQgPSAwOyB9CiAgICAgVW5saW5rZWRJbnN0cnVjdGlvbihP
cGNvZGVJRCBvcGNvZGUpIHsgdS5vcGNvZGUgPSBvcGNvZGU7IH0KICAgICBVbmxpbmtlZEluc3Ry
dWN0aW9uKGludCBvcGVyYW5kKSB7IHUub3BlcmFuZCA9IG9wZXJhbmQ7IH0KKyAgICBVbmxpbmtl
ZEluc3RydWN0aW9uKFN0cmluZ0ltcGwqIHVpZCkgeyB1LnVpZCA9IHVpZDsgfQogICAgIHVuaW9u
IHsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlOwogICAgICAgICBpbnQzMl90IG9wZXJhbmQ7Cisg
ICAgICAgIFN0cmluZ0ltcGwqIHVpZDsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5o
CShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCw4IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGludmFsaWRhdGUoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KCEhbV9pbmZlcnJlZFZhbHVlKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVk
KTsKICAgICAgICAgbV9pbmZlcnJlZFZhbHVlID0gSlNWYWx1ZSgpOwotICAgICAgICBmaXJlQWxs
KCk7CisgICAgICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw2ICsxMTUsMTMgQEAgcHVibGljOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmaXJl
QWxsKCk7CiAgICAgfQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZSgpCisgICAgeworICAgICAg
ICBpZiAoc3RhdGUoKSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICBmaXJlQWxsKCk7CisgICAg
ICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOworICAgIH0KIAogICAgIGludDhfdCogYWRkcmVz
c09mU3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0
SXNOb3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE5ICsx
MTUsMzEgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKAogICAgIHJl
dHVybiBQYXJzZXJFcnJvcihQYXJzZXJFcnJvcjo6RXJyb3JOb25lKTsKIH0KIAotYm9vbCBCeXRl
Y29kZUdlbmVyYXRvcjo6YWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBib29sIGlzQ29u
c3RhbnQsIFJlZ2lzdGVySUQqJiByMCkKK2Jvb2wgQnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFZhcigK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgQ29uc3RhbnRNb2RlIGNvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlIHdhdGNoTW9kZSwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIEFTU0VSVChzdGF0
aWNfY2FzdDxzaXplX3Q+KG1fY29kZUJsb2NrLT5tX251bVZhcnMpID09IG1fY2FsbGVlUmVnaXN0
ZXJzLnNpemUoKSk7CisgICAgCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUoKS5tX2xvY2spOwogICAgIGludCBpbmRleCA9IHZpcnR1YWxSZWdpc3RlckZvckxvY2Fs
KG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKSkub2Zmc2V0KCk7Ci0gICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7CisgICAgU3ltYm9s
VGFibGVFbnRyeSBuZXdFbnRyeShpbmRleCwgY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQgPyBS
ZWFkT25seSA6IDApOwogICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBz
eW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwogCiAgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9ICZyZWdpc3RlckZvcihyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotCisgICAgCisgICAgaWYgKHdhdGNoTW9kZSA9PSBJc1dhdGNoYWJsZSkgeworICAgICAg
ICB3aGlsZSAobV93YXRjaGFibGVWYXJpYWJsZXMuc2l6ZSgpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSkKKyAgICAgICAgICAgIG1fd2F0Y2hhYmxlVmFyaWFi
bGVzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgbV93YXRjaGFibGVWYXJpYWJsZXMuYXBwZW5k
KGlkZW50LmltcGwoKSk7CisgICAgfQorICAgIAogICAgIHIwID0gYWRkVmFyKCk7CisgICAgCisg
ICAgQVNTRVJUKHdhdGNoTW9kZSA9PSBOb3RXYXRjaGFibGUgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihtX2NvZGVCbG9jay0+bV9udW1WYXJzKSA9PSBtX3dhdGNoYWJsZVZhcmlhYmxlcy5zaXplKCkp
OworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMzYsNyArMjQ4LDcgQEAgQnl0ZWNv
ZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogCiAgICAgaWYgKGZ1bmN0aW9uQm9k
eS0+dXNlc0FyZ3VtZW50cygpIHx8IGNvZGVCbG9jay0+dXNlc0V2YWwoKSkgeyAvLyBNYXkgcmVp
ZnkgYXJndW1lbnRzIG9iamVjdC4KICAgICAgICAgUmVnaXN0ZXJJRCogdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyID0gYWRkVmFyKCk7IC8vIEFub255bW91cywgc28gaXQgY2FuJ3QgYmUgbW9k
aWZpZWQgYnkgdXNlciBjb2RlLgotICAgICAgICBSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3Rl
ciA9IGFkZFZhcihwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzLCBmYWxzZSk7IC8vIENhbiBiZSBj
aGFuZ2VkIGJ5IGFzc2lnbmluZyB0byAnYXJndW1lbnRzJy4KKyAgICAgICAgUmVnaXN0ZXJJRCog
YXJndW1lbnRzUmVnaXN0ZXIgPSBhZGRWYXIocHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cywgSXNW
YXJpYWJsZSwgTm90V2F0Y2hhYmxlKTsgLy8gQ2FuIGJlIGNoYW5nZWQgYnkgYXNzaWduaW5nIHRv
ICdhcmd1bWVudHMnLgogCiAgICAgICAgIC8vIFdlIGNhbiBzYXZlIGEgbGl0dGxlIHNwYWNlIGJ5
IGhhcmQtY29kaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCB0aGUgdHdvCiAgICAgICAgIC8vICdhcmd1
bWVudHMnIHZhbHVlcyBhcmUgc3RvcmVkIGluIGNvbnNlY3V0aXZlIHJlZ2lzdGVycywgYW5kIHN0
b3JpbmcKQEAgLTMwNywxMyArMzE5LDEzIEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1f
YWN0aXZhdGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAg
ZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlv
bik7CisgICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgSXNWYXJp
YWJsZSwgSXNXYXRjaGFibGUpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJTdGFjay5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSB2YXJTdGFj
a1tpXS5maXJzdDsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkJvZHktPmNhcHR1cmVzKGlkZW50
KSkKLSAgICAgICAgICAgICAgICBhZGRWYXIoaWRlbnQsIHZhclN0YWNrW2ldLnNlY29uZCAmIERl
Y2xhcmF0aW9uU3RhY2tzOjpJc0NvbnN0YW50KTsKKyAgICAgICAgICAgICAgICBhZGRWYXIoaWRl
bnQsICh2YXJTdGFja1tpXS5zZWNvbmQgJiBEZWNsYXJhdGlvblN0YWNrczo6SXNDb25zdGFudCkg
PyBJc0NvbnN0YW50IDogSXNWYXJpYWJsZSwgSXNXYXRjaGFibGUpOwogICAgICAgICB9CiAgICAg
fQogICAgIGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVl
ZHNBY3RpdmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdI
b29rczsKQEAgLTMzMSw3ICszNDMsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY3Rpb24tPmlk
ZW50KCk7CiAgICAgICAgIGlmICghZnVuY3Rpb25Cb2R5LT5jYXB0dXJlcyhpZGVudCkpIHsKICAg
ICAgICAgICAgIG1fZnVuY3Rpb25zLmFkZChpZGVudC5pbXBsKCkpOwotICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgZmFsc2UpOworICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJlZyA9IGFkZFZhcihpZGVudCwgSXNWYXJpYWJsZSwgTm90V2F0
Y2hhYmxlKTsKICAgICAgICAgICAgIC8vIERvbid0IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRo
YXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMg
d291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4K
ICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHBy
b3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCkBAIC0zNDYsNyArMzU4LDcgQEAgQnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dmFyU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSB2YXJTdGFja1tpXS5maXJzdDsKICAgICAgICAgaWYgKCFmdW5jdGlvbkJvZHktPmNhcHR1cmVz
KGlkZW50KSkKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgdmFyU3RhY2tbaV0uc2Vjb25kICYg
RGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50
LCAodmFyU3RhY2tbaV0uc2Vjb25kICYgRGVjbGFyYXRpb25TdGFja3M6OklzQ29uc3RhbnQpID8g
SXNDb25zdGFudCA6IElzVmFyaWFibGUsIE5vdFdhdGNoYWJsZSk7CiAgICAgfQogCiAgICAgaWYg
KHNob3VsZENhcHR1cmVBbGxUaGVUaGluZ3MpCkBAIC00NTcsNiArNDY5LDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbml0TAogewogICAgIGVtaXRPcGNvZGUob3BfaW5p
dF9sYXp5X3JlZyk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlZy0+aW5kZXgoKSk7Cisg
ICAgQVNTRVJUKCF3YXRjaGFibGVWYXJpYWJsZShyZWctPmluZGV4KCkpKTsKICAgICByZXR1cm4g
cmVnOwogfQogCkBAIC0xMDA3LDYgKzEwMjAsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE1vdmUoCiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfY2FwdHVyZWRfbW92IDogb3BfbW92KTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsK
KyAgICBpZiAoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCkKKyAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHdhdGNoYWJsZVZhcmlhYmxlKGRzdC0+aW5kZXgoKSkpOwogICAgIHJldHVybiBk
c3Q7CiB9CiAKQEAgLTE1NzksNyArMTU5NCwxMSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1CiAgICAgZW1pdE9wY29kZShjYXB0dXJlTW9kZSA9PSBJc0NhcHR1cmVk
ID8gb3BfbmV3X2NhcHR1cmVkX2Z1bmMgOiBvcF9uZXdfZnVuYyk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGluZGV4
KTsKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZG9OdWxsQ2hlY2spOworICAgIGlmIChjYXB0
dXJlTW9kZSA9PSBJc0NhcHR1cmVkKSB7CisgICAgICAgIEFTU0VSVCghZG9OdWxsQ2hlY2spOwor
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQod2F0Y2hhYmxlVmFyaWFibGUoZHN0LT5pbmRl
eCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkb051bGxD
aGVjayk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtMTYyMSw2ICsxNjQwLDcgQEAgdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQXJndW1lbnRzSQogCiAgICAgZW1pdE9wY29kZShvcF9j
cmVhdGVfYXJndW1lbnRzKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2st
PmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpOworICAgIEFTU0VSVCghd2F0Y2hhYmxlVmFy
aWFibGUobV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkub2Zmc2V0KCkpKTsKIH0KIAog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6Y3JlYXRlQWN0aXZhdGlvbklmTmVjZXNzYXJ5KCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNDk3
LDE1ICs0OTcsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG5ld1Jl
Z2lzdGVyKCk7CiAKICAgICAgICAgLy8gQWRkcyBhIHZhciBzbG90IGFuZCBtYXBzIGl0IHRvIHRo
ZSBuYW1lIGlkZW50IGluIHN5bWJvbFRhYmxlKCkuCi0gICAgICAgIFJlZ2lzdGVySUQqIGFkZFZh
cihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50KQorICAgICAgICBlbnVt
IFdhdGNoTW9kZSB7IElzV2F0Y2hhYmxlLCBOb3RXYXRjaGFibGUgfTsKKyAgICAgICAgUmVnaXN0
ZXJJRCogYWRkVmFyKGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBDb25zdGFudE1vZGUgY29uc3Rh
bnRNb2RlLCBXYXRjaE1vZGUgd2F0Y2hNb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBSZWdp
c3RlcklEKiBsb2NhbDsKLSAgICAgICAgICAgIGFkZFZhcihpZGVudCwgaXNDb25zdGFudCwgbG9j
YWwpOworICAgICAgICAgICAgYWRkVmFyKGlkZW50LCBjb25zdGFudE1vZGUsIHdhdGNoTW9kZSwg
bG9jYWwpOwogICAgICAgICAgICAgcmV0dXJuIGxvY2FsOwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRGl0dG8uIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBSZWdpc3RlcklEIHdhcyBhZGRlZCwgZmFs
c2UgaWYgYSBwcmUtZXhpc3RpbmcgUmVnaXN0ZXJJRCB3YXMgcmUtdXNlZC4KLSAgICAgICAgYm9v
bCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRCom
KTsKKyAgICAgICAgYm9vbCBhZGRWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSwg
V2F0Y2hNb2RlLCBSZWdpc3RlcklEKiYpOwogICAgICAgICAKICAgICAgICAgLy8gQWRkcyBhbiBh
bm9ueW1vdXMgdmFyIHNsb3QuIFRvIGdpdmUgdGhpcyBzbG90IGEgbmFtZSwgYWRkIGl0IHRvIHN5
bWJvbFRhYmxlKCkuCiAgICAgICAgIFJlZ2lzdGVySUQqIGFkZFZhcigpCkBAIC01OTAsNiArNTkx
LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNyZWF0ZUFjdGl2YXRpb25JZk5l
Y2Vzc2FyeSgpOwogICAgICAgICBSZWdpc3RlcklEKiBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vz
c2FyeShSZWdpc3RlcklEKik7CiAgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiB3YXRjaGFi
bGVWYXJpYWJsZShpbnQgb3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlZyhvcGVyYW5kKTsKKyAgICAgICAgICAgIGlmICghcmVnLmlzTG9jYWwoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXpl
X3Q+KHJlZy50b0xvY2FsKCkpID49IG1fd2F0Y2hhYmxlVmFyaWFibGVzLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX3dhdGNoYWJsZVZhcmlh
Ymxlc1tyZWcudG9Mb2NhbCgpXTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgVmVjdG9y
PFVubGlua2VkSW5zdHJ1Y3Rpb24sIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX2luc3RydWN0
aW9uczsKIAogICAgICAgICBib29sIG1fc2hvdWxkRW1pdERlYnVnSG9va3M7CkBAIC02MDksNiAr
NjIwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fYWN0aXZhdGlv
blJlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEKiBtX2VtcHR5VmFsdWVSZWdpc3RlcjsKICAg
ICAgICAgUmVnaXN0ZXJJRCogbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKKyAgICAgICAgVmVjdG9y
PFN0cmluZ0ltcGwqLCAxNj4gbV93YXRjaGFibGVWYXJpYWJsZXM7CiAgICAgICAgIFNlZ21lbnRl
ZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jb25zdGFudFBvb2xSZWdpc3RlcnM7CiAgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9jYWxsZWVSZWdpc3RlcnM7CiAgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsNiArMjYzLDI0IEBAIHByaXZhdGU6CiAg
ICAgTm9kZSogZ2V0TG9jYWwoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewogICAgICAg
ICB1bnNpZ25lZCBsb2NhbCA9IG9wZXJhbmQudG9Mb2NhbCgpOworCisgICAgICAgIGlmIChsb2Nh
bCA8IG1fbG9jYWxXYXRjaHBvaW50cy5zaXplKCkpIHsKKyAgICAgICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbG9jYWxXYXRjaHBvaW50c1tsb2NhbF0pIHsKKyAgICAg
ICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwg
T3BJbmZvKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQg
c3RhbmRwb2ludC4gV2Ugd291bGRuJ3QgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0
byBkbyB0aGlzIGZvciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdy
ZSBkZWFsaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBG
b3IgbW9zdCBsb2NhbHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCisgICAgICAg
ICAgICAgICAgICAgIC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcg
SVIgd2hlcmV2ZXIgdGhlcmUgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgICAgICAvLyBiZWVu
IHVzZXMgaW4gYnl0ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8g
dGhpcy4gQnV0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdl
IGRvbid0IG5lZWQgdG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvY2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9y
IGNhcHR1cmVkIGxvY2Fscy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29u
c3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKTsKICAgICAgICAgYm9vbCBpc0NhcHR1cmVkID0gbV9jb2RlQmxvY2stPmlz
Q2FwdHVyZWQob3BlcmFuZCwgaW5saW5lQ2FsbEZyYW1lKCkpOwogICAgICAgICAKQEAgLTY4NCw2
ICs3MDIsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CiAgICAgfQogICAgIAorICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHJldHVy
biBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOworICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudEZvclZhbHVlKHZhbHVlLCAwKTsKKyAgICB9CisgICAgCiAgICAgSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tU
b3AtPm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtMTAwMCw2ICsxMDI1LDggQEAgcHJpdmF0ZToKIAog
ICAgIEhhc2hNYXA8Q29uc3RhbnRCdWZmZXJLZXksIHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVy
Q2FjaGU7CiAgICAgCisgICAgVmVjdG9yPFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIDE2PiBtX2xv
Y2FsV2F0Y2hwb2ludHM7CisgICAgCiAgICAgc3RydWN0IElubGluZVN0YWNrRW50cnkgewogICAg
ICAgICBCeXRlQ29kZVBhcnNlciogbV9ieXRlQ29kZVBhcnNlcjsKICAgICAgICAgCkBAIC0yMTQ1
LDEyICsyMTcyLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJlYWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKLSAgICAgICAgY2FzZSBvcF9tb3Y6Ci0gICAgICAgIGNh
c2Ugb3BfY2FwdHVyZWRfbW92OiB7CisgICAgICAgIGNhc2Ugb3BfbW92OiB7CiAgICAgICAgICAg
ICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92
KTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92
OiB7CisgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCkKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8oc2V0KSwgb3ApOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgb3ApOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FwdHVyZWRfbW92KTsK
KyAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgogICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0hhc0luc3RhbmNlLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CkBAIC0zMDI2LDcgKzMwNjAsNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBv
cF9nZXRfZnJvbV9zY29wZTogewogICAgICAgICAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzY29wZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgc2NvcGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgU3RyaW5nSW1wbCogdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOwogICAgICAgICAgICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBSZXNvbHZlTW9kZUFuZFR5cGUoY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkudHlwZSgpOwpAQCAtMzA3NywxNSArMzExMSwyNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50
LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpY1Zh
bHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdl
dEpTQ29uc3RhbnRGb3JWYWx1ZShzcGVjaWZpY1ZhbHVlLCAwKSk7CisgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSk7CisgICAgICAgICAgICAgICAgaWYgKEpTQWN0aXZhdGlvbiogYWN0
aXZhdGlvbiA9IG1fZ3JhcGgudHJ5R2V0QWN0aXZhdGlvbihzY29wZU5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJv
bFRhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmZpbmQobG9ja2VyLCB1aWQpOworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBzeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikp
OworICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICh3YXRjaHBvaW50U2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2
YWx1ZSA9IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdh
dGNocG9pbnRTZXQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoR2V0Q2xvc3Vy
ZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbiksIAogICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChHZXRDbG9zdXJlUmVnaXN0ZXJzLCBzY29wZU5vZGUpKSk7
CkBAIC0zMjI2LDggKzMyNzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJndW1lbnRfYnlfdmFsKTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAg
ICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAgY2FzZSBvcF9uZXdfZnVu
YzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSB7
CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdGdW5jdGlv
bk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpOwpAQCAt
MzI0MSw2ICszMjg2LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25ld19mdW5jKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6IHsKKyAgICAgICAg
ICAgIE5vZGUqIGZ1bmN0aW9uID0gYWRkVG9HcmFwaCgKKyAgICAgICAgICAgICAgICBOZXdGdW5j
dGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90
aWZ5V3JpdGUsIE9wSW5mbyhzZXQpLCBmdW5jdGlvbik7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBmdW5jdGlvbik7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXdfY2FwdHVyZWRfZnVuYyk7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwK
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uRXhwcmVzc2lvbiwgT3BJbmZv
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkBAIC0zNjEwLDYgKzM2NjQsMjIg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJpbmcgY29uc3Ry
dWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAgIGlmIChtX2Nv
ZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpIHsKKyAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CisgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6
TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUtPmJlZ2luKGxvY2tlcik7CisgICAgICAg
IFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHN5bWJvbFRhYmxlLT5lbmQobG9ja2Vy
KTsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwor
ICAgICAgICAgICAgaWYgKCFzZXQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KFZpcnR1YWxSZWdpc3Rlcihp
dGVyLT52YWx1ZS5nZXRJbmRleCgpKS50b0xvY2FsKCkpOworICAgICAgICAgICAgd2hpbGUgKG1f
bG9jYWxXYXRjaHBvaW50cy5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgICAgICAgICAgbV9sb2Nh
bFdhdGNocG9pbnRzLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgICAgIG1fbG9jYWxXYXRjaHBv
aW50c1tpbmRleF0gPSBzZXQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSW5saW5lU3Rh
Y2tFbnRyeSBpbmxpbmVTdGFja0VudHJ5KAogICAgICAgICB0aGlzLCBtX2NvZGVCbG9jaywgbV9w
cm9maWxlZEJsb2NrLCAwLCAwLCBWaXJ0dWFsUmVnaXN0ZXIoKSwgVmlydHVhbFJlZ2lzdGVyKCks
CiAgICAgICAgIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIENvZGVGb3JDYWxsKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjAwNDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzIzLDExICs3MjMsMTYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWly
ZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAotV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
PiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQorSlNBY3RpdmF0aW9uKiBHcmFw
aDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZS0+aGFzQ29u
c3RhbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9u
ID0ganNEeW5hbWljQ2FzdDxKU0FjdGl2YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7
CisgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkpOworfQorCitXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0
UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCit7CisgICAgSlNBY3RpdmF0aW9uKiBhY3RpdmF0aW9uID0g
dHJ5R2V0QWN0aXZhdGlvbihub2RlKTsKICAgICBpZiAoIWFjdGl2YXRpb24pCiAgICAgICAgIHJl
dHVybiAwOwogICAgIGlmICghYWN0aXZhdGlvbi0+aXNUb3JuT2ZmKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5MSw2ICs3OTEs
NyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgp
OwogICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQo
KTsKICAgICAKKyAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAg
IFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAg
CiAgICAgVk0mIG1fdm07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lv
biAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChv
cF9sc2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCi0gICAgICAgIGNhc2Ugb3BfY2Fw
dHVyZWRfbW92OgorICAgICAgICBERUZJTkVfT1Aob3BfY2FwdHVyZWRfbW92KQogICAgICAgICBE
RUZJTkVfT1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJ
TkVfT1Aob3BfbmVnYXRlKQpAQCAtMjM1LDggKzIzNSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19hcnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9u
ZXdfYXJyYXlfYnVmZmVyKQotICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAg
ICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmMpCisgICAgICAgIERFRklORV9PUChvcF9uZXdfY2Fw
dHVyZWRfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9wX25ld19mdW5jX2V4cCkKICAgICAgICAg
REVGSU5FX09QKG9wX25ld19vYmplY3QpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfcmVnZXhw
KQpAQCAtMzY5LDYgKzM2OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jb25zdHJ1Y3QpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF90b190aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Y3JlYXRlX3RoaXMpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jYXB0dXJlZF9tb3Yp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kaXYpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9PUChvcF9lcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9jYWxsZWUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw2ICs0NjMs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rp
b24qKTsKQEAgLTUxNSw2ICs1MTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX25ld19hcnJheV9idWZmZXIoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX25ld19mdW5jKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfY2Fw
dHVyZWRfZnVuYyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbmV3X2Z1bmNf
ZXhwKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfb2JqZWN0KEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKik7
CkBAIC01NTksNiArNTYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
Y2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhcHR1cmVkX21vdihJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDE2MDA0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKIHsKICAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLQorICAgIAogICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25z
dGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3Rh
bnRPcGVyYW5kKHNyYykpOwogICAgIGVsc2UgewpAQCAtMTYxLDYgKzE2MSwxNiBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlCiAgICAgfQogfQogCit2b2lkIEpJVDo6
ZW1pdF9vcF9jYXB0dXJlZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCByZWdU
MiwgY3VycmVudEluc3RydWN0aW9uWzNdLnUud2F0Y2hwb2ludFNldCk7CisgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9
IGNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTIgKzU1LDIwIEBAIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmUKICAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKIAotICAgIC8vIFVzZSBzaW1wbGVyIGFwcHJvYWNoLCBzaW5jZSB0
aGUgREZHIHRoaW5rcyB0aGF0IHRoZSBsYXN0IHJlc3VsdCByZWdpc3RlcgotICAgIC8vIGlzIGFs
d2F5cyBzZXQgdG8gdGhlIGRlc3RpbmF0aW9uIG9uIGV2ZXJ5IG9wZXJhdGlvbi4KICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfY2FwdHVyZWRfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNo
cG9pbnRTZXQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwogdm9pZCBK
SVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwpAQCAt
MTE2OSw2ICsxMTc3LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19mdW5jKEluc3RydWN0aW9u
KiAKICAgICAgICAgbGF6eUp1bXAubGluayh0aGlzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2NhcHR1cmVkX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOwor
fQorCiB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKQEAgLTEyMTAsNiArMTIyNCwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlf
YnVmZmVyKEluc3RyCiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldp
dGhQcm9maWxlLCBkc3QsIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHZhbHVlcywgc2l6ZSk7CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYXB0dXJl
ZF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51LndhdGNocG9pbnRTZXQ7CisgICAgaWYgKCFzZXQgfHwg
c2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2lu
ZyBjb3B5KQpAQCAtNTQyLDE0ICs1NDIsNDMgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRj
aCgzKQogCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwg
c2NyYXRjaCwgc2xvdykKKyAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVb
c2V0XSwgc2NyYXRjaAorICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKKyAg
ICBiaW5lcSBzY3JhdGNoLCBDbGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKKyAgICBzdG9yZWkg
dmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgVGFnT2Zm
c2V0W3NldF0KKyAgICBzdG9yZWkgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQorICAgIHN0b3JlYiBJc1dhdGNo
ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisgICAgam1wIC5kb25lCisK
Ky5vdmVyd3JpdGU6CisgICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwgLmRlZmluaXRlbHlEaWZm
ZXJlbnQKKyAgICBiaWVxIHZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJy
ZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdLCAuZG9uZQorLmRlZmluaXRlbHlEaWZmZXJlbnQ6Cisg
ICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3NldElzTm90RW1wdHlbc2V0XSwgc2xv
dworICAgIHN0b3JlaSBFbXB0eVZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5m
ZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdCisgICAgc3RvcmVpIDAsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdCisgICAgc3RvcmVi
IElzSW52YWxpZGF0ZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCisKKy5k
b25lOgorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJhY2VFeGVjdXRpb24o
KQogICAgIGxvYWRpIDhbUENdLCB0MQotICAgIGxvYWRpIDRbUENdLCB0MAogICAgIGxvYWRDb25z
dGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKKyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigzLCB0
MCkKKyAgICBidHB6IHQwLCAub3BDYXB0dXJlZE1vdlJlYWR5CisgICAgbm90aWZ5V3JpdGUodDAs
IHQyLCB0MywgdDEsIC5vcENhcHR1cmVkTW92U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6Cisg
ICAgbG9hZGkgNFtQQ10sIHQwCiAgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0K
ICAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KLSAgICBkaXNwYXRjaCgz
KQorICAgIGRpc3BhdGNoKDQpCisKKy5vcENhcHR1cmVkTW92U2xvdzoKKyAgICBjYWxsU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCisgICAgZGlzcGF0Y2goNCkKIAogCiBfbGxpbnRf
b3Bfbm90OgpAQCAtMTY3NCwxMiArMTcwMyw3IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogX2xs
aW50X29wX25ld19jYXB0dXJlZF9mdW5jOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBidGl6
IDEyW1BDXSwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCi0gICAgbG9hZGkgNFtQQ10sIHQx
Ci0gICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFnLCAub3BOZXdD
YXB0dXJlZEZ1bmNEb25lCi0ub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Ci0gICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCi0ub3BOZXdDYXB0dXJlZEZ1bmNEb25l
OgorICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX25ld19jYXB0dXJlZF9mdW5jKQogICAgIGRp
c3BhdGNoKDQpCiAKIApAQCAtMjE1MywyNyArMjE3Nyw2IEBAIG1hY3JvIHB1dFByb3BlcnR5KCkK
ICAgICBzdG9yZVByb3BlcnR5QXRWYXJpYWJsZU9mZnNldCh0MSwgdDAsIHQyLCB0MykKIGVuZAog
Ci1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIHNjcmF0Y2gs
IHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNj
cmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEg
c2NyYXRjaCwgQ2xlYXJXYXRjaHBvaW50LCAub3ZlcndyaXRlCi0gICAgc3RvcmVpIHZhbHVlVGFn
LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRd
Ci0gICAgc3RvcmVpIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVy
cmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zlcndy
aXRlOgotICAgIGJpbmVxIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2lu
ZmVycmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0sIC5kZWZpbml0ZWx5RGlmZmVyZW50Ci0g
ICAgYmllcSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUg
KyBUYWdPZmZzZXRbc2V0XSwgLmRvbmUKLS5kZWZpbml0ZWx5RGlmZmVyZW50OgotICAgIGJ0Ym56
IFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zZXRJc05vdEVtcHR5W3NldF0sIHNsb3cKLSAgICBz
dG9yZWkgRW1wdHlWYWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFs
dWUgKyBUYWdPZmZzZXRbc2V0XQotICAgIHN0b3JlaSAwLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XQotICAgIHN0b3JlYiBJc0ludmFs
aWRhdGVkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotCi0uZG9uZToKLWVu
ZAotCiBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMTYwMDQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQxOCwxMyArNDE4LDM4IEBA
IF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCittYWNybyBub3RpZnlXcml0ZShz
ZXQsIHZhbHVlLCBzY3JhdGNoLCBzbG93KQorICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCisgICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVk
LCAuZG9uZQorICAgIGJpbmVxIHNjcmF0Y2gsIENsZWFyV2F0Y2hwb2ludCwgLm92ZXJ3cml0ZQor
ICAgIHN0b3JlcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVb
c2V0XQorICAgIHN0b3JlYiBJc1dhdGNoZWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0
ZVtzZXRdCisgICAgam1wIC5kb25lCisKKy5vdmVyd3JpdGU6CisgICAgYnFlcSB2YWx1ZSwgVmFy
aWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XSwgLmRvbmUKKyAgICBidGJu
eiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc2V0SXNOb3RFbXB0eVtzZXRdLCBzbG93CisgICAg
c3RvcmVxIDAsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KKyAg
ICBzdG9yZWIgSXNJbnZhbGlkYXRlZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3Nl
dF0KKworLmRvbmU6ICAgIAorZW5kCisKIF9sbGludF9vcF9jYXB0dXJlZF9tb3Y6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKLSAgICBsb2Fk
aXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwg
dDIpCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCisgICAgYnRweiB0MCwgLm9wQ2Fw
dHVyZWRNb3ZSZWFkeQorICAgIG5vdGlmeVdyaXRlKHQwLCB0MiwgdDEsIC5vcENhcHR1cmVkTW92
U2xvdykKKy5vcENhcHR1cmVkTW92UmVhZHk6CisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQwKQogICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCi0gICAgZGlzcGF0Y2goMykKKyAgICBk
aXNwYXRjaCg0KQorCisub3BDYXB0dXJlZE1vdlNsb3c6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93
X3BhdGhfY2FwdHVyZWRfbW92KQorICAgIGRpc3BhdGNoKDQpCiAKIAogX2xsaW50X29wX25vdDoK
QEAgLTE1MjUsMTMgKzE1NTAsNyBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIF9sbGludF9vcF9u
ZXdfY2FwdHVyZWRfZnVuYzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDMsIHQyKQotICAgIGJ0aXogdDIsIC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tl
ZAotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MSkKLSAgICBidHFueiBbY2ZyLCB0MSwg
OF0sIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKLS5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoK
LSAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9uZXdfZnVuYykKLS5vcE5ld0NhcHR1
cmVkRnVuY0RvbmU6CisgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1
bmMpCiAgICAgZGlzcGF0Y2goNCkKIAogCkBAIC0xOTczLDIzICsxOTkyLDYgQEAgbWFjcm8gcHV0
UHJvcGVydHkoKQogICAgIHN0b3JlUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHQxLCB0MCwgdDIp
CiBlbmQKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAg
ICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAg
IGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSBzY3JhdGNoLCBD
bGVhcldhdGNocG9pbnQsIC5vdmVyd3JpdGUKLSAgICBzdG9yZXEgdmFsdWUsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0KLSAgICBzdG9yZWIgSXNXYXRjaGVkLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XQotICAgIGptcCAuZG9uZQotCi0ub3Zl
cndyaXRlOgotICAgIGJxZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJl
ZFZhbHVlW3NldF0sIC5kb25lCi0gICAgYnRibnogVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3Nl
dElzTm90RW1wdHlbc2V0XSwgc2xvdwotICAgIHN0b3JlcSAwLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdCi0gICAgc3RvcmViIElzSW52YWxpZGF0ZWQsIFZhcmlh
YmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdCi0KLS5kb25lOiAgICAKLWVuZAotCiBtYWNy
byBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTYwMDQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCwyOSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fdGhpcykKICAgICBSRVRVUk4odjEudG9UaGlzKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5p
c1N0cmljdE1vZGUoKSA/IFN0cmljdE1vZGUgOiBOb3RTdHJpY3RNb2RlKSk7CiB9CiAKK1NMT1df
UEFUSF9ERUNMKHNsb3dfcGF0aF9jYXB0dXJlZF9tb3YpCit7CisgICAgQkVHSU4oKTsKKyAgICBK
U1ZhbHVlIHZhbHVlID0gT1BfQygyKS5qc1ZhbHVlKCk7CisgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gcGNbM10udS53YXRjaHBvaW50U2V0KQorICAgICAgICBzZXQtPm5vdGlm
eVdyaXRlKHZhbHVlKTsKKyAgICBSRVRVUk4odmFsdWUpOworfQorCitTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpCit7CisgICAgQkVHSU4oKTsKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIEFTU0VSVCgKKyAgICAgICAg
Y29kZUJsb2NrLT5jb2RlVHlwZSgpICE9IEZ1bmN0aW9uQ29kZQorICAgICAgICB8fCAhY29kZUJs
b2NrLT5uZWVkc0Z1bGxTY29wZUNoYWluKCkKKyAgICAgICAgfHwgZXhlYy0+dW5jaGVja2VkUihj
b2RlQmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpLm9mZnNldCgpKS5qc1ZhbHVlKCkpOworICAg
IEpTVmFsdWUgdmFsdWUgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGNvZGVCbG9jay0+ZnVuY3Rp
b25EZWNsKHBjWzJdLnUub3BlcmFuZCksIGV4ZWMtPnNjb3BlKCkpOworICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzNdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgc2V0
LT5ub3RpZnlXcml0ZSh2YWx1ZSk7CisgICAgUkVUVVJOKHZhbHVlKTsKK30KKwogU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX25vdCkKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE2MDA0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjUsNiArMTY1LDggQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jcmVhdGVfYQogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
dGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9jYWxsZWUpOwogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b190aGlzKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfY2FwdHVyZWRfbW92KTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfbmV3X2NhcHR1cmVkX2Z1bmMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9ub3QpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9lcSk7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX25lcSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25zdGFudE1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db25zdGFudE1vZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbnN0YW50TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBDb25zdGFudE1vZGVfaAorI2RlZmluZSBDb25zdGFudE1vZGVfaAorCituYW1lc3BhY2Ug
SlNDIHsKKworZW51bSBDb25zdGFudE1vZGUgeyBJc0NvbnN0YW50LCBJc1ZhcmlhYmxlIH07CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29uc3RhbnRNb2RlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIEpTR2xvYmFs
T2JqZWN0X2gKIAogI2luY2x1ZGUgIkFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIKKyNpbmNsdWRl
ICJDb25zdGFudE1vZGUuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNBcnJh
eUJ1ZmZlclByb3RvdHlwZS5oIgogI2luY2x1ZGUgIkpTQ2xhc3NSZWYuaCIKQEAgLTI4OCw3ICsy
ODksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGluaXQodGhpc1ZhbHVlKTsKICAgICB9CiAKLSAg
ICBlbnVtIENvbnN0YW50TW9kZSB7IElzQ29uc3RhbnQsIElzVmFyaWFibGUgfTsKICAgICBzdHJ1
Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAgICAgaW50IHJlZ2lzdGVyTnVtYmVyOwogICAgICAgICBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNjAwNDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIWVudHJ5LmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBvcCA9IFJlc29sdmVP
cChtYWtlVHlwZShDbG9zdXJlVmFyLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAw
LCBhY3RpdmF0aW9uLCAwLCBlbnRyeS5nZXRJbmRleCgpKTsKKyAgICAgICAgICAgIG9wID0gUmVz
b2x2ZU9wKG1ha2VUeXBlKENsb3N1cmVWYXIsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVw
dGgsIDAsIGFjdGl2YXRpb24sIGVudHJ5LndhdGNocG9pbnRTZXQoKSwgZW50cnkuZ2V0SW5kZXgo
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxNjAw
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDggQEAgSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5Ojpp
bmZlcnJlZFZhbHVlKAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaCgpCiB7
CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwotICAgIEFTU0VSVCghZW50cnktPm1f
d2F0Y2hwb2ludHMpOworICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKKyAgICAgICAgcmV0
dXJuOwogICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0
Y2hwb2ludFNldCgpKTsKIH0KIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwMDU0KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTMtMTIt
MDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBJbmZlciBjb25z
dGFudCBjbG9zdXJlIHZhcmlhYmxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI0NjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMgYm90aCBjb3JyZWN0bmVzcyBhbmQgcGVy
Zm9ybWFuY2UgdGVzdHMgZm9yIGNvbnN0YW50IGNsb3N1cmUgdmFyaWFibGUKKyAgICAgICAgaW5m
ZXJlbmNlLgorCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25z
dC10aGVuLXB1dC10by1zY29wZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jbG9zdXJl
LWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGlu
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1yZWVudGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
bW92LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5qczogQWRkZWQuCisgICAg
ICAgICh0aGluZ3kuKToKKyAgICAgICAgKHRoaW5neSk6CisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5qczogQWRk
ZWQuCisgICAgICAgICh0aGluZ3kuKToKKyAgICAgICAgKHRoaW5neSk6CisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8t
aW5saW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKC5yZXR1cm4uZm9vKToKKyAgICAgICAgKGZvbyk6
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXIuanM6IEFkZGVkLgorICAgICAgICAoLnJldHVybi5mb28pOgorICAgICAgICAo
Zm9vKToKKwogMjAxMy0xMi0wMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
IAogICAgICAgICBMYXlvdXQgVGVzdCBwbGF0Zm9ybS9tYWMvYWNjZXNzaWJpbGl0eS9zZWFyY2gt
cHJlZGljYXRlLWVsZW1lbnQtY291bnQuaHRtbCBpcyBmbGFreQpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3YtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
dgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhy
b3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92
LW5vLWlubGluZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92LW5vLWlubGluZS1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29u
c3QtdGhlbi1tb3Ytbm8taW5saW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxp
bmUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
di1uby1pbmxpbmUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8t
aW5saW5lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1v
di1uby1pbmxpbmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNz
LXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tbW92Lmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1tb3YuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tbW92LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tcHV0LXRvLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xv
c3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1uby1pbmxpbmUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUtbm8taW5saW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5saW5lLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3Bl
LW5vLWlubGluZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8tc2NvcGUtbm8taW5s
aW5lLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10
by1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZl
ci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
aW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3Qt
dGhlbi1yZWVudGVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10
aGVuLXJlZW50ZXItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlcgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXIt
Y2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVu
LXJlZW50ZXItbm8taW5saW5lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5s
aW5lCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1y
ZWVudGVyLW5vLWlubGluZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXItbm8taW5saW5lLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1yZWVudGVyLW5vLWlubGluZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUt
Y29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVu
dGVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcmVlbnRlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
ZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3Ytbm8taW5saW5lLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhl
bi1tb3Ytbm8taW5saW5lLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLW1vdi1uby1pbmxpbmUuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorKGZ1bmN0aW9uKCl7CisgICAgdmFyIGEg
PSA0MjsKKyAgICB2YXIgYiA9IDIzOworICAgIHZhciBjID0gODQ7CisgICAgdmFyIGQgPSAxMzsK
KyAgICB2YXIgZSA9IDkwOworICAgIHZhciBmID0gMzQ7CisgICAgdmFyIGcgPSA1MjsKKyAgICAK
KyAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgIHJldHVybiBhICsgYiArIGMgKyBkICsgZSAr
IGYgKyBnOworICAgIH0KKyAgICAKKyAgICBub0lubGluZShmb28pOworICAgIAorICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgNTAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbygp
OworICAgICAgICBpZiAocmVzdWx0ICE9IDQyICsgMjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUy
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBhID0gMTsKKyAgICBiID0gMjsKKyAgICBjID0gMzsKKyAgICBkID0gNDsK
KyAgICBlID0gNTsKKyAgICBmID0gNjsKKyAgICBnID0gNzsKKyAgICAKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOworCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNv
bnN0LXRoZW4tbW92LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1tb3YuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0
LXRoZW4tbW92LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKKyhmdW5jdGlvbigp
eworICAgIHZhciBhID0gNDI7CisgICAgdmFyIGIgPSAyMzsKKyAgICB2YXIgYyA9IDg0OworICAg
IHZhciBkID0gMTM7CisgICAgdmFyIGUgPSA5MDsKKyAgICB2YXIgZiA9IDM0OworICAgIHZhciBn
ID0gNTI7CisgICAgCisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICByZXR1cm4gYSArIGIg
KyBjICsgZCArIGUgKyBmICsgZzsKKyAgICB9CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyArIDkwICsgMzQgKyA1MikKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgYSA9IDE7CisgICAgYiA9IDI7CisgICAgYyA9IDM7CisgICAgZCA9IDQ7CisgICAgZSA9IDU7
CisgICAgZiA9IDY7CisgICAgZyA9IDc7CisgICAgCisgICAgdmFyIHJlc3VsdCA9IGZvbygpOwor
ICAgIGlmIChyZXN1bHQgIT0gMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNykKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1
dC10by1zY29wZS1uby1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXB1dC10by1zY29wZS1u
by1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLW5vLWlubGluZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACit2YXIgdGhpbmd5ID0gKGZ1bmN0aW9u
KCl7CisgICAgdmFyIGEgPSA0MjsKKyAgICB2YXIgYiA9IDIzOworICAgIHZhciBjID0gODQ7Cisg
ICAgdmFyIGQgPSAxMzsKKyAgICB2YXIgZSA9IDkwOworICAgIHZhciBmID0gMzQ7CisgICAgdmFy
IGcgPSA1MjsKKyAgICByZXR1cm4geworICAgICAgICBmb286IGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgICAgIH0sCisgICAg
ICAgIGJhcjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBhID0gMTsKKyAgICAgICAgICAgIGIg
PSAyOworICAgICAgICAgICAgYyA9IDM7CisgICAgICAgICAgICBkID0gNDsKKyAgICAgICAgICAg
IGUgPSA1OworICAgICAgICAgICAgZiA9IDY7CisgICAgICAgICAgICBnID0gNzsKKyAgICAgICAg
fQorICAgIH07Cit9KSgpOworCitub0lubGluZSh0aGluZ3kuZm9vKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAyMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOwor
ICAgIGlmIChyZXN1bHQgIT0gNDIgKyAyMyArIDg0ICsgMTMgKyA5MCArIDM0ICsgNTIpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordGhpbmd5LmJh
cigpOwordmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKK2lmIChyZXN1bHQgIT0gMSArIDIgKyAz
ICsgNCArIDUgKyA2ICsgNykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9z
dXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1wdXQtdG8t
c2NvcGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4tcHV0LXRvLXNjb3BlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzQgQEAKK3ZhciB0aGluZ3kgPSAoZnVuY3Rpb24oKXsKKyAgICB2YXIg
YSA9IDQyOworICAgIHZhciBiID0gMjM7CisgICAgdmFyIGMgPSA4NDsKKyAgICB2YXIgZCA9IDEz
OworICAgIHZhciBlID0gOTA7CisgICAgdmFyIGYgPSAzNDsKKyAgICB2YXIgZyA9IDUyOworICAg
IHJldHVybiB7CisgICAgICAgIGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4g
YSArIGIgKyBjICsgZCArIGUgKyBmICsgZzsKKyAgICAgICAgfSwKKyAgICAgICAgYmFyOiBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgIGEgPSAxOworICAgICAgICAgICAgYiA9IDI7CisgICAgICAg
ICAgICBjID0gMzsKKyAgICAgICAgICAgIGQgPSA0OworICAgICAgICAgICAgZSA9IDU7CisgICAg
ICAgICAgICBmID0gNjsKKyAgICAgICAgICAgIGcgPSA3OworICAgICAgICB9CisgICAgfTsKK30p
KCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1
bHQgPSB0aGluZ3kuZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDIzICsgODQgKyAxMyAr
IDkwICsgMzQgKyA1MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfQorCit0aGluZ3kuYmFyKCk7Cit2YXIgcmVzdWx0ID0gdGhpbmd5LmZvbygpOworaWYg
KHJlc3VsdCAhPSAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3KQorICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNsb3N1cmUtY29uc3QtdGhlbi1yZWVudGVyLW5vLWlubGluZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1j
bG9zdXJlLWNvbnN0LXRoZW4tcmVlbnRlci1uby1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRo
ZW4tcmVlbnRlci1uby1pbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAor
ZnVuY3Rpb24gZm9vKGFfLCBiXywgY18sIGRfLCBlXywgZl8sIGdfKSB7CisgICAgdmFyIGEgPSBh
XzsKKyAgICB2YXIgYiA9IGJfOworICAgIHZhciBjID0gY187CisgICAgdmFyIGQgPSBkXzsKKyAg
ICB2YXIgZSA9IGVfOworICAgIHZhciBmID0gZl87CisgICAgdmFyIGcgPSBnXzsKKyAgICByZXR1
cm4geworICAgICAgICBmb286IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIGEgKyBi
ICsgYyArIGQgKyBlICsgZiArIGc7CisgICAgICAgIH0KKyAgICB9OworfQorCitub0lubGluZShm
b28pOworCit2YXIgdGhpbmd5ID0gZm9vKDQyLCAyMywgODQsIDEzLCA5MCwgMzQsIDUyKTsKK25v
SW5saW5lKHRoaW5neS5mb28pOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytpKSB7
CisgICAgdmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsg
MjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oMSwgMiwgMywgNCwgNSwg
NiwgNykuZm9vKCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcpCisg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
aW5mZXItY2xvc3VyZS1jb25zdC10aGVuLXJlZW50ZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jbG9zdXJlLWNvbnN0LXRoZW4t
cmVlbnRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBmb28o
YV8sIGJfLCBjXywgZF8sIGVfLCBmXywgZ18pIHsKKyAgICB2YXIgYSA9IGFfOworICAgIHZhciBi
ID0gYl87CisgICAgdmFyIGMgPSBjXzsKKyAgICB2YXIgZCA9IGRfOworICAgIHZhciBlID0gZV87
CisgICAgdmFyIGYgPSBmXzsKKyAgICB2YXIgZyA9IGdfOworICAgIHJldHVybiB7CisgICAgICAg
IGZvbzogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZCArIGUg
KyBmICsgZzsKKyAgICAgICAgfQorICAgIH07Cit9CisKK3ZhciB0aGluZ3kgPSBmb28oNDIsIDIz
LCA4NCwgMTMsIDkwLCAzNCwgNTIpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwMDsgKytp
KSB7CisgICAgdmFyIHJlc3VsdCA9IHRoaW5neS5mb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
ICsgMjMgKyA4NCArIDEzICsgOTAgKyAzNCArIDUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBmb28oMSwgMiwgMywgNCwg
NSwgNiwgNykuZm9vKCk7CitpZiAocmVzdWx0ICE9IDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>
<flag name="review"
          id="241764"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="241814"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>