<?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>122836</bug_id>
          
          <creation_ts>2013-10-15 09:21:02 -0700</creation_ts>
          <short_desc>Poor man&apos;s fast breakpoints for a 2.3x debugger speedup</short_desc>
          <delta_ts>2014-01-22 23:36:13 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>121796</dependson>
    
    <dependson>124245</dependson>
    
    <dependson>127127</dependson>
    
    <dependson>127230</dependson>
    
    <dependson>127269</dependson>
    
    <dependson>127272</dependson>
    
    <dependson>127321</dependson>
          <blocked>122847</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>burg</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939986</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-15 09:21:02 -0700</bug_when>
    <thetext>A quick experiment to comment out the debug hook callbacks (to the ScriptDebugServer in Interpreter::debug()) reveals a 2.3x improvement in the Octane benchmark score.

To harness this 2.3x speedup quickly, we can employ the following strategy:

1. Add a &quot;needBreaks&quot; operand to the op_debug opcode.  needBreaks is 0 by default.  The debugger will set it to a non-zero value if a breakpoint is needed at that op_debug opcode. 

2. Implement a Debugger::setBreakpoint() that will set the &quot;needBreaks&quot; operand of the appropriate op_debug instruction.
    2.1 Add a look up function to the ClassBlock to find the bytecodeOffset of the appropriate op_debug opcode for a given line and column position. 
    2.2 Add a Debugger::m_sourceIdToExecutable map that allows the debugger to find the Executable and ClassBlock to set a breakpoint in.

3. Modify sourceParsed() notifications / infrastructure to do the following:
    3.2 Register Executables in the Debugger::m_sourceIdToExecutable map.
    3.1 set any relevant unset breakpoints as needed (Note: breakpoints may be requested before the Executable / ClassBlock is created).

4. Modify the ScriptExecutable&apos;s destructor to unregister itself with the relevant debugger if needed.

5. Modify the Debugger to track 2 mode of execution:
    5.1 Running: only breaks (and calls the debug hook callbacks) when it sees an op_debug with a needBreaks flag set.  Otherwise, it does not call the debug hook callbacks.
    5.2 Stepping: will call every debug hook callback.

    Stepping mode is entered as soon as Running mode breaks.  Running mode resumes when the Debugger::continueExecution() is called.

This effort aims to get some significant speedup (2.3x) with minimal effort but lays the ground work for the Debugger:
1. to identify breakpoints by bytecode offset.
2. to distinguish between Running and Stepping modes.
3. to track all the Source / Executable / ClassBlock it is debugging.

Work is in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939988</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-10-15 09:21:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/15231325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>940024</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-10-15 10:34:43 -0700</bug_when>
    <thetext>FYI, this implementation is meant to only work with the LLINT and the baseline JIT.  The DFG is not yet enabled (i.e. no change from the current debugger implementation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947971</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-06 16:17:44 -0800</bug_when>
    <thetext>Removing 122838 as a dependency since it was a pre-existing issue that is independent of the debugger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>947977</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-11-06 16:21:29 -0800</bug_when>
    <thetext>This implementation needs a Breakpoint tracking mechanism to record the FunctionExecutables and bytecodeOffsets where breakpoints are set.  Rather than introducing a separate breakpoint tracking mechanism, we should wrap up https://bugs.webkit.org/show_bug.cgi?id=121796 which moves the breakpoint tracking mechanism into the JSC::Debugger.  Adding 121796 as a blocking dependency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970546</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-21 20:30:06 -0800</bug_when>
    <thetext>Instead of bytecode level breakpoints, we&apos;re changing the plan to using a m_numBreakpoints count in CodeBlocks as the indicator that op_debug callbacks are needed.  This limits the perf penalty of op_debug callbacks to only CodeBlocks that have breakpoints set in them.  As a result, we can stick with the existing breakpoint setting and checking mechanisms for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970576</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-21 22:09:00 -0800</bug_when>
    <thetext>Results so far running Octane 2.0 at http://octane-benchmark.googlecode.com/svn/latest/index.html with the WebInspector opened (higher score is better):

r162390 baseline w/ no breakpoints: 1949
r162390 baseline w/ breakpoints:      401
r162390 patched w/ no breakpoints: 2024
r162390 patched w/ breakpoints:      2034

The set breakpoint is set in a function that is not relevant to the benchmark run.  The same breakpoint location on both the baseline and patched runs.
 
The ~100 point difference between the patched run and the baseline runs is due to noise, not because of any perf progression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970593</commentid>
    <comment_count>7</comment_count>
      <attachid>221831</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-21 23:31:38 -0800</bug_when>
    <thetext>Created attachment 221831
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970595</commentid>
    <comment_count>8</comment_count>
      <attachid>221832</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-21 23:38:26 -0800</bug_when>
    <thetext>Created attachment 221832
patch 2: added a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970647</commentid>
    <comment_count>9</comment_count>
      <attachid>221850</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 03:03:24 -0800</bug_when>
    <thetext>Created attachment 221850
patch 3: revised with more efficient globalObject check in ApplyBreakpointFunctor and ClearAllBreakpointsFunctor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970650</commentid>
    <comment_count>10</comment_count>
      <attachid>221851</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 03:12:49 -0800</bug_when>
    <thetext>Created attachment 221851
patch 4: fix one more inefficient globalObject check in an assertion in Debugger::hasBreakpoint().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970729</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-01-22 09:57:03 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Results so far running Octane 2.0 at http://octane-benchmark.googlecode.com/svn/latest/index.html with the WebInspector opened (higher score is better):
&gt; 
&gt; r162390 baseline w/ no breakpoints: 1949
&gt; r162390 baseline w/ breakpoints:      401
&gt; r162390 patched w/ no breakpoints: 2024
&gt; r162390 patched w/ breakpoints:      2034
&gt; 
&gt; The set breakpoint is set in a function that is not relevant to the benchmark run.  The same breakpoint location on both the baseline and patched runs.
&gt; 
&gt; The ~100 point difference between the patched run and the baseline runs is due to noise, not because of any perf progression.

Impressive! Testing how it performs with an auto-continue breakpoint that gets hit would also be interesting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970737</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 10:10:34 -0800</bug_when>
    <thetext>*** Bug 122844 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970991</commentid>
    <comment_count>13</comment_count>
      <attachid>221851</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-22 19:22:43 -0800</bug_when>
    <thetext>Comment on attachment 221851
patch 4: fix one more inefficient globalObject check in an assertion in Debugger::hasBreakpoint().

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

r=me, with some fixups below.

&gt; Source/JavaScriptCore/ChangeLog:63
&gt; +          This is a N * log(N) algorithm, but it is assumed that in a nominal
&gt; +          system, we won&apos;t be calling CodeBlock::hasOpDebugForLineAndColumn() to
&gt; +          impact interactive debugger performance. If this should prove to be
&gt; +          untrue, there are several optimization options that we can entertain
&gt; +          in the future to address this.

Let&apos;s not assume. Instead, load a website, set a breakpoint, and test whether doing so takes a noticeable amount of time -- either by eye, or by printf(). Then, put your findings in this ChangeLog.

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1359
&gt;          case op_debug: {
&gt;              int debugHookID = (++it)-&gt;u.operand;
&gt; +            int hasBreakpointFlag = (++it)-&gt;u.operand;
&gt;              printLocationAndOp(out, exec, location, it, &quot;debug&quot;);
&gt; -            out.printf(&quot;%s&quot;, debugHookName(debugHookID));
&gt; +            out.printf(&quot;%s %d&quot;, debugHookName(debugHookID), hasBreakpointFlag);
&gt;              break;
&gt;          }

Is this field used? I don&apos;t think so. Perhaps we should remove it in a follow-up patch -- unless you plan to start using it soon.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:212
&gt; +bool Debugger::applyBreakpointInCodeBlockIfNeeded(CodeBlock* codeBlock, Breakpoint&amp; breakpoint, bool enableBreakpoint)

This should return void.

Let&apos;s call this &quot;toggleBreakpoint&quot;. Let&apos;s call the argument &quot;enabledOrNot&quot;.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:254
&gt; +void Debugger::iterateBreakpointsAndApplyToCodeBlock(CodeBlock* codeBlock)

Let&apos;s call this &quot;applyBreakpoints&quot;.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:259
&gt; +        applyBreakpointInCodeBlockIfNeeded(codeBlock, breakpoint, true);

WebKit style says you should declare &quot;true&quot; on a separate line with the name &quot;enabledOrNot&quot;. The raw &quot;true&quot; is unreadable without more context.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:263
&gt; +class ApplyBreakpointFunctor {

Let&apos;s call this &quot;ToggleBreakpointFunctor&quot;.

You should put this functor class in an anonymous namespace to avoid name conflicts with classes declared in other files. Alternatively, you can define it in the Debugger class.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:285
&gt; +void Debugger::iterateCodeBlocksAndApplyBreakpoint(Breakpoint&amp; breakpoint, bool enableOrNot)

Let&apos;s call this &quot;toggleBreakpoint&quot;.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:294
&gt; +class ClearAllBreakpointsFunctor {

Anonymous namespace or class scope, please.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:312
&gt; +void Debugger::iterateCodeBlocksAndClearAllBreakpoints()

Let&apos;s call this &quot;clearBreakpoints&quot;.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:370
&gt; +    iterateCodeBlocksAndApplyBreakpoint(breakpoint, true);

Declare &quot;true&quot; in named variable, please.

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:390
&gt; +    iterateCodeBlocksAndApplyBreakpoint(breakpoint, false);

Declare &quot;false&quot; in named variable, please.

&gt; Source/JavaScriptCore/heap/CodeBlockSet.h:81
&gt; +        HashSet&lt;CodeBlock*&gt;::iterator iter = m_set.begin();
&gt; +        HashSet&lt;CodeBlock*&gt;::iterator end = m_set.end();
&gt; +        for (; iter != end; ++iter) {

Please use C++11 range syntax here.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:176
&gt; +        if (debugger)
&gt; +            debugger-&gt;unregisterCodeBlock(oldCodeBlock.get());

Let&apos;s not unregister.

If the old code never runs again, we wasted time by unregistering. If the old code does run again, we want it to be debuggable. In either case, there are no dangling pointers to worry about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971044</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 23:31:26 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 221851 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=221851&amp;action=review
&gt; 
&gt; r=me, with some fixups below.
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:63
&gt; &gt; +          This is a N * log(N) algorithm, but it is assumed that in a nominal
&gt; &gt; +          system, we won&apos;t be calling CodeBlock::hasOpDebugForLineAndColumn() to
&gt; &gt; +          impact interactive debugger performance. If this should prove to be
&gt; &gt; +          untrue, there are several optimization options that we can entertain
&gt; &gt; +          in the future to address this.
&gt; 
&gt; Let&apos;s not assume. Instead, load a website, set a breakpoint, and test whether doing so takes a noticeable amount of time -- either by eye, or by printf(). Then, put your findings in this ChangeLog.

The interactive performance appears to be on par with the baseline before this patch is applied.  I updated the ChangeLog to indicate this.

&gt; &gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:1359
&gt; &gt;          case op_debug: {
&gt; &gt;              int debugHookID = (++it)-&gt;u.operand;
&gt; &gt; +            int hasBreakpointFlag = (++it)-&gt;u.operand;
&gt; &gt;              printLocationAndOp(out, exec, location, it, &quot;debug&quot;);
&gt; &gt; -            out.printf(&quot;%s&quot;, debugHookName(debugHookID));
&gt; &gt; +            out.printf(&quot;%s %d&quot;, debugHookName(debugHookID), hasBreakpointFlag);
&gt; &gt;              break;
&gt; &gt;          }
&gt; 
&gt; Is this field used? I don&apos;t think so. Perhaps we should remove it in a follow-up patch -- unless you plan to start using it soon.

Not currently used.  I want to fix it up here for correctness.  We can remove it in a subsequent patch if we don&apos;t decide to use it.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:212
&gt; &gt; +bool Debugger::applyBreakpointInCodeBlockIfNeeded(CodeBlock* codeBlock, Breakpoint&amp; breakpoint, bool enableBreakpoint)
&gt; 
&gt; This should return void.

Fixed.

&gt; Let&apos;s call this &quot;toggleBreakpoint&quot;. Let&apos;s call the argument &quot;enabledOrNot&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:254
&gt; &gt; +void Debugger::iterateBreakpointsAndApplyToCodeBlock(CodeBlock* codeBlock)
&gt; 
&gt; Let&apos;s call this &quot;applyBreakpoints&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:259
&gt; &gt; +        applyBreakpointInCodeBlockIfNeeded(codeBlock, breakpoint, true);
&gt; 
&gt; WebKit style says you should declare &quot;true&quot; on a separate line with the name &quot;enabledOrNot&quot;. The raw &quot;true&quot; is unreadable without more context.

Created a Debugger::BreakpointState enum to use as the argument instead.  BreakpointState will have 2 values: BreakpointDisabled and BreakpointEnabled.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:263
&gt; &gt; +class ApplyBreakpointFunctor {
&gt; 
&gt; Let&apos;s call this &quot;ToggleBreakpointFunctor&quot;.

Fixed.
 
&gt; You should put this functor class in an anonymous namespace to avoid name conflicts with classes declared in other files. Alternatively, you can define it in the Debugger class.

Fixed.  Made this a private class in Debugger.
 
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:285
&gt; &gt; +void Debugger::iterateCodeBlocksAndApplyBreakpoint(Breakpoint&amp; breakpoint, bool enableOrNot)
&gt; 
&gt; Let&apos;s call this &quot;toggleBreakpoint&quot;.

Fixed.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:294
&gt; &gt; +class ClearAllBreakpointsFunctor {
&gt; 
&gt; Anonymous namespace or class scope, please.

Fixed.  Made this a private class in Debugger.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:312
&gt; &gt; +void Debugger::iterateCodeBlocksAndClearAllBreakpoints()
&gt; 
&gt; Let&apos;s call this &quot;clearBreakpoints&quot;.

Fixed.  There&apos;s already a function called clearBreakpoints() which is the sole caller of this function.  I folded this function into the caller.  I also renamed ClearAllBreakpointsFunctor to ClearBreakpointsFunctor to match clearBreakpoints(). 
 
&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:370
&gt; &gt; +    iterateCodeBlocksAndApplyBreakpoint(breakpoint, true);
&gt; 
&gt; Declare &quot;true&quot; in named variable, please.

Fixed.  Using BreakpointEnabled.

&gt; &gt; Source/JavaScriptCore/debugger/Debugger.cpp:390
&gt; &gt; +    iterateCodeBlocksAndApplyBreakpoint(breakpoint, false);
&gt; 
&gt; Declare &quot;false&quot; in named variable, please.

Fixed.  Using BreakpointDisabled.

&gt; &gt; Source/JavaScriptCore/heap/CodeBlockSet.h:81
&gt; &gt; +        HashSet&lt;CodeBlock*&gt;::iterator iter = m_set.begin();
&gt; &gt; +        HashSet&lt;CodeBlock*&gt;::iterator end = m_set.end();
&gt; &gt; +        for (; iter != end; ++iter) {
&gt; 
&gt; Please use C++11 range syntax here.

Fixed.

&gt; &gt; Source/JavaScriptCore/runtime/Executable.cpp:176
&gt; &gt; +        if (debugger)
&gt; &gt; +            debugger-&gt;unregisterCodeBlock(oldCodeBlock.get());
&gt; 
&gt; Let&apos;s not unregister.
&gt; 
&gt; If the old code never runs again, we wasted time by unregistering. If the old code does run again, we want it to be debuggable. In either case, there are no dangling pointers to worry about.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971045</commentid>
    <comment_count>15</comment_count>
      <attachid>221950</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 23:33:55 -0800</bug_when>
    <thetext>Created attachment 221950
updated patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971046</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-01-22 23:36:13 -0800</bug_when>
    <thetext>Landed in r162598: &lt;http://trac.webkit.org/r162598&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221831</attachid>
            <date>2014-01-21 23:31:38 -0800</date>
            <delta_ts>2014-01-21 23:38:26 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-122836.patch</filename>
            <type>text/plain</type>
            <size>32735</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxNC0wMS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UG9vciBtYW4ncyBmYXN0IGJyZWFrcG9pbnRzIGZvciBhIDIuM3ggZGVidWdnZXIgc3BlZWR1cC4K
KyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMjgzNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5IHdlIGdhaW5lZCBiYWNr
IHNvbWUgcGVyZm9ybWFuY2UgKHJ1biBhdCBiYXNlbGluZSBKSVQgc3BlZWRzKQorICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3IgaXMgb3BlbmVkIHByb3ZpZGVkIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQuIFRoaXMKKyAgICAgICAgd2FzIGFjaGlldmVkIGJ5IHNpbXBseSBza2lwcGluZyBhbGwg
b3BfZGVidWcgY2FsbGJhY2tzIHRvIHRoZSBkZWJ1Z2dlcgorICAgICAgICBpZiBubyBicmVha3Bv
aW50cyBhcmUgc2V0LiBJZiBhbnkgYnJlYWtwb2ludHMgYXJlIHNldCwgdGhlIGRlYnVnZ2VyIHdp
bGwKKyAgICAgICAgc2V0IGEgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgZmxhZyB3aGljaCBjYXVz
ZXMgdGhlIGNhbGxiYWNrcyB0byBiZQorICAgICAgICBjYWxsZWQsIGFuZCB3ZSBkb24ndCBnZXQg
dGhlIGJhc2VsaW5lIEpJVCBzcGVlZHMgYW55bW9yZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbm93IHRyYWNrIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgc2V0IGluIHRo
ZQorICAgICAgICBDb2RlQmxvY2sgdGhhdCB0aGV5IGFyZSBzZXQgaW4uIFRoZSBMTElOVCBhbmQg
YmFzZWxpbmUgSklUIGNvZGUgd2lsbAorICAgICAgICBjaGVjayBDb2RlQmxvY2s6Om1fbnVtQnJl
YWtwb2ludHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcF9kZWJ1ZyBjYWxsYmFja3MKKyAgICAgICAg
bmVlZCB0byBiZSBjYWxsZWQuIFdpdGggdGhpcywgd2Ugd2lsbCBvbmx5IGVuYWJsZSBvcF9kZWJ1
ZyBjYWxsYmFja3MgZm9yCisgICAgICAgIENvZGVCbG9ja3MgdGhhdCBuZWVkIGl0IGkuZS4gdGhv
c2Ugd2l0aCBicmVha3BvaW50cyBzZXQgaW4gdGhlbS4KKworICAgICAgICBEZWJ1Z2dlcjo6bV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgaXMgbm93IG9ic29sZXRlZC4gVGhlIExMSU5UIGFuZCBiYXNl
bGluZQorICAgICAgICBKSVQgY29kZSBzdGlsbCBuZWVkcyB0byBjaGVjayBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgICAgIGRlYnVnZ2VyIGlzIGluIHN0
ZXBwaW5nIG1vZGUgYW5kIGhlbmNlLCBuZWVkcyBvcF9kZWJ1ZyBjYWxsYmFja3MgZW5hYmxlZAor
ICAgICAgICBmb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgZGVidWdnZXIgImNvbnRpbnVlcyIgdGhl
IHJ1biBhbmQgZXhpdCBzdGVwcGluZworICAgICAgICBtb2RlLgorCisgICAgICAgIEFsc28gaW4g
dGhpcyBwYXRjaCwgSSBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gRE9NIGJyZWFrcG9pbnRzIHdoaWNo
IHJlbGllcworICAgICAgICBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkgdG8gcGF1c2UgdGhlIGRl
YnVnZ2VyLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAtIE1pc3NlZCBhY2NvdW50aW5n
IGZvciBvcF9kZWJ1ZydzIG5ldyBoYXNCcmVha3BvaW50RmxhZyBvcGVyYW5kIGhlcmUgd2hlbgor
ICAgICAgICAgIGl0IHdhcyBhZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1u
KToKKyAgICAgICAgLSBUaGlzIGlzIG5lZWRlZCBpbiBEZWJ1Z2dlcjo6YXBwbHlCcmVha3BvaW50
SW5Db2RlQmxvY2tJZk5lZWRlZCgpIHRvCisgICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgYnJlYWtw
b2ludCBmYWxscyB3aXRoaW4gYSBDb2RlQmxvY2sgb3Igbm90LiBTaW1wbHkKKyAgICAgICAgICBj
aGVja2luZyB0aGUgYm91bmRzIG9mIHRoZSBDb2RlQmxvY2sgaXMgaW5zdWZmaWNpZW50LiBGb3Ig
ZXhhbXBsZSwKKyAgICAgICAgICBsZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIEpTIGNv
ZGU6CisKKyAgICAgICAgICAgICAgLy8gYmVnaW4gZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAg
IGZ1bmN0aW9uIGYxKCkgeworICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZjIoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAuLi4gLy8gc2V0IGJyZWFrcG9pbnQgaGVyZS4KKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvLyBlbmQgZ2xvYmFsIHNj
b3BlCisKKyAgICAgICAgICBVc2luZyB0aGUgQ29kZUJsb2NrIGJvdW5kcyBhbG9uZSwgdGhlIGJy
ZWFrcG9pbnQgYWJvdmUgd2lsbCB0byBhcHBlYXIKKyAgICAgICAgICB0byBiZSBpbiB0aGUgZ2xv
YmFsIHByb2dyYW0gQ29kZUJsb2NrLCBhbmQgdGhlIENvZGVCbG9ja3MgZm9yIGZ1bmN0aW9uCisg
ICAgICAgICAgZjEoKSBhbmQgZjIoKS4gV2l0aCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKCkgd2UgY2FuCisgICAgICAgICAgcnVsZSBvdXQgdGhlIGdsb2JhbCBwcm9ncmFt
IENvZGVCbG9jayBhbmQgZjEoKSwgYW5kIG9ubHkgYXBwbHkgdGhlCisgICAgICAgICAgYnJlYWtw
b2ludCB0byBmMigwIHdoZXJlIGl0IGJlbG9uZ3MuCisKKyAgICAgICAgICBDdXJyZW50bHksIENv
ZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSB3b3JrcyBieSBpdGVyYXRpbmcK
KyAgICAgICAgICBvdmVyIGFsbCB0aGUgb3Bjb2RlcyBpbiB0aGUgQ29kZUJsb2NrIHRvIGxvb2sg
Zm9yIG9wX2RlYnVnJ3MuIEZvciBlYWNoCisgICAgICAgICAgb3BfZGVidWcsIGl0IGNhbGxzIENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoKSB0bworICAgICAgICAg
IGRvIGEgYmluYXJ5IHNlYWNoIHRvIGdldCB0aGUgbGluZSBhbmQgY29sdW1uIGluZm8gZm9yIHRo
YXQgb3BfZGVidWcuCisgICAgICAgICAgVGhpcyBpcyBhIE4gKiBsb2coTikgYWxnb3JpdGhtLCBi
dXQgaXQgaXMgYXNzdW1lZCB0aGF0IGluIGEgbm9taW5hbAorICAgICAgICAgIHN5c3RlbSwgd2Ug
d29uJ3QgYmUgY2FsbGluZyBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKCkg
dG8KKyAgICAgICAgICBpbXBhY3QgaW50ZXJhY3RpdmUgZGVidWdnZXIgcGVyZm9ybWFuY2UuIElm
IHRoaXMgc2hvdWxkIHByb3ZlIHRvIGJlCisgICAgICAgICAgdW50cnVlLCB0aGVyZSBhcmUgc2V2
ZXJhbCBvcHRpbWl6YXRpb24gb3B0aW9ucyB0aGF0IHdlIGNhbiBlbnRlcnRhaW4KKyAgICAgICAg
ICBpbiB0aGUgZnV0dXJlIHRvIGFkZHJlc3MgdGhpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1CcmVha3BvaW50c09mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGVidWdnZXIvQnJlYWtwb2ludC5oOgorICAgICAgICAtIGRl
ZmluZWQgQnJlYWtwb2ludDo6dW5zcGVjaWZpZWRDb2x1bW4gc28gdGhhdCB3ZSBjYW4gZXhwbGlj
aXRseSBpbmRpY2F0ZQorICAgICAgICAgIHdoZW4gdGhlIFdlYkluc3BlY3RvciB3YXMgc2V0dGlu
ZyBhIGxpbmUgYnJlYWtwb2ludCBhbmQgZGlkIG5vdCBwcm92aWRlCisgICAgICAgICAgYSBjb2x1
bW4gdmFsdWUuIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSBuZWVkcyB0
aGlzCisgICAgICAgICAgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gbG9vc2VuIGl0cyBtYXRjaGlu
ZyBjcml0ZXJpYSBmb3Igb3BfZGVidWcKKyAgICAgICAgICBieXRlY29kZXMgZm9yIHRoZSBzcGVj
aWZpZWQgYnJlYWtwb2ludCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzIHByb3ZpZGVkCisgICAgICAg
ICAgYnkgdGhlIGRlYnVnZ2VyLgorCisgICAgICAgICAgUHJldmlvdXNseSwgd2UganVzdCBoaWph
Y2sgYSAwIHZhbHVlIGNvbHVtbiBhcyBhbiB1bnNwZWNpZmllZCBjb2x1bW4uCisgICAgICAgICAg
SG93ZXZlciwgdGhlIFdlYkluc3BlY3RvciBvcGVyYXRlcyBvbiAwLWJhc2VkIGludHMgZm9yIGNv
bHVtbiB2YWx1ZXMuCisgICAgICAgICAgSGVuY2UsIDAgc2hvdWxkIGJlIGEgdmFsaWQgY29sdW1u
IHZhbHVlIGFuZCBzaG91bGQgbm90IGJlIGhpamFja2VkIHRvCisgICAgICAgICAgbWVhbiBhbiB1
bnNwZWNpZmllZCBjb2x1bW4uCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIC0gYWRkZWQgdHJhY2tp
bmcgb2YgdGhlIFZNIHRoYXQgdGhlIGRlYnVnZ2VyIGlzIHVzZWQgd2l0aC4gVGhpcyBpcworICAg
ICAgICAgIG5lZWRlZCBieSBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkuCisKKyAgICAgICAgICBU
aGUgVk0gcG9pbnRlciBpcyBhdHRhaW5lZCBmcm9tIHRoZSBmaXJzdCBKU0dsb2JhbE9iamVjdCB0
aGF0IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGF0dGFjaGVzIHRvLiBXaGVuIHRoZSBkZWJ1Z2dl
ciBkZXRhY2hlcyBmcm9tIHRoZSBsYXN0IEpTR2xvYmFsT2JqZWN0LCBpdAorICAgICAgICAgIHdp
bGwgbnVsbGlmeSBpdHMgVk0gcG9pbnRlciB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgc2V0IG9u
IHRoZSBuZXh0CisgICAgICAgICAgYXR0YWNoLgorCisgICAgICAgICAgV2Ugd2VyZSBhbHdheXMg
b25seSB1c2luZyBlYWNoIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggb25lIFZNLiBUaGlzIGNoYW5n
ZQorICAgICAgICAgIG1ha2VzIGl0IGV4cGxpY2l0IHdpdGggYW4gYXNzZXJ0IHRvIGVuc3VyZSB0
aGF0IGFsbCBnbG9iYWxPYmplY3RzIHRoYXQKKyAgICAgICAgICB0aGUgZGVidWdnZXIgYXR0YWNo
ZXMgdG8gYmVvbmdzIHRvIHRoZSBzYW1lIFZNLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjph
dHRhY2gpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFNob3VsZFBhdXNlKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVn
aXN0ZXJDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVC
bG9jayk6CisgICAgICAgIC0gcmVnaXN0ZXJDb2RlQmxvY2soKSBpcyByZXNwb25zaWJsZSBmb3Ig
YXBwbHlpbmcgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnRzCisgICAgICAgICAgdG8gbmV3IENvZGVC
bG9ja3MgYmVpbmcgaW5zdGFsbGVkLiBTaW1pbGFybHksIHVucmVnaXN0ZXJDb2RlQmxvY2soKQor
ICAgICAgICAgIGNsZWFycyB0aGUgYnJlYWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OmFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQpOgorICAgICAgICAtIFRoaXMg
aXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGJyZWFrcG9pbnQgZmFs
bHMgd2l0aGluCisgICAgICAgICAgYSBDb2RlQmxvY2sgb3Igbm90LiBJZiBpdCBkb2VzLCB0aGVu
IGl0IGNhbiBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUKKyAgICAgICAgICBzYWlkIGJyZWFrcG9p
bnQgaW4gdGhlIENvZGVCbG9jay4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgICAg
ICAgICAgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBicmVha3BvaW50IHNpbXBseSBtZWFucyBpbmNy
ZW1lbnRpbmcvZGVjcmVtZW50aW5nCisgICAgICAgICAgdGhlIENvZGVCbG9jaydzIG1fbnVtQnJl
YWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVCcmVha3BvaW50c0Fu
ZEFwcGx5VG9Db2RlQmxvY2spOgorCisgICAgICAgIChKU0M6OkFwcGx5QnJlYWtwb2ludEZ1bmN0
b3I6OkFwcGx5QnJlYWtwb2ludEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpBcHBseUJyZWFrcG9p
bnRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVD
b2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KToKKyAgICAgICAgLSBJdGVyYXRlcyBhbGwgcmVs
ZXZhbnQgQ29kZUJsb2NrcyBhbmQgYXBwbHkgdGhlIHNwZWNpZmllZCBicmVha3BvaW50CisgICAg
ICAgICAgaWYgYXBwcm9wcmlhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBuZXcgYnJlYWtwb2lu
dCBpcyBiZWluZyBkZWZpbmVkCisgICAgICAgICAgYnkgdGhlIFdlYkluc3BlY3RvciBhbmQgbmVl
ZHMgdG8gYmUgYXBwbGllZCB0byBhbiBhbHJlYWR5IGluc3RhbGxlZAorICAgICAgICAgIENvZGVC
bG9jay4KKworICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3Rvcjo6Q2xlYXJB
bGxCcmVha3BvaW50c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRz
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjppdGVyYXRlQ29k
ZUJsb2Nrc0FuZENsZWFyQWxsQnJlYWtwb2ludHMpOgorCisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgLSBGaXhlZCBhIHJlZ3Jlc3Npb24gdGhhdCBicm9r
ZSBET00gYnJlYWtwb2ludHMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGgKKyAgICAgICAgICB0aGUg
c2tpcHBpbmcgb2Ygb3BfZGVidWcgY2FsbGJhY2tzLCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhbiB1
cGRhdGVkCisgICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLiBOb3JtYWxseSwgbV9jdXJyZW50
Q2FsbEZyYW1lIGlzIHByb3ZpZGVkIGFzIGFyZworICAgICAgICAgIGluIHRoZSBvcF9kZWJ1ZyBj
YWxsYmFjay4gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gZ2V0IHRoZSBDYWxsRnJhbWUqIGZyb20KKyAg
ICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzaG91bGRQYXVzZSk6CisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgLSBBZGRlZCB1dGlsaXR5IHRvIGl0ZXJhdGUg
YWxsIENvZGVCbG9ja3MgaW4gdGhlIGhlYXAgLyBWTS4KKworICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKwor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgLSBUaGVzZSBub3cgY2hlY2tzIENvZGVCbG9jazo6bV9udW1CcmVh
a3BvaW50cyBhbmQgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2UKKyAgICAgICAgICBpbnN0ZWFkIG9m
IERlYnVnZ2VyOjptX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKToKKwogMjAxNC0wMS0yMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZ2lzdGVycyB1c2VkIGluIHdyaXRlQmFycmllck9uT3BlcmFuZCBj
YW4gY2F1c2UgY2xvYmJlcmluZyBvbiBzb21lIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUyLDggKzEzNTIsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWJ1ZzogewogICAgICAgICAg
ICAgaW50IGRlYnVnSG9va0lEID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aGFzQnJlYWtwb2ludEZsYWcgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcyIsIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzICVkIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCksIGhh
c0JyZWFrcG9pbnRGbGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKQEAgLTE0NjgsNiArMTQ2OSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4
ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92
bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMp
CkBAIC0xNTIyLDYgKzE1MjQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQogICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9i
amVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1f
bnVtQnJlYWtwb2ludHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5s
aW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVC
bG9jay0+dGhpc1JlZ2lzdGVyKCkpCkBAIC0yNTY2LDYgKzI1NjksMjcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpOwogfQogCitib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOworICAgIGNvbnN0IEluc3RydWN0aW9u
KiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2RlYnVnKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGl0IC0gYmVnaW47CisgICAgICAgICAgICBpbnQgdW51c2VkOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3BEZWJ1Z0xpbmU7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOworICAg
ICAgICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2lu
dDo6dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGl0ICs9IG9wY29kZUxl
bmd0aHNbb3Bjb2RlSURdOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAgICAgbV9yYXJl
Q2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2OSw2ICs4
NjksMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7CiAK
KyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbik7CisKKyAgICBpbnQgbnVtQnJlYWtwb2ludHMoKSBjb25zdCB7IHJldHVybiBt
X251bUJyZWFrcG9pbnRzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1CcmVha3BvaW50c09m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQnJlYWtwb2lu
dHMpOyB9CisKKyAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKSB7IG1f
bnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0KKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAgICAgICAgbV9udW1CcmVha3BvaW50
cyAtPSBudW1CcmVha3BvaW50czsKKyAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0g
MCk7CisgICAgfQorICAgIHZvaWQgY2xlYXJBbGxCcmVha3BvaW50cygpIHsgbV9udW1CcmVha3Bv
aW50cyA9IDA7IH0KKwogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJz
IHByaXZhdGUuCiAKICAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CkBAIC0xMDA1LDYgKzEw
MTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIGludCBt
X251bUJyZWFrcG9pbnRzOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICBWTSogbV92bTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw4IEBAIHN0cnVjdCBCcmVha3BvaW50IHsKICAgICB1bnNpZ25lZCBjb2x1bW47CiAg
ICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBib29sIGF1dG9Db250aW51ZTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB1bnNwZWNpZmllZENvbHVtbiA9IFVJTlRfTUFYOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDEwIEBACiAK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorCiAjaW5jbHVkZSAi
SGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpAQCAtMTM5LDcgKzE0MSw4IEBAIHByaXZhdGU6CiB9Owog
CiBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQotICAgIDogbV9wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKKyAgICA6IG1fdm0obnVs
bHB0cikKKyAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlv
bnMpCiAgICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9pc1BhdXNl
ZChmYWxzZSkKICAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKQEAgLTE1MSw3ICsx
NTQsNiBAQCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkCiAgICAgLCBt
X2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgpCiAgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlE
KG5vU291cmNlSUQpCiAgICAgLCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKLSAg
ICAsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShm
YWxzZSkKIHsKIH0KQEAgLTE2Niw2ICsxNjgsMTAgQEAgRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB2
b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSk7CisgICAgaWYgKCFtX3ZtKQorICAg
ICAgICBtX3ZtID0gJmdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VChtX3ZtID09ICZnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVi
dWdnZXIodGhpcyk7CiAgICAgbV9nbG9iYWxPYmplY3RzLmFkZChnbG9iYWxPYmplY3QpOwogfQpA
QCAtMTg0LDEyICsxOTAsMTMwIEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2wKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGdsb2JhbE9iamVjdCkp
OwogICAgIG1fZ2xvYmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0KTsKICAgICBnbG9iYWxP
YmplY3QtPnNldERlYnVnZ2VyKDApOworICAgIGlmICghbV9nbG9iYWxPYmplY3RzLnNpemUoKSkK
KyAgICAgICAgbV92bSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBh
dXNlKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOwotICAgIHVwZGF0
ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnJlZ2lzdGVy
Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGl0ZXJhdGVCcmVha3BvaW50
c0FuZEFwcGx5VG9Db2RlQmxvY2soY29kZUJsb2NrKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6dW5y
ZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb2RlQmxvY2st
PmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKK30KKworYm9vbCBEZWJ1Z2dlcjo6YXBwbHlCcmVha3Bv
aW50SW5Db2RlQmxvY2tJZk5lZWRlZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnJlYWtwb2ludCYg
YnJlYWtwb2ludCwgYm9vbCBlbmFibGVCcmVha3BvaW50KQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsKKyAg
ICAgICAgfHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nh
c3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAgIGlmIChicmVha3BvaW50
LnNvdXJjZUlEICE9IHNvdXJjZUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNp
Z25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IGJyZWFr
cG9pbnQuY29sdW1uOworCisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJsZS0+bGlu
ZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFydENvbHVt
bigpOworICAgIHVuc2lnbmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgpOworICAg
IHVuc2lnbmVkIGVuZENvbHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisgICAgbGlu
ZSArPSAxOworICAgIGNvbHVtbiA9IGNvbHVtbiA/IGNvbHVtbiArIDEgOiBCcmVha3BvaW50Ojp1
bnNwZWNpZmllZENvbHVtbjsKKworICAgIGlmIChsaW5lIDwgc3RhcnRMaW5lIHx8IGxpbmUgPiBl
bmRMaW5lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGNvbHVtbiAhPSBCcmVha3Bv
aW50Ojp1bnNwZWNpZmllZENvbHVtbikgeworICAgICAgICBpZiAobGluZSA9PSBzdGFydExpbmUg
JiYgY29sdW1uIDwgc3RhcnRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChsaW5lID09IGVuZExpbmUgJiYgY29sdW1uID4gZW5kQ29sdW1uKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIWNvZGVCbG9jay0+aGFzT3BEZWJ1Z0Zv
ckxpbmVBbmRDb2x1bW4obGluZSwgY29sdW1uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKGVuYWJsZUJyZWFrcG9pbnQpCisgICAgICAgIGNvZGVCbG9jay0+YWRkQnJlYWtwb2lu
dCgxKTsKKyAgICBlbHNlCisgICAgICAgIGNvZGVCbG9jay0+cmVtb3ZlQnJlYWtwb2ludCgxKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6aXRlcmF0ZUJyZWFrcG9pbnRz
QW5kQXBwbHlUb0NvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBCcmVha3Bv
aW50SURUb0JyZWFrcG9pbnRNYXAmIGJyZWFrcG9pbnRzID0gbV9icmVha3BvaW50SURUb0JyZWFr
cG9pbnQ7CisgICAgZm9yIChhdXRvIGl0ID0gYnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gYnJl
YWtwb2ludHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgQnJlYWtwb2ludCYgYnJlYWtwb2ludCA9
ICppdC0+dmFsdWU7CisgICAgICAgIGFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQo
Y29kZUJsb2NrLCBicmVha3BvaW50LCB0cnVlKTsKKyAgICB9Cit9CisKK2NsYXNzIEFwcGx5QnJl
YWtwb2ludEZ1bmN0b3IgeworcHVibGljOgorICAgIEFwcGx5QnJlYWtwb2ludEZ1bmN0b3IoRGVi
dWdnZXImIGRlYnVnZ2VyLCBCcmVha3BvaW50JiBicmVha3BvaW50LCBib29sIGVuYWJsZU9yTm90
KQorICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIpCisgICAgICAgICwgbV9icmVha3BvaW50
KGJyZWFrcG9pbnQpCisgICAgICAgICwgbV9lbmFibGVPck5vdChlbmFibGVPck5vdCkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcigpKENvZGVCbG9jayogY29kZUJsb2NrKQorICAg
IHsKKyAgICAgICAgaWYgKG1fZGVidWdnZXIubV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGNvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpKQorICAgICAgICAgICAgbV9kZWJ1Z2dlci5hcHBseUJyZWFr
cG9pbnRJbkNvZGVCbG9ja0lmTmVlZGVkKGNvZGVCbG9jaywgbV9icmVha3BvaW50LCBtX2VuYWJs
ZU9yTm90KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBE
ZWJ1Z2dlciYgbV9kZWJ1Z2dlcjsKKyAgICBCcmVha3BvaW50JiBtX2JyZWFrcG9pbnQ7CisgICAg
Ym9vbCBtX2VuYWJsZU9yTm90OworfTsKKwordm9pZCBEZWJ1Z2dlcjo6aXRlcmF0ZUNvZGVCbG9j
a3NBbmRBcHBseUJyZWFrcG9pbnQoQnJlYWtwb2ludCYgYnJlYWtwb2ludCwgYm9vbCBlbmFibGVP
ck5vdCkKK3sKKyAgICBpZiAoIW1fdm0pCisgICAgICAgIHJldHVybjsKKyAgICBIZWFwSXRlcmF0
aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUobV92bS0+aGVhcCk7CisgICAgQXBwbHlCcmVha3BvaW50
RnVuY3RvciBmdW5jdG9yKCp0aGlzLCBicmVha3BvaW50LCBlbmFibGVPck5vdCk7CisgICAgbV92
bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOworfQorCitjbGFzcyBDbGVhckFsbEJy
ZWFrcG9pbnRzRnVuY3RvciB7CitwdWJsaWM6CisgICAgQ2xlYXJBbGxCcmVha3BvaW50c0Z1bmN0
b3IoRGVidWdnZXImIGRlYnVnZ2VyKQorICAgICAgICA6IG1fZGVidWdnZXIoZGVidWdnZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPm51bUJyZWFrcG9pbnRzKCkgJiYgbV9kZWJ1
Z2dlci5tX2dsb2JhbE9iamVjdHMuY29udGFpbnMoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
CisgICAgICAgICAgICBjb2RlQmxvY2stPmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEZWJ1Z2dlciYgbV9kZWJ1Z2dl
cjsKK307CisKK3ZvaWQgRGVidWdnZXI6Oml0ZXJhdGVDb2RlQmxvY2tzQW5kQ2xlYXJBbGxCcmVh
a3BvaW50cygpCit7CisgICAgaWYgKCFtX3ZtKQorICAgICAgICByZXR1cm47CisgICAgSGVhcEl0
ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1fdm0tPmhlYXApOworICAgIENsZWFyQWxsQnJl
YWtwb2ludHNGdW5jdG9yIGZ1bmN0b3IoKnRoaXMpOworICAgIG1fdm0tPmhlYXAuZm9yRWFjaENv
ZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5j
dGlvbnMoVk0qIHZtKQpAQCAtMjA3LDEyICszMzEsNiBAQCB2b2lkIERlYnVnZ2VyOjpyZWNvbXBp
bGVBbGxKU0Z1bmN0aW9ucyhWCiAgICAgdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5mb3JFYWNoTGl2
ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIHJlY29tcGlsZXIpOwogfQogCi12b2lkIERlYnVnZ2VyOjp1
cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpCi17Ci0gICAgc2l6ZV90IG51bWJlck9mQnJl
YWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zaXplKCk7Ci0gICAgbV9uZWVk
c09wRGVidWdDYWxsYmFja3MgPSBtX3Nob3VsZFBhdXNlIHx8IG51bWJlck9mQnJlYWtwb2ludHM7
Ci19Ci0KIEJyZWFrcG9pbnRJRCBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChCcmVha3BvaW50IGJy
ZWFrcG9pbnQsIHVuc2lnbmVkJiBhY3R1YWxMaW5lLCB1bnNpZ25lZCYgYWN0dWFsQ29sdW1uKQog
ewogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gYnJlYWtwb2ludC5zb3VyY2VJRDsKQEAgLTI0Nyw3
ICszNjUsNyBAQCBCcmVha3BvaW50SUQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQoQnJlCiAgICAg
YnJlYWtwb2ludHMuYXBwZW5kKGJyZWFrcG9pbnQpOwogICAgIG1fYnJlYWtwb2ludElEVG9CcmVh
a3BvaW50LnNldChpZCwgJmJyZWFrcG9pbnRzLmxhc3QoKSk7CiAKLSAgICB1cGRhdGVOZWVkRm9y
T3BEZWJ1Z0NhbGxiYWNrcygpOworICAgIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3Bv
aW50KGJyZWFrcG9pbnQsIHRydWUpOwogCiAgICAgcmV0dXJuIGlkOwogfQpAQCAtMjY3LDYgKzM4
NSw4IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2kKICAgICBMaW5l
VG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUuZmluZChicmVh
a3BvaW50LmxpbmUpOwogICAgIEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFsdWUuZW5kKCkpOwog
CisgICAgaXRlcmF0ZUNvZGVCbG9ja3NBbmRBcHBseUJyZWFrcG9pbnQoYnJlYWtwb2ludCwgZmFs
c2UpOworCiAgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrcG9pbnRzID0gYnJlYWtzSXQtPnZh
bHVlOwogICAgIHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291bnQgPSBicmVha3BvaW50cy5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9pbnRzQ291bnQ7IGkrKykgewpA
QCAtMjgyLDggKzQwMiw2IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtw
b2kKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgdXBkYXRlTmVl
ZEZvck9wRGVidWdDYWxsYmFja3MoKTsKIH0KIAogYm9vbCBEZWJ1Z2dlcjo6aGFzQnJlYWtwb2lu
dChTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlvbiwgQnJlYWtw
b2ludCAqaGl0QnJlYWtwb2ludCkKQEAgLTMxMCw2ICs0MjgsNyBAQCBib29sIERlYnVnZ2VyOjpo
YXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgICAgIHVuc2lnbmVkIGJyZWFrTGluZSA9IGJy
ZWFrcG9pbnRzW2ldLmxpbmU7CiAgICAgICAgIHVuc2lnbmVkIGJyZWFrQ29sdW1uID0gYnJlYWtw
b2ludHNbaV0uY29sdW1uOwogICAgICAgICAvLyBTaW5jZSBmcm9udGVuZCB0cnVuY2F0ZXMgdGhl
IGluZGVudCwgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBhIGxpbmUgbXVzdCBtYXRjaCB0aGUgYnJl
YWtwb2ludCAobGluZSwwKS4KKyAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0cy5jb250YWlu
cyhtX2N1cnJlbnRDYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSkpOwogICAg
ICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmUgPT0gYnJlYWtMaW5l
ICYmICFicmVha0NvbHVtbikKICAgICAgICAgICAgIHx8IChsaW5lID09IGJyZWFrTGluZSAmJiBj
b2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7CiAgICAgICAgICAgICBoaXQgPSB0cnVlOwpAQCAtMzUx
LDcgKzQ3MCw3IEBAIHZvaWQgRGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogICAgIG1fYnJl
YWtwb2ludElEVG9CcmVha3BvaW50LmNsZWFyKCk7CiAgICAgbV9zb3VyY2VJRFRvQnJlYWtwb2lu
dHMuY2xlYXIoKTsKIAotICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CisgICAg
aXRlcmF0ZUNvZGVCbG9ja3NBbmRDbGVhckFsbEJyZWFrcG9pbnRzKCk7CiB9CiAKIHZvaWQgRGVi
dWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQpAQCAtMzczLDEx
ICs0OTIsMTMgQEAgdm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYgogCiB2
b2lkIERlYnVnZ2VyOjpicmVha1Byb2dyYW0oKQogewotICAgIGlmIChtX2lzUGF1c2VkIHx8ICFt
X2N1cnJlbnRDYWxsRnJhbWUpCisgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwogICAgIHNldFNob3VsZFBhdXNl
KHRydWUpOworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fdm0tPnRvcENhbGxGcmFtZTsKKyAg
ICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICBwYXVzZUlmTmVlZGVkKG1fY3VycmVu
dENhbGxGcmFtZSk7CiB9CiAKQEAgLTQzMiw3ICs1NTMsNyBAQCB2b2lkIERlYnVnZ2VyOjp1cGRh
dGVDYWxsRnJhbWVBbmRQYXVzZUlmCiB7CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7
CiAgICAgcGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGlmICghbmVlZHNPcERlYnVnQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKCFzaG91bGRQYXVzZSgpKQogICAgICAgICBtX2N1cnJlbnRDYWxs
RnJhbWUgPSAwOwogfQogCkBAIC00NzcsOCArNTk4LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6cGF1c2VJ
Zk5lZWRlZChDYWxsRnJhbWUqIAogCiAgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50ICYm
ICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKICAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2UpOwot
ICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQotICAgICAgICAgICAgbV9jdXJy
ZW50Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbnVsbHB0cjsK
ICAgICB9CiB9CiAKQEAgLTU0OCw3ICs2NjgsNyBAQCB2b2lkIERlYnVnZ2VyOjp3aWxsRXhlY3V0
ZVByb2dyYW0oQ2FsbEZyCiAgICAgLy8gdGhlIGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uIHRvIG5v
dCByZXF1aXJlIGNhbGxiYWNrcy4KICAgICBpZiAoIW1faXNJbldvcmtlclRocmVhZCkKICAgICAg
ICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGVsc2Ug
aWYgKG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgIGVsc2UgaWYgKHNob3VsZFBhdXNlKCkp
CiAgICAgICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTYyMzkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIERlYnVnZ2VyKGJvb2wgaXNJbldvcmtlclRo
cmVhZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigpOwogCi0gICAgYm9vbCBuZWVk
c09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
czsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3QgbmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNr
cyk7IH0KKyAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVz
ZTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc2hvdWxkUGF1c2VPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRGVidWdnZXIsIG1fc2hvdWxkUGF1c2UpOyB9CiAKICAgICBKU0M6OkRl
YnVnZ2VyQ2FsbEZyYW1lKiBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdDsKICAgICBi
b29sIGhhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjaygpIGNvbnN0CkBAIC0xMDQsNiArMTA0
LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSopOwog
CisgICAgdm9pZCByZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHVucmVn
aXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJv
b2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEJyZWFrcG9pbnQmKSB7
IH0KQEAgLTEyOCw3ICsxMzEsNyBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiBWZWN0b3I8QnJl
YWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVk
LCBCcmVha3BvaW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0gICAgdHlwZWRl
ZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSURUb0JyZWFr
cG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VJRCwgTGluZVRvQnJlYWtwb2lu
dHNNYXAsIFdURjo6SW50SGFzaDxTb3VyY2VJRD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8U291cmNlSUQ+PiBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA7CiAKICAgICBjbGFz
cyBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHsKICAgICBwdWJsaWM6CkBAIC0xNDgsNyArMTUxLDYg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQnJlYWtwb2ludChTb3VyY2VJRCwgY29uc3QgVGV4
dFBvc2l0aW9uJiwgQnJlYWtwb2ludCogaGl0QnJlYWtwb2ludCk7CiAKLSAgICBib29sIHNob3Vs
ZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQogICAgIHZvaWQgc2V0U2hv
dWxkUGF1c2UoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygp
OwogCkBAIC0xNjEsNiArMTYzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDYWxsRnJh
bWVBbmRQYXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAgICAgdm9pZCBwYXVzZUlmTmVl
ZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAKKyAgICBib29sIGFwcGx5QnJlYWtwb2ludEluQ29kZUJs
b2NrSWZOZWVkZWQoQ29kZUJsb2NrKiwgQnJlYWtwb2ludCYsIGJvb2wgZW5hYmxlT3JOb3QpOwor
ICAgIHZvaWQgaXRlcmF0ZUJyZWFrcG9pbnRzQW5kQXBwbHlUb0NvZGVCbG9jayhDb2RlQmxvY2sq
KTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KEJyZWFrcG9p
bnQmLCBib29sIGVuYWJsZU9yTm90KTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQ2xl
YXJBbGxCcmVha3BvaW50cygpOworCisgICAgVk0qIG1fdm07CiAgICAgSGFzaFNldDxKU0dsb2Jh
bE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIAogICAgIFBhdXNlT25FeGNlcHRpb25zU3RhdGUg
bV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwpAQCAtMTgxLDExICsxODksMTIgQEAgcHJpdmF0ZToK
ICAgICBCcmVha3BvaW50SURUb0JyZWFrcG9pbnRNYXAgbV9icmVha3BvaW50SURUb0JyZWFrcG9p
bnQ7CiAgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0JyZWFrcG9pbnRz
OwogCi0gICAgYm9vbCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrczsKICAgICBib29sIG1fc2hvdWxk
UGF1c2U7CiAKICAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50RGVi
dWdnZXJDYWxsRnJhbWU7CiAKKyAgICBmcmllbmQgY2xhc3MgQXBwbHlCcmVha3BvaW50RnVuY3Rv
cjsKKyAgICBmcmllbmQgY2xhc3MgQ2xlYXJBbGxCcmVha3BvaW50c0Z1bmN0b3I7CiAgICAgZnJp
ZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRlbXBv
cmFyeVBhdXNlZFN0YXRlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7
CkBAIC0xOTUsOCArMjA0LDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIERlYnVnZ2VyIHsKIHB1Ymxp
YzoKLSAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpIDogbV9uZWVkc09wRGVidWdDYWxsYmFja3Mo
ZmFsc2UpIHsgfQotICAgIGJvb2wgbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpCisgICAgICAgIDogbV9zaG91
bGRQYXVzZShmYWxzZSkKKyAgICB7CisgICAgfQorICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgbmVlZHNFeGNlcHRpb25DYWxsYmFja3MoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgZGV0YWNoKEpTR2xvYmFsT2JqZWN0Kikg
eyB9CiAgICAgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIqLCBp
bnQsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CkBAIC0yMDgsNyArMjIwLDggQEAgcHVibGljOgog
ICAgIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgeyB9CiAgICAgdm9pZCBkaWRS
ZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKikgeyB9CiAKLSAgICBib29sIG1fbmVlZHNPcERlYnVn
Q2FsbGJhY2tzOworcHJpdmF0ZToKKyAgICBib29sIG1fc2hvdWxkUGF1c2U7CiB9OwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYg
KzcxLDIxIEBAIHB1YmxpYzoKICAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBjb2xs
ZWN0aW9uLgogICAgIHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKEhl
YXAqKTsKIAorICAgIC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVhcCB1bnRpbCB0
aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUKKyAgICAvLyB0byBpbmRpY2F0ZSB0aGF0
IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sgaGFzIGJlZW4K
KyAgICAvLyB2aXNpdGVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRl
cmF0ZShGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29kZUJs
b2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAqaXRl
cjsKKyAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxvY2s+
IGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKICAgICAvLyBhcmJpdHJhcnkgYm9n
dXMgcG9pbnRlcnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBlZWsg
dHlwZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2MjM5MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MTc0LDYgKzE3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JFYWNo
UHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoKTsK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFjaENv
ZGVCbG9jayhGdW5jdG9yJik7CiAKICAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7IHJl
dHVybiAmbV9oYW5kbGVTZXQ7IH0KICAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNrKCkg
eyByZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KQEAgLTQzMiw2ICs0MzMsMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiBmb3JFYWNoUHJvdGVjdGVkQ2VsbChmdW5jdG9yKTsKICAg
ICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBIZWFwOjpm
b3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICByZXR1cm4g
bV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7CisgICAgfQorCiAgICAgaW5s
aW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5dGVz
KQogICAgIHsKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA1LDggKzEyMDUsOSBAQCBKU1ZhbHVlIEludGVy
cHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnByZXRl
cjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVnSG9va0lEKQog
ewogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9iamVj
dCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2VyLT5uZWVkc09w
RGVidWdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKGRlYnVnZ2VyLT5zaG91bGRQYXVzZSgpIHx8IGNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm51bUJyZWFrcG9pbnRzKCkgfHwgY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CiAKICAg
ICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJhbWU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NywxNCArOTk3LDIyIEBAIHZvaWQgSklU
OjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50KCk7CiAjZWxp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVnZ2VyKiBkZWJ1
Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1Z2dlckFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmpl
Y3Q6OmRlYnVnZ2VyT2Zmc2V0KCk7CiAgICAgbG9hZFB0cihkZWJ1Z2dlckFkZHJlc3MsIHJlZ1Qw
KTsKICAgICBKdW1wIG5vRGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKLSAg
ICBjaGFyKiBmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRlYnVnZ2VyKSAr
IERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsKLSAgICBKdW1wIHNraXBE
ZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZmxhZ0FkZHJlc3Mp
KTsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsK
KyAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihk
ZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQoKTsKKyAgICBKdW1wIGNhbGxi
YWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHNob3VsZFBh
dXNlQWRkcmVzcykpOworCisgICAgY2hhciogbnVtQnJlYWtwb2ludHNBZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJsb2NrOjpudW1CcmVha3BvaW50
c09mZnNldCgpOworICAgIGxvYWQzMihudW1CcmVha3BvaW50c0FkZHJlc3MsIHJlZ1QwKTsKKyAg
ICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CisKKyAg
ICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHNraXBEZWJ1Z0hv
b2subGluayh0aGlzKTsKKworICAgIG5vQnJlYWtwb2ludFNldC5saW5rKHRoaXMpOwogICAgIG5v
RGVidWdnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0
cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNSwxMyArNzE1LDIxIEBAIHZvaWQgSklUOjplbWl0
X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50KCk7CiAjZWxpZiBFTkFC
TEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9
IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1Z2dlckFkZHJlc3MgPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6OmRl
YnVnZ2VyT2Zmc2V0KCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBBYnNvbHV0ZUFkZHJlc3MoZGVidWdnZXJBZGRyZXNzKSk7Ci0gICAgY2hhciogZmxhZ0FkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6bmVlZHNP
cERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCk7Ci0gICAgSnVtcCBza2lwRGVidWdIb29rID0gYnJhbmNo
VGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRyZXNzKSk7CisKKyAgICBEZWJ1Z2dl
ciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hhciogc2hvdWxk
UGF1c2VBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsgRGVidWdn
ZXI6OnNob3VsZFBhdXNlT2Zmc2V0KCk7CisgICAgSnVtcCBjYWxsYmFja05lZWRlZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJlc3MpKTsKKwor
ICAgIGNoYXIqIG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGNvZGVCbG9jaygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQoKTsKKyAgICBs
b2FkMzIobnVtQnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7CisgICAgSnVtcCBub0JyZWFrcG9p
bnRTZXQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworCisgICAgY2FsbGJhY2tOZWVkZWQu
bGluayh0aGlzKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7CisK
KyAgICBub0JyZWFrcG9pbnRTZXQubGluayh0aGlzKTsKICAgICBub0RlYnVnZ2VyLmxpbmsodGhp
cyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsMTMgKzgzNSwxOCBA
QCBfbGxpbnRfb3BfcHJvZmlsZV9kaWRfY2FsbDoKIAogX2xsaW50X29wX2RlYnVnOgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2FkcCBD
b2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKKyAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDAKICAgICBs
b2FkcCBKU0dsb2JhbE9iamVjdDo6bV9kZWJ1Z2dlclt0MF0sIHQwCiAgICAgYnRpeiB0MCwgLm9w
RGVidWdEb25lCi0gICAgbG9hZGIgRGVidWdnZXI6Om1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzW3Qw
XSwgdDAKLSAgICBidGJ6IHQwLCAub3BEZWJ1Z0RvbmUKIAorICAgIGxvYWRiIERlYnVnZ2VyOjpt
X3Nob3VsZFBhdXNlW3QwXSwgdDAKKyAgICBidGJueiB0MCwgLm9wRGVidWdEb0NhbGxiYWNrCisK
KyAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtQnJlYWtwb2ludHNbdDFdLCB0MAorICAgIGJ0aXog
dDAsIC5vcERlYnVnRG9uZQorCisub3BEZWJ1Z0RvQ2FsbGJhY2s6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfZGVidWcpCiAub3BEZWJ1Z0RvbmU6ICAgICAgICAgICAgICAgICAg
ICAKICAgICBkaXNwYXRjaCgzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsOCArMTcw
LDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICAgICAg
YnJlYWs7CiAgICAgfSB9CiAKLSAgICBpZiAob2xkQ29kZUJsb2NrKQorICAgIERlYnVnZ2VyKiBk
ZWJ1Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwor
ICAgIGlmIChvbGRDb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKGRlYnVnZ2VyKQorICAgICAgICAg
ICAgZGVidWdnZXItPnVucmVnaXN0ZXJDb2RlQmxvY2sob2xkQ29kZUJsb2NrLmdldCgpKTsKICAg
ICAgICAgb2xkQ29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgfQorICAgIGlm
IChkZWJ1Z2dlcikKKyAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVyaWND
b2RlQmxvY2spOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6
bmV3Q29kZUJsb2NrRm9yKAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221832</attachid>
            <date>2014-01-21 23:38:26 -0800</date>
            <delta_ts>2014-01-22 03:03:24 -0800</delta_ts>
            <desc>patch 2: added a comment.</desc>
            <filename>bug-122836.patch</filename>
            <type>text/plain</type>
            <size>32881</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxNC0wMS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UG9vciBtYW4ncyBmYXN0IGJyZWFrcG9pbnRzIGZvciBhIDIuM3ggZGVidWdnZXIgc3BlZWR1cC4K
KyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMjgzNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5IHdlIGdhaW5lZCBiYWNr
IHNvbWUgcGVyZm9ybWFuY2UgKHJ1biBhdCBiYXNlbGluZSBKSVQgc3BlZWRzKQorICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3IgaXMgb3BlbmVkIHByb3ZpZGVkIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQuIFRoaXMKKyAgICAgICAgd2FzIGFjaGlldmVkIGJ5IHNpbXBseSBza2lwcGluZyBhbGwg
b3BfZGVidWcgY2FsbGJhY2tzIHRvIHRoZSBkZWJ1Z2dlcgorICAgICAgICBpZiBubyBicmVha3Bv
aW50cyBhcmUgc2V0LiBJZiBhbnkgYnJlYWtwb2ludHMgYXJlIHNldCwgdGhlIGRlYnVnZ2VyIHdp
bGwKKyAgICAgICAgc2V0IGEgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgZmxhZyB3aGljaCBjYXVz
ZXMgdGhlIGNhbGxiYWNrcyB0byBiZQorICAgICAgICBjYWxsZWQsIGFuZCB3ZSBkb24ndCBnZXQg
dGhlIGJhc2VsaW5lIEpJVCBzcGVlZHMgYW55bW9yZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbm93IHRyYWNrIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgc2V0IGluIHRo
ZQorICAgICAgICBDb2RlQmxvY2sgdGhhdCB0aGV5IGFyZSBzZXQgaW4uIFRoZSBMTElOVCBhbmQg
YmFzZWxpbmUgSklUIGNvZGUgd2lsbAorICAgICAgICBjaGVjayBDb2RlQmxvY2s6Om1fbnVtQnJl
YWtwb2ludHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcF9kZWJ1ZyBjYWxsYmFja3MKKyAgICAgICAg
bmVlZCB0byBiZSBjYWxsZWQuIFdpdGggdGhpcywgd2Ugd2lsbCBvbmx5IGVuYWJsZSBvcF9kZWJ1
ZyBjYWxsYmFja3MgZm9yCisgICAgICAgIENvZGVCbG9ja3MgdGhhdCBuZWVkIGl0IGkuZS4gdGhv
c2Ugd2l0aCBicmVha3BvaW50cyBzZXQgaW4gdGhlbS4KKworICAgICAgICBEZWJ1Z2dlcjo6bV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgaXMgbm93IG9ic29sZXRlZC4gVGhlIExMSU5UIGFuZCBiYXNl
bGluZQorICAgICAgICBKSVQgY29kZSBzdGlsbCBuZWVkcyB0byBjaGVjayBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgICAgIGRlYnVnZ2VyIGlzIGluIHN0
ZXBwaW5nIG1vZGUgYW5kIGhlbmNlLCBuZWVkcyBvcF9kZWJ1ZyBjYWxsYmFja3MgZW5hYmxlZAor
ICAgICAgICBmb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgZGVidWdnZXIgImNvbnRpbnVlcyIgdGhl
IHJ1biBhbmQgZXhpdCBzdGVwcGluZworICAgICAgICBtb2RlLgorCisgICAgICAgIEFsc28gaW4g
dGhpcyBwYXRjaCwgSSBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gRE9NIGJyZWFrcG9pbnRzIHdoaWNo
IHJlbGllcworICAgICAgICBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkgdG8gcGF1c2UgdGhlIGRl
YnVnZ2VyLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAtIE1pc3NlZCBhY2NvdW50aW5n
IGZvciBvcF9kZWJ1ZydzIG5ldyBoYXNCcmVha3BvaW50RmxhZyBvcGVyYW5kIGhlcmUgd2hlbgor
ICAgICAgICAgIGl0IHdhcyBhZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1u
KToKKyAgICAgICAgLSBUaGlzIGlzIG5lZWRlZCBpbiBEZWJ1Z2dlcjo6YXBwbHlCcmVha3BvaW50
SW5Db2RlQmxvY2tJZk5lZWRlZCgpIHRvCisgICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgYnJlYWtw
b2ludCBmYWxscyB3aXRoaW4gYSBDb2RlQmxvY2sgb3Igbm90LiBTaW1wbHkKKyAgICAgICAgICBj
aGVja2luZyB0aGUgYm91bmRzIG9mIHRoZSBDb2RlQmxvY2sgaXMgaW5zdWZmaWNpZW50LiBGb3Ig
ZXhhbXBsZSwKKyAgICAgICAgICBsZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIEpTIGNv
ZGU6CisKKyAgICAgICAgICAgICAgLy8gYmVnaW4gZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAg
IGZ1bmN0aW9uIGYxKCkgeworICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZjIoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAuLi4gLy8gc2V0IGJyZWFrcG9pbnQgaGVyZS4KKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvLyBlbmQgZ2xvYmFsIHNj
b3BlCisKKyAgICAgICAgICBVc2luZyB0aGUgQ29kZUJsb2NrIGJvdW5kcyBhbG9uZSwgdGhlIGJy
ZWFrcG9pbnQgYWJvdmUgd2lsbCB0byBhcHBlYXIKKyAgICAgICAgICB0byBiZSBpbiB0aGUgZ2xv
YmFsIHByb2dyYW0gQ29kZUJsb2NrLCBhbmQgdGhlIENvZGVCbG9ja3MgZm9yIGZ1bmN0aW9uCisg
ICAgICAgICAgZjEoKSBhbmQgZjIoKS4gV2l0aCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKCkgd2UgY2FuCisgICAgICAgICAgcnVsZSBvdXQgdGhlIGdsb2JhbCBwcm9ncmFt
IENvZGVCbG9jayBhbmQgZjEoKSwgYW5kIG9ubHkgYXBwbHkgdGhlCisgICAgICAgICAgYnJlYWtw
b2ludCB0byBmMigwIHdoZXJlIGl0IGJlbG9uZ3MuCisKKyAgICAgICAgICBDdXJyZW50bHksIENv
ZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSB3b3JrcyBieSBpdGVyYXRpbmcK
KyAgICAgICAgICBvdmVyIGFsbCB0aGUgb3Bjb2RlcyBpbiB0aGUgQ29kZUJsb2NrIHRvIGxvb2sg
Zm9yIG9wX2RlYnVnJ3MuIEZvciBlYWNoCisgICAgICAgICAgb3BfZGVidWcsIGl0IGNhbGxzIENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoKSB0bworICAgICAgICAg
IGRvIGEgYmluYXJ5IHNlYWNoIHRvIGdldCB0aGUgbGluZSBhbmQgY29sdW1uIGluZm8gZm9yIHRo
YXQgb3BfZGVidWcuCisgICAgICAgICAgVGhpcyBpcyBhIE4gKiBsb2coTikgYWxnb3JpdGhtLCBi
dXQgaXQgaXMgYXNzdW1lZCB0aGF0IGluIGEgbm9taW5hbAorICAgICAgICAgIHN5c3RlbSwgd2Ug
d29uJ3QgYmUgY2FsbGluZyBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKCkg
dG8KKyAgICAgICAgICBpbXBhY3QgaW50ZXJhY3RpdmUgZGVidWdnZXIgcGVyZm9ybWFuY2UuIElm
IHRoaXMgc2hvdWxkIHByb3ZlIHRvIGJlCisgICAgICAgICAgdW50cnVlLCB0aGVyZSBhcmUgc2V2
ZXJhbCBvcHRpbWl6YXRpb24gb3B0aW9ucyB0aGF0IHdlIGNhbiBlbnRlcnRhaW4KKyAgICAgICAg
ICBpbiB0aGUgZnV0dXJlIHRvIGFkZHJlc3MgdGhpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1CcmVha3BvaW50c09mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGVidWdnZXIvQnJlYWtwb2ludC5oOgorICAgICAgICAtIGRl
ZmluZWQgQnJlYWtwb2ludDo6dW5zcGVjaWZpZWRDb2x1bW4gc28gdGhhdCB3ZSBjYW4gZXhwbGlj
aXRseSBpbmRpY2F0ZQorICAgICAgICAgIHdoZW4gdGhlIFdlYkluc3BlY3RvciB3YXMgc2V0dGlu
ZyBhIGxpbmUgYnJlYWtwb2ludCBhbmQgZGlkIG5vdCBwcm92aWRlCisgICAgICAgICAgYSBjb2x1
bW4gdmFsdWUuIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSBuZWVkcyB0
aGlzCisgICAgICAgICAgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gbG9vc2VuIGl0cyBtYXRjaGlu
ZyBjcml0ZXJpYSBmb3Igb3BfZGVidWcKKyAgICAgICAgICBieXRlY29kZXMgZm9yIHRoZSBzcGVj
aWZpZWQgYnJlYWtwb2ludCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzIHByb3ZpZGVkCisgICAgICAg
ICAgYnkgdGhlIGRlYnVnZ2VyLgorCisgICAgICAgICAgUHJldmlvdXNseSwgd2UganVzdCBoaWph
Y2sgYSAwIHZhbHVlIGNvbHVtbiBhcyBhbiB1bnNwZWNpZmllZCBjb2x1bW4uCisgICAgICAgICAg
SG93ZXZlciwgdGhlIFdlYkluc3BlY3RvciBvcGVyYXRlcyBvbiAwLWJhc2VkIGludHMgZm9yIGNv
bHVtbiB2YWx1ZXMuCisgICAgICAgICAgSGVuY2UsIDAgc2hvdWxkIGJlIGEgdmFsaWQgY29sdW1u
IHZhbHVlIGFuZCBzaG91bGQgbm90IGJlIGhpamFja2VkIHRvCisgICAgICAgICAgbWVhbiBhbiB1
bnNwZWNpZmllZCBjb2x1bW4uCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIC0gYWRkZWQgdHJhY2tp
bmcgb2YgdGhlIFZNIHRoYXQgdGhlIGRlYnVnZ2VyIGlzIHVzZWQgd2l0aC4gVGhpcyBpcworICAg
ICAgICAgIG5lZWRlZCBieSBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkuCisKKyAgICAgICAgICBU
aGUgVk0gcG9pbnRlciBpcyBhdHRhaW5lZCBmcm9tIHRoZSBmaXJzdCBKU0dsb2JhbE9iamVjdCB0
aGF0IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGF0dGFjaGVzIHRvLiBXaGVuIHRoZSBkZWJ1Z2dl
ciBkZXRhY2hlcyBmcm9tIHRoZSBsYXN0IEpTR2xvYmFsT2JqZWN0LCBpdAorICAgICAgICAgIHdp
bGwgbnVsbGlmeSBpdHMgVk0gcG9pbnRlciB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgc2V0IG9u
IHRoZSBuZXh0CisgICAgICAgICAgYXR0YWNoLgorCisgICAgICAgICAgV2Ugd2VyZSBhbHdheXMg
b25seSB1c2luZyBlYWNoIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggb25lIFZNLiBUaGlzIGNoYW5n
ZQorICAgICAgICAgIG1ha2VzIGl0IGV4cGxpY2l0IHdpdGggYW4gYXNzZXJ0IHRvIGVuc3VyZSB0
aGF0IGFsbCBnbG9iYWxPYmplY3RzIHRoYXQKKyAgICAgICAgICB0aGUgZGVidWdnZXIgYXR0YWNo
ZXMgdG8gYmVvbmdzIHRvIHRoZSBzYW1lIFZNLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjph
dHRhY2gpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFNob3VsZFBhdXNlKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVn
aXN0ZXJDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVC
bG9jayk6CisgICAgICAgIC0gcmVnaXN0ZXJDb2RlQmxvY2soKSBpcyByZXNwb25zaWJsZSBmb3Ig
YXBwbHlpbmcgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnRzCisgICAgICAgICAgdG8gbmV3IENvZGVC
bG9ja3MgYmVpbmcgaW5zdGFsbGVkLiBTaW1pbGFybHksIHVucmVnaXN0ZXJDb2RlQmxvY2soKQor
ICAgICAgICAgIGNsZWFycyB0aGUgYnJlYWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OmFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQpOgorICAgICAgICAtIFRoaXMg
aXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGJyZWFrcG9pbnQgZmFs
bHMgd2l0aGluCisgICAgICAgICAgYSBDb2RlQmxvY2sgb3Igbm90LiBJZiBpdCBkb2VzLCB0aGVu
IGl0IGNhbiBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUKKyAgICAgICAgICBzYWlkIGJyZWFrcG9p
bnQgaW4gdGhlIENvZGVCbG9jay4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgICAg
ICAgICAgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBicmVha3BvaW50IHNpbXBseSBtZWFucyBpbmNy
ZW1lbnRpbmcvZGVjcmVtZW50aW5nCisgICAgICAgICAgdGhlIENvZGVCbG9jaydzIG1fbnVtQnJl
YWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVCcmVha3BvaW50c0Fu
ZEFwcGx5VG9Db2RlQmxvY2spOgorCisgICAgICAgIChKU0M6OkFwcGx5QnJlYWtwb2ludEZ1bmN0
b3I6OkFwcGx5QnJlYWtwb2ludEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpBcHBseUJyZWFrcG9p
bnRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVD
b2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KToKKyAgICAgICAgLSBJdGVyYXRlcyBhbGwgcmVs
ZXZhbnQgQ29kZUJsb2NrcyBhbmQgYXBwbHkgdGhlIHNwZWNpZmllZCBicmVha3BvaW50CisgICAg
ICAgICAgaWYgYXBwcm9wcmlhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBuZXcgYnJlYWtwb2lu
dCBpcyBiZWluZyBkZWZpbmVkCisgICAgICAgICAgYnkgdGhlIFdlYkluc3BlY3RvciBhbmQgbmVl
ZHMgdG8gYmUgYXBwbGllZCB0byBhbiBhbHJlYWR5IGluc3RhbGxlZAorICAgICAgICAgIENvZGVC
bG9jay4KKworICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3Rvcjo6Q2xlYXJB
bGxCcmVha3BvaW50c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRz
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjppdGVyYXRlQ29k
ZUJsb2Nrc0FuZENsZWFyQWxsQnJlYWtwb2ludHMpOgorCisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgLSBGaXhlZCBhIHJlZ3Jlc3Npb24gdGhhdCBicm9r
ZSBET00gYnJlYWtwb2ludHMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGgKKyAgICAgICAgICB0aGUg
c2tpcHBpbmcgb2Ygb3BfZGVidWcgY2FsbGJhY2tzLCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhbiB1
cGRhdGVkCisgICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLiBOb3JtYWxseSwgbV9jdXJyZW50
Q2FsbEZyYW1lIGlzIHByb3ZpZGVkIGFzIGFyZworICAgICAgICAgIGluIHRoZSBvcF9kZWJ1ZyBj
YWxsYmFjay4gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gZ2V0IHRoZSBDYWxsRnJhbWUqIGZyb20KKyAg
ICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzaG91bGRQYXVzZSk6CisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgLSBBZGRlZCB1dGlsaXR5IHRvIGl0ZXJhdGUg
YWxsIENvZGVCbG9ja3MgaW4gdGhlIGhlYXAgLyBWTS4KKworICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKwor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgLSBUaGVzZSBub3cgY2hlY2tzIENvZGVCbG9jazo6bV9udW1CcmVh
a3BvaW50cyBhbmQgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2UKKyAgICAgICAgICBpbnN0ZWFkIG9m
IERlYnVnZ2VyOjptX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKToKKwogMjAxNC0wMS0yMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZ2lzdGVycyB1c2VkIGluIHdyaXRlQmFycmllck9uT3BlcmFuZCBj
YW4gY2F1c2UgY2xvYmJlcmluZyBvbiBzb21lIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUyLDggKzEzNTIsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWJ1ZzogewogICAgICAgICAg
ICAgaW50IGRlYnVnSG9va0lEID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aGFzQnJlYWtwb2ludEZsYWcgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcyIsIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzICVkIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCksIGhh
c0JyZWFrcG9pbnRGbGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKQEAgLTE0NjgsNiArMTQ2OSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4
ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92
bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMp
CkBAIC0xNTIyLDYgKzE1MjQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQogICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9i
amVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1f
bnVtQnJlYWtwb2ludHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5s
aW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVC
bG9jay0+dGhpc1JlZ2lzdGVyKCkpCkBAIC0yNTY2LDYgKzI1NjksMjcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpOwogfQogCitib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOworICAgIGNvbnN0IEluc3RydWN0aW9u
KiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2RlYnVnKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGl0IC0gYmVnaW47CisgICAgICAgICAgICBpbnQgdW51c2VkOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3BEZWJ1Z0xpbmU7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOworICAg
ICAgICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2lu
dDo6dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGl0ICs9IG9wY29kZUxl
bmd0aHNbb3Bjb2RlSURdOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAgICAgbV9yYXJl
Q2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2OSw2ICs4
NjksMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7CiAK
KyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbik7CisKKyAgICBpbnQgbnVtQnJlYWtwb2ludHMoKSBjb25zdCB7IHJldHVybiBt
X251bUJyZWFrcG9pbnRzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1CcmVha3BvaW50c09m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQnJlYWtwb2lu
dHMpOyB9CisKKyAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKSB7IG1f
bnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0KKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAgICAgICAgbV9udW1CcmVha3BvaW50
cyAtPSBudW1CcmVha3BvaW50czsKKyAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0g
MCk7CisgICAgfQorICAgIHZvaWQgY2xlYXJBbGxCcmVha3BvaW50cygpIHsgbV9udW1CcmVha3Bv
aW50cyA9IDA7IH0KKwogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJz
IHByaXZhdGUuCiAKICAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CkBAIC0xMDA1LDYgKzEw
MTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIGludCBt
X251bUJyZWFrcG9pbnRzOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICBWTSogbV92bTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw4IEBAIHN0cnVjdCBCcmVha3BvaW50IHsKICAgICB1bnNpZ25lZCBjb2x1bW47CiAg
ICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBib29sIGF1dG9Db250aW51ZTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB1bnNwZWNpZmllZENvbHVtbiA9IFVJTlRfTUFYOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDEwIEBACiAK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorCiAjaW5jbHVkZSAi
SGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpAQCAtMTM5LDcgKzE0MSw4IEBAIHByaXZhdGU6CiB9Owog
CiBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQotICAgIDogbV9wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKKyAgICA6IG1fdm0obnVs
bHB0cikKKyAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlv
bnMpCiAgICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9pc1BhdXNl
ZChmYWxzZSkKICAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKQEAgLTE1MSw3ICsx
NTQsNiBAQCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkCiAgICAgLCBt
X2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgpCiAgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlE
KG5vU291cmNlSUQpCiAgICAgLCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKLSAg
ICAsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShm
YWxzZSkKIHsKIH0KQEAgLTE2Niw2ICsxNjgsMTAgQEAgRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB2
b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSk7CisgICAgaWYgKCFtX3ZtKQorICAg
ICAgICBtX3ZtID0gJmdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VChtX3ZtID09ICZnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVi
dWdnZXIodGhpcyk7CiAgICAgbV9nbG9iYWxPYmplY3RzLmFkZChnbG9iYWxPYmplY3QpOwogfQpA
QCAtMTg0LDEyICsxOTAsMTMyIEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2wKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGdsb2JhbE9iamVjdCkp
OwogICAgIG1fZ2xvYmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0KTsKICAgICBnbG9iYWxP
YmplY3QtPnNldERlYnVnZ2VyKDApOworICAgIGlmICghbV9nbG9iYWxPYmplY3RzLnNpemUoKSkK
KyAgICAgICAgbV92bSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBh
dXNlKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOwotICAgIHVwZGF0
ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnJlZ2lzdGVy
Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGl0ZXJhdGVCcmVha3BvaW50
c0FuZEFwcGx5VG9Db2RlQmxvY2soY29kZUJsb2NrKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6dW5y
ZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb2RlQmxvY2st
PmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKK30KKworYm9vbCBEZWJ1Z2dlcjo6YXBwbHlCcmVha3Bv
aW50SW5Db2RlQmxvY2tJZk5lZWRlZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnJlYWtwb2ludCYg
YnJlYWtwb2ludCwgYm9vbCBlbmFibGVCcmVha3BvaW50KQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsKKyAg
ICAgICAgfHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nh
c3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAgIGlmIChicmVha3BvaW50
LnNvdXJjZUlEICE9IHNvdXJjZUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNp
Z25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IGJyZWFr
cG9pbnQuY29sdW1uOworCisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJsZS0+bGlu
ZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFydENvbHVt
bigpOworICAgIHVuc2lnbmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgpOworICAg
IHVuc2lnbmVkIGVuZENvbHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisgICAgLy8g
SW5zcGVjdG9yIGJyZWFrcG9pbnQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhcmUgemVyby1iYXNl
ZCBidXQgdGhlIGV4ZWN1dGFibGUKKyAgICAvLyBhbmQgQ29kZUJsb2NrIGxpbmUgYW5kIGNvbHVt
biB2YWx1ZXMgYXJlIG9uZS1iYXNlZC4KKyAgICBsaW5lICs9IDE7CisgICAgY29sdW1uID0gY29s
dW1uID8gY29sdW1uICsgMSA6IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uOworCisgICAg
aWYgKGxpbmUgPCBzdGFydExpbmUgfHwgbGluZSA+IGVuZExpbmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoY29sdW1uICE9IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uKSB7
CisgICAgICAgIGlmIChsaW5lID09IHN0YXJ0TGluZSAmJiBjb2x1bW4gPCBzdGFydENvbHVtbikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGxpbmUgPT0gZW5kTGluZSAm
JiBjb2x1bW4gPiBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbihsaW5lLCBjb2x1
bW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZW5hYmxlQnJlYWtwb2ludCkK
KyAgICAgICAgY29kZUJsb2NrLT5hZGRCcmVha3BvaW50KDEpOworICAgIGVsc2UKKyAgICAgICAg
Y29kZUJsb2NrLT5yZW1vdmVCcmVha3BvaW50KDEpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIERlYnVnZ2VyOjppdGVyYXRlQnJlYWtwb2ludHNBbmRBcHBseVRvQ29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCYgYnJl
YWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludDsKKyAgICBmb3IgKGF1dG8gaXQg
PSBicmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50cy5lbmQoKTsgKytpdCkgewor
ICAgICAgICBCcmVha3BvaW50JiBicmVha3BvaW50ID0gKml0LT52YWx1ZTsKKyAgICAgICAgYXBw
bHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChjb2RlQmxvY2ssIGJyZWFrcG9pbnQsIHRy
dWUpOworICAgIH0KK30KKworY2xhc3MgQXBwbHlCcmVha3BvaW50RnVuY3RvciB7CitwdWJsaWM6
CisgICAgQXBwbHlCcmVha3BvaW50RnVuY3RvcihEZWJ1Z2dlciYgZGVidWdnZXIsIEJyZWFrcG9p
bnQmIGJyZWFrcG9pbnQsIGJvb2wgZW5hYmxlT3JOb3QpCisgICAgICAgIDogbV9kZWJ1Z2dlcihk
ZWJ1Z2dlcikKKyAgICAgICAgLCBtX2JyZWFrcG9pbnQoYnJlYWtwb2ludCkKKyAgICAgICAgLCBt
X2VuYWJsZU9yTm90KGVuYWJsZU9yTm90KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAobV9kZWJ1Z2dl
ci5tX2dsb2JhbE9iamVjdHMuY29udGFpbnMoY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpCisg
ICAgICAgICAgICBtX2RlYnVnZ2VyLmFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQo
Y29kZUJsb2NrLCBtX2JyZWFrcG9pbnQsIG1fZW5hYmxlT3JOb3QpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIERlYnVnZ2VyJiBtX2RlYnVnZ2VyOworICAg
IEJyZWFrcG9pbnQmIG1fYnJlYWtwb2ludDsKKyAgICBib29sIG1fZW5hYmxlT3JOb3Q7Cit9Owor
Cit2b2lkIERlYnVnZ2VyOjppdGVyYXRlQ29kZUJsb2Nrc0FuZEFwcGx5QnJlYWtwb2ludChCcmVh
a3BvaW50JiBicmVha3BvaW50LCBib29sIGVuYWJsZU9yTm90KQoreworICAgIGlmICghbV92bSkK
KyAgICAgICAgcmV0dXJuOworICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZSht
X3ZtLT5oZWFwKTsKKyAgICBBcHBseUJyZWFrcG9pbnRGdW5jdG9yIGZ1bmN0b3IoKnRoaXMsIGJy
ZWFrcG9pbnQsIGVuYWJsZU9yTm90KTsKKyAgICBtX3ZtLT5oZWFwLmZvckVhY2hDb2RlQmxvY2so
ZnVuY3Rvcik7Cit9CisKK2NsYXNzIENsZWFyQWxsQnJlYWtwb2ludHNGdW5jdG9yIHsKK3B1Ymxp
YzoKKyAgICBDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3RvcihEZWJ1Z2dlciYgZGVidWdnZXIpCisg
ICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcigpKENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKGNvZGVC
bG9jay0+bnVtQnJlYWtwb2ludHMoKSAmJiBtX2RlYnVnZ2VyLm1fZ2xvYmFsT2JqZWN0cy5jb250
YWlucyhjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
Y2xlYXJBbGxCcmVha3BvaW50cygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitw
cml2YXRlOgorICAgIERlYnVnZ2VyJiBtX2RlYnVnZ2VyOworfTsKKwordm9pZCBEZWJ1Z2dlcjo6
aXRlcmF0ZUNvZGVCbG9ja3NBbmRDbGVhckFsbEJyZWFrcG9pbnRzKCkKK3sKKyAgICBpZiAoIW1f
dm0pCisgICAgICAgIHJldHVybjsKKyAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2Nv
cGUobV92bS0+aGVhcCk7CisgICAgQ2xlYXJBbGxCcmVha3BvaW50c0Z1bmN0b3IgZnVuY3Rvcigq
dGhpcyk7CisgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQogCiB2
b2lkIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSogdm0pCkBAIC0yMDcsMTIg
KzMzMyw2IEBAIHZvaWQgRGVidWdnZXI6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFYKICAgICB2
bS0+aGVhcC5vYmplY3RTcGFjZSgpLmZvckVhY2hMaXZlQ2VsbChpdGVyYXRpb25TY29wZSwgcmVj
b21waWxlcik7CiB9CiAKLXZvaWQgRGVidWdnZXI6OnVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJh
Y2tzKCkKLXsKLSAgICBzaXplX3QgbnVtYmVyT2ZCcmVha3BvaW50cyA9IG1fYnJlYWtwb2ludElE
VG9CcmVha3BvaW50LnNpemUoKTsKLSAgICBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyA9IG1fc2hv
dWxkUGF1c2UgfHwgbnVtYmVyT2ZCcmVha3BvaW50czsKLX0KLQogQnJlYWtwb2ludElEIERlYnVn
Z2VyOjpzZXRCcmVha3BvaW50KEJyZWFrcG9pbnQgYnJlYWtwb2ludCwgdW5zaWduZWQmIGFjdHVh
bExpbmUsIHVuc2lnbmVkJiBhY3R1YWxDb2x1bW4pCiB7CiAgICAgU291cmNlSUQgc291cmNlSUQg
PSBicmVha3BvaW50LnNvdXJjZUlEOwpAQCAtMjQ3LDcgKzM2Nyw3IEBAIEJyZWFrcG9pbnRJRCBE
ZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChCcmUKICAgICBicmVha3BvaW50cy5hcHBlbmQoYnJlYWtw
b2ludCk7CiAgICAgbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuc2V0KGlkLCAmYnJlYWtwb2lu
dHMubGFzdCgpKTsKIAotICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CisgICAg
aXRlcmF0ZUNvZGVCbG9ja3NBbmRBcHBseUJyZWFrcG9pbnQoYnJlYWtwb2ludCwgdHJ1ZSk7CiAK
ICAgICByZXR1cm4gaWQ7CiB9CkBAIC0yNjcsNiArMzg3LDggQEAgdm9pZCBEZWJ1Z2dlcjo6cmVt
b3ZlQnJlYWtwb2ludChCcmVha3BvaQogICAgIExpbmVUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRv
ciBicmVha3NJdCA9IGl0LT52YWx1ZS5maW5kKGJyZWFrcG9pbnQubGluZSk7CiAgICAgQVNTRVJU
KGJyZWFrc0l0ICE9IGl0LT52YWx1ZS5lbmQoKSk7CiAKKyAgICBpdGVyYXRlQ29kZUJsb2Nrc0Fu
ZEFwcGx5QnJlYWtwb2ludChicmVha3BvaW50LCBmYWxzZSk7CisKICAgICBCcmVha3BvaW50c0lu
TGluZSYgYnJlYWtwb2ludHMgPSBicmVha3NJdC0+dmFsdWU7CiAgICAgdW5zaWduZWQgYnJlYWtw
b2ludHNDb3VudCA9IGJyZWFrcG9pbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYnJlYWtwb2ludHNDb3VudDsgaSsrKSB7CkBAIC0yODIsOCArNDA0LDYgQEAgdm9pZCBE
ZWJ1Z2dlcjo6cmVtb3ZlQnJlYWtwb2ludChCcmVha3BvaQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9Ci0KLSAgICB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpOwog
fQogCiBib29sIERlYnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvdXJjZUlELCBjb25z
dCBUZXh0UG9zaXRpb24mIHBvc2l0aW9uLCBCcmVha3BvaW50ICpoaXRCcmVha3BvaW50KQpAQCAt
MzEwLDYgKzQzMCw3IEBAIGJvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc28K
ICAgICAgICAgdW5zaWduZWQgYnJlYWtMaW5lID0gYnJlYWtwb2ludHNbaV0ubGluZTsKICAgICAg
ICAgdW5zaWduZWQgYnJlYWtDb2x1bW4gPSBicmVha3BvaW50c1tpXS5jb2x1bW47CiAgICAgICAg
IC8vIFNpbmNlIGZyb250ZW5kIHRydW5jYXRlcyB0aGUgaW5kZW50LCB0aGUgZmlyc3Qgc3RhdGVt
ZW50IGluIGEgbGluZSBtdXN0IG1hdGNoIHRoZSBicmVha3BvaW50IChsaW5lLDApLgorICAgICAg
ICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKG1fY3VycmVudENhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgIGlmICgobGluZSAhPSBtX2xhc3RF
eGVjdXRlZExpbmUgJiYgbGluZSA9PSBicmVha0xpbmUgJiYgIWJyZWFrQ29sdW1uKQogICAgICAg
ICAgICAgfHwgKGxpbmUgPT0gYnJlYWtMaW5lICYmIGNvbHVtbiA9PSBicmVha0NvbHVtbikpIHsK
ICAgICAgICAgICAgIGhpdCA9IHRydWU7CkBAIC0zNTEsNyArNDcyLDcgQEAgdm9pZCBEZWJ1Z2dl
cjo6Y2xlYXJCcmVha3BvaW50cygpCiAgICAgbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQuY2xl
YXIoKTsKICAgICBtX3NvdXJjZUlEVG9CcmVha3BvaW50cy5jbGVhcigpOwogCi0gICAgdXBkYXRl
TmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKyAgICBpdGVyYXRlQ29kZUJsb2Nrc0FuZENsZWFy
QWxsQnJlYWtwb2ludHMoKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludHNBY3Rp
dmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCkBAIC0zNzMsMTEgKzQ5NCwxMyBAQCB2b2lkIERlYnVnZ2Vy
OjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChiCiAKIHZvaWQgRGVidWdnZXI6OmJyZWFrUHJvZ3Jh
bSgpCiB7Ci0gICAgaWYgKG1faXNQYXVzZWQgfHwgIW1fY3VycmVudENhbGxGcmFtZSkKKyAgICBp
ZiAobV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRl
bWVudCA9IHRydWU7CiAgICAgc2V0U2hvdWxkUGF1c2UodHJ1ZSk7CisgICAgbV9jdXJyZW50Q2Fs
bEZyYW1lID0gbV92bS0+dG9wQ2FsbEZyYW1lOworICAgIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJh
bWUpOwogICAgIHBhdXNlSWZOZWVkZWQobV9jdXJyZW50Q2FsbEZyYW1lKTsKIH0KIApAQCAtNDMy
LDcgKzU1NSw3IEBAIHZvaWQgRGVidWdnZXI6OnVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYKIHsK
ICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1lKTsKICAgICBwYXVzZUlmTmVlZGVkKGNhbGxG
cmFtZSk7Ci0gICAgaWYgKCFuZWVkc09wRGVidWdDYWxsYmFja3MoKSkKKyAgICBpZiAoIXNob3Vs
ZFBhdXNlKCkpCiAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZSA9IDA7CiB9CiAKQEAgLTQ3Nyw4
ICs2MDAsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVzZUlmTmVlZGVkKENhbGxGcmFtZSogCiAKICAg
ICBpZiAoIW1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgJiYgIW1fcGF1c2VPbkNhbGxGcmFtZSkgewog
ICAgICAgICBzZXRTaG91bGRQYXVzZShmYWxzZSk7Ci0gICAgICAgIGlmICghbmVlZHNPcERlYnVn
Q2FsbGJhY2tzKCkpCi0gICAgICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSAwOworICAgICAg
ICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBudWxscHRyOwogICAgIH0KIH0KIApAQCAtNTQ4LDcgKzY3
MCw3IEBAIHZvaWQgRGVidWdnZXI6OndpbGxFeGVjdXRlUHJvZ3JhbShDYWxsRnIKICAgICAvLyB0
aGUgZGVidWdnZXIgaW1wbGVtZW50YXRpb24gdG8gbm90IHJlcXVpcmUgY2FsbGJhY2tzLgogICAg
IGlmICghbV9pc0luV29ya2VyVGhyZWFkKQogICAgICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVz
ZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0gICAgZWxzZSBpZiAobmVlZHNPcERlYnVnQ2FsbGJhY2tz
KCkpCisgICAgZWxzZSBpZiAoc2hvdWxkUGF1c2UoKSkKICAgICAgICAgdXBkYXRlQ2FsbEZyYW1l
KGNhbGxGcmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVi
dWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBAQCBwdWJsaWM6
CiAgICAgRGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkID0gZmFsc2UpOwogICAgIHZpcnR1
YWwgfkRlYnVnZ2VyKCk7CiAKLSAgICBib29sIG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpIGNvbnN0
IHsgcmV0dXJuIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZf
dCBuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RGVidWdnZXIsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKTsgfQorICAgIGJvb2wgc2hvdWxkUGF1
c2UoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFBhdXNlOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBzaG91bGRQYXVzZU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEZWJ1Z2dlciwg
bV9zaG91bGRQYXVzZSk7IH0KIAogICAgIEpTQzo6RGVidWdnZXJDYWxsRnJhbWUqIGN1cnJlbnRE
ZWJ1Z2dlckNhbGxGcmFtZSgpIGNvbnN0OwogICAgIGJvb2wgaGFzSGFuZGxlckZvckV4Y2VwdGlv
bkNhbGxiYWNrKCkgY29uc3QKQEAgLTEwNCw2ICsxMDQsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKik7CiAKKyAgICB2b2lkIHJlZ2lzdGVyQ29kZUJs
b2NrKENvZGVCbG9jayopOworICAgIHZvaWQgdW5yZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sq
KTsKKwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBuZWVkUGF1c2VIYW5kbGluZyhKU0ds
b2JhbE9iamVjdCopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUJy
ZWFrcG9pbnRIaXQoY29uc3QgQnJlYWtwb2ludCYpIHsgfQpAQCAtMTI4LDcgKzEzMSw3IEBAIHBy
aXZhdGU6CiAKICAgICB0eXBlZGVmIFZlY3RvcjxCcmVha3BvaW50PiBCcmVha3BvaW50c0luTGlu
ZTsKICAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIEJyZWFrcG9pbnRzSW5MaW5lLCBXVEY6
OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBM
aW5lVG9CcmVha3BvaW50c01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlSUQsIExpbmVU
b0JyZWFrcG9pbnRzTWFwPiBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcCwgV1RGOjpJbnRIYXNoPFNvdXJj
ZUlEPiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxTb3VyY2VJRD4+IFNvdXJj
ZUlEVG9CcmVha3BvaW50c01hcDsKIAogICAgIGNsYXNzIFBhdXNlUmVhc29uRGVjbGFyYXRpb24g
ewogICAgIHB1YmxpYzoKQEAgLTE0OCw3ICsxNTEsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBo
YXNCcmVha3BvaW50KFNvdXJjZUlELCBjb25zdCBUZXh0UG9zaXRpb24mLCBCcmVha3BvaW50KiBo
aXRCcmVha3BvaW50KTsKIAotICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBjb25zdCB7IHJldHVybiBt
X3Nob3VsZFBhdXNlOyB9CiAgICAgdm9pZCBzZXRTaG91bGRQYXVzZShib29sKTsKICAgICB2b2lk
IHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiAKQEAgLTE2MSw2ICsxNjMsMTIgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHVwZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQoSlNDOjpD
YWxsRnJhbWUqKTsKICAgICB2b2lkIHBhdXNlSWZOZWVkZWQoSlNDOjpDYWxsRnJhbWUqKTsKIAor
ICAgIGJvb2wgYXBwbHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChDb2RlQmxvY2sqLCBC
cmVha3BvaW50JiwgYm9vbCBlbmFibGVPck5vdCk7CisgICAgdm9pZCBpdGVyYXRlQnJlYWtwb2lu
dHNBbmRBcHBseVRvQ29kZUJsb2NrKENvZGVCbG9jayopOworICAgIHZvaWQgaXRlcmF0ZUNvZGVC
bG9ja3NBbmRBcHBseUJyZWFrcG9pbnQoQnJlYWtwb2ludCYsIGJvb2wgZW5hYmxlT3JOb3QpOwor
ICAgIHZvaWQgaXRlcmF0ZUNvZGVCbG9ja3NBbmRDbGVhckFsbEJyZWFrcG9pbnRzKCk7CisKKyAg
ICBWTSogbV92bTsKICAgICBIYXNoU2V0PEpTR2xvYmFsT2JqZWN0Kj4gbV9nbG9iYWxPYmplY3Rz
OwogCiAgICAgUGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZSBtX3BhdXNlT25FeGNlcHRpb25zU3RhdGU7
CkBAIC0xODEsMTEgKzE4OSwxMiBAQCBwcml2YXRlOgogICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtw
b2ludE1hcCBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludDsKICAgICBTb3VyY2VJRFRvQnJlYWtw
b2ludHNNYXAgbV9zb3VyY2VJRFRvQnJlYWtwb2ludHM7CiAKLSAgICBib29sIG1fbmVlZHNPcERl
YnVnQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9zaG91bGRQYXVzZTsKIAogICAgIFJlZlB0cjxKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lPiBtX2N1cnJlbnREZWJ1Z2dlckNhbGxGcmFtZTsKIAorICAgIGZy
aWVuZCBjbGFzcyBBcHBseUJyZWFrcG9pbnRGdW5jdG9yOworICAgIGZyaWVuZCBjbGFzcyBDbGVh
ckFsbEJyZWFrcG9pbnRzRnVuY3RvcjsKICAgICBmcmllbmQgY2xhc3MgRGVidWdnZXJDYWxsRnJh
bWVTY29wZTsKICAgICBmcmllbmQgY2xhc3MgVGVtcG9yYXJ5UGF1c2VkU3RhdGU7CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTE5NSw4ICsyMDQsMTEgQEAgcHJp
dmF0ZToKIAogY2xhc3MgRGVidWdnZXIgewogcHVibGljOgotICAgIERlYnVnZ2VyKGJvb2wgPSBm
YWxzZSkgOiBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcyhmYWxzZSkgeyB9Ci0gICAgYm9vbCBuZWVk
c09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIERlYnVnZ2Vy
KGJvb2wgPSBmYWxzZSkKKyAgICAgICAgOiBtX3Nob3VsZFBhdXNlKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Ym9vbCBuZWVkc0V4Y2VwdGlvbkNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdm9pZCBkZXRhY2goSlNHbG9iYWxPYmplY3QqKSB7IH0KICAgICB2b2lkIHNvdXJjZVBhcnNl
ZChFeGVjU3RhdGUqLCBTb3VyY2VQcm92aWRlciosIGludCwgY29uc3QgV1RGOjpTdHJpbmcmKSB7
IH0KQEAgLTIwOCw3ICsyMjAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRFeGVjdXRlUHJvZ3Jh
bShDYWxsRnJhbWUqKSB7IH0KICAgICB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUq
KSB7IH0KIAotICAgIGJvb2wgbV9uZWVkc09wRGVidWdDYWxsYmFja3M7Citwcml2YXRlOgorICAg
IGJvb2wgbV9zaG91bGRQYXVzZTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5o
CShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxv
Y2tTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMjEgQEAgcHVibGljOgogICAgIC8v
IHJlLXNjYW5uZWQgZHVyaW5nIHRoZSBuZXh0IGNvbGxlY3Rpb24uCiAgICAgdm9pZCByZW1lbWJl
ckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoSGVhcCopOwogCisgICAgLy8gVmlzaXRzIGVh
Y2ggQ29kZUJsb2NrIGluIHRoZSBoZWFwIHVudGlsIHRoZSB2aXNpdG9yIGZ1bmN0aW9uIHJldHVy
bnMgdHJ1ZQorICAgIC8vIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgZG9uZSBpdGVyYXRpbmcsIG9y
IHVudGlsIGV2ZXJ5IENvZGVCbG9jayBoYXMgYmVlbgorICAgIC8vIHZpc2l0ZWQuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBIYXNoU2V0PENvZGVCbG9jayo+OjppdGVyYXRvciBpdGVyID0gbV9zZXQu
YmVnaW4oKTsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxvY2sqPjo6aXRlcmF0b3IgZW5kID0gbV9z
ZXQuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICppdGVyOworICAgICAgICAgICAgYm9vbCBkb25l
ID0gZnVuY3Rvcihjb2RlQmxvY2spOworICAgICAgICAgICAgaWYgKGRvbmUpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBp
cyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFi
bGUgdG8gZmluZAogICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVycy4gSSBjb3VsZCBoYXZl
IHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBl
bmFtZSBGdW5jdG9yOjpSZXR1cm5UeXBlIGZvckVhY2hQcm90ZWN0ZWRDZWxsKEZ1bmN0b3ImKTsK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0
dXJuVHlwZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbCgpOworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImKTsKIAogICAg
ICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsgfQogICAg
ICAgICBIYW5kbGVTdGFjayogaGFuZGxlU3RhY2soKSB7IHJldHVybiAmbV9oYW5kbGVTdGFjazsg
fQpAQCAtNDMyLDYgKzQzMywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGZv
ckVhY2hQcm90ZWN0ZWRDZWxsKGZ1bmN0b3IpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IGlubGluZSB2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja3MuaXRlcmF0ZTxGdW5j
dG9yPihmdW5jdG9yKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCogSGVhcDo6YWxsb2NhdGVX
aXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplX3QgYnl0ZXMpCiAgICAgewogI2lmIEVOQUJMRShBTExP
Q0FUSU9OX0xPR0dJTkcpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMDUsOCArMTIwNSw5IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1
dGEKIE5FVkVSX0lOTElORSB2b2lkIEludGVycHJldGVyOjpkZWJ1ZyhDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgRGVidWdIb29rSUQgZGVidWdIb29rSUQpCiB7CiAgICAgRGVidWdnZXIqIGRlYnVnZ2Vy
ID0gY2FsbEZyYW1lLT52bUVudHJ5R2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYg
KCFkZWJ1Z2dlciB8fCAhZGVidWdnZXItPm5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgIGlm
ICghZGVidWdnZXIpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoZGVidWdnZXItPnNob3Vs
ZFBhdXNlKCkgfHwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bnVtQnJlYWtwb2ludHMoKSB8fCBj
YWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKTsKIAogICAgIHN3aXRjaCAoZGVidWdIb29rSUQpIHsK
ICAgICAgICAgY2FzZSBEaWRFbnRlckNhbGxGcmFtZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTk3LDE0ICs5OTcsMjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rp
b24qIGN1cgogICAgIGJyZWFrcG9pbnQoKTsKICNlbGlmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVH
R0VSKQogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2soKS0+Z2xv
YmFsT2JqZWN0KCk7Ci0gICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1
Z2dlcigpOwogICAgIGNoYXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKICAg
ICBsb2FkUHRyKGRlYnVnZ2VyQWRkcmVzcywgcmVnVDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlciA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApOwotICAgIGNoYXIqIGZsYWdBZGRyZXNzID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsgRGVidWdnZXI6Om5lZWRzT3BEZWJ1Z0Nh
bGxiYWNrc09mZnNldCgpOwotICAgIEp1bXAgc2tpcERlYnVnSG9vayA9IGJyYW5jaFRlc3Q4KFpl
cm8sIEFic29sdXRlQWRkcmVzcyhmbGFnQWRkcmVzcykpOworCisgICAgRGVidWdnZXIqIGRlYnVn
Z2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigpOworICAgIGNoYXIqIHNob3VsZFBhdXNlQWRk
cmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpzaG91
bGRQYXVzZU9mZnNldCgpOworICAgIEp1bXAgY2FsbGJhY2tOZWVkZWQgPSBicmFuY2hUZXN0OChO
b25aZXJvLCBBYnNvbHV0ZUFkZHJlc3Moc2hvdWxkUGF1c2VBZGRyZXNzKSk7CisKKyAgICBjaGFy
KiBudW1CcmVha3BvaW50c0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlQmxv
Y2soKSkgKyBDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzT2Zmc2V0KCk7CisgICAgbG9hZDMyKG51
bUJyZWFrcG9pbnRzQWRkcmVzcywgcmVnVDApOworICAgIEp1bXAgbm9CcmVha3BvaW50U2V0ID0g
YnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsKKworICAgIGNhbGxiYWNrTmVlZGVkLmxpbmsodGhp
cyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCk7Ci0gICAgc2tpcERlYnVnSG9vay5saW5rKHRoaXMpOworCisgICAgbm9C
cmVha3BvaW50U2V0LmxpbmsodGhpcyk7CiAgICAgbm9EZWJ1Z2dlci5saW5rKHRoaXMpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTYyMzkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzE1LDEzICs3MTUsMjEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1
cgogICAgIGJyZWFrcG9pbnQoKTsKICNlbGlmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCk7Ci0gICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0LT5kZWJ1Z2dlcigp
OwogICAgIGNoYXIqIGRlYnVnZ2VyQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGds
b2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6ZGVidWdnZXJPZmZzZXQoKTsKICAgICBKdW1w
IG5vRGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFic29sdXRlQWRkcmVzcyhkZWJ1Z2dl
ckFkZHJlc3MpKTsKLSAgICBjaGFyKiBmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsK
LSAgICBKdW1wIHNraXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJl
c3MoZmxhZ0FkZHJlc3MpKTsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVj
dC0+ZGVidWdnZXIoKTsKKyAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQoKTsK
KyAgICBKdW1wIGNhbGxiYWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVB
ZGRyZXNzKHNob3VsZFBhdXNlQWRkcmVzcykpOworCisgICAgY2hhciogbnVtQnJlYWtwb2ludHNB
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJsb2Nr
OjpudW1CcmVha3BvaW50c09mZnNldCgpOworICAgIGxvYWQzMihudW1CcmVha3BvaW50c0FkZHJl
c3MsIHJlZ1QwKTsKKyAgICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7CisKKyAgICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwot
ICAgIHNraXBEZWJ1Z0hvb2subGluayh0aGlzKTsKKworICAgIG5vQnJlYWtwb2ludFNldC5saW5r
KHRoaXMpOwogICAgIG5vRGVidWdnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGN1cnJlbnRJbnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxNjIzOTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTgzNSwxMyArODM1LDE4IEBAIF9sbGludF9vcF9wcm9maWxlX2RpZF9j
YWxsOgogCiBfbGxpbnRfb3BfZGVidWc6CiAgICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRw
IENvZGVCbG9ja1tjZnJdLCB0MAotICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3Rb
dDBdLCB0MAorICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MQorICAgIGxvYWRwIENvZGVCbG9j
azo6bV9nbG9iYWxPYmplY3RbdDFdLCB0MAogICAgIGxvYWRwIEpTR2xvYmFsT2JqZWN0OjptX2Rl
YnVnZ2VyW3QwXSwgdDAKICAgICBidGl6IHQwLCAub3BEZWJ1Z0RvbmUKLSAgICBsb2FkYiBEZWJ1
Z2dlcjo6bV9uZWVkc09wRGVidWdDYWxsYmFja3NbdDBdLCB0MAotICAgIGJ0YnogdDAsIC5vcERl
YnVnRG9uZQogCisgICAgbG9hZGIgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2VbdDBdLCB0MAorICAg
IGJ0Ym56IHQwLCAub3BEZWJ1Z0RvQ2FsbGJhY2sKKworICAgIGxvYWRpIENvZGVCbG9jazo6bV9u
dW1CcmVha3BvaW50c1t0MV0sIHQwCisgICAgYnRpeiB0MCwgLm9wRGVidWdEb25lCisKKy5vcERl
YnVnRG9DYWxsYmFjazoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9kZWJ1ZykK
IC5vcERlYnVnRG9uZTogICAgICAgICAgICAgICAgICAgIAogICAgIGRpc3BhdGNoKDMpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNp
b24gMTYyMzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw4ICsxNzAsMTQgQEAgdm9pZCBTY3JpcHRFeGVjdXRh
YmxlOjppbnN0YWxsQ29kZShDb2RlQgogICAgICAgICBicmVhazsKICAgICB9IH0KIAotICAgIGlm
IChvbGRDb2RlQmxvY2spCisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2VuZXJpY0NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7CisgICAgaWYgKG9sZENvZGVCbG9jaykgewor
ICAgICAgICBpZiAoZGVidWdnZXIpCisgICAgICAgICAgICBkZWJ1Z2dlci0+dW5yZWdpc3RlckNv
ZGVCbG9jayhvbGRDb2RlQmxvY2suZ2V0KCkpOwogICAgICAgICBvbGRDb2RlQmxvY2stPnVubGlu
a0luY29taW5nQ2FsbHMoKTsKKyAgICB9CisgICAgaWYgKGRlYnVnZ2VyKQorICAgICAgICBkZWJ1
Z2dlci0+cmVnaXN0ZXJDb2RlQmxvY2soZ2VuZXJpY0NvZGVCbG9jayk7CiB9CiAKIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221850</attachid>
            <date>2014-01-22 03:03:24 -0800</date>
            <delta_ts>2014-01-22 03:12:49 -0800</delta_ts>
            <desc>patch 3: revised with more efficient globalObject check in ApplyBreakpointFunctor and ClearAllBreakpointsFunctor.</desc>
            <filename>bug-122836.patch</filename>
            <type>text/plain</type>
            <size>32858</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxNC0wMS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UG9vciBtYW4ncyBmYXN0IGJyZWFrcG9pbnRzIGZvciBhIDIuM3ggZGVidWdnZXIgc3BlZWR1cC4K
KyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMjgzNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5IHdlIGdhaW5lZCBiYWNr
IHNvbWUgcGVyZm9ybWFuY2UgKHJ1biBhdCBiYXNlbGluZSBKSVQgc3BlZWRzKQorICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3IgaXMgb3BlbmVkIHByb3ZpZGVkIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQuIFRoaXMKKyAgICAgICAgd2FzIGFjaGlldmVkIGJ5IHNpbXBseSBza2lwcGluZyBhbGwg
b3BfZGVidWcgY2FsbGJhY2tzIHRvIHRoZSBkZWJ1Z2dlcgorICAgICAgICBpZiBubyBicmVha3Bv
aW50cyBhcmUgc2V0LiBJZiBhbnkgYnJlYWtwb2ludHMgYXJlIHNldCwgdGhlIGRlYnVnZ2VyIHdp
bGwKKyAgICAgICAgc2V0IGEgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgZmxhZyB3aGljaCBjYXVz
ZXMgdGhlIGNhbGxiYWNrcyB0byBiZQorICAgICAgICBjYWxsZWQsIGFuZCB3ZSBkb24ndCBnZXQg
dGhlIGJhc2VsaW5lIEpJVCBzcGVlZHMgYW55bW9yZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbm93IHRyYWNrIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgc2V0IGluIHRo
ZQorICAgICAgICBDb2RlQmxvY2sgdGhhdCB0aGV5IGFyZSBzZXQgaW4uIFRoZSBMTElOVCBhbmQg
YmFzZWxpbmUgSklUIGNvZGUgd2lsbAorICAgICAgICBjaGVjayBDb2RlQmxvY2s6Om1fbnVtQnJl
YWtwb2ludHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcF9kZWJ1ZyBjYWxsYmFja3MKKyAgICAgICAg
bmVlZCB0byBiZSBjYWxsZWQuIFdpdGggdGhpcywgd2Ugd2lsbCBvbmx5IGVuYWJsZSBvcF9kZWJ1
ZyBjYWxsYmFja3MgZm9yCisgICAgICAgIENvZGVCbG9ja3MgdGhhdCBuZWVkIGl0IGkuZS4gdGhv
c2Ugd2l0aCBicmVha3BvaW50cyBzZXQgaW4gdGhlbS4KKworICAgICAgICBEZWJ1Z2dlcjo6bV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgaXMgbm93IG9ic29sZXRlZC4gVGhlIExMSU5UIGFuZCBiYXNl
bGluZQorICAgICAgICBKSVQgY29kZSBzdGlsbCBuZWVkcyB0byBjaGVjayBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgICAgIGRlYnVnZ2VyIGlzIGluIHN0
ZXBwaW5nIG1vZGUgYW5kIGhlbmNlLCBuZWVkcyBvcF9kZWJ1ZyBjYWxsYmFja3MgZW5hYmxlZAor
ICAgICAgICBmb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgZGVidWdnZXIgImNvbnRpbnVlcyIgdGhl
IHJ1biBhbmQgZXhpdCBzdGVwcGluZworICAgICAgICBtb2RlLgorCisgICAgICAgIEFsc28gaW4g
dGhpcyBwYXRjaCwgSSBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gRE9NIGJyZWFrcG9pbnRzIHdoaWNo
IHJlbGllcworICAgICAgICBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkgdG8gcGF1c2UgdGhlIGRl
YnVnZ2VyLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAtIE1pc3NlZCBhY2NvdW50aW5n
IGZvciBvcF9kZWJ1ZydzIG5ldyBoYXNCcmVha3BvaW50RmxhZyBvcGVyYW5kIGhlcmUgd2hlbgor
ICAgICAgICAgIGl0IHdhcyBhZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1u
KToKKyAgICAgICAgLSBUaGlzIGlzIG5lZWRlZCBpbiBEZWJ1Z2dlcjo6YXBwbHlCcmVha3BvaW50
SW5Db2RlQmxvY2tJZk5lZWRlZCgpIHRvCisgICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgYnJlYWtw
b2ludCBmYWxscyB3aXRoaW4gYSBDb2RlQmxvY2sgb3Igbm90LiBTaW1wbHkKKyAgICAgICAgICBj
aGVja2luZyB0aGUgYm91bmRzIG9mIHRoZSBDb2RlQmxvY2sgaXMgaW5zdWZmaWNpZW50LiBGb3Ig
ZXhhbXBsZSwKKyAgICAgICAgICBsZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIEpTIGNv
ZGU6CisKKyAgICAgICAgICAgICAgLy8gYmVnaW4gZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAg
IGZ1bmN0aW9uIGYxKCkgeworICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZjIoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAuLi4gLy8gc2V0IGJyZWFrcG9pbnQgaGVyZS4KKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvLyBlbmQgZ2xvYmFsIHNj
b3BlCisKKyAgICAgICAgICBVc2luZyB0aGUgQ29kZUJsb2NrIGJvdW5kcyBhbG9uZSwgdGhlIGJy
ZWFrcG9pbnQgYWJvdmUgd2lsbCB0byBhcHBlYXIKKyAgICAgICAgICB0byBiZSBpbiB0aGUgZ2xv
YmFsIHByb2dyYW0gQ29kZUJsb2NrLCBhbmQgdGhlIENvZGVCbG9ja3MgZm9yIGZ1bmN0aW9uCisg
ICAgICAgICAgZjEoKSBhbmQgZjIoKS4gV2l0aCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKCkgd2UgY2FuCisgICAgICAgICAgcnVsZSBvdXQgdGhlIGdsb2JhbCBwcm9ncmFt
IENvZGVCbG9jayBhbmQgZjEoKSwgYW5kIG9ubHkgYXBwbHkgdGhlCisgICAgICAgICAgYnJlYWtw
b2ludCB0byBmMigwIHdoZXJlIGl0IGJlbG9uZ3MuCisKKyAgICAgICAgICBDdXJyZW50bHksIENv
ZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSB3b3JrcyBieSBpdGVyYXRpbmcK
KyAgICAgICAgICBvdmVyIGFsbCB0aGUgb3Bjb2RlcyBpbiB0aGUgQ29kZUJsb2NrIHRvIGxvb2sg
Zm9yIG9wX2RlYnVnJ3MuIEZvciBlYWNoCisgICAgICAgICAgb3BfZGVidWcsIGl0IGNhbGxzIENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoKSB0bworICAgICAgICAg
IGRvIGEgYmluYXJ5IHNlYWNoIHRvIGdldCB0aGUgbGluZSBhbmQgY29sdW1uIGluZm8gZm9yIHRo
YXQgb3BfZGVidWcuCisgICAgICAgICAgVGhpcyBpcyBhIE4gKiBsb2coTikgYWxnb3JpdGhtLCBi
dXQgaXQgaXMgYXNzdW1lZCB0aGF0IGluIGEgbm9taW5hbAorICAgICAgICAgIHN5c3RlbSwgd2Ug
d29uJ3QgYmUgY2FsbGluZyBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKCkg
dG8KKyAgICAgICAgICBpbXBhY3QgaW50ZXJhY3RpdmUgZGVidWdnZXIgcGVyZm9ybWFuY2UuIElm
IHRoaXMgc2hvdWxkIHByb3ZlIHRvIGJlCisgICAgICAgICAgdW50cnVlLCB0aGVyZSBhcmUgc2V2
ZXJhbCBvcHRpbWl6YXRpb24gb3B0aW9ucyB0aGF0IHdlIGNhbiBlbnRlcnRhaW4KKyAgICAgICAg
ICBpbiB0aGUgZnV0dXJlIHRvIGFkZHJlc3MgdGhpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1CcmVha3BvaW50c09mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGVidWdnZXIvQnJlYWtwb2ludC5oOgorICAgICAgICAtIGRl
ZmluZWQgQnJlYWtwb2ludDo6dW5zcGVjaWZpZWRDb2x1bW4gc28gdGhhdCB3ZSBjYW4gZXhwbGlj
aXRseSBpbmRpY2F0ZQorICAgICAgICAgIHdoZW4gdGhlIFdlYkluc3BlY3RvciB3YXMgc2V0dGlu
ZyBhIGxpbmUgYnJlYWtwb2ludCBhbmQgZGlkIG5vdCBwcm92aWRlCisgICAgICAgICAgYSBjb2x1
bW4gdmFsdWUuIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSBuZWVkcyB0
aGlzCisgICAgICAgICAgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gbG9vc2VuIGl0cyBtYXRjaGlu
ZyBjcml0ZXJpYSBmb3Igb3BfZGVidWcKKyAgICAgICAgICBieXRlY29kZXMgZm9yIHRoZSBzcGVj
aWZpZWQgYnJlYWtwb2ludCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzIHByb3ZpZGVkCisgICAgICAg
ICAgYnkgdGhlIGRlYnVnZ2VyLgorCisgICAgICAgICAgUHJldmlvdXNseSwgd2UganVzdCBoaWph
Y2sgYSAwIHZhbHVlIGNvbHVtbiBhcyBhbiB1bnNwZWNpZmllZCBjb2x1bW4uCisgICAgICAgICAg
SG93ZXZlciwgdGhlIFdlYkluc3BlY3RvciBvcGVyYXRlcyBvbiAwLWJhc2VkIGludHMgZm9yIGNv
bHVtbiB2YWx1ZXMuCisgICAgICAgICAgSGVuY2UsIDAgc2hvdWxkIGJlIGEgdmFsaWQgY29sdW1u
IHZhbHVlIGFuZCBzaG91bGQgbm90IGJlIGhpamFja2VkIHRvCisgICAgICAgICAgbWVhbiBhbiB1
bnNwZWNpZmllZCBjb2x1bW4uCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIC0gYWRkZWQgdHJhY2tp
bmcgb2YgdGhlIFZNIHRoYXQgdGhlIGRlYnVnZ2VyIGlzIHVzZWQgd2l0aC4gVGhpcyBpcworICAg
ICAgICAgIG5lZWRlZCBieSBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkuCisKKyAgICAgICAgICBU
aGUgVk0gcG9pbnRlciBpcyBhdHRhaW5lZCBmcm9tIHRoZSBmaXJzdCBKU0dsb2JhbE9iamVjdCB0
aGF0IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGF0dGFjaGVzIHRvLiBXaGVuIHRoZSBkZWJ1Z2dl
ciBkZXRhY2hlcyBmcm9tIHRoZSBsYXN0IEpTR2xvYmFsT2JqZWN0LCBpdAorICAgICAgICAgIHdp
bGwgbnVsbGlmeSBpdHMgVk0gcG9pbnRlciB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgc2V0IG9u
IHRoZSBuZXh0CisgICAgICAgICAgYXR0YWNoLgorCisgICAgICAgICAgV2Ugd2VyZSBhbHdheXMg
b25seSB1c2luZyBlYWNoIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggb25lIFZNLiBUaGlzIGNoYW5n
ZQorICAgICAgICAgIG1ha2VzIGl0IGV4cGxpY2l0IHdpdGggYW4gYXNzZXJ0IHRvIGVuc3VyZSB0
aGF0IGFsbCBnbG9iYWxPYmplY3RzIHRoYXQKKyAgICAgICAgICB0aGUgZGVidWdnZXIgYXR0YWNo
ZXMgdG8gYmVvbmdzIHRvIHRoZSBzYW1lIFZNLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjph
dHRhY2gpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFNob3VsZFBhdXNlKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVn
aXN0ZXJDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVC
bG9jayk6CisgICAgICAgIC0gcmVnaXN0ZXJDb2RlQmxvY2soKSBpcyByZXNwb25zaWJsZSBmb3Ig
YXBwbHlpbmcgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnRzCisgICAgICAgICAgdG8gbmV3IENvZGVC
bG9ja3MgYmVpbmcgaW5zdGFsbGVkLiBTaW1pbGFybHksIHVucmVnaXN0ZXJDb2RlQmxvY2soKQor
ICAgICAgICAgIGNsZWFycyB0aGUgYnJlYWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OmFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQpOgorICAgICAgICAtIFRoaXMg
aXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGJyZWFrcG9pbnQgZmFs
bHMgd2l0aGluCisgICAgICAgICAgYSBDb2RlQmxvY2sgb3Igbm90LiBJZiBpdCBkb2VzLCB0aGVu
IGl0IGNhbiBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUKKyAgICAgICAgICBzYWlkIGJyZWFrcG9p
bnQgaW4gdGhlIENvZGVCbG9jay4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgICAg
ICAgICAgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBicmVha3BvaW50IHNpbXBseSBtZWFucyBpbmNy
ZW1lbnRpbmcvZGVjcmVtZW50aW5nCisgICAgICAgICAgdGhlIENvZGVCbG9jaydzIG1fbnVtQnJl
YWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVCcmVha3BvaW50c0Fu
ZEFwcGx5VG9Db2RlQmxvY2spOgorCisgICAgICAgIChKU0M6OkFwcGx5QnJlYWtwb2ludEZ1bmN0
b3I6OkFwcGx5QnJlYWtwb2ludEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpBcHBseUJyZWFrcG9p
bnRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVD
b2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KToKKyAgICAgICAgLSBJdGVyYXRlcyBhbGwgcmVs
ZXZhbnQgQ29kZUJsb2NrcyBhbmQgYXBwbHkgdGhlIHNwZWNpZmllZCBicmVha3BvaW50CisgICAg
ICAgICAgaWYgYXBwcm9wcmlhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBuZXcgYnJlYWtwb2lu
dCBpcyBiZWluZyBkZWZpbmVkCisgICAgICAgICAgYnkgdGhlIFdlYkluc3BlY3RvciBhbmQgbmVl
ZHMgdG8gYmUgYXBwbGllZCB0byBhbiBhbHJlYWR5IGluc3RhbGxlZAorICAgICAgICAgIENvZGVC
bG9jay4KKworICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3Rvcjo6Q2xlYXJB
bGxCcmVha3BvaW50c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRz
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjppdGVyYXRlQ29k
ZUJsb2Nrc0FuZENsZWFyQWxsQnJlYWtwb2ludHMpOgorCisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgLSBGaXhlZCBhIHJlZ3Jlc3Npb24gdGhhdCBicm9r
ZSBET00gYnJlYWtwb2ludHMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGgKKyAgICAgICAgICB0aGUg
c2tpcHBpbmcgb2Ygb3BfZGVidWcgY2FsbGJhY2tzLCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhbiB1
cGRhdGVkCisgICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLiBOb3JtYWxseSwgbV9jdXJyZW50
Q2FsbEZyYW1lIGlzIHByb3ZpZGVkIGFzIGFyZworICAgICAgICAgIGluIHRoZSBvcF9kZWJ1ZyBj
YWxsYmFjay4gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gZ2V0IHRoZSBDYWxsRnJhbWUqIGZyb20KKyAg
ICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzaG91bGRQYXVzZSk6CisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgLSBBZGRlZCB1dGlsaXR5IHRvIGl0ZXJhdGUg
YWxsIENvZGVCbG9ja3MgaW4gdGhlIGhlYXAgLyBWTS4KKworICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKwor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgLSBUaGVzZSBub3cgY2hlY2tzIENvZGVCbG9jazo6bV9udW1CcmVh
a3BvaW50cyBhbmQgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2UKKyAgICAgICAgICBpbnN0ZWFkIG9m
IERlYnVnZ2VyOjptX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKToKKwogMjAxNC0wMS0yMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZ2lzdGVycyB1c2VkIGluIHdyaXRlQmFycmllck9uT3BlcmFuZCBj
YW4gY2F1c2UgY2xvYmJlcmluZyBvbiBzb21lIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUyLDggKzEzNTIsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWJ1ZzogewogICAgICAgICAg
ICAgaW50IGRlYnVnSG9va0lEID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aGFzQnJlYWtwb2ludEZsYWcgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcyIsIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzICVkIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCksIGhh
c0JyZWFrcG9pbnRGbGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKQEAgLTE0NjgsNiArMTQ2OSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4
ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92
bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMp
CkBAIC0xNTIyLDYgKzE1MjQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQogICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9i
amVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1f
bnVtQnJlYWtwb2ludHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5s
aW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVC
bG9jay0+dGhpc1JlZ2lzdGVyKCkpCkBAIC0yNTY2LDYgKzI1NjksMjcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpOwogfQogCitib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOworICAgIGNvbnN0IEluc3RydWN0aW9u
KiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2RlYnVnKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGl0IC0gYmVnaW47CisgICAgICAgICAgICBpbnQgdW51c2VkOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3BEZWJ1Z0xpbmU7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOworICAg
ICAgICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2lu
dDo6dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGl0ICs9IG9wY29kZUxl
bmd0aHNbb3Bjb2RlSURdOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAgICAgbV9yYXJl
Q2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2OSw2ICs4
NjksMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7CiAK
KyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbik7CisKKyAgICBpbnQgbnVtQnJlYWtwb2ludHMoKSBjb25zdCB7IHJldHVybiBt
X251bUJyZWFrcG9pbnRzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1CcmVha3BvaW50c09m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQnJlYWtwb2lu
dHMpOyB9CisKKyAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKSB7IG1f
bnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0KKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAgICAgICAgbV9udW1CcmVha3BvaW50
cyAtPSBudW1CcmVha3BvaW50czsKKyAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0g
MCk7CisgICAgfQorICAgIHZvaWQgY2xlYXJBbGxCcmVha3BvaW50cygpIHsgbV9udW1CcmVha3Bv
aW50cyA9IDA7IH0KKwogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJz
IHByaXZhdGUuCiAKICAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CkBAIC0xMDA1LDYgKzEw
MTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIGludCBt
X251bUJyZWFrcG9pbnRzOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICBWTSogbV92bTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw4IEBAIHN0cnVjdCBCcmVha3BvaW50IHsKICAgICB1bnNpZ25lZCBjb2x1bW47CiAg
ICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBib29sIGF1dG9Db250aW51ZTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB1bnNwZWNpZmllZENvbHVtbiA9IFVJTlRfTUFYOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDEwIEBACiAK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorCiAjaW5jbHVkZSAi
SGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpAQCAtMTM5LDcgKzE0MSw4IEBAIHByaXZhdGU6CiB9Owog
CiBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQotICAgIDogbV9wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKKyAgICA6IG1fdm0obnVs
bHB0cikKKyAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlv
bnMpCiAgICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9pc1BhdXNl
ZChmYWxzZSkKICAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKQEAgLTE1MSw3ICsx
NTQsNiBAQCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkCiAgICAgLCBt
X2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgpCiAgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlE
KG5vU291cmNlSUQpCiAgICAgLCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKLSAg
ICAsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShm
YWxzZSkKIHsKIH0KQEAgLTE2Niw2ICsxNjgsMTAgQEAgRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB2
b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSk7CisgICAgaWYgKCFtX3ZtKQorICAg
ICAgICBtX3ZtID0gJmdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VChtX3ZtID09ICZnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVi
dWdnZXIodGhpcyk7CiAgICAgbV9nbG9iYWxPYmplY3RzLmFkZChnbG9iYWxPYmplY3QpOwogfQpA
QCAtMTg0LDEyICsxOTAsMTMyIEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2wKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGdsb2JhbE9iamVjdCkp
OwogICAgIG1fZ2xvYmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0KTsKICAgICBnbG9iYWxP
YmplY3QtPnNldERlYnVnZ2VyKDApOworICAgIGlmICghbV9nbG9iYWxPYmplY3RzLnNpemUoKSkK
KyAgICAgICAgbV92bSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBh
dXNlKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOwotICAgIHVwZGF0
ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnJlZ2lzdGVy
Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGl0ZXJhdGVCcmVha3BvaW50
c0FuZEFwcGx5VG9Db2RlQmxvY2soY29kZUJsb2NrKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6dW5y
ZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb2RlQmxvY2st
PmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKK30KKworYm9vbCBEZWJ1Z2dlcjo6YXBwbHlCcmVha3Bv
aW50SW5Db2RlQmxvY2tJZk5lZWRlZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnJlYWtwb2ludCYg
YnJlYWtwb2ludCwgYm9vbCBlbmFibGVCcmVha3BvaW50KQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsKKyAg
ICAgICAgfHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nh
c3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAgIGlmIChicmVha3BvaW50
LnNvdXJjZUlEICE9IHNvdXJjZUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNp
Z25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IGJyZWFr
cG9pbnQuY29sdW1uOworCisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJsZS0+bGlu
ZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFydENvbHVt
bigpOworICAgIHVuc2lnbmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgpOworICAg
IHVuc2lnbmVkIGVuZENvbHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisgICAgLy8g
SW5zcGVjdG9yIGJyZWFrcG9pbnQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhcmUgemVyby1iYXNl
ZCBidXQgdGhlIGV4ZWN1dGFibGUKKyAgICAvLyBhbmQgQ29kZUJsb2NrIGxpbmUgYW5kIGNvbHVt
biB2YWx1ZXMgYXJlIG9uZS1iYXNlZC4KKyAgICBsaW5lICs9IDE7CisgICAgY29sdW1uID0gY29s
dW1uID8gY29sdW1uICsgMSA6IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uOworCisgICAg
aWYgKGxpbmUgPCBzdGFydExpbmUgfHwgbGluZSA+IGVuZExpbmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoY29sdW1uICE9IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uKSB7
CisgICAgICAgIGlmIChsaW5lID09IHN0YXJ0TGluZSAmJiBjb2x1bW4gPCBzdGFydENvbHVtbikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGxpbmUgPT0gZW5kTGluZSAm
JiBjb2x1bW4gPiBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbihsaW5lLCBjb2x1
bW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZW5hYmxlQnJlYWtwb2ludCkK
KyAgICAgICAgY29kZUJsb2NrLT5hZGRCcmVha3BvaW50KDEpOworICAgIGVsc2UKKyAgICAgICAg
Y29kZUJsb2NrLT5yZW1vdmVCcmVha3BvaW50KDEpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIERlYnVnZ2VyOjppdGVyYXRlQnJlYWtwb2ludHNBbmRBcHBseVRvQ29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCYgYnJl
YWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludDsKKyAgICBmb3IgKGF1dG8gaXQg
PSBicmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50cy5lbmQoKTsgKytpdCkgewor
ICAgICAgICBCcmVha3BvaW50JiBicmVha3BvaW50ID0gKml0LT52YWx1ZTsKKyAgICAgICAgYXBw
bHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChjb2RlQmxvY2ssIGJyZWFrcG9pbnQsIHRy
dWUpOworICAgIH0KK30KKworY2xhc3MgQXBwbHlCcmVha3BvaW50RnVuY3RvciB7CitwdWJsaWM6
CisgICAgQXBwbHlCcmVha3BvaW50RnVuY3RvcihEZWJ1Z2dlciogZGVidWdnZXIsIEJyZWFrcG9p
bnQmIGJyZWFrcG9pbnQsIGJvb2wgZW5hYmxlT3JOb3QpCisgICAgICAgIDogbV9kZWJ1Z2dlcihk
ZWJ1Z2dlcikKKyAgICAgICAgLCBtX2JyZWFrcG9pbnQoYnJlYWtwb2ludCkKKyAgICAgICAgLCBt
X2VuYWJsZU9yTm90KGVuYWJsZU9yTm90KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAobV9kZWJ1Z2dl
ciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQorICAgICAgICAgICAg
bV9kZWJ1Z2dlci0+YXBwbHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChjb2RlQmxvY2ss
IG1fYnJlYWtwb2ludCwgbV9lbmFibGVPck5vdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CisgICAgQnJlYWtwb2lu
dCYgbV9icmVha3BvaW50OworICAgIGJvb2wgbV9lbmFibGVPck5vdDsKK307CisKK3ZvaWQgRGVi
dWdnZXI6Oml0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KEJyZWFrcG9pbnQmIGJy
ZWFrcG9pbnQsIGJvb2wgZW5hYmxlT3JOb3QpCit7CisgICAgaWYgKCFtX3ZtKQorICAgICAgICBy
ZXR1cm47CisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1fdm0tPmhlYXAp
OworICAgIEFwcGx5QnJlYWtwb2ludEZ1bmN0b3IgZnVuY3Rvcih0aGlzLCBicmVha3BvaW50LCBl
bmFibGVPck5vdCk7CisgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwor
fQorCitjbGFzcyBDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3RvciB7CitwdWJsaWM6CisgICAgQ2xl
YXJBbGxCcmVha3BvaW50c0Z1bmN0b3IoRGVidWdnZXIqIGRlYnVnZ2VyKQorICAgICAgICA6IG1f
ZGVidWdnZXIoZGVidWdnZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPm51bUJy
ZWFrcG9pbnRzKCkgJiYgbV9kZWJ1Z2dlciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhckFsbEJyZWFrcG9pbnRzKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIq
IG1fZGVidWdnZXI7Cit9OworCit2b2lkIERlYnVnZ2VyOjppdGVyYXRlQ29kZUJsb2Nrc0FuZENs
ZWFyQWxsQnJlYWtwb2ludHMoKQoreworICAgIGlmICghbV92bSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZShtX3ZtLT5oZWFwKTsKKyAgICBD
bGVhckFsbEJyZWFrcG9pbnRzRnVuY3RvciBmdW5jdG9yKHRoaXMpOworICAgIG1fdm0tPmhlYXAu
Zm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoVk0qIHZtKQpAQCAtMjA3LDEyICszMzMsNiBAQCB2b2lkIERlYnVnZ2Vy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWCiAgICAgdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5m
b3JFYWNoTGl2ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIHJlY29tcGlsZXIpOwogfQogCi12b2lkIERl
YnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpCi17Ci0gICAgc2l6ZV90IG51
bWJlck9mQnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zaXplKCk7Ci0g
ICAgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgPSBtX3Nob3VsZFBhdXNlIHx8IG51bWJlck9mQnJl
YWtwb2ludHM7Ci19Ci0KIEJyZWFrcG9pbnRJRCBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChCcmVh
a3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkJiBhY3R1YWxMaW5lLCB1bnNpZ25lZCYgYWN0dWFs
Q29sdW1uKQogewogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gYnJlYWtwb2ludC5zb3VyY2VJRDsK
QEAgLTI0Nyw3ICszNjcsNyBAQCBCcmVha3BvaW50SUQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQo
QnJlCiAgICAgYnJlYWtwb2ludHMuYXBwZW5kKGJyZWFrcG9pbnQpOwogICAgIG1fYnJlYWtwb2lu
dElEVG9CcmVha3BvaW50LnNldChpZCwgJmJyZWFrcG9pbnRzLmxhc3QoKSk7CiAKLSAgICB1cGRh
dGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpOworICAgIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBw
bHlCcmVha3BvaW50KGJyZWFrcG9pbnQsIHRydWUpOwogCiAgICAgcmV0dXJuIGlkOwogfQpAQCAt
MjY3LDYgKzM4Nyw4IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2kK
ICAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUu
ZmluZChicmVha3BvaW50LmxpbmUpOwogICAgIEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFsdWUu
ZW5kKCkpOwogCisgICAgaXRlcmF0ZUNvZGVCbG9ja3NBbmRBcHBseUJyZWFrcG9pbnQoYnJlYWtw
b2ludCwgZmFsc2UpOworCiAgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrcG9pbnRzID0gYnJl
YWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291bnQgPSBicmVha3BvaW50
cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9pbnRzQ291bnQ7
IGkrKykgewpAQCAtMjgyLDggKzQwNCw2IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQoQnJlYWtwb2kKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAg
dXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKIH0KIAogYm9vbCBEZWJ1Z2dlcjo6aGFz
QnJlYWtwb2ludChTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlv
biwgQnJlYWtwb2ludCAqaGl0QnJlYWtwb2ludCkKQEAgLTMxMCw2ICs0MzAsNyBAQCBib29sIERl
YnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgICAgIHVuc2lnbmVkIGJyZWFr
TGluZSA9IGJyZWFrcG9pbnRzW2ldLmxpbmU7CiAgICAgICAgIHVuc2lnbmVkIGJyZWFrQ29sdW1u
ID0gYnJlYWtwb2ludHNbaV0uY29sdW1uOwogICAgICAgICAvLyBTaW5jZSBmcm9udGVuZCB0cnVu
Y2F0ZXMgdGhlIGluZGVudCwgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBhIGxpbmUgbXVzdCBtYXRj
aCB0aGUgYnJlYWtwb2ludCAobGluZSwwKS4KKyAgICAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0
cy5jb250YWlucyhtX2N1cnJlbnRDYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3Qo
KSkpOwogICAgICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmUgPT0g
YnJlYWtMaW5lICYmICFicmVha0NvbHVtbikKICAgICAgICAgICAgIHx8IChsaW5lID09IGJyZWFr
TGluZSAmJiBjb2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7CiAgICAgICAgICAgICBoaXQgPSB0cnVl
OwpAQCAtMzUxLDcgKzQ3Miw3IEBAIHZvaWQgRGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMoKQog
ICAgIG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50LmNsZWFyKCk7CiAgICAgbV9zb3VyY2VJRFRv
QnJlYWtwb2ludHMuY2xlYXIoKTsKIAotICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tz
KCk7CisgICAgaXRlcmF0ZUNvZGVCbG9ja3NBbmRDbGVhckFsbEJyZWFrcG9pbnRzKCk7CiB9CiAK
IHZvaWQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQpA
QCAtMzczLDExICs0OTQsMTMgQEAgdm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1l
bnQoYgogCiB2b2lkIERlYnVnZ2VyOjpicmVha1Byb2dyYW0oKQogewotICAgIGlmIChtX2lzUGF1
c2VkIHx8ICFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwogICAgIHNldFNo
b3VsZFBhdXNlKHRydWUpOworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fdm0tPnRvcENhbGxG
cmFtZTsKKyAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICBwYXVzZUlmTmVlZGVk
KG1fY3VycmVudENhbGxGcmFtZSk7CiB9CiAKQEAgLTQzMiw3ICs1NTUsNyBAQCB2b2lkIERlYnVn
Z2VyOjp1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmCiB7CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNh
bGxGcmFtZSk7CiAgICAgcGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGlmICghbmVlZHNP
cERlYnVnQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFzaG91bGRQYXVzZSgpKQogICAgICAgICBtX2N1
cnJlbnRDYWxsRnJhbWUgPSAwOwogfQogCkBAIC00NzcsOCArNjAwLDcgQEAgdm9pZCBEZWJ1Z2dl
cjo6cGF1c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogCiAgICAgaWYgKCFtX3BhdXNlT25OZXh0U3Rh
dGVtZW50ICYmICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKICAgICAgICAgc2V0U2hvdWxkUGF1c2Uo
ZmFsc2UpOwotICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQotICAgICAgICAg
ICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0g
bnVsbHB0cjsKICAgICB9CiB9CiAKQEAgLTU0OCw3ICs2NzAsNyBAQCB2b2lkIERlYnVnZ2VyOjp3
aWxsRXhlY3V0ZVByb2dyYW0oQ2FsbEZyCiAgICAgLy8gdGhlIGRlYnVnZ2VyIGltcGxlbWVudGF0
aW9uIHRvIG5vdCByZXF1aXJlIGNhbGxiYWNrcy4KICAgICBpZiAoIW1faXNJbldvcmtlclRocmVh
ZCkKICAgICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwot
ICAgIGVsc2UgaWYgKG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgIGVsc2UgaWYgKHNob3Vs
ZFBhdXNlKCkpCiAgICAgICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTYy
MzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIERlYnVnZ2VyKGJvb2wgaXNJ
bldvcmtlclRocmVhZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigpOwogCi0gICAg
Ym9vbCBuZWVkc09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzT3BEZWJ1
Z0NhbGxiYWNrczsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3QgbmVlZHNPcERlYnVnQ2FsbGJhY2tz
T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX25lZWRzT3BEZWJ1
Z0NhbGxiYWNrcyk7IH0KKyAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9z
aG91bGRQYXVzZTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc2hvdWxkUGF1c2VPZmZzZXQoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRGVidWdnZXIsIG1fc2hvdWxkUGF1c2UpOyB9CiAKICAg
ICBKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lKiBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25z
dDsKICAgICBib29sIGhhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjaygpIGNvbnN0CkBAIC0x
MDQsNiArMTA0LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9u
cyhWTSopOwogCisgICAgdm9pZCByZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKik7CisKIHByb3RlY3RlZDoKICAgICB2
aXJ0dWFsIGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEJyZWFr
cG9pbnQmKSB7IH0KQEAgLTEyOCw3ICsxMzEsNyBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiBW
ZWN0b3I8QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkLCBCcmVha3BvaW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNl
SURUb0JyZWFrcG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VJRCwgTGluZVRv
QnJlYWtwb2ludHNNYXAsIFdURjo6SW50SGFzaDxTb3VyY2VJRD4sIFdURjo6VW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8U291cmNlSUQ+PiBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA7CiAK
ICAgICBjbGFzcyBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHsKICAgICBwdWJsaWM6CkBAIC0xNDgs
NyArMTUxLDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQnJlYWtwb2ludChTb3VyY2VJRCwg
Y29uc3QgVGV4dFBvc2l0aW9uJiwgQnJlYWtwb2ludCogaGl0QnJlYWtwb2ludCk7CiAKLSAgICBi
b29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQogICAgIHZv
aWQgc2V0U2hvdWxkUGF1c2UoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0Nh
bGxiYWNrcygpOwogCkBAIC0xNjEsNiArMTYzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRh
dGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAgICAgdm9pZCBw
YXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAKKyAgICBib29sIGFwcGx5QnJlYWtwb2lu
dEluQ29kZUJsb2NrSWZOZWVkZWQoQ29kZUJsb2NrKiwgQnJlYWtwb2ludCYsIGJvb2wgZW5hYmxl
T3JOb3QpOworICAgIHZvaWQgaXRlcmF0ZUJyZWFrcG9pbnRzQW5kQXBwbHlUb0NvZGVCbG9jayhD
b2RlQmxvY2sqKTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50
KEJyZWFrcG9pbnQmLCBib29sIGVuYWJsZU9yTm90KTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxv
Y2tzQW5kQ2xlYXJBbGxCcmVha3BvaW50cygpOworCisgICAgVk0qIG1fdm07CiAgICAgSGFzaFNl
dDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIAogICAgIFBhdXNlT25FeGNlcHRp
b25zU3RhdGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwpAQCAtMTgxLDExICsxODksMTIgQEAg
cHJpdmF0ZToKICAgICBCcmVha3BvaW50SURUb0JyZWFrcG9pbnRNYXAgbV9icmVha3BvaW50SURU
b0JyZWFrcG9pbnQ7CiAgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0Jy
ZWFrcG9pbnRzOwogCi0gICAgYm9vbCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrczsKICAgICBib29s
IG1fc2hvdWxkUGF1c2U7CiAKICAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9j
dXJyZW50RGVidWdnZXJDYWxsRnJhbWU7CiAKKyAgICBmcmllbmQgY2xhc3MgQXBwbHlCcmVha3Bv
aW50RnVuY3RvcjsKKyAgICBmcmllbmQgY2xhc3MgQ2xlYXJBbGxCcmVha3BvaW50c0Z1bmN0b3I7
CiAgICAgZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiAgICAgZnJpZW5kIGNs
YXNzIFRlbXBvcmFyeVBhdXNlZFN0YXRlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNF
eHRyYWN0b3I7CkBAIC0xOTUsOCArMjA0LDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIERlYnVnZ2Vy
IHsKIHB1YmxpYzoKLSAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpIDogbV9uZWVkc09wRGVidWdD
YWxsYmFja3MoZmFsc2UpIHsgfQotICAgIGJvb2wgbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpCisgICAgICAg
IDogbV9zaG91bGRQYXVzZShmYWxzZSkKKyAgICB7CisgICAgfQorICAgIGJvb2wgc2hvdWxkUGF1
c2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgbmVlZHNFeGNlcHRpb25DYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgZGV0YWNoKEpTR2xvYmFs
T2JqZWN0KikgeyB9CiAgICAgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJv
dmlkZXIqLCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CkBAIC0yMDgsNyArMjIwLDggQEAg
cHVibGljOgogICAgIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgeyB9CiAgICAg
dm9pZCBkaWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKikgeyB9CiAKLSAgICBib29sIG1fbmVl
ZHNPcERlYnVnQ2FsbGJhY2tzOworcHJpdmF0ZToKKyAgICBib29sIG1fc2hvdWxkUGF1c2U7CiB9
OwogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24gMTYyMzkwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTcxLDYgKzcxLDIxIEBAIHB1YmxpYzoKICAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUg
bmV4dCBjb2xsZWN0aW9uLgogICAgIHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2Rl
QmxvY2tzKEhlYXAqKTsKIAorICAgIC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVh
cCB1bnRpbCB0aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUKKyAgICAvLyB0byBpbmRp
Y2F0ZSB0aGF0IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sg
aGFzIGJlZW4KKyAgICAvLyB2aXNpdGVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgaXRlcmF0ZShGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxD
b2RlQmxvY2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hT
ZXQ8Q29kZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSAqaXRlcjsKKyAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxD
b2RlQmxvY2s+IGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKICAgICAvLyBhcmJp
dHJhcnkgYm9ndXMgcG9pbnRlcnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQg
aGFkIHBlZWsgdHlwZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9u
IDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMTc0LDYgKzE3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlw
ZSBmb3JFYWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3Rl
ZENlbGwoKTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQg
Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJik7CiAKICAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVT
ZXQoKSB7IHJldHVybiAmbV9oYW5kbGVTZXQ7IH0KICAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRs
ZVN0YWNrKCkgeyByZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KQEAgLTQzMiw2ICs0MzMsMTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmb3JFYWNoUHJvdGVjdGVkQ2VsbChmdW5j
dG9yKTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9p
ZCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7CisgICAgfQor
CiAgICAgaW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6
ZV90IGJ5dGVzKQogICAgIHsKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA1LDggKzEyMDUsOSBAQCBKU1Zh
bHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiBORVZFUl9JTkxJTkUgdm9pZCBJ
bnRlcnByZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVn
SG9va0lEKQogewogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2Vy
LT5uZWVkc09wRGVidWdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKGRlYnVnZ2VyLT5zaG91bGRQYXVzZSgpIHx8IGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm51bUJyZWFrcG9pbnRzKCkgfHwgY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24o
KSk7CiAKICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJD
YWxsRnJhbWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NywxNCArOTk3LDIyIEBA
IHZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50
KCk7CiAjZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVn
Z2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1
Z2dlckFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNH
bG9iYWxPYmplY3Q6OmRlYnVnZ2VyT2Zmc2V0KCk7CiAgICAgbG9hZFB0cihkZWJ1Z2dlckFkZHJl
c3MsIHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QwKTsKLSAgICBjaGFyKiBmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRl
YnVnZ2VyKSArIERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsKLSAgICBK
dW1wIHNraXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZmxh
Z0FkZHJlc3MpKTsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVi
dWdnZXIoKTsKKyAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQoKTsKKyAgICBK
dW1wIGNhbGxiYWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNz
KHNob3VsZFBhdXNlQWRkcmVzcykpOworCisgICAgY2hhciogbnVtQnJlYWtwb2ludHNBZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJsb2NrOjpudW1C
cmVha3BvaW50c09mZnNldCgpOworICAgIGxvYWQzMihudW1CcmVha3BvaW50c0FkZHJlc3MsIHJl
Z1QwKTsKKyAgICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdU
MCk7CisKKyAgICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHNr
aXBEZWJ1Z0hvb2subGluayh0aGlzKTsKKworICAgIG5vQnJlYWtwb2ludFNldC5saW5rKHRoaXMp
OwogICAgIG5vRGVidWdnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1
cnJlbnRJbnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNSwxMyArNzE1LDIxIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50KCk7CiAj
ZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVnZ2VyKiBk
ZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1Z2dlckFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxP
YmplY3Q6OmRlYnVnZ2VyT2Zmc2V0KCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVz
dFB0cihaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZGVidWdnZXJBZGRyZXNzKSk7Ci0gICAgY2hhciog
ZmxhZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dl
cjo6bmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCk7Ci0gICAgSnVtcCBza2lwRGVidWdIb29r
ID0gYnJhbmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRyZXNzKSk7CisKKyAg
ICBEZWJ1Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hh
ciogc2hvdWxkUGF1c2VBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIp
ICsgRGVidWdnZXI6OnNob3VsZFBhdXNlT2Zmc2V0KCk7CisgICAgSnVtcCBjYWxsYmFja05lZWRl
ZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJl
c3MpKTsKKworICAgIGNoYXIqIG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGNvZGVCbG9jaygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQo
KTsKKyAgICBsb2FkMzIobnVtQnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7CisgICAgSnVtcCBu
b0JyZWFrcG9pbnRTZXQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworCisgICAgY2FsbGJh
Y2tOZWVkZWQubGluayh0aGlzKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICBza2lwRGVidWdIb29rLmxpbmso
dGhpcyk7CisKKyAgICBub0JyZWFrcG9pbnRTZXQubGluayh0aGlzKTsKICAgICBub0RlYnVnZ2Vy
LmxpbmsodGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsMTMg
KzgzNSwxOCBAQCBfbGxpbnRfb3BfcHJvZmlsZV9kaWRfY2FsbDoKIAogX2xsaW50X29wX2RlYnVn
OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAg
ICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKKyAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwg
dDAKICAgICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9kZWJ1Z2dlclt0MF0sIHQwCiAgICAgYnRp
eiB0MCwgLm9wRGVidWdEb25lCi0gICAgbG9hZGIgRGVidWdnZXI6Om1fbmVlZHNPcERlYnVnQ2Fs
bGJhY2tzW3QwXSwgdDAKLSAgICBidGJ6IHQwLCAub3BEZWJ1Z0RvbmUKIAorICAgIGxvYWRiIERl
YnVnZ2VyOjptX3Nob3VsZFBhdXNlW3QwXSwgdDAKKyAgICBidGJueiB0MCwgLm9wRGVidWdEb0Nh
bGxiYWNrCisKKyAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtQnJlYWtwb2ludHNbdDFdLCB0MAor
ICAgIGJ0aXogdDAsIC5vcERlYnVnRG9uZQorCisub3BEZWJ1Z0RvQ2FsbGJhY2s6CiAgICAgY2Fs
bFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfZGVidWcpCiAub3BEZWJ1Z0RvbmU6ICAgICAgICAg
ICAgICAgICAgICAKICAgICBkaXNwYXRjaCgzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAsOCArMTcwLDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIK
ICAgICAgICAgYnJlYWs7CiAgICAgfSB9CiAKLSAgICBpZiAob2xkQ29kZUJsb2NrKQorICAgIERl
YnVnZ2VyKiBkZWJ1Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1
Z2dlcigpOworICAgIGlmIChvbGRDb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKGRlYnVnZ2VyKQor
ICAgICAgICAgICAgZGVidWdnZXItPnVucmVnaXN0ZXJDb2RlQmxvY2sob2xkQ29kZUJsb2NrLmdl
dCgpKTsKICAgICAgICAgb2xkQ29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAg
fQorICAgIGlmIChkZWJ1Z2dlcikKKyAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2Nr
KGdlbmVyaWNDb2RlQmxvY2spOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhl
Y3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221851</attachid>
            <date>2014-01-22 03:12:49 -0800</date>
            <delta_ts>2014-01-22 19:22:42 -0800</delta_ts>
            <desc>patch 4: fix one more inefficient globalObject check in an assertion in Debugger::hasBreakpoint().</desc>
            <filename>bug-122836.patch</filename>
            <type>text/plain</type>
            <size>32852</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxNC0wMS0yMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UG9vciBtYW4ncyBmYXN0IGJyZWFrcG9pbnRzIGZvciBhIDIuM3ggZGVidWdnZXIgc3BlZWR1cC4K
KyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMjgzNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5IHdlIGdhaW5lZCBiYWNr
IHNvbWUgcGVyZm9ybWFuY2UgKHJ1biBhdCBiYXNlbGluZSBKSVQgc3BlZWRzKQorICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3IgaXMgb3BlbmVkIHByb3ZpZGVkIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQuIFRoaXMKKyAgICAgICAgd2FzIGFjaGlldmVkIGJ5IHNpbXBseSBza2lwcGluZyBhbGwg
b3BfZGVidWcgY2FsbGJhY2tzIHRvIHRoZSBkZWJ1Z2dlcgorICAgICAgICBpZiBubyBicmVha3Bv
aW50cyBhcmUgc2V0LiBJZiBhbnkgYnJlYWtwb2ludHMgYXJlIHNldCwgdGhlIGRlYnVnZ2VyIHdp
bGwKKyAgICAgICAgc2V0IGEgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgZmxhZyB3aGljaCBjYXVz
ZXMgdGhlIGNhbGxiYWNrcyB0byBiZQorICAgICAgICBjYWxsZWQsIGFuZCB3ZSBkb24ndCBnZXQg
dGhlIGJhc2VsaW5lIEpJVCBzcGVlZHMgYW55bW9yZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbm93IHRyYWNrIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgc2V0IGluIHRo
ZQorICAgICAgICBDb2RlQmxvY2sgdGhhdCB0aGV5IGFyZSBzZXQgaW4uIFRoZSBMTElOVCBhbmQg
YmFzZWxpbmUgSklUIGNvZGUgd2lsbAorICAgICAgICBjaGVjayBDb2RlQmxvY2s6Om1fbnVtQnJl
YWtwb2ludHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcF9kZWJ1ZyBjYWxsYmFja3MKKyAgICAgICAg
bmVlZCB0byBiZSBjYWxsZWQuIFdpdGggdGhpcywgd2Ugd2lsbCBvbmx5IGVuYWJsZSBvcF9kZWJ1
ZyBjYWxsYmFja3MgZm9yCisgICAgICAgIENvZGVCbG9ja3MgdGhhdCBuZWVkIGl0IGkuZS4gdGhv
c2Ugd2l0aCBicmVha3BvaW50cyBzZXQgaW4gdGhlbS4KKworICAgICAgICBEZWJ1Z2dlcjo6bV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgaXMgbm93IG9ic29sZXRlZC4gVGhlIExMSU5UIGFuZCBiYXNl
bGluZQorICAgICAgICBKSVQgY29kZSBzdGlsbCBuZWVkcyB0byBjaGVjayBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgICAgIGRlYnVnZ2VyIGlzIGluIHN0
ZXBwaW5nIG1vZGUgYW5kIGhlbmNlLCBuZWVkcyBvcF9kZWJ1ZyBjYWxsYmFja3MgZW5hYmxlZAor
ICAgICAgICBmb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgZGVidWdnZXIgImNvbnRpbnVlcyIgdGhl
IHJ1biBhbmQgZXhpdCBzdGVwcGluZworICAgICAgICBtb2RlLgorCisgICAgICAgIEFsc28gaW4g
dGhpcyBwYXRjaCwgSSBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gRE9NIGJyZWFrcG9pbnRzIHdoaWNo
IHJlbGllcworICAgICAgICBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkgdG8gcGF1c2UgdGhlIGRl
YnVnZ2VyLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAtIE1pc3NlZCBhY2NvdW50aW5n
IGZvciBvcF9kZWJ1ZydzIG5ldyBoYXNCcmVha3BvaW50RmxhZyBvcGVyYW5kIGhlcmUgd2hlbgor
ICAgICAgICAgIGl0IHdhcyBhZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1u
KToKKyAgICAgICAgLSBUaGlzIGlzIG5lZWRlZCBpbiBEZWJ1Z2dlcjo6YXBwbHlCcmVha3BvaW50
SW5Db2RlQmxvY2tJZk5lZWRlZCgpIHRvCisgICAgICAgICAgZGV0ZXJtaW5lIGlmIGEgYnJlYWtw
b2ludCBmYWxscyB3aXRoaW4gYSBDb2RlQmxvY2sgb3Igbm90LiBTaW1wbHkKKyAgICAgICAgICBj
aGVja2luZyB0aGUgYm91bmRzIG9mIHRoZSBDb2RlQmxvY2sgaXMgaW5zdWZmaWNpZW50LiBGb3Ig
ZXhhbXBsZSwKKyAgICAgICAgICBsZXQncyBzYXkgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIEpTIGNv
ZGU6CisKKyAgICAgICAgICAgICAgLy8gYmVnaW4gZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAg
IGZ1bmN0aW9uIGYxKCkgeworICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZjIoKSB7CisgICAg
ICAgICAgICAgICAgICAgICAuLi4gLy8gc2V0IGJyZWFrcG9pbnQgaGVyZS4KKyAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAvLyBlbmQgZ2xvYmFsIHNj
b3BlCisKKyAgICAgICAgICBVc2luZyB0aGUgQ29kZUJsb2NrIGJvdW5kcyBhbG9uZSwgdGhlIGJy
ZWFrcG9pbnQgYWJvdmUgd2lsbCB0byBhcHBlYXIKKyAgICAgICAgICB0byBiZSBpbiB0aGUgZ2xv
YmFsIHByb2dyYW0gQ29kZUJsb2NrLCBhbmQgdGhlIENvZGVCbG9ja3MgZm9yIGZ1bmN0aW9uCisg
ICAgICAgICAgZjEoKSBhbmQgZjIoKS4gV2l0aCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5l
QW5kQ29sdW1uKCkgd2UgY2FuCisgICAgICAgICAgcnVsZSBvdXQgdGhlIGdsb2JhbCBwcm9ncmFt
IENvZGVCbG9jayBhbmQgZjEoKSwgYW5kIG9ubHkgYXBwbHkgdGhlCisgICAgICAgICAgYnJlYWtw
b2ludCB0byBmMigwIHdoZXJlIGl0IGJlbG9uZ3MuCisKKyAgICAgICAgICBDdXJyZW50bHksIENv
ZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSB3b3JrcyBieSBpdGVyYXRpbmcK
KyAgICAgICAgICBvdmVyIGFsbCB0aGUgb3Bjb2RlcyBpbiB0aGUgQ29kZUJsb2NrIHRvIGxvb2sg
Zm9yIG9wX2RlYnVnJ3MuIEZvciBlYWNoCisgICAgICAgICAgb3BfZGVidWcsIGl0IGNhbGxzIENv
ZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoKSB0bworICAgICAgICAg
IGRvIGEgYmluYXJ5IHNlYWNoIHRvIGdldCB0aGUgbGluZSBhbmQgY29sdW1uIGluZm8gZm9yIHRo
YXQgb3BfZGVidWcuCisgICAgICAgICAgVGhpcyBpcyBhIE4gKiBsb2coTikgYWxnb3JpdGhtLCBi
dXQgaXQgaXMgYXNzdW1lZCB0aGF0IGluIGEgbm9taW5hbAorICAgICAgICAgIHN5c3RlbSwgd2Ug
d29uJ3QgYmUgY2FsbGluZyBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKCkg
dG8KKyAgICAgICAgICBpbXBhY3QgaW50ZXJhY3RpdmUgZGVidWdnZXIgcGVyZm9ybWFuY2UuIElm
IHRoaXMgc2hvdWxkIHByb3ZlIHRvIGJlCisgICAgICAgICAgdW50cnVlLCB0aGVyZSBhcmUgc2V2
ZXJhbCBvcHRpbWl6YXRpb24gb3B0aW9ucyB0aGF0IHdlIGNhbiBlbnRlcnRhaW4KKyAgICAgICAg
ICBpbiB0aGUgZnV0dXJlIHRvIGFkZHJlc3MgdGhpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bUJyZWFrcG9pbnRzKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjpudW1CcmVha3BvaW50c09mZnNldCk6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6YWRkQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
cmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJBbGxCcmVh
a3BvaW50cyk6CisgICAgICAgICogZGVidWdnZXIvQnJlYWtwb2ludC5oOgorICAgICAgICAtIGRl
ZmluZWQgQnJlYWtwb2ludDo6dW5zcGVjaWZpZWRDb2x1bW4gc28gdGhhdCB3ZSBjYW4gZXhwbGlj
aXRseSBpbmRpY2F0ZQorICAgICAgICAgIHdoZW4gdGhlIFdlYkluc3BlY3RvciB3YXMgc2V0dGlu
ZyBhIGxpbmUgYnJlYWtwb2ludCBhbmQgZGlkIG5vdCBwcm92aWRlCisgICAgICAgICAgYSBjb2x1
bW4gdmFsdWUuIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4oKSBuZWVkcyB0
aGlzCisgICAgICAgICAgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gbG9vc2VuIGl0cyBtYXRjaGlu
ZyBjcml0ZXJpYSBmb3Igb3BfZGVidWcKKyAgICAgICAgICBieXRlY29kZXMgZm9yIHRoZSBzcGVj
aWZpZWQgYnJlYWtwb2ludCBsaW5lIGFuZCBjb2x1bW4gdmFsdWVzIHByb3ZpZGVkCisgICAgICAg
ICAgYnkgdGhlIGRlYnVnZ2VyLgorCisgICAgICAgICAgUHJldmlvdXNseSwgd2UganVzdCBoaWph
Y2sgYSAwIHZhbHVlIGNvbHVtbiBhcyBhbiB1bnNwZWNpZmllZCBjb2x1bW4uCisgICAgICAgICAg
SG93ZXZlciwgdGhlIFdlYkluc3BlY3RvciBvcGVyYXRlcyBvbiAwLWJhc2VkIGludHMgZm9yIGNv
bHVtbiB2YWx1ZXMuCisgICAgICAgICAgSGVuY2UsIDAgc2hvdWxkIGJlIGEgdmFsaWQgY29sdW1u
IHZhbHVlIGFuZCBzaG91bGQgbm90IGJlIGhpamFja2VkIHRvCisgICAgICAgICAgbWVhbiBhbiB1
bnNwZWNpZmllZCBjb2x1bW4uCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5jcHA6Cisg
ICAgICAgIChKU0M6OkRlYnVnZ2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIC0gYWRkZWQgdHJhY2tp
bmcgb2YgdGhlIFZNIHRoYXQgdGhlIGRlYnVnZ2VyIGlzIHVzZWQgd2l0aC4gVGhpcyBpcworICAg
ICAgICAgIG5lZWRlZCBieSBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkuCisKKyAgICAgICAgICBU
aGUgVk0gcG9pbnRlciBpcyBhdHRhaW5lZCBmcm9tIHRoZSBmaXJzdCBKU0dsb2JhbE9iamVjdCB0
aGF0IHRoZSBkZWJ1Z2dlcgorICAgICAgICAgIGF0dGFjaGVzIHRvLiBXaGVuIHRoZSBkZWJ1Z2dl
ciBkZXRhY2hlcyBmcm9tIHRoZSBsYXN0IEpTR2xvYmFsT2JqZWN0LCBpdAorICAgICAgICAgIHdp
bGwgbnVsbGlmeSBpdHMgVk0gcG9pbnRlciB0byBhbGxvdyBhIG5ldyBvbmUgdG8gYmUgc2V0IG9u
IHRoZSBuZXh0CisgICAgICAgICAgYXR0YWNoLgorCisgICAgICAgICAgV2Ugd2VyZSBhbHdheXMg
b25seSB1c2luZyBlYWNoIGRlYnVnZ2VyIGluc3RhbmNlIHdpdGggb25lIFZNLiBUaGlzIGNoYW5n
ZQorICAgICAgICAgIG1ha2VzIGl0IGV4cGxpY2l0IHdpdGggYW4gYXNzZXJ0IHRvIGVuc3VyZSB0
aGF0IGFsbCBnbG9iYWxPYmplY3RzIHRoYXQKKyAgICAgICAgICB0aGUgZGVidWdnZXIgYXR0YWNo
ZXMgdG8gYmVvbmdzIHRvIHRoZSBzYW1lIFZNLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjph
dHRhY2gpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6ZGV0YWNoKToKKyAgICAgICAgKEpTQzo6
RGVidWdnZXI6OnNldFNob3VsZFBhdXNlKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6cmVn
aXN0ZXJDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6dW5yZWdpc3RlckNvZGVC
bG9jayk6CisgICAgICAgIC0gcmVnaXN0ZXJDb2RlQmxvY2soKSBpcyByZXNwb25zaWJsZSBmb3Ig
YXBwbHlpbmcgcHJlLWV4aXN0aW5nIGJyZWFrcG9pbnRzCisgICAgICAgICAgdG8gbmV3IENvZGVC
bG9ja3MgYmVpbmcgaW5zdGFsbGVkLiBTaW1pbGFybHksIHVucmVnaXN0ZXJDb2RlQmxvY2soKQor
ICAgICAgICAgIGNsZWFycyB0aGUgYnJlYWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdn
ZXI6OmFwcGx5QnJlYWtwb2ludEluQ29kZUJsb2NrSWZOZWVkZWQpOgorICAgICAgICAtIFRoaXMg
aXMgdGhlIHdvcmtob3JzZSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGJyZWFrcG9pbnQgZmFs
bHMgd2l0aGluCisgICAgICAgICAgYSBDb2RlQmxvY2sgb3Igbm90LiBJZiBpdCBkb2VzLCB0aGVu
IGl0IGNhbiBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUKKyAgICAgICAgICBzYWlkIGJyZWFrcG9p
bnQgaW4gdGhlIENvZGVCbG9jay4gSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sCisgICAg
ICAgICAgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBicmVha3BvaW50IHNpbXBseSBtZWFucyBpbmNy
ZW1lbnRpbmcvZGVjcmVtZW50aW5nCisgICAgICAgICAgdGhlIENvZGVCbG9jaydzIG1fbnVtQnJl
YWtwb2ludHMuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVCcmVha3BvaW50c0Fu
ZEFwcGx5VG9Db2RlQmxvY2spOgorCisgICAgICAgIChKU0M6OkFwcGx5QnJlYWtwb2ludEZ1bmN0
b3I6OkFwcGx5QnJlYWtwb2ludEZ1bmN0b3IpOgorICAgICAgICAoSlNDOjpBcHBseUJyZWFrcG9p
bnRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6Oml0ZXJhdGVD
b2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KToKKyAgICAgICAgLSBJdGVyYXRlcyBhbGwgcmVs
ZXZhbnQgQ29kZUJsb2NrcyBhbmQgYXBwbHkgdGhlIHNwZWNpZmllZCBicmVha3BvaW50CisgICAg
ICAgICAgaWYgYXBwcm9wcmlhdGUuIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBuZXcgYnJlYWtwb2lu
dCBpcyBiZWluZyBkZWZpbmVkCisgICAgICAgICAgYnkgdGhlIFdlYkluc3BlY3RvciBhbmQgbmVl
ZHMgdG8gYmUgYXBwbGllZCB0byBhbiBhbHJlYWR5IGluc3RhbGxlZAorICAgICAgICAgIENvZGVC
bG9jay4KKworICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3Rvcjo6Q2xlYXJB
bGxCcmVha3BvaW50c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpDbGVhckFsbEJyZWFrcG9pbnRz
RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjppdGVyYXRlQ29k
ZUJsb2Nrc0FuZENsZWFyQWxsQnJlYWtwb2ludHMpOgorCisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChK
U0M6OkRlYnVnZ2VyOjpjbGVhckJyZWFrcG9pbnRzKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgLSBGaXhlZCBhIHJlZ3Jlc3Npb24gdGhhdCBicm9r
ZSBET00gYnJlYWtwb2ludHMuIFRoZSBpc3N1ZSBpcyB0aGF0IHdpdGgKKyAgICAgICAgICB0aGUg
c2tpcHBpbmcgb2Ygb3BfZGVidWcgY2FsbGJhY2tzLCB3ZSBkb24ndCBhbHdheXMgaGF2ZSBhbiB1
cGRhdGVkCisgICAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lLiBOb3JtYWxseSwgbV9jdXJyZW50
Q2FsbEZyYW1lIGlzIHByb3ZpZGVkIGFzIGFyZworICAgICAgICAgIGluIHRoZSBvcF9kZWJ1ZyBj
YWxsYmFjay4gSW4gdGhpcyBjYXNlLCB3ZSBjYW4gZ2V0IHRoZSBDYWxsRnJhbWUqIGZyb20KKyAg
ICAgICAgICBtX3ZtLT50b3BDYWxsRnJhbWUuCisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
cGF1c2VJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp3aWxsRXhlY3V0ZVByb2dy
YW0pOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmg6CisgICAgICAgIChKU0M6OkRlYnVn
Z2VyOjpEZWJ1Z2dlcik6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzaG91bGRQYXVzZSk6CisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tT
ZXQ6Oml0ZXJhdGUpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgLSBBZGRlZCB1dGlsaXR5IHRvIGl0ZXJhdGUg
YWxsIENvZGVCbG9ja3MgaW4gdGhlIGhlYXAgLyBWTS4KKworICAgICAgICAqIGludGVycHJldGVy
L0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmRlYnVnKToKKwor
ICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2RlYnVnKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbToKKyAgICAgICAgLSBUaGVzZSBub3cgY2hlY2tzIENvZGVCbG9jazo6bV9udW1CcmVh
a3BvaW50cyBhbmQgRGVidWdnZXI6Om1fc2hvdWxkUGF1c2UKKyAgICAgICAgICBpbnN0ZWFkIG9m
IERlYnVnZ2VyOjptX25lZWRzT3BEZWJ1Z0NhbGxiYWNrcy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKToKKwogMjAxNC0wMS0yMSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZ2lzdGVycyB1c2VkIGluIHdyaXRlQmFycmllck9uT3BlcmFuZCBj
YW4gY2F1c2UgY2xvYmJlcmluZyBvbiBzb21lIHBsYXRmb3JtcwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUyLDggKzEzNTIsOSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9kZWJ1ZzogewogICAgICAgICAg
ICAgaW50IGRlYnVnSG9va0lEID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQg
aGFzQnJlYWtwb2ludEZsYWcgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImRlYnVnIik7Ci0gICAgICAg
ICAgICBvdXQucHJpbnRmKCIlcyIsIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpKTsKKyAgICAg
ICAgICAgIG91dC5wcmludGYoIiVzICVkIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCksIGhh
c0JyZWFrcG9pbnRGbGFnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
IGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKQEAgLTE0NjgsNiArMTQ2OSw3IEBAIENvZGVC
bG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1fc2hvdWxkQWx3YXlz
QmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAg
ICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5n
ZXQoKSwgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX251bUJyZWFrcG9pbnRz
KDApCiAgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4
ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92
bShvdGhlci5tX3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMp
CkBAIC0xNTIyLDYgKzE1MjQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCh0cnVlKQogICAgICwgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9i
amVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAsIG1f
bnVtQnJlYWtwb2ludHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0
LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKICAgICAsIG1fdm0odW5s
aW5rZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVC
bG9jay0+dGhpc1JlZ2lzdGVyKCkpCkBAIC0yNTY2LDYgKzI1NjksMjcgQEAgdm9pZCBDb2RlQmxv
Y2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjbwogICAgIGxpbmUgKz0gbV9vd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpOwogfQogCitib29sIENvZGVCbG9jazo6aGFzT3BEZWJ1Z0ZvckxpbmVBbmRD
b2x1bW4odW5zaWduZWQgbGluZSwgdW5zaWduZWQgY29sdW1uKQoreworICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IHZtKCktPmludGVycHJldGVyOworICAgIGNvbnN0IEluc3RydWN0aW9u
KiBiZWdpbiA9IGluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGVuZCA9IGluc3RydWN0aW9ucygpLmVuZCgpOworICAgIGZvciAoY29uc3QgSW5zdHJ1Y3Rpb24q
IGl0ID0gYmVnaW47IGl0ICE9IGVuZDspIHsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaXQtPnUub3Bjb2RlKTsKKyAgICAgICAgaWYgKG9wY29k
ZUlEID09IG9wX2RlYnVnKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGl0IC0gYmVnaW47CisgICAgICAgICAgICBpbnQgdW51c2VkOworICAgICAgICAgICAgdW5zaWdu
ZWQgb3BEZWJ1Z0xpbmU7CisgICAgICAgICAgICB1bnNpZ25lZCBvcERlYnVnQ29sdW1uOworICAg
ICAgICAgICAgZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQs
IHVudXNlZCwgdW51c2VkLCB1bnVzZWQsIG9wRGVidWdMaW5lLCBvcERlYnVnQ29sdW1uKTsKKyAg
ICAgICAgICAgIGlmIChsaW5lID09IG9wRGVidWdMaW5lICYmIChjb2x1bW4gPT0gQnJlYWtwb2lu
dDo6dW5zcGVjaWZpZWRDb2x1bW4gfHwgY29sdW1uID09IG9wRGVidWdDb2x1bW4pKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGl0ICs9IG9wY29kZUxl
bmd0aHNbb3Bjb2RlSURdOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgQ29k
ZUJsb2NrOjpzaHJpbmtUb0ZpdChTaHJpbmtNb2RlIHNocmlua01vZGUpCiB7CiAgICAgbV9yYXJl
Q2FzZVByb2ZpbGVzLnNocmlua1RvRml0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2OSw2ICs4
NjksMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgZnJhbWVSZWdpc3RlckNvdW50KCk7CiAK
KyAgICBib29sIGhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKHVuc2lnbmVkIGxpbmUsIHVuc2ln
bmVkIGNvbHVtbik7CisKKyAgICBpbnQgbnVtQnJlYWtwb2ludHMoKSBjb25zdCB7IHJldHVybiBt
X251bUJyZWFrcG9pbnRzOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBudW1CcmVha3BvaW50c09m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fbnVtQnJlYWtwb2lu
dHMpOyB9CisKKyAgICB2b2lkIGFkZEJyZWFrcG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKSB7IG1f
bnVtQnJlYWtwb2ludHMgKz0gbnVtQnJlYWtwb2ludHM7IH0KKyAgICB2b2lkIHJlbW92ZUJyZWFr
cG9pbnQoaW50IG51bUJyZWFrcG9pbnRzKQorICAgIHsKKyAgICAgICAgbV9udW1CcmVha3BvaW50
cyAtPSBudW1CcmVha3BvaW50czsKKyAgICAgICAgQVNTRVJUKG1fbnVtQnJlYWtwb2ludHMgPj0g
MCk7CisgICAgfQorICAgIHZvaWQgY2xlYXJBbGxCcmVha3BvaW50cygpIHsgbV9udW1CcmVha3Bv
aW50cyA9IDA7IH0KKwogICAgIC8vIEZJWE1FOiBNYWtlIHRoZXNlIHJlbWFpbmluZyBtZW1iZXJz
IHByaXZhdGUuCiAKICAgICBpbnQgbV9udW1DYWxsZWVSZWdpc3RlcnM7CkBAIC0xMDA1LDYgKzEw
MTgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkQ29kZUJs
b2NrPiBtX3VubGlua2VkQ29kZTsKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOworICAgIGludCBt
X251bUJyZWFrcG9pbnRzOwogICAgIFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBtX293
bmVyRXhlY3V0YWJsZTsKICAgICBWTSogbV92bTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RlYnVnZ2VyL0JyZWFrcG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw2ICs1OSw4IEBAIHN0cnVjdCBCcmVha3BvaW50IHsKICAgICB1bnNpZ25lZCBjb2x1bW47CiAg
ICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBib29sIGF1dG9Db250aW51ZTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB1bnNwZWNpZmllZENvbHVtbiA9IFVJTlRfTUFYOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9E
ZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDEwIEBACiAK
ICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVk
ZSAiRGVidWdnZXJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJFcnJvci5oIgorCiAjaW5jbHVkZSAi
SGVhcEl0ZXJhdGlvblNjb3BlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgpAQCAtMTM5LDcgKzE0MSw4IEBAIHByaXZhdGU6CiB9Owog
CiBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQotICAgIDogbV9wYXVz
ZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKKyAgICA6IG1fdm0obnVs
bHB0cikKKyAgICAsIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZShEb250UGF1c2VPbkV4Y2VwdGlv
bnMpCiAgICAgLCBtX3BhdXNlT25OZXh0U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9pc1BhdXNl
ZChmYWxzZSkKICAgICAsIG1fYnJlYWtwb2ludHNBY3RpdmF0ZWQodHJ1ZSkKQEAgLTE1MSw3ICsx
NTQsNiBAQCBEZWJ1Z2dlcjo6RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkCiAgICAgLCBt
X2xhc3RFeGVjdXRlZExpbmUoVUlOVF9NQVgpCiAgICAgLCBtX2xhc3RFeGVjdXRlZFNvdXJjZUlE
KG5vU291cmNlSUQpCiAgICAgLCBtX3RvcEJyZWFrcG9pbnRJRChub0JyZWFrcG9pbnRJRCkKLSAg
ICAsIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzKGZhbHNlKQogICAgICwgbV9zaG91bGRQYXVzZShm
YWxzZSkKIHsKIH0KQEAgLTE2Niw2ICsxNjgsMTAgQEAgRGVidWdnZXI6On5EZWJ1Z2dlcigpCiB2
b2lkIERlYnVnZ2VyOjphdHRhY2goSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAg
ICBBU1NFUlQoIWdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKSk7CisgICAgaWYgKCFtX3ZtKQorICAg
ICAgICBtX3ZtID0gJmdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VChtX3ZtID09ICZnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVi
dWdnZXIodGhpcyk7CiAgICAgbV9nbG9iYWxPYmplY3RzLmFkZChnbG9iYWxPYmplY3QpOwogfQpA
QCAtMTg0LDEyICsxOTAsMTMyIEBAIHZvaWQgRGVidWdnZXI6OmRldGFjaChKU0dsb2JhbE9iamVj
dCogZ2wKICAgICBBU1NFUlQobV9nbG9iYWxPYmplY3RzLmNvbnRhaW5zKGdsb2JhbE9iamVjdCkp
OwogICAgIG1fZ2xvYmFsT2JqZWN0cy5yZW1vdmUoZ2xvYmFsT2JqZWN0KTsKICAgICBnbG9iYWxP
YmplY3QtPnNldERlYnVnZ2VyKDApOworICAgIGlmICghbV9nbG9iYWxPYmplY3RzLnNpemUoKSkK
KyAgICAgICAgbV92bSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgRGVidWdnZXI6OnNldFNob3VsZFBh
dXNlKGJvb2wgdmFsdWUpCiB7CiAgICAgbV9zaG91bGRQYXVzZSA9IHZhbHVlOwotICAgIHVwZGF0
ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OnJlZ2lzdGVy
Q29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGl0ZXJhdGVCcmVha3BvaW50
c0FuZEFwcGx5VG9Db2RlQmxvY2soY29kZUJsb2NrKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6dW5y
ZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBjb2RlQmxvY2st
PmNsZWFyQWxsQnJlYWtwb2ludHMoKTsKK30KKworYm9vbCBEZWJ1Z2dlcjo6YXBwbHlCcmVha3Bv
aW50SW5Db2RlQmxvY2tJZk5lZWRlZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnJlYWtwb2ludCYg
YnJlYWtwb2ludCwgYm9vbCBlbmFibGVCcmVha3BvaW50KQoreworICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmsKKyAg
ICAgICAgfHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKTsKKworICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gc3RhdGljX2Nh
c3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAgIGlmIChicmVha3BvaW50
LnNvdXJjZUlEICE9IHNvdXJjZUlEKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNp
Z25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9IGJyZWFr
cG9pbnQuY29sdW1uOworCisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJsZS0+bGlu
ZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFydENvbHVt
bigpOworICAgIHVuc2lnbmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgpOworICAg
IHVuc2lnbmVkIGVuZENvbHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisgICAgLy8g
SW5zcGVjdG9yIGJyZWFrcG9pbnQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhcmUgemVyby1iYXNl
ZCBidXQgdGhlIGV4ZWN1dGFibGUKKyAgICAvLyBhbmQgQ29kZUJsb2NrIGxpbmUgYW5kIGNvbHVt
biB2YWx1ZXMgYXJlIG9uZS1iYXNlZC4KKyAgICBsaW5lICs9IDE7CisgICAgY29sdW1uID0gY29s
dW1uID8gY29sdW1uICsgMSA6IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uOworCisgICAg
aWYgKGxpbmUgPCBzdGFydExpbmUgfHwgbGluZSA+IGVuZExpbmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoY29sdW1uICE9IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uKSB7
CisgICAgICAgIGlmIChsaW5lID09IHN0YXJ0TGluZSAmJiBjb2x1bW4gPCBzdGFydENvbHVtbikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGxpbmUgPT0gZW5kTGluZSAm
JiBjb2x1bW4gPiBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICghY29kZUJsb2NrLT5oYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbihsaW5lLCBjb2x1
bW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZW5hYmxlQnJlYWtwb2ludCkK
KyAgICAgICAgY29kZUJsb2NrLT5hZGRCcmVha3BvaW50KDEpOworICAgIGVsc2UKKyAgICAgICAg
Y29kZUJsb2NrLT5yZW1vdmVCcmVha3BvaW50KDEpOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIERlYnVnZ2VyOjppdGVyYXRlQnJlYWtwb2ludHNBbmRBcHBseVRvQ29kZUJsb2NrKENvZGVC
bG9jayogY29kZUJsb2NrKQoreworICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCYgYnJl
YWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludDsKKyAgICBmb3IgKGF1dG8gaXQg
PSBicmVha3BvaW50cy5iZWdpbigpOyBpdCAhPSBicmVha3BvaW50cy5lbmQoKTsgKytpdCkgewor
ICAgICAgICBCcmVha3BvaW50JiBicmVha3BvaW50ID0gKml0LT52YWx1ZTsKKyAgICAgICAgYXBw
bHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChjb2RlQmxvY2ssIGJyZWFrcG9pbnQsIHRy
dWUpOworICAgIH0KK30KKworY2xhc3MgQXBwbHlCcmVha3BvaW50RnVuY3RvciB7CitwdWJsaWM6
CisgICAgQXBwbHlCcmVha3BvaW50RnVuY3RvcihEZWJ1Z2dlciogZGVidWdnZXIsIEJyZWFrcG9p
bnQmIGJyZWFrcG9pbnQsIGJvb2wgZW5hYmxlT3JOb3QpCisgICAgICAgIDogbV9kZWJ1Z2dlcihk
ZWJ1Z2dlcikKKyAgICAgICAgLCBtX2JyZWFrcG9pbnQoYnJlYWtwb2ludCkKKyAgICAgICAgLCBt
X2VuYWJsZU9yTm90KGVuYWJsZU9yTm90KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAobV9kZWJ1Z2dl
ciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKQorICAgICAgICAgICAg
bV9kZWJ1Z2dlci0+YXBwbHlCcmVha3BvaW50SW5Db2RlQmxvY2tJZk5lZWRlZChjb2RlQmxvY2ss
IG1fYnJlYWtwb2ludCwgbV9lbmFibGVPck5vdCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIqIG1fZGVidWdnZXI7CisgICAgQnJlYWtwb2lu
dCYgbV9icmVha3BvaW50OworICAgIGJvb2wgbV9lbmFibGVPck5vdDsKK307CisKK3ZvaWQgRGVi
dWdnZXI6Oml0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KEJyZWFrcG9pbnQmIGJy
ZWFrcG9pbnQsIGJvb2wgZW5hYmxlT3JOb3QpCit7CisgICAgaWYgKCFtX3ZtKQorICAgICAgICBy
ZXR1cm47CisgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1fdm0tPmhlYXAp
OworICAgIEFwcGx5QnJlYWtwb2ludEZ1bmN0b3IgZnVuY3Rvcih0aGlzLCBicmVha3BvaW50LCBl
bmFibGVPck5vdCk7CisgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwor
fQorCitjbGFzcyBDbGVhckFsbEJyZWFrcG9pbnRzRnVuY3RvciB7CitwdWJsaWM6CisgICAgQ2xl
YXJBbGxCcmVha3BvaW50c0Z1bmN0b3IoRGVidWdnZXIqIGRlYnVnZ2VyKQorICAgICAgICA6IG1f
ZGVidWdnZXIoZGVidWdnZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShD
b2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPm51bUJy
ZWFrcG9pbnRzKCkgJiYgbV9kZWJ1Z2dlciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5k
ZWJ1Z2dlcigpKQorICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhckFsbEJyZWFrcG9pbnRzKCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIq
IG1fZGVidWdnZXI7Cit9OworCit2b2lkIERlYnVnZ2VyOjppdGVyYXRlQ29kZUJsb2Nrc0FuZENs
ZWFyQWxsQnJlYWtwb2ludHMoKQoreworICAgIGlmICghbV92bSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29wZShtX3ZtLT5oZWFwKTsKKyAgICBD
bGVhckFsbEJyZWFrcG9pbnRzRnVuY3RvciBmdW5jdG9yKHRoaXMpOworICAgIG1fdm0tPmhlYXAu
Zm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6cmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoVk0qIHZtKQpAQCAtMjA3LDEyICszMzMsNiBAQCB2b2lkIERlYnVnZ2Vy
OjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWCiAgICAgdm0tPmhlYXAub2JqZWN0U3BhY2UoKS5m
b3JFYWNoTGl2ZUNlbGwoaXRlcmF0aW9uU2NvcGUsIHJlY29tcGlsZXIpOwogfQogCi12b2lkIERl
YnVnZ2VyOjp1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpCi17Ci0gICAgc2l6ZV90IG51
bWJlck9mQnJlYWtwb2ludHMgPSBtX2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zaXplKCk7Ci0g
ICAgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgPSBtX3Nob3VsZFBhdXNlIHx8IG51bWJlck9mQnJl
YWtwb2ludHM7Ci19Ci0KIEJyZWFrcG9pbnRJRCBEZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludChCcmVh
a3BvaW50IGJyZWFrcG9pbnQsIHVuc2lnbmVkJiBhY3R1YWxMaW5lLCB1bnNpZ25lZCYgYWN0dWFs
Q29sdW1uKQogewogICAgIFNvdXJjZUlEIHNvdXJjZUlEID0gYnJlYWtwb2ludC5zb3VyY2VJRDsK
QEAgLTI0Nyw3ICszNjcsNyBAQCBCcmVha3BvaW50SUQgRGVidWdnZXI6OnNldEJyZWFrcG9pbnQo
QnJlCiAgICAgYnJlYWtwb2ludHMuYXBwZW5kKGJyZWFrcG9pbnQpOwogICAgIG1fYnJlYWtwb2lu
dElEVG9CcmVha3BvaW50LnNldChpZCwgJmJyZWFrcG9pbnRzLmxhc3QoKSk7CiAKLSAgICB1cGRh
dGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpOworICAgIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBw
bHlCcmVha3BvaW50KGJyZWFrcG9pbnQsIHRydWUpOwogCiAgICAgcmV0dXJuIGlkOwogfQpAQCAt
MjY3LDYgKzM4Nyw4IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQoQnJlYWtwb2kK
ICAgICBMaW5lVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgYnJlYWtzSXQgPSBpdC0+dmFsdWUu
ZmluZChicmVha3BvaW50LmxpbmUpOwogICAgIEFTU0VSVChicmVha3NJdCAhPSBpdC0+dmFsdWUu
ZW5kKCkpOwogCisgICAgaXRlcmF0ZUNvZGVCbG9ja3NBbmRBcHBseUJyZWFrcG9pbnQoYnJlYWtw
b2ludCwgZmFsc2UpOworCiAgICAgQnJlYWtwb2ludHNJbkxpbmUmIGJyZWFrcG9pbnRzID0gYnJl
YWtzSXQtPnZhbHVlOwogICAgIHVuc2lnbmVkIGJyZWFrcG9pbnRzQ291bnQgPSBicmVha3BvaW50
cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9pbnRzQ291bnQ7
IGkrKykgewpAQCAtMjgyLDggKzQwNCw2IEBAIHZvaWQgRGVidWdnZXI6OnJlbW92ZUJyZWFrcG9p
bnQoQnJlYWtwb2kKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAg
dXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKIH0KIAogYm9vbCBEZWJ1Z2dlcjo6aGFz
QnJlYWtwb2ludChTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgVGV4dFBvc2l0aW9uJiBwb3NpdGlv
biwgQnJlYWtwb2ludCAqaGl0QnJlYWtwb2ludCkKQEAgLTMxMCw2ICs0MzAsNyBAQCBib29sIERl
YnVnZ2VyOjpoYXNCcmVha3BvaW50KFNvdXJjZUlEIHNvCiAgICAgICAgIHVuc2lnbmVkIGJyZWFr
TGluZSA9IGJyZWFrcG9pbnRzW2ldLmxpbmU7CiAgICAgICAgIHVuc2lnbmVkIGJyZWFrQ29sdW1u
ID0gYnJlYWtwb2ludHNbaV0uY29sdW1uOwogICAgICAgICAvLyBTaW5jZSBmcm9udGVuZCB0cnVu
Y2F0ZXMgdGhlIGluZGVudCwgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiBhIGxpbmUgbXVzdCBtYXRj
aCB0aGUgYnJlYWtwb2ludCAobGluZSwwKS4KKyAgICAgICAgQVNTRVJUKHRoaXMgPT0gbV9jdXJy
ZW50Q2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpOwog
ICAgICAgICBpZiAoKGxpbmUgIT0gbV9sYXN0RXhlY3V0ZWRMaW5lICYmIGxpbmUgPT0gYnJlYWtM
aW5lICYmICFicmVha0NvbHVtbikKICAgICAgICAgICAgIHx8IChsaW5lID09IGJyZWFrTGluZSAm
JiBjb2x1bW4gPT0gYnJlYWtDb2x1bW4pKSB7CiAgICAgICAgICAgICBoaXQgPSB0cnVlOwpAQCAt
MzUxLDcgKzQ3Miw3IEBAIHZvaWQgRGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMoKQogICAgIG1f
YnJlYWtwb2ludElEVG9CcmVha3BvaW50LmNsZWFyKCk7CiAgICAgbV9zb3VyY2VJRFRvQnJlYWtw
b2ludHMuY2xlYXIoKTsKIAotICAgIHVwZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7Cisg
ICAgaXRlcmF0ZUNvZGVCbG9ja3NBbmRDbGVhckFsbEJyZWFrcG9pbnRzKCk7CiB9CiAKIHZvaWQg
RGVidWdnZXI6OnNldEJyZWFrcG9pbnRzQWN0aXZhdGVkKGJvb2wgYWN0aXZhdGVkKQpAQCAtMzcz
LDExICs0OTQsMTMgQEAgdm9pZCBEZWJ1Z2dlcjo6c2V0UGF1c2VPbk5leHRTdGF0ZW1lbnQoYgog
CiB2b2lkIERlYnVnZ2VyOjpicmVha1Byb2dyYW0oKQogewotICAgIGlmIChtX2lzUGF1c2VkIHx8
ICFtX2N1cnJlbnRDYWxsRnJhbWUpCisgICAgaWYgKG1faXNQYXVzZWQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fcGF1c2VPbk5leHRTdGF0ZW1lbnQgPSB0cnVlOwogICAgIHNldFNob3VsZFBh
dXNlKHRydWUpOworICAgIG1fY3VycmVudENhbGxGcmFtZSA9IG1fdm0tPnRvcENhbGxGcmFtZTsK
KyAgICBBU1NFUlQobV9jdXJyZW50Q2FsbEZyYW1lKTsKICAgICBwYXVzZUlmTmVlZGVkKG1fY3Vy
cmVudENhbGxGcmFtZSk7CiB9CiAKQEAgLTQzMiw3ICs1NTUsNyBAQCB2b2lkIERlYnVnZ2VyOjp1
cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmCiB7CiAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFt
ZSk7CiAgICAgcGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGlmICghbmVlZHNPcERlYnVn
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFzaG91bGRQYXVzZSgpKQogICAgICAgICBtX2N1cnJlbnRD
YWxsRnJhbWUgPSAwOwogfQogCkBAIC00NzcsOCArNjAwLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6cGF1
c2VJZk5lZWRlZChDYWxsRnJhbWUqIAogCiAgICAgaWYgKCFtX3BhdXNlT25OZXh0U3RhdGVtZW50
ICYmICFtX3BhdXNlT25DYWxsRnJhbWUpIHsKICAgICAgICAgc2V0U2hvdWxkUGF1c2UoZmFsc2Up
OwotICAgICAgICBpZiAoIW5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQotICAgICAgICAgICAgbV9j
dXJyZW50Q2FsbEZyYW1lID0gMDsKKyAgICAgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbnVsbHB0
cjsKICAgICB9CiB9CiAKQEAgLTU0OCw3ICs2NzAsNyBAQCB2b2lkIERlYnVnZ2VyOjp3aWxsRXhl
Y3V0ZVByb2dyYW0oQ2FsbEZyCiAgICAgLy8gdGhlIGRlYnVnZ2VyIGltcGxlbWVudGF0aW9uIHRv
IG5vdCByZXF1aXJlIGNhbGxiYWNrcy4KICAgICBpZiAoIW1faXNJbldvcmtlclRocmVhZCkKICAg
ICAgICAgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChjYWxsRnJhbWUpOwotICAgIGVs
c2UgaWYgKG5lZWRzT3BEZWJ1Z0NhbGxiYWNrcygpKQorICAgIGVsc2UgaWYgKHNob3VsZFBhdXNl
KCkpCiAgICAgICAgIHVwZGF0ZUNhbGxGcmFtZShjYWxsRnJhbWUpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTYyMzkwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDggKzQ4LDggQEAgcHVibGljOgogICAgIERlYnVnZ2VyKGJvb2wgaXNJbldvcmtl
clRocmVhZCA9IGZhbHNlKTsKICAgICB2aXJ0dWFsIH5EZWJ1Z2dlcigpOwogCi0gICAgYm9vbCBu
ZWVkc09wRGVidWdDYWxsYmFja3MoKSBjb25zdCB7IHJldHVybiBtX25lZWRzT3BEZWJ1Z0NhbGxi
YWNrczsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3QgbmVlZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX25lZWRzT3BEZWJ1Z0NhbGxi
YWNrcyk7IH0KKyAgICBib29sIHNob3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQ
YXVzZTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgc2hvdWxkUGF1c2VPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRGVidWdnZXIsIG1fc2hvdWxkUGF1c2UpOyB9CiAKICAgICBKU0M6
OkRlYnVnZ2VyQ2FsbEZyYW1lKiBjdXJyZW50RGVidWdnZXJDYWxsRnJhbWUoKSBjb25zdDsKICAg
ICBib29sIGhhc0hhbmRsZXJGb3JFeGNlcHRpb25DYWxsYmFjaygpIGNvbnN0CkBAIC0xMDQsNiAr
MTA0LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCByZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSop
OwogCisgICAgdm9pZCByZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqKTsKKyAgICB2b2lkIHVu
cmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKik7CisKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IGJvb2wgbmVlZFBhdXNlSGFuZGxpbmcoSlNHbG9iYWxPYmplY3QqKSB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVCcmVha3BvaW50SGl0KGNvbnN0IEJyZWFrcG9pbnQm
KSB7IH0KQEAgLTEyOCw3ICsxMzEsNyBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiBWZWN0b3I8
QnJlYWtwb2ludD4gQnJlYWtwb2ludHNJbkxpbmU7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2ln
bmVkLCBCcmVha3BvaW50c0luTGluZSwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gTGluZVRvQnJlYWtwb2ludHNNYXA7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5lVG9CcmVha3BvaW50c01hcD4gU291cmNlSURUb0Jy
ZWFrcG9pbnRzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTb3VyY2VJRCwgTGluZVRvQnJlYWtw
b2ludHNNYXAsIFdURjo6SW50SGFzaDxTb3VyY2VJRD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8U291cmNlSUQ+PiBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXA7CiAKICAgICBj
bGFzcyBQYXVzZVJlYXNvbkRlY2xhcmF0aW9uIHsKICAgICBwdWJsaWM6CkBAIC0xNDgsNyArMTUx
LDYgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaGFzQnJlYWtwb2ludChTb3VyY2VJRCwgY29uc3Qg
VGV4dFBvc2l0aW9uJiwgQnJlYWtwb2ludCogaGl0QnJlYWtwb2ludCk7CiAKLSAgICBib29sIHNo
b3VsZFBhdXNlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRQYXVzZTsgfQogICAgIHZvaWQgc2V0
U2hvdWxkUGF1c2UoYm9vbCk7CiAgICAgdm9pZCB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNr
cygpOwogCkBAIC0xNjEsNiArMTYzLDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVDYWxs
RnJhbWVBbmRQYXVzZUlmTmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAgICAgdm9pZCBwYXVzZUlm
TmVlZGVkKEpTQzo6Q2FsbEZyYW1lKik7CiAKKyAgICBib29sIGFwcGx5QnJlYWtwb2ludEluQ29k
ZUJsb2NrSWZOZWVkZWQoQ29kZUJsb2NrKiwgQnJlYWtwb2ludCYsIGJvb2wgZW5hYmxlT3JOb3Qp
OworICAgIHZvaWQgaXRlcmF0ZUJyZWFrcG9pbnRzQW5kQXBwbHlUb0NvZGVCbG9jayhDb2RlQmxv
Y2sqKTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzQW5kQXBwbHlCcmVha3BvaW50KEJyZWFr
cG9pbnQmLCBib29sIGVuYWJsZU9yTm90KTsKKyAgICB2b2lkIGl0ZXJhdGVDb2RlQmxvY2tzQW5k
Q2xlYXJBbGxCcmVha3BvaW50cygpOworCisgICAgVk0qIG1fdm07CiAgICAgSGFzaFNldDxKU0ds
b2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIAogICAgIFBhdXNlT25FeGNlcHRpb25zU3Rh
dGUgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlOwpAQCAtMTgxLDExICsxODksMTIgQEAgcHJpdmF0
ZToKICAgICBCcmVha3BvaW50SURUb0JyZWFrcG9pbnRNYXAgbV9icmVha3BvaW50SURUb0JyZWFr
cG9pbnQ7CiAgICAgU291cmNlSURUb0JyZWFrcG9pbnRzTWFwIG1fc291cmNlSURUb0JyZWFrcG9p
bnRzOwogCi0gICAgYm9vbCBtX25lZWRzT3BEZWJ1Z0NhbGxiYWNrczsKICAgICBib29sIG1fc2hv
dWxkUGF1c2U7CiAKICAgICBSZWZQdHI8SlNDOjpEZWJ1Z2dlckNhbGxGcmFtZT4gbV9jdXJyZW50
RGVidWdnZXJDYWxsRnJhbWU7CiAKKyAgICBmcmllbmQgY2xhc3MgQXBwbHlCcmVha3BvaW50RnVu
Y3RvcjsKKyAgICBmcmllbmQgY2xhc3MgQ2xlYXJBbGxCcmVha3BvaW50c0Z1bmN0b3I7CiAgICAg
ZnJpZW5kIGNsYXNzIERlYnVnZ2VyQ2FsbEZyYW1lU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRl
bXBvcmFyeVBhdXNlZFN0YXRlOwogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CkBAIC0xOTUsOCArMjA0LDExIEBAIHByaXZhdGU6CiAKIGNsYXNzIERlYnVnZ2VyIHsKIHB1
YmxpYzoKLSAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpIDogbV9uZWVkc09wRGVidWdDYWxsYmFj
a3MoZmFsc2UpIHsgfQotICAgIGJvb2wgbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBEZWJ1Z2dlcihib29sID0gZmFsc2UpCisgICAgICAgIDogbV9z
aG91bGRQYXVzZShmYWxzZSkKKyAgICB7CisgICAgfQorICAgIGJvb2wgc2hvdWxkUGF1c2UoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgbmVlZHNFeGNlcHRpb25DYWxsYmFja3Mo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZvaWQgZGV0YWNoKEpTR2xvYmFsT2JqZWN0
KikgeyB9CiAgICAgdm9pZCBzb3VyY2VQYXJzZWQoRXhlY1N0YXRlKiwgU291cmNlUHJvdmlkZXIq
LCBpbnQsIGNvbnN0IFdURjo6U3RyaW5nJikgeyB9CkBAIC0yMDgsNyArMjIwLDggQEAgcHVibGlj
OgogICAgIHZvaWQgZGlkRXhlY3V0ZVByb2dyYW0oQ2FsbEZyYW1lKikgeyB9CiAgICAgdm9pZCBk
aWRSZWFjaEJyZWFrcG9pbnQoQ2FsbEZyYW1lKikgeyB9CiAKLSAgICBib29sIG1fbmVlZHNPcERl
YnVnQ2FsbGJhY2tzOworcHJpdmF0ZToKKyAgICBib29sIG1fc2hvdWxkUGF1c2U7CiB9OwogCiAj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcx
LDYgKzcxLDIxIEBAIHB1YmxpYzoKICAgICAvLyByZS1zY2FubmVkIGR1cmluZyB0aGUgbmV4dCBj
b2xsZWN0aW9uLgogICAgIHZvaWQgcmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tz
KEhlYXAqKTsKIAorICAgIC8vIFZpc2l0cyBlYWNoIENvZGVCbG9jayBpbiB0aGUgaGVhcCB1bnRp
bCB0aGUgdmlzaXRvciBmdW5jdGlvbiByZXR1cm5zIHRydWUKKyAgICAvLyB0byBpbmRpY2F0ZSB0
aGF0IGl0IGlzIGRvbmUgaXRlcmF0aW5nLCBvciB1bnRpbCBldmVyeSBDb2RlQmxvY2sgaGFzIGJl
ZW4KKyAgICAvLyB2aXNpdGVkLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQg
aXRlcmF0ZShGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxDb2RlQmxv
Y2sqPjo6aXRlcmF0b3IgaXRlciA9IG1fc2V0LmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Q29k
ZUJsb2NrKj46Oml0ZXJhdG9yIGVuZCA9IG1fc2V0LmVuZCgpOworICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAq
aXRlcjsKKyAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZ1bmN0b3IoY29kZUJsb2NrKTsKKyAgICAg
ICAgICAgIGlmIChkb25lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCiBwcml2YXRlOgogICAgIC8vIFRoaXMgaXMgbm90IGEgc2V0IG9mIFJlZlB0cjxDb2RlQmxv
Y2s+IGJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIGZpbmQKICAgICAvLyBhcmJpdHJhcnkg
Ym9ndXMgcG9pbnRlcnMuIEkgY291bGQgaGF2ZSB3cml0dGVuIGEgdGhpbmd5IHRoYXQgaGFkIHBl
ZWsgdHlwZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2MjM5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMTc0LDYgKzE3NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdHlwZW5hbWUgRnVuY3Rvcjo6UmV0dXJuVHlwZSBmb3JF
YWNoUHJvdGVjdGVkQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+IHR5cGVuYW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwo
KTsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgZm9yRWFj
aENvZGVCbG9jayhGdW5jdG9yJik7CiAKICAgICAgICAgSGFuZGxlU2V0KiBoYW5kbGVTZXQoKSB7
IHJldHVybiAmbV9oYW5kbGVTZXQ7IH0KICAgICAgICAgSGFuZGxlU3RhY2sqIGhhbmRsZVN0YWNr
KCkgeyByZXR1cm4gJm1faGFuZGxlU3RhY2s7IH0KQEAgLTQzMiw2ICs0MzMsMTEgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBmb3JFYWNoUHJvdGVjdGVkQ2VsbChmdW5jdG9yKTsK
ICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2tzLml0ZXJhdGU8RnVuY3Rvcj4oZnVuY3Rvcik7CisgICAgfQorCiAgICAg
aW5saW5lIHZvaWQqIEhlYXA6OmFsbG9jYXRlV2l0aE5vcm1hbERlc3RydWN0b3Ioc2l6ZV90IGJ5
dGVzKQogICAgIHsKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZp
c2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA1LDggKzEyMDUsOSBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiBORVZFUl9JTkxJTkUgdm9pZCBJbnRlcnBy
ZXRlcjo6ZGVidWcoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIERlYnVnSG9va0lEIGRlYnVnSG9va0lE
KQogewogICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGNhbGxGcmFtZS0+dm1FbnRyeUdsb2JhbE9i
amVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmICghZGVidWdnZXIgfHwgIWRlYnVnZ2VyLT5uZWVk
c09wRGVidWdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWRlYnVnZ2VyKQogICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKGRlYnVnZ2VyLT5zaG91bGRQYXVzZSgpIHx8IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm51bUJyZWFrcG9pbnRzKCkgfHwgY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSk7CiAK
ICAgICBzd2l0Y2ggKGRlYnVnSG9va0lEKSB7CiAgICAgICAgIGNhc2UgRGlkRW50ZXJDYWxsRnJh
bWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNjIzOTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5NywxNCArOTk3LDIyIEBAIHZvaWQg
SklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50KCk7CiAj
ZWxpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVnZ2VyKiBk
ZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1Z2dlckFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxP
YmplY3Q6OmRlYnVnZ2VyT2Zmc2V0KCk7CiAgICAgbG9hZFB0cihkZWJ1Z2dlckFkZHJlc3MsIHJl
Z1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsK
LSAgICBjaGFyKiBmbGFnQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRlYnVnZ2Vy
KSArIERlYnVnZ2VyOjpuZWVkc09wRGVidWdDYWxsYmFja3NPZmZzZXQoKTsKLSAgICBKdW1wIHNr
aXBEZWJ1Z0hvb2sgPSBicmFuY2hUZXN0OChaZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZmxhZ0FkZHJl
c3MpKTsKKworICAgIERlYnVnZ2VyKiBkZWJ1Z2dlciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIo
KTsKKyAgICBjaGFyKiBzaG91bGRQYXVzZUFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6c2hvdWxkUGF1c2VPZmZzZXQoKTsKKyAgICBKdW1wIGNh
bGxiYWNrTmVlZGVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKHNob3Vs
ZFBhdXNlQWRkcmVzcykpOworCisgICAgY2hhciogbnVtQnJlYWtwb2ludHNBZGRyZXNzID0gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZUJsb2NrKCkpICsgQ29kZUJsb2NrOjpudW1CcmVha3Bv
aW50c09mZnNldCgpOworICAgIGxvYWQzMihudW1CcmVha3BvaW50c0FkZHJlc3MsIHJlZ1QwKTsK
KyAgICBKdW1wIG5vQnJlYWtwb2ludFNldCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CisK
KyAgICBjYWxsYmFja05lZWRlZC5saW5rKHRoaXMpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgIHNraXBEZWJ1
Z0hvb2subGluayh0aGlzKTsKKworICAgIG5vQnJlYWtwb2ludFNldC5saW5rKHRoaXMpOwogICAg
IG5vRGVidWdnZXIubGluayh0aGlzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJ
bnN0cnVjdGlvbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxNSwxMyArNzE1LDIxIEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXIKICAgICBicmVha3BvaW50KCk7CiAjZWxpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpOwotICAgIERlYnVnZ2VyKiBkZWJ1Z2dl
ciA9IGdsb2JhbE9iamVjdC0+ZGVidWdnZXIoKTsKICAgICBjaGFyKiBkZWJ1Z2dlckFkZHJlc3Mg
PSByZWludGVycHJldF9jYXN0PGNoYXIqPihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6
OmRlYnVnZ2VyT2Zmc2V0KCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBBYnNvbHV0ZUFkZHJlc3MoZGVidWdnZXJBZGRyZXNzKSk7Ci0gICAgY2hhciogZmxhZ0Fk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6bmVl
ZHNPcERlYnVnQ2FsbGJhY2tzT2Zmc2V0KCk7Ci0gICAgSnVtcCBza2lwRGVidWdIb29rID0gYnJh
bmNoVGVzdDgoWmVybywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRyZXNzKSk7CisKKyAgICBEZWJ1
Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hhciogc2hv
dWxkUGF1c2VBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsgRGVi
dWdnZXI6OnNob3VsZFBhdXNlT2Zmc2V0KCk7CisgICAgSnVtcCBjYWxsYmFja05lZWRlZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJlc3MpKTsK
KworICAgIGNoYXIqIG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KGNvZGVCbG9jaygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQoKTsKKyAg
ICBsb2FkMzIobnVtQnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7CisgICAgSnVtcCBub0JyZWFr
cG9pbnRTZXQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworCisgICAgY2FsbGJhY2tOZWVk
ZWQubGluayh0aGlzKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7
CisKKyAgICBub0JyZWFrcG9pbnRTZXQubGluayh0aGlzKTsKICAgICBub0RlYnVnZ2VyLmxpbmso
dGhpcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbQkocmV2aXNpb24gMTYyMzkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MzUsMTMgKzgzNSwx
OCBAQCBfbGxpbnRfb3BfcHJvZmlsZV9kaWRfY2FsbDoKIAogX2xsaW50X29wX2RlYnVnOgogICAg
IHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKLSAgICBsb2Fk
cCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKKyAgICBsb2FkcCBDb2RlQmxvY2tb
Y2ZyXSwgdDEKKyAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QxXSwgdDAKICAg
ICBsb2FkcCBKU0dsb2JhbE9iamVjdDo6bV9kZWJ1Z2dlclt0MF0sIHQwCiAgICAgYnRpeiB0MCwg
Lm9wRGVidWdEb25lCi0gICAgbG9hZGIgRGVidWdnZXI6Om1fbmVlZHNPcERlYnVnQ2FsbGJhY2tz
W3QwXSwgdDAKLSAgICBidGJ6IHQwLCAub3BEZWJ1Z0RvbmUKIAorICAgIGxvYWRiIERlYnVnZ2Vy
OjptX3Nob3VsZFBhdXNlW3QwXSwgdDAKKyAgICBidGJueiB0MCwgLm9wRGVidWdEb0NhbGxiYWNr
CisKKyAgICBsb2FkaSBDb2RlQmxvY2s6Om1fbnVtQnJlYWtwb2ludHNbdDFdLCB0MAorICAgIGJ0
aXogdDAsIC5vcERlYnVnRG9uZQorCisub3BEZWJ1Z0RvQ2FsbGJhY2s6CiAgICAgY2FsbFNsb3dQ
YXRoKF9sbGludF9zbG93X3BhdGhfZGVidWcpCiAub3BEZWJ1Z0RvbmU6ICAgICAgICAgICAgICAg
ICAgICAKICAgICBkaXNwYXRjaCgzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE2MjM5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsOCAr
MTcwLDE0IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUIKICAgICAg
ICAgYnJlYWs7CiAgICAgfSB9CiAKLSAgICBpZiAob2xkQ29kZUJsb2NrKQorICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigp
OworICAgIGlmIChvbGRDb2RlQmxvY2spIHsKKyAgICAgICAgaWYgKGRlYnVnZ2VyKQorICAgICAg
ICAgICAgZGVidWdnZXItPnVucmVnaXN0ZXJDb2RlQmxvY2sob2xkQ29kZUJsb2NrLmdldCgpKTsK
ICAgICAgICAgb2xkQ29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7CisgICAgfQorICAg
IGlmIChkZWJ1Z2dlcikKKyAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVy
aWNDb2RlQmxvY2spOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3Q29kZUJsb2NrRm9yKAo=
</data>
<flag name="review"
          id="245822"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221950</attachid>
            <date>2014-01-22 23:33:55 -0800</date>
            <delta_ts>2014-01-22 23:33:55 -0800</delta_ts>
            <desc>updated patch for landing.</desc>
            <filename>bug-122836b.patch</filename>
            <type>text/plain</type>
            <size>32852</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OCBA
QAorMjAxNC0wMS0yMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UG9vciBtYW4ncyBmYXN0IGJyZWFrcG9pbnRzIGZvciBhIDIuM3ggZGVidWdnZXIgc3BlZWR1cC4K
KyAgICAgICAgPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyMjgzNj4KKworICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAgICBQcmV2aW91c2x5IHdlIGdhaW5lZCBiYWNr
IHNvbWUgcGVyZm9ybWFuY2UgKHJ1biBhdCBiYXNlbGluZSBKSVQgc3BlZWRzKQorICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3IgaXMgb3BlbmVkIHByb3ZpZGVkIG5vIGJyZWFrcG9pbnRzIGFy
ZSBzZXQuIFRoaXMKKyAgICAgICAgd2FzIGFjaGlldmVkIGJ5IHNpbXBseSBza2lwcGluZyBhbGwg
b3BfZGVidWcgY2FsbGJhY2tzIHRvIHRoZSBkZWJ1Z2dlcgorICAgICAgICBpZiBubyBicmVha3Bv
aW50cyBhcmUgc2V0LiBJZiBhbnkgYnJlYWtwb2ludHMgYXJlIHNldCwgdGhlIGRlYnVnZ2VyIHdp
bGwKKyAgICAgICAgc2V0IGEgbV9uZWVkc09wRGVidWdDYWxsYmFja3MgZmxhZyB3aGljaCBjYXVz
ZXMgdGhlIGNhbGxiYWNrcyB0byBiZQorICAgICAgICBjYWxsZWQsIGFuZCB3ZSBkb24ndCBnZXQg
dGhlIGJhc2VsaW5lIEpJVCBzcGVlZHMgYW55bW9yZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0
Y2gsIHdlIHdpbGwgbm93IHRyYWNrIHRoZSBudW1iZXIgb2YgYnJlYWtwb2ludHMgc2V0IGluIHRo
ZQorICAgICAgICBDb2RlQmxvY2sgdGhhdCB0aGV5IGFyZSBzZXQgaW4uIFRoZSBMTElOVCBhbmQg
YmFzZWxpbmUgSklUIGNvZGUgd2lsbAorICAgICAgICBjaGVjayBDb2RlQmxvY2s6Om1fbnVtQnJl
YWtwb2ludHMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBvcF9kZWJ1ZyBjYWxsYmFja3MKKyAgICAgICAg
bmVlZCB0byBiZSBjYWxsZWQuIFdpdGggdGhpcywgd2Ugd2lsbCBvbmx5IGVuYWJsZSBvcF9kZWJ1
ZyBjYWxsYmFja3MgZm9yCisgICAgICAgIENvZGVCbG9ja3MgdGhhdCBuZWVkIGl0IGkuZS4gdGhv
c2Ugd2l0aCBicmVha3BvaW50cyBzZXQgaW4gdGhlbS4KKworICAgICAgICBEZWJ1Z2dlcjo6bV9u
ZWVkc09wRGVidWdDYWxsYmFja3MgaXMgbm93IG9ic29sZXRlZC4gVGhlIExMSU5UIGFuZCBiYXNl
bGluZQorICAgICAgICBKSVQgY29kZSBzdGlsbCBuZWVkcyB0byBjaGVjayBEZWJ1Z2dlcjo6bV9z
aG91bGRQYXVzZSB0byBkZXRlcm1pbmUgaWYgdGhlCisgICAgICAgIGRlYnVnZ2VyIGlzIGluIHN0
ZXBwaW5nIG1vZGUgYW5kIGhlbmNlLCBuZWVkcyBvcF9kZWJ1ZyBjYWxsYmFja3MgZW5hYmxlZAor
ICAgICAgICBmb3IgZXZlcnl0aGluZyB1bnRpbCB0aGUgZGVidWdnZXIgImNvbnRpbnVlcyIgdGhl
IHJ1biBhbmQgZXhpdCBzdGVwcGluZworICAgICAgICBtb2RlLgorCisgICAgICAgIEFsc28gaW4g
dGhpcyBwYXRjaCwgSSBmaXhlZCBhIHJlZ3Jlc3Npb24gaW4gRE9NIGJyZWFrcG9pbnRzIHdoaWNo
IHJlbGllcworICAgICAgICBEZWJ1Z2dlcjo6YnJlYWtQcm9ncmFtKCkgdG8gcGF1c2UgdGhlIGRl
YnVnZ2VyLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAtIE1pc3NlZCBhY2NvdW50aW5n
IGZvciBvcF9kZWJ1ZydzIG5ldyBoYXNCcmVha3BvaW50RmxhZyBvcGVyYW5kIGhlcmUgd2hlbgor
ICAgICAgICAgIGl0IHdhcyBhZGRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1u
KToKKyAgICAgICAgLSBUaGlzIGlzIG5lZWRlZCBpbiBEZWJ1Z2dlcjo6dG9nZ2xlQnJlYWtwb2lu
dCgpIHRvIGRldGVybWluZSBpZiBhCisgICAgICAgICAgYnJlYWtwb2ludCBmYWxscyB3aXRoaW4g
YSBDb2RlQmxvY2sgb3Igbm90LiBTaW1wbHkgY2hlY2tpbmcgdGhlIGJvdW5kcworICAgICAgICAg
IG9mIHRoZSBDb2RlQmxvY2sgaXMgaW5zdWZmaWNpZW50LiBGb3IgZXhhbXBsZSwgbGV0J3Mgc2F5
IHdlIGhhdmUgdGhlCisgICAgICAgICAgZm9sbG93aW5nIEpTIGNvZGU6CisKKyAgICAgICAgICAg
ICAgLy8gYmVnaW4gZ2xvYmFsIHNjb3BlCisgICAgICAgICAgICAgIGZ1bmN0aW9uIGYxKCkgewor
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZjIoKSB7CisgICAgICAgICAgICAgICAgICAgICAu
Li4gLy8gc2V0IGJyZWFrcG9pbnQgaGVyZS4KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAvLyBlbmQgZ2xvYmFsIHNjb3BlCisKKyAgICAgICAgICBV
c2luZyB0aGUgQ29kZUJsb2NrIGJvdW5kcyBhbG9uZSwgdGhlIGJyZWFrcG9pbnQgYWJvdmUgd2ls
bCB0byBhcHBlYXIKKyAgICAgICAgICB0byBiZSBpbiB0aGUgZ2xvYmFsIHByb2dyYW0gQ29kZUJs
b2NrLCBhbmQgdGhlIENvZGVCbG9ja3MgZm9yIGZ1bmN0aW9uCisgICAgICAgICAgZjEoKSBhbmQg
ZjIoKS4gV2l0aCBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5kQ29sdW1uKCkgd2UgY2Fu
CisgICAgICAgICAgcnVsZSBvdXQgdGhlIGdsb2JhbCBwcm9ncmFtIENvZGVCbG9jayBhbmQgZjEo
KSwgYW5kIG9ubHkgYXBwbHkgdGhlCisgICAgICAgICAgYnJlYWtwb2ludCB0byBmMigwIHdoZXJl
IGl0IGJlbG9uZ3MuCisKKyAgICAgICAgICBDb2RlQmxvY2s6Omhhc09wRGVidWdGb3JMaW5lQW5k
Q29sdW1uKCkgd29ya3MgYnkgaXRlcmF0aW5nIG92ZXIgYWxsCisgICAgICAgICAgdGhlIG9wY29k
ZXMgaW4gdGhlIENvZGVCbG9jayB0byBsb29rIGZvciBvcF9kZWJ1ZydzLiBGb3IgZWFjaCBvcF9k
ZWJ1ZywKKyAgICAgICAgICBpdCBjYWxscyBDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5
dGVjb2RlT2Zmc2V0KCkgdG8gZG8gYSBiaW5hcnkKKyAgICAgICAgICBzZWFjaCB0byBnZXQgdGhl
IGxpbmUgYW5kIGNvbHVtbiBpbmZvIGZvciB0aGF0IG9wX2RlYnVnLiBUaGlzIGlzIGEKKyAgICAg
ICAgICBOICogbG9nKE4pIGFsZ29yaXRobS4gSG93ZXZlciwgYSBxdWljayBoYW5kcyBvbiB0ZXN0
IHVzaW5nIHRoZQorICAgICAgICAgIFdlYkluc3BlY3RvciAod2l0aCB0aGlzIHBhdGNoIGFwcGxp
ZWQpIHRvIGV4ZXJjaXNlIHNldHRpbmcsIGJyZWFraW5nCisgICAgICAgICAgb24sIGFuZCBjbGVh
cmluZyBicmVha3BvaW50cywgYXMgd2VsbCBhcyBzdGVwcGluZyB0aHJvdWdoIHNvbWUgY29kZQor
ICAgICAgICAgIHNob3dzIG5vIG5vdGljZWFibGUgZGVncmFkYXRpb24gb2YgdGhlIHVzZXIgZXhw
ZXJpZW5jZSBjb21wYXJlZCB0byB0aGUKKyAgICAgICAgICBiYXNlbGluZSB3aXRob3V0IHRoaXMg
cGF0Y2guCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpudW1CcmVha3BvaW50cyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bnVt
QnJlYWtwb2ludHNPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZEJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OmNsZWFyQWxsQnJlYWtwb2ludHMpOgorICAgICAgICAqIGRlYnVn
Z2VyL0JyZWFrcG9pbnQuaDoKKyAgICAgICAgLSBkZWZpbmVkIEJyZWFrcG9pbnQ6OnVuc3BlY2lm
aWVkQ29sdW1uIHNvIHRoYXQgd2UgY2FuIGV4cGxpY2l0bHkgaW5kaWNhdGUKKyAgICAgICAgICB3
aGVuIHRoZSBXZWJJbnNwZWN0b3Igd2FzIHNldHRpbmcgYSBsaW5lIGJyZWFrcG9pbnQgYW5kIGRp
ZCBub3QgcHJvdmlkZQorICAgICAgICAgIGEgY29sdW1uIHZhbHVlLiBDb2RlQmxvY2s6Omhhc09w
RGVidWdGb3JMaW5lQW5kQ29sdW1uKCkgbmVlZHMgdGhpcworICAgICAgICAgIGluZm9ybWF0aW9u
IGluIG9yZGVyIHRvIGxvb3NlbiBpdHMgbWF0Y2hpbmcgY3JpdGVyaWEgZm9yIG9wX2RlYnVnCisg
ICAgICAgICAgYnl0ZWNvZGVzIGZvciB0aGUgc3BlY2lmaWVkIGJyZWFrcG9pbnQgbGluZSBhbmQg
Y29sdW1uIHZhbHVlcyBwcm92aWRlZAorICAgICAgICAgIGJ5IHRoZSBkZWJ1Z2dlci4KKworICAg
ICAgICAgIFByZXZpb3VzbHksIHdlIGp1c3QgaGlqYWNrIGEgMCB2YWx1ZSBjb2x1bW4gYXMgYW4g
dW5zcGVjaWZpZWQgY29sdW1uLgorICAgICAgICAgIEhvd2V2ZXIsIHRoZSBXZWJJbnNwZWN0b3Ig
b3BlcmF0ZXMgb24gMC1iYXNlZCBpbnRzIGZvciBjb2x1bW4gdmFsdWVzLgorICAgICAgICAgIEhl
bmNlLCAwIHNob3VsZCBiZSBhIHZhbGlkIGNvbHVtbiB2YWx1ZSBhbmQgc2hvdWxkIG5vdCBiZSBo
aWphY2tlZCB0bworICAgICAgICAgIG1lYW4gYW4gdW5zcGVjaWZpZWQgY29sdW1uLgorCisgICAg
ICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6RGVi
dWdnZXIpOgorICAgICAgICAtIGFkZGVkIHRyYWNraW5nIG9mIHRoZSBWTSB0aGF0IHRoZSBkZWJ1
Z2dlciBpcyB1c2VkIHdpdGguIFRoaXMgaXMKKyAgICAgICAgICBuZWVkZWQgYnkgRGVidWdnZXI6
OmJyZWFrUHJvZ3JhbSgpLgorCisgICAgICAgICAgVGhlIFZNIHBvaW50ZXIgaXMgYXR0YWluZWQg
ZnJvbSB0aGUgZmlyc3QgSlNHbG9iYWxPYmplY3QgdGhhdCB0aGUgZGVidWdnZXIKKyAgICAgICAg
ICBhdHRhY2hlcyB0by4gV2hlbiB0aGUgZGVidWdnZXIgZGV0YWNoZXMgZnJvbSB0aGUgbGFzdCBK
U0dsb2JhbE9iamVjdCwgaXQKKyAgICAgICAgICB3aWxsIG51bGxpZnkgaXRzIFZNIHBvaW50ZXIg
dG8gYWxsb3cgYSBuZXcgb25lIHRvIGJlIHNldCBvbiB0aGUgbmV4dAorICAgICAgICAgIGF0dGFj
aC4KKworICAgICAgICAgIFdlIHdlcmUgYWx3YXlzIG9ubHkgdXNpbmcgZWFjaCBkZWJ1Z2dlciBp
bnN0YW5jZSB3aXRoIG9uZSBWTS4gVGhpcyBjaGFuZ2UKKyAgICAgICAgICBtYWtlcyBpdCBleHBs
aWNpdCB3aXRoIGFuIGFzc2VydCB0byBlbnN1cmUgdGhhdCBhbGwgZ2xvYmFsT2JqZWN0cyB0aGF0
CisgICAgICAgICAgdGhlIGRlYnVnZ2VyIGF0dGFjaGVzIHRvIGJlb25ncyB0byB0aGUgc2FtZSBW
TS4KKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6YXR0YWNoKToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXI6OmRldGFjaCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXRTaG91bGRQYXVzZSk6
CisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnJlZ2lzdGVyQ29kZUJsb2NrKToKKyAgICAgICAg
KEpTQzo6RGVidWdnZXI6OnVucmVnaXN0ZXJDb2RlQmxvY2spOgorICAgICAgICAtIHJlZ2lzdGVy
Q29kZUJsb2NrKCkgaXMgcmVzcG9uc2libGUgZm9yIGFwcGx5aW5nIHByZS1leGlzdGluZyBicmVh
a3BvaW50cworICAgICAgICAgIHRvIG5ldyBDb2RlQmxvY2tzIGJlaW5nIGluc3RhbGxlZC4gU2lt
aWxhcmx5LCB1bnJlZ2lzdGVyQ29kZUJsb2NrKCkKKyAgICAgICAgICBjbGVhcnMgdGhlIGJyZWFr
cG9pbnRzLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KToKKyAg
ICAgICAgLSBUaGlzIGlzIHRoZSB3b3JraG9yc2UgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBi
cmVha3BvaW50IGZhbGxzIHdpdGhpbgorICAgICAgICAgIGEgQ29kZUJsb2NrIG9yIG5vdC4gSWYg
aXQgZG9lcywgdGhlbiBpdCBjYW4gZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlCisgICAgICAgICAg
c2FpZCBicmVha3BvaW50IGluIHRoZSBDb2RlQmxvY2suIEluIHRoZSBjdXJyZW50IGltcGxlbWVu
dGF0aW9uLAorICAgICAgICAgIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgYnJlYWtwb2ludCBzaW1w
bHkgbWVhbnMgaW5jcmVtZW50aW5nL2RlY3JlbWVudGluZworICAgICAgICAgIHRoZSBDb2RlQmxv
Y2sncyBtX251bUJyZWFrcG9pbnRzLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjphcHBseUJy
ZWFrcG9pbnRzKToKKworICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6VG9nZ2xlQnJlYWtwb2ludEZ1
bmN0b3I6OlRvZ2dsZUJyZWFrcG9pbnRGdW5jdG9yKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6
OlRvZ2dsZUJyZWFrcG9pbnRGdW5jdG9yOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6RGVi
dWdnZXI6OnRvZ2dsZUJyZWFrcG9pbnQpOgorICAgICAgICAtIEl0ZXJhdGVzIGFsbCByZWxldmFu
dCBDb2RlQmxvY2tzIGFuZCBhcHBseSB0aGUgc3BlY2lmaWVkIGJyZWFrcG9pbnQKKyAgICAgICAg
ICBpZiBhcHByb3ByaWF0ZS4gVGhpcyBpcyBjYWxsZWQgd2hlbiBhIG5ldyBicmVha3BvaW50IGlz
IGJlaW5nIGRlZmluZWQKKyAgICAgICAgICBieSB0aGUgV2ViSW5zcGVjdG9yIGFuZCBuZWVkcyB0
byBiZSBhcHBsaWVkIHRvIGFuIGFscmVhZHkgaW5zdGFsbGVkCisgICAgICAgICAgQ29kZUJsb2Nr
LgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
aGFzQnJlYWtwb2ludCk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpDbGVhckJyZWFrcG9pbnRz
RnVuY3Rvcjo6Q2xlYXJCcmVha3BvaW50c0Z1bmN0b3IpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6Q2xlYXJCcmVha3BvaW50c0Z1bmN0b3I6Om9wZXJhdG9yKCkpOgorICAgICAgICAoSlNDOjpE
ZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cyk6CisKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OmJy
ZWFrUHJvZ3JhbSk6CisgICAgICAgIC0gRml4ZWQgYSByZWdyZXNzaW9uIHRoYXQgYnJva2UgRE9N
IGJyZWFrcG9pbnRzLiBUaGUgaXNzdWUgaXMgdGhhdCB3aXRoCisgICAgICAgICAgdGhlIHNraXBw
aW5nIG9mIG9wX2RlYnVnIGNhbGxiYWNrcywgd2UgZG9uJ3QgYWx3YXlzIGhhdmUgYW4gdXBkYXRl
ZAorICAgICAgICAgIG1fY3VycmVudENhbGxGcmFtZS4gTm9ybWFsbHksIG1fY3VycmVudENhbGxG
cmFtZSBpcyBwcm92aWRlZCBhcyBhcmcKKyAgICAgICAgICBpbiB0aGUgb3BfZGVidWcgY2FsbGJh
Y2suIEluIHRoaXMgY2FzZSwgd2UgY2FuIGdldCB0aGUgQ2FsbEZyYW1lKiBmcm9tCisgICAgICAg
ICAgbV92bS0+dG9wQ2FsbEZyYW1lLgorCisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp1cGRhdGVD
YWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnBhdXNl
SWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6d2lsbEV4ZWN1dGVQcm9ncmFtKToK
KyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6c2hvdWxkUGF1c2UpOgorCisgICAg
ICAgICogaGVhcC9Db2RlQmxvY2tTZXQuaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0Ojpp
dGVyYXRlKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9y
RWFjaENvZGVCbG9jayk6CisgICAgICAgIC0gQWRkZWQgdXRpbGl0eSB0byBpdGVyYXRlIGFsbCBD
b2RlQmxvY2tzIGluIHRoZSBoZWFwIC8gVk0uCisKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpkZWJ1Zyk6CisKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWJ1
Zyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9kZWJ1Zyk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c206CisgICAgICAgIC0gVGhlc2Ugbm93IGNoZWNrcyBDb2RlQmxvY2s6Om1fbnVtQnJlYWtwb2lu
dHMgYW5kIERlYnVnZ2VyOjptX3Nob3VsZFBhdXNlCisgICAgICAgICAgaW5zdGVhZCBvZiBEZWJ1
Z2dlcjo6bV9uZWVkc09wRGVidWdDYWxsYmFja3MuCisKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1
dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZSk6
CisKIDIwMTQtMDEtMjIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZW1vdmUgQ1NTM19URVhUX0RFQ09SQVRJT04gZGVmaW5lCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTYy
NTk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzNTIsOCArMTM1Miw5IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0
ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2RlYnVnOiB7CiAg
ICAgICAgICAgICBpbnQgZGVidWdIb29rSUQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIGludCBoYXNCcmVha3BvaW50RmxhZyA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZGVidWciKTsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIiVzIiwgZGVidWdIb29rTmFtZShkZWJ1Z0hvb2tJRCkp
OworICAgICAgICAgICAgb3V0LnByaW50ZigiJXMgJWQiLCBkZWJ1Z0hvb2tOYW1lKGRlYnVnSG9v
a0lEKSwgaGFzQnJlYWtwb2ludEZsYWcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDogewpAQCAtMTQ2OCw2ICsxNDY5LDcg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zaG91
bGRBbHdheXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZh
bHNlKQogICAgICwgbV91bmxpbmtlZENvZGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVj
dXRhYmxlLmdldCgpLCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKKyAgICAsIG1fbnVtQnJl
YWtwb2ludHMoMCkKICAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5tX3ZtLCBvdGhlci5t
X293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAg
ICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAgLCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3Ry
dWN0aW9ucykKQEAgLTE1MjIsNiArMTUyNCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlw
dEV4ZWN1dGFibGUqIG8KICAgICAsIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCiAgICAg
LCBtX2RpZEZhaWxGVExDb21waWxhdGlvbihmYWxzZSkKICAgICAsIG1fdW5saW5rZWRDb2RlKG1f
Z2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrKQor
ICAgICwgbV9udW1CcmVha3BvaW50cygwKQogICAgICwgbV9vd25lckV4ZWN1dGFibGUobV9nbG9i
YWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3duZXJFeGVjdXRhYmxlKQogICAgICwg
bV92bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlu
a2VkQ29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKQEAgLTI1NjYsNiArMjU2OSwyNyBAQCB2b2lk
IENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvCiAgICAgbGluZSArPSBtX293bmVy
RXhlY3V0YWJsZS0+bGluZU5vKCk7CiB9CiAKK2Jvb2wgQ29kZUJsb2NrOjpoYXNPcERlYnVnRm9y
TGluZUFuZENvbHVtbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pCit7CisgICAgSW50
ZXJwcmV0ZXIqIGludGVycHJldGVyID0gdm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgY29uc3QgSW5z
dHJ1Y3Rpb24qIGJlZ2luID0gaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBjb25zdCBJbnN0
cnVjdGlvbiogZW5kID0gaW5zdHJ1Y3Rpb25zKCkuZW5kKCk7CisgICAgZm9yIChjb25zdCBJbnN0
cnVjdGlvbiogaXQgPSBiZWdpbjsgaXQgIT0gZW5kOykgeworICAgICAgICBPcGNvZGVJRCBvcGNv
ZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChpdC0+dS5vcGNvZGUpOworICAgICAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfZGVidWcpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gaXQgLSBiZWdpbjsKKyAgICAgICAgICAgIGludCB1bnVzZWQ7CisgICAgICAgICAg
ICB1bnNpZ25lZCBvcERlYnVnTGluZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9wRGVidWdDb2x1
bW47CisgICAgICAgICAgICBleHByZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCwgdW51c2VkLCB1bnVzZWQsIHVudXNlZCwgb3BEZWJ1Z0xpbmUsIG9wRGVidWdDb2x1
bW4pOworICAgICAgICAgICAgaWYgKGxpbmUgPT0gb3BEZWJ1Z0xpbmUgJiYgKGNvbHVtbiA9PSBC
cmVha3BvaW50Ojp1bnNwZWNpZmllZENvbHVtbiB8fCBjb2x1bW4gPT0gb3BEZWJ1Z0NvbHVtbikp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaXQgKz0g
b3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwog
dm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KFNocmlua01vZGUgc2hyaW5rTW9kZSkKIHsKICAg
ICBtX3JhcmVDYXNlUHJvZmlsZXMuc2hyaW5rVG9GaXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE2MjU5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
ODY5LDYgKzg2OSwxOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBmcmFtZVJlZ2lzdGVyQ291
bnQoKTsKIAorICAgIGJvb2wgaGFzT3BEZWJ1Z0ZvckxpbmVBbmRDb2x1bW4odW5zaWduZWQgbGlu
ZSwgdW5zaWduZWQgY29sdW1uKTsKKworICAgIGludCBudW1CcmVha3BvaW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtQnJlYWtwb2ludHM7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG51bUJyZWFr
cG9pbnRzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1C
cmVha3BvaW50cyk7IH0KKworICAgIHZvaWQgYWRkQnJlYWtwb2ludChpbnQgbnVtQnJlYWtwb2lu
dHMpIHsgbV9udW1CcmVha3BvaW50cyArPSBudW1CcmVha3BvaW50czsgfQorICAgIHZvaWQgcmVt
b3ZlQnJlYWtwb2ludChpbnQgbnVtQnJlYWtwb2ludHMpCisgICAgeworICAgICAgICBtX251bUJy
ZWFrcG9pbnRzIC09IG51bUJyZWFrcG9pbnRzOworICAgICAgICBBU1NFUlQobV9udW1CcmVha3Bv
aW50cyA+PSAwKTsKKyAgICB9CisgICAgdm9pZCBjbGVhckFsbEJyZWFrcG9pbnRzKCkgeyBtX251
bUJyZWFrcG9pbnRzID0gMDsgfQorCiAgICAgLy8gRklYTUU6IE1ha2UgdGhlc2UgcmVtYWluaW5n
IG1lbWJlcnMgcHJpdmF0ZS4KIAogICAgIGludCBtX251bUNhbGxlZVJlZ2lzdGVyczsKQEAgLTEw
MDUsNiArMTAxOCw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBXcml0ZUJhcnJpZXI8VW5saW5r
ZWRDb2RlQmxvY2s+IG1fdW5saW5rZWRDb2RlOwogICAgIGludCBtX251bVBhcmFtZXRlcnM7Cisg
ICAgaW50IG1fbnVtQnJlYWtwb2ludHM7CiAgICAgV3JpdGVCYXJyaWVyPFNjcmlwdEV4ZWN1dGFi
bGU+IG1fb3duZXJFeGVjdXRhYmxlOwogICAgIFZNKiBtX3ZtOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGVidWdnZXIvQnJlYWtwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHJldmlzaW9uIDE2MjU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9CcmVha3BvaW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDYgKzU5LDggQEAgc3RydWN0IEJyZWFrcG9pbnQgewogICAgIHVuc2lnbmVkIGNv
bHVtbjsKICAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlOworCisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHVuc3BlY2lmaWVkQ29sdW1uID0gVUlOVF9NQVg7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1
Z2dlci9EZWJ1Z2dlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rl
YnVnZ2VyL0RlYnVnZ2VyLmNwcAkocmV2aXNpb24gMTYyNTk0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJp
IFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKgpAQCAtMjQsOCArMjQsMTAgQEAKIAogI2luY2x1ZGUgIkRl
YnVnZ2VyLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJEZWJ1Z2dlckNh
bGxGcmFtZS5oIgogI2luY2x1ZGUgIkVycm9yLmgiCisKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9u
U2NvcGUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCkBAIC0xMzksNyArMTQxLDggQEAgcHJpdmF0ZToKIH07CiAKIERlYnVnZ2VyOjpE
ZWJ1Z2dlcihib29sIGlzSW5Xb3JrZXJUaHJlYWQpCi0gICAgOiBtX3BhdXNlT25FeGNlcHRpb25z
U3RhdGUoRG9udFBhdXNlT25FeGNlcHRpb25zKQorICAgIDogbV92bShudWxscHRyKQorICAgICwg
bV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKICAgICAsIG1f
cGF1c2VPbk5leHRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAg
ICwgbV9icmVha3BvaW50c0FjdGl2YXRlZCh0cnVlKQpAQCAtMTUxLDcgKzE1NCw2IEBAIERlYnVn
Z2VyOjpEZWJ1Z2dlcihib29sIGlzSW5Xb3JrZXJUaHJlYWQKICAgICAsIG1fbGFzdEV4ZWN1dGVk
TGluZShVSU5UX01BWCkKICAgICAsIG1fbGFzdEV4ZWN1dGVkU291cmNlSUQobm9Tb3VyY2VJRCkK
ICAgICAsIG1fdG9wQnJlYWtwb2ludElEKG5vQnJlYWtwb2ludElEKQotICAgICwgbV9uZWVkc09w
RGVidWdDYWxsYmFja3MoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFBhdXNlKGZhbHNlKQogewogfQpA
QCAtMTY2LDYgKzE2OCwxMCBAQCBEZWJ1Z2dlcjo6fkRlYnVnZ2VyKCkKIHZvaWQgRGVidWdnZXI6
OmF0dGFjaChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEFTU0VSVCghZ2xv
YmFsT2JqZWN0LT5kZWJ1Z2dlcigpKTsKKyAgICBpZiAoIW1fdm0pCisgICAgICAgIG1fdm0gPSAm
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKG1fdm0gPT0gJmds
b2JhbE9iamVjdC0+dm0oKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5zZXREZWJ1Z2dlcih0aGlzKTsK
ICAgICBtX2dsb2JhbE9iamVjdHMuYWRkKGdsb2JhbE9iamVjdCk7CiB9CkBAIC0xODQsMTIgKzE5
MCwxMDQgQEAgdm9pZCBEZWJ1Z2dlcjo6ZGV0YWNoKEpTR2xvYmFsT2JqZWN0KiBnbAogICAgIEFT
U0VSVChtX2dsb2JhbE9iamVjdHMuY29udGFpbnMoZ2xvYmFsT2JqZWN0KSk7CiAgICAgbV9nbG9i
YWxPYmplY3RzLnJlbW92ZShnbG9iYWxPYmplY3QpOwogICAgIGdsb2JhbE9iamVjdC0+c2V0RGVi
dWdnZXIoMCk7CisgICAgaWYgKCFtX2dsb2JhbE9iamVjdHMuc2l6ZSgpKQorICAgICAgICBtX3Zt
ID0gbnVsbHB0cjsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6c2V0U2hvdWxkUGF1c2UoYm9vbCB2YWx1
ZSkKIHsKICAgICBtX3Nob3VsZFBhdXNlID0gdmFsdWU7Ci0gICAgdXBkYXRlTmVlZEZvck9wRGVi
dWdDYWxsYmFja3MoKTsKK30KKwordm9pZCBEZWJ1Z2dlcjo6cmVnaXN0ZXJDb2RlQmxvY2soQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgYXBwbHlCcmVha3BvaW50cyhjb2RlQmxvY2spOwor
fQorCit2b2lkIERlYnVnZ2VyOjp1bnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJs
b2NrKQoreworICAgIGNvZGVCbG9jay0+Y2xlYXJBbGxCcmVha3BvaW50cygpOworfQorCit2b2lk
IERlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KENvZGVCbG9jayogY29kZUJsb2NrLCBCcmVha3Bv
aW50JiBicmVha3BvaW50LCBCcmVha3BvaW50U3RhdGUgZW5hYmxlZE9yTm90KQoreworICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdENvZGUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmsKKyAgICAgICAgfHwgY29kZUJsb2NrLT5qaXRDb2RlKCktPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisKKyAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsKKworICAgIFNvdXJjZUlEIHNvdXJjZUlE
ID0gc3RhdGljX2Nhc3Q8U291cmNlSUQ+KGV4ZWN1dGFibGUtPnNvdXJjZUlEKCkpOworICAgIGlm
IChicmVha3BvaW50LnNvdXJjZUlEICE9IHNvdXJjZUlEKQorICAgICAgICByZXR1cm47CisKKyAg
ICB1bnNpZ25lZCBsaW5lID0gYnJlYWtwb2ludC5saW5lOworICAgIHVuc2lnbmVkIGNvbHVtbiA9
IGJyZWFrcG9pbnQuY29sdW1uOworCisgICAgdW5zaWduZWQgc3RhcnRMaW5lID0gZXhlY3V0YWJs
ZS0+bGluZU5vKCk7CisgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zdGFy
dENvbHVtbigpOworICAgIHVuc2lnbmVkIGVuZExpbmUgPSBleGVjdXRhYmxlLT5sYXN0TGluZSgp
OworICAgIHVuc2lnbmVkIGVuZENvbHVtbiA9IGV4ZWN1dGFibGUtPmVuZENvbHVtbigpOworCisg
ICAgLy8gSW5zcGVjdG9yIGJyZWFrcG9pbnQgbGluZSBhbmQgY29sdW1uIHZhbHVlcyBhcmUgemVy
by1iYXNlZCBidXQgdGhlIGV4ZWN1dGFibGUKKyAgICAvLyBhbmQgQ29kZUJsb2NrIGxpbmUgYW5k
IGNvbHVtbiB2YWx1ZXMgYXJlIG9uZS1iYXNlZC4KKyAgICBsaW5lICs9IDE7CisgICAgY29sdW1u
ID0gY29sdW1uID8gY29sdW1uICsgMSA6IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uOwor
CisgICAgaWYgKGxpbmUgPCBzdGFydExpbmUgfHwgbGluZSA+IGVuZExpbmUpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoY29sdW1uICE9IEJyZWFrcG9pbnQ6OnVuc3BlY2lmaWVkQ29sdW1uKSB7
CisgICAgICAgIGlmIChsaW5lID09IHN0YXJ0TGluZSAmJiBjb2x1bW4gPCBzdGFydENvbHVtbikK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGxpbmUgPT0gZW5kTGluZSAmJiBjb2x1
bW4gPiBlbmRDb2x1bW4pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY29k
ZUJsb2NrLT5oYXNPcERlYnVnRm9yTGluZUFuZENvbHVtbihsaW5lLCBjb2x1bW4pKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZW5hYmxlZE9yTm90ID09IEJyZWFrcG9pbnRFbmFibGVkKQor
ICAgICAgICBjb2RlQmxvY2stPmFkZEJyZWFrcG9pbnQoMSk7CisgICAgZWxzZQorICAgICAgICBj
b2RlQmxvY2stPnJlbW92ZUJyZWFrcG9pbnQoMSk7Cit9CisKK3ZvaWQgRGVidWdnZXI6OmFwcGx5
QnJlYWtwb2ludHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQnJlYWtwb2ludElEVG9C
cmVha3BvaW50TWFwJiBicmVha3BvaW50cyA9IG1fYnJlYWtwb2ludElEVG9CcmVha3BvaW50Owor
ICAgIGZvciAoYXV0byBpdCA9IGJyZWFrcG9pbnRzLmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRz
LmVuZCgpOyArK2l0KSB7CisgICAgICAgIEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQgPSAqaXQtPnZh
bHVlOworICAgICAgICB0b2dnbGVCcmVha3BvaW50KGNvZGVCbG9jaywgYnJlYWtwb2ludCwgQnJl
YWtwb2ludEVuYWJsZWQpOworICAgIH0KK30KKworY2xhc3MgRGVidWdnZXI6OlRvZ2dsZUJyZWFr
cG9pbnRGdW5jdG9yIHsKK3B1YmxpYzoKKyAgICBUb2dnbGVCcmVha3BvaW50RnVuY3RvcihEZWJ1
Z2dlciogZGVidWdnZXIsIEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQsIEJyZWFrcG9pbnRTdGF0ZSBl
bmFibGVkT3JOb3QpCisgICAgICAgIDogbV9kZWJ1Z2dlcihkZWJ1Z2dlcikKKyAgICAgICAgLCBt
X2JyZWFrcG9pbnQoYnJlYWtwb2ludCkKKyAgICAgICAgLCBtX2VuYWJsZWRPck5vdChlbmFibGVk
T3JOb3QpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmIChtX2RlYnVnZ2VyID09IGNvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkpCisgICAgICAgICAgICBtX2RlYnVnZ2VyLT50b2dnbGVC
cmVha3BvaW50KGNvZGVCbG9jaywgbV9icmVha3BvaW50LCBtX2VuYWJsZWRPck5vdCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGVidWdnZXIqIG1fZGVi
dWdnZXI7CisgICAgQnJlYWtwb2ludCYgbV9icmVha3BvaW50OworICAgIEJyZWFrcG9pbnRTdGF0
ZSBtX2VuYWJsZWRPck5vdDsKK307CisKK3ZvaWQgRGVidWdnZXI6OnRvZ2dsZUJyZWFrcG9pbnQo
QnJlYWtwb2ludCYgYnJlYWtwb2ludCwgRGVidWdnZXI6OkJyZWFrcG9pbnRTdGF0ZSBlbmFibGVk
T3JOb3QpCit7CisgICAgaWYgKCFtX3ZtKQorICAgICAgICByZXR1cm47CisgICAgSGVhcEl0ZXJh
dGlvblNjb3BlIGl0ZXJhdGlvblNjb3BlKG1fdm0tPmhlYXApOworICAgIFRvZ2dsZUJyZWFrcG9p
bnRGdW5jdG9yIGZ1bmN0b3IodGhpcywgYnJlYWtwb2ludCwgZW5hYmxlZE9yTm90KTsKKyAgICBt
X3ZtLT5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7CiB9CiAKIHZvaWQgRGVidWdnZXI6
OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKFZNKiB2bSkKQEAgLTIwNywxMiArMzA1LDYgQEAgdm9p
ZCBEZWJ1Z2dlcjo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoVgogICAgIHZtLT5oZWFwLm9iamVj
dFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsKGl0ZXJhdGlvblNjb3BlLCByZWNvbXBpbGVyKTsKIH0K
IAotdm9pZCBEZWJ1Z2dlcjo6dXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKQotewotICAg
IHNpemVfdCBudW1iZXJPZkJyZWFrcG9pbnRzID0gbV9icmVha3BvaW50SURUb0JyZWFrcG9pbnQu
c2l6ZSgpOwotICAgIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzID0gbV9zaG91bGRQYXVzZSB8fCBu
dW1iZXJPZkJyZWFrcG9pbnRzOwotfQotCiBCcmVha3BvaW50SUQgRGVidWdnZXI6OnNldEJyZWFr
cG9pbnQoQnJlYWtwb2ludCBicmVha3BvaW50LCB1bnNpZ25lZCYgYWN0dWFsTGluZSwgdW5zaWdu
ZWQmIGFjdHVhbENvbHVtbikKIHsKICAgICBTb3VyY2VJRCBzb3VyY2VJRCA9IGJyZWFrcG9pbnQu
c291cmNlSUQ7CkBAIC0yNDcsNyArMzM5LDcgQEAgQnJlYWtwb2ludElEIERlYnVnZ2VyOjpzZXRC
cmVha3BvaW50KEJyZQogICAgIGJyZWFrcG9pbnRzLmFwcGVuZChicmVha3BvaW50KTsKICAgICBt
X2JyZWFrcG9pbnRJRFRvQnJlYWtwb2ludC5zZXQoaWQsICZicmVha3BvaW50cy5sYXN0KCkpOwog
Ci0gICAgdXBkYXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKKyAgICB0b2dnbGVCcmVha3Bv
aW50KGJyZWFrcG9pbnQsIEJyZWFrcG9pbnRFbmFibGVkKTsKIAogICAgIHJldHVybiBpZDsKIH0K
QEAgLTI2Nyw2ICszNTksOCBAQCB2b2lkIERlYnVnZ2VyOjpyZW1vdmVCcmVha3BvaW50KEJyZWFr
cG9pCiAgICAgTGluZVRvQnJlYWtwb2ludHNNYXA6Oml0ZXJhdG9yIGJyZWFrc0l0ID0gaXQtPnZh
bHVlLmZpbmQoYnJlYWtwb2ludC5saW5lKTsKICAgICBBU1NFUlQoYnJlYWtzSXQgIT0gaXQtPnZh
bHVlLmVuZCgpKTsKIAorICAgIHRvZ2dsZUJyZWFrcG9pbnQoYnJlYWtwb2ludCwgQnJlYWtwb2lu
dERpc2FibGVkKTsKKwogICAgIEJyZWFrcG9pbnRzSW5MaW5lJiBicmVha3BvaW50cyA9IGJyZWFr
c0l0LT52YWx1ZTsKICAgICB1bnNpZ25lZCBicmVha3BvaW50c0NvdW50ID0gYnJlYWtwb2ludHMu
c2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicmVha3BvaW50c0NvdW50OyBp
KyspIHsKQEAgLTI4Miw4ICszNzYsNiBAQCB2b2lkIERlYnVnZ2VyOjpyZW1vdmVCcmVha3BvaW50
KEJyZWFrcG9pCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIHVw
ZGF0ZU5lZWRGb3JPcERlYnVnQ2FsbGJhY2tzKCk7CiB9CiAKIGJvb2wgRGVidWdnZXI6Omhhc0Jy
ZWFrcG9pbnQoU291cmNlSUQgc291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYgcG9zaXRpb24s
IEJyZWFrcG9pbnQgKmhpdEJyZWFrcG9pbnQpCkBAIC0zMTAsNiArNDAyLDcgQEAgYm9vbCBEZWJ1
Z2dlcjo6aGFzQnJlYWtwb2ludChTb3VyY2VJRCBzbwogICAgICAgICB1bnNpZ25lZCBicmVha0xp
bmUgPSBicmVha3BvaW50c1tpXS5saW5lOwogICAgICAgICB1bnNpZ25lZCBicmVha0NvbHVtbiA9
IGJyZWFrcG9pbnRzW2ldLmNvbHVtbjsKICAgICAgICAgLy8gU2luY2UgZnJvbnRlbmQgdHJ1bmNh
dGVzIHRoZSBpbmRlbnQsIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gYSBsaW5lIG11c3QgbWF0Y2gg
dGhlIGJyZWFrcG9pbnQgKGxpbmUsMCkuCisgICAgICAgIEFTU0VSVCh0aGlzID09IG1fY3VycmVu
dENhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKTsKICAg
ICAgICAgaWYgKChsaW5lICE9IG1fbGFzdEV4ZWN1dGVkTGluZSAmJiBsaW5lID09IGJyZWFrTGlu
ZSAmJiAhYnJlYWtDb2x1bW4pCiAgICAgICAgICAgICB8fCAobGluZSA9PSBicmVha0xpbmUgJiYg
Y29sdW1uID09IGJyZWFrQ29sdW1uKSkgewogICAgICAgICAgICAgaGl0ID0gdHJ1ZTsKQEAgLTM0
NSwxMyArNDM4LDM1IEBAIGJvb2wgRGVidWdnZXI6Omhhc0JyZWFrcG9pbnQoU291cmNlSUQgc28K
ICAgICByZXR1cm4gcmVzdWx0LnRvQm9vbGVhbihtX2N1cnJlbnRDYWxsRnJhbWUpOwogfQogCitj
bGFzcyBEZWJ1Z2dlcjo6Q2xlYXJCcmVha3BvaW50c0Z1bmN0b3IgeworcHVibGljOgorICAgIENs
ZWFyQnJlYWtwb2ludHNGdW5jdG9yKERlYnVnZ2VyKiBkZWJ1Z2dlcikKKyAgICAgICAgOiBtX2Rl
YnVnZ2VyKGRlYnVnZ2VyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yKCkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAoY29kZUJsb2NrLT5udW1CcmVh
a3BvaW50cygpICYmIG1fZGVidWdnZXIgPT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVi
dWdnZXIoKSkKKyAgICAgICAgICAgIGNvZGVCbG9jay0+Y2xlYXJBbGxCcmVha3BvaW50cygpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCitwcml2YXRlOgorICAgIERlYnVnZ2VyKiBt
X2RlYnVnZ2VyOworfTsKKwogdm9pZCBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCiB7CiAg
ICAgbV90b3BCcmVha3BvaW50SUQgPSBub0JyZWFrcG9pbnRJRDsKICAgICBtX2JyZWFrcG9pbnRJ
RFRvQnJlYWtwb2ludC5jbGVhcigpOwogICAgIG1fc291cmNlSURUb0JyZWFrcG9pbnRzLmNsZWFy
KCk7CiAKLSAgICB1cGRhdGVOZWVkRm9yT3BEZWJ1Z0NhbGxiYWNrcygpOworICAgIGlmICghbV92
bSkKKyAgICAgICAgcmV0dXJuOworICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRpb25TY29w
ZShtX3ZtLT5oZWFwKTsKKyAgICBDbGVhckJyZWFrcG9pbnRzRnVuY3RvciBmdW5jdG9yKHRoaXMp
OworICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9pZCBE
ZWJ1Z2dlcjo6c2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCkBAIC0zNzMs
MTEgKzQ4OCwxMyBAQCB2b2lkIERlYnVnZ2VyOjpzZXRQYXVzZU9uTmV4dFN0YXRlbWVudChiCiAK
IHZvaWQgRGVidWdnZXI6OmJyZWFrUHJvZ3JhbSgpCiB7Ci0gICAgaWYgKG1faXNQYXVzZWQgfHwg
IW1fY3VycmVudENhbGxGcmFtZSkKKyAgICBpZiAobV9pc1BhdXNlZCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9wYXVzZU9uTmV4dFN0YXRlbWVudCA9IHRydWU7CiAgICAgc2V0U2hvdWxkUGF1
c2UodHJ1ZSk7CisgICAgbV9jdXJyZW50Q2FsbEZyYW1lID0gbV92bS0+dG9wQ2FsbEZyYW1lOwor
ICAgIEFTU0VSVChtX2N1cnJlbnRDYWxsRnJhbWUpOwogICAgIHBhdXNlSWZOZWVkZWQobV9jdXJy
ZW50Q2FsbEZyYW1lKTsKIH0KIApAQCAtNDMyLDcgKzU0OSw3IEBAIHZvaWQgRGVidWdnZXI6OnVw
ZGF0ZUNhbGxGcmFtZUFuZFBhdXNlSWYKIHsKICAgICB1cGRhdGVDYWxsRnJhbWUoY2FsbEZyYW1l
KTsKICAgICBwYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0gICAgaWYgKCFuZWVkc09wRGVidWdD
YWxsYmFja3MoKSkKKyAgICBpZiAoIXNob3VsZFBhdXNlKCkpCiAgICAgICAgIG1fY3VycmVudENh
bGxGcmFtZSA9IDA7CiB9CiAKQEAgLTQ3Nyw4ICs1OTQsNyBAQCB2b2lkIERlYnVnZ2VyOjpwYXVz
ZUlmTmVlZGVkKENhbGxGcmFtZSogCiAKICAgICBpZiAoIW1fcGF1c2VPbk5leHRTdGF0ZW1lbnQg
JiYgIW1fcGF1c2VPbkNhbGxGcmFtZSkgewogICAgICAgICBzZXRTaG91bGRQYXVzZShmYWxzZSk7
Ci0gICAgICAgIGlmICghbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCi0gICAgICAgICAgICBtX2N1
cnJlbnRDYWxsRnJhbWUgPSAwOworICAgICAgICBtX2N1cnJlbnRDYWxsRnJhbWUgPSBudWxscHRy
OwogICAgIH0KIH0KIApAQCAtNTQ4LDcgKzY2NCw3IEBAIHZvaWQgRGVidWdnZXI6OndpbGxFeGVj
dXRlUHJvZ3JhbShDYWxsRnIKICAgICAvLyB0aGUgZGVidWdnZXIgaW1wbGVtZW50YXRpb24gdG8g
bm90IHJlcXVpcmUgY2FsbGJhY2tzLgogICAgIGlmICghbV9pc0luV29ya2VyVGhyZWFkKQogICAg
ICAgICB1cGRhdGVDYWxsRnJhbWVBbmRQYXVzZUlmTmVlZGVkKGNhbGxGcmFtZSk7Ci0gICAgZWxz
ZSBpZiAobmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCisgICAgZWxzZSBpZiAoc2hvdWxkUGF1c2Uo
KSkKICAgICAgICAgdXBkYXRlQ2FsbEZyYW1lKGNhbGxGcmFtZSk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oCShyZXZpc2lvbiAxNjI1OTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2Vs
bHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICBEZWJ1Z2dlcihib29sIGlz
SW5Xb3JrZXJUaHJlYWQgPSBmYWxzZSk7CiAgICAgdmlydHVhbCB+RGVidWdnZXIoKTsKIAotICAg
IGJvb2wgbmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc09wRGVi
dWdDYWxsYmFja3M7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG5lZWRzT3BEZWJ1Z0NhbGxiYWNr
c09mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihEZWJ1Z2dlciwgbV9uZWVkc09wRGVi
dWdDYWxsYmFja3MpOyB9CisgICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkUGF1c2U7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IHNob3VsZFBhdXNlT2Zmc2V0KCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKERlYnVnZ2VyLCBtX3Nob3VsZFBhdXNlKTsgfQogCiAg
ICAgSlNDOjpEZWJ1Z2dlckNhbGxGcmFtZSogY3VycmVudERlYnVnZ2VyQ2FsbEZyYW1lKCkgY29u
c3Q7CiAgICAgYm9vbCBoYXNIYW5kbGVyRm9yRXhjZXB0aW9uQ2FsbGJhY2soKSBjb25zdApAQCAt
MTA0LDYgKzEwNCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVjb21waWxlQWxsSlNGdW5jdGlv
bnMoVk0qKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJDb2RlQmxvY2soQ29kZUJsb2NrKik7CisgICAg
dm9pZCB1bnJlZ2lzdGVyQ29kZUJsb2NrKENvZGVCbG9jayopOworCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCBib29sIG5lZWRQYXVzZUhhbmRsaW5nKEpTR2xvYmFsT2JqZWN0KikgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQnJlYWtwb2ludEhpdChjb25zdCBCcmVh
a3BvaW50JikgeyB9CkBAIC0xMjgsNyArMTMxLDEwIEBAIHByaXZhdGU6CiAKICAgICB0eXBlZGVm
IFZlY3RvcjxCcmVha3BvaW50PiBCcmVha3BvaW50c0luTGluZTsKICAgICB0eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIEJyZWFrcG9pbnRzSW5MaW5lLCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpV
bnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBMaW5lVG9CcmVha3BvaW50c01hcDsK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U291cmNlSUQsIExpbmVUb0JyZWFrcG9pbnRzTWFwPiBTb3Vy
Y2VJRFRvQnJlYWtwb2ludHNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUlELCBMaW5l
VG9CcmVha3BvaW50c01hcCwgV1RGOjpJbnRIYXNoPFNvdXJjZUlEPiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxTb3VyY2VJRD4+IFNvdXJjZUlEVG9CcmVha3BvaW50c01hcDsK
KworICAgIGNsYXNzIFRvZ2dsZUJyZWFrcG9pbnRGdW5jdG9yOworICAgIGNsYXNzIENsZWFyQnJl
YWtwb2ludHNGdW5jdG9yOwogCiAgICAgY2xhc3MgUGF1c2VSZWFzb25EZWNsYXJhdGlvbiB7CiAg
ICAgcHVibGljOgpAQCAtMTQ4LDcgKzE1NCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGhhc0Jy
ZWFrcG9pbnQoU291cmNlSUQsIGNvbnN0IFRleHRQb3NpdGlvbiYsIEJyZWFrcG9pbnQqIGhpdEJy
ZWFrcG9pbnQpOwogCi0gICAgYm9vbCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hv
dWxkUGF1c2U7IH0KICAgICB2b2lkIHNldFNob3VsZFBhdXNlKGJvb2wpOwogICAgIHZvaWQgdXBk
YXRlTmVlZEZvck9wRGVidWdDYWxsYmFja3MoKTsKIApAQCAtMTYxLDYgKzE2NiwxNSBAQCBwcml2
YXRlOgogICAgIHZvaWQgdXBkYXRlQ2FsbEZyYW1lQW5kUGF1c2VJZk5lZWRlZChKU0M6OkNhbGxG
cmFtZSopOwogICAgIHZvaWQgcGF1c2VJZk5lZWRlZChKU0M6OkNhbGxGcmFtZSopOwogCisgICAg
ZW51bSBCcmVha3BvaW50U3RhdGUgeworICAgICAgICBCcmVha3BvaW50RGlzYWJsZWQsCisgICAg
ICAgIEJyZWFrcG9pbnRFbmFibGVkCisgICAgfTsKKyAgICB2b2lkIHRvZ2dsZUJyZWFrcG9pbnQo
Q29kZUJsb2NrKiwgQnJlYWtwb2ludCYsIEJyZWFrcG9pbnRTdGF0ZSk7CisgICAgdm9pZCBhcHBs
eUJyZWFrcG9pbnRzKENvZGVCbG9jayopOworICAgIHZvaWQgdG9nZ2xlQnJlYWtwb2ludChCcmVh
a3BvaW50JiwgQnJlYWtwb2ludFN0YXRlKTsKKworICAgIFZNKiBtX3ZtOwogICAgIEhhc2hTZXQ8
SlNHbG9iYWxPYmplY3QqPiBtX2dsb2JhbE9iamVjdHM7CiAKICAgICBQYXVzZU9uRXhjZXB0aW9u
c1N0YXRlIG1fcGF1c2VPbkV4Y2VwdGlvbnNTdGF0ZTsKQEAgLTE4MSw3ICsxOTUsNiBAQCBwcml2
YXRlOgogICAgIEJyZWFrcG9pbnRJRFRvQnJlYWtwb2ludE1hcCBtX2JyZWFrcG9pbnRJRFRvQnJl
YWtwb2ludDsKICAgICBTb3VyY2VJRFRvQnJlYWtwb2ludHNNYXAgbV9zb3VyY2VJRFRvQnJlYWtw
b2ludHM7CiAKLSAgICBib29sIG1fbmVlZHNPcERlYnVnQ2FsbGJhY2tzOwogICAgIGJvb2wgbV9z
aG91bGRQYXVzZTsKIAogICAgIFJlZlB0cjxKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lPiBtX2N1cnJl
bnREZWJ1Z2dlckNhbGxGcmFtZTsKQEAgLTE5NSw4ICsyMDgsMTEgQEAgcHJpdmF0ZToKIAogY2xh
c3MgRGVidWdnZXIgewogcHVibGljOgotICAgIERlYnVnZ2VyKGJvb2wgPSBmYWxzZSkgOiBtX25l
ZWRzT3BEZWJ1Z0NhbGxiYWNrcyhmYWxzZSkgeyB9Ci0gICAgYm9vbCBuZWVkc09wRGVidWdDYWxs
YmFja3MoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIERlYnVnZ2VyKGJvb2wgPSBmYWxz
ZSkKKyAgICAgICAgOiBtX3Nob3VsZFBhdXNlKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgYm9v
bCBzaG91bGRQYXVzZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBuZWVkc0V4
Y2VwdGlvbkNhbGxiYWNrcygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdm9pZCBkZXRh
Y2goSlNHbG9iYWxPYmplY3QqKSB7IH0KICAgICB2b2lkIHNvdXJjZVBhcnNlZChFeGVjU3RhdGUq
LCBTb3VyY2VQcm92aWRlciosIGludCwgY29uc3QgV1RGOjpTdHJpbmcmKSB7IH0KQEAgLTIwOCw3
ICsyMjQsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRFeGVjdXRlUHJvZ3JhbShDYWxsRnJhbWUq
KSB7IH0KICAgICB2b2lkIGRpZFJlYWNoQnJlYWtwb2ludChDYWxsRnJhbWUqKSB7IH0KIAotICAg
IGJvb2wgbV9uZWVkc09wRGVidWdDYWxsYmFja3M7Citwcml2YXRlOgorICAgIGJvb2wgbV9zaG91
bGRQYXVzZTsKIH07CiAKICNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCShyZXZpc2lvbiAx
NjI1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTggQEAgcHVibGljOgogICAgIC8vIHJlLXNjYW5uZWQg
ZHVyaW5nIHRoZSBuZXh0IGNvbGxlY3Rpb24uCiAgICAgdm9pZCByZW1lbWJlckN1cnJlbnRseUV4
ZWN1dGluZ0NvZGVCbG9ja3MoSGVhcCopOwogCisgICAgLy8gVmlzaXRzIGVhY2ggQ29kZUJsb2Nr
IGluIHRoZSBoZWFwIHVudGlsIHRoZSB2aXNpdG9yIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZQorICAg
IC8vIHRvIGluZGljYXRlIHRoYXQgaXQgaXMgZG9uZSBpdGVyYXRpbmcsIG9yIHVudGlsIGV2ZXJ5
IENvZGVCbG9jayBoYXMgYmVlbgorICAgIC8vIHZpc2l0ZWQuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBmb3IgKGF1dG8gJmNvZGVCbG9jayA6IG1fc2V0KSB7CisgICAgICAgICAgICBib29sIGRvbmUg
PSBmdW5jdG9yKGNvZGVCbG9jayk7CisgICAgICAgICAgICBpZiAoZG9uZSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlz
IG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJs
ZSB0byBmaW5kCiAgICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJIGNvdWxkIGhhdmUg
d3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjI1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw2ICsxNzQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHR5cGVu
YW1lIEZ1bmN0b3I6OlJldHVyblR5cGUgZm9yRWFjaFByb3RlY3RlZENlbGwoRnVuY3RvciYpOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiB0eXBlbmFtZSBGdW5jdG9yOjpSZXR1
cm5UeXBlIGZvckVhY2hQcm90ZWN0ZWRDZWxsKCk7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+IGlubGluZSB2b2lkIGZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYpOwogCiAgICAg
ICAgIEhhbmRsZVNldCogaGFuZGxlU2V0KCkgeyByZXR1cm4gJm1faGFuZGxlU2V0OyB9CiAgICAg
ICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNrOyB9
CkBAIC00MzIsNiArNDMzLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gZm9y
RWFjaFByb3RlY3RlZENlbGwoZnVuY3Rvcik7CiAgICAgfQogCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy5pdGVyYXRlPEZ1bmN0
b3I+KGZ1bmN0b3IpOworICAgIH0KKwogICAgIGlubGluZSB2b2lkKiBIZWFwOjphbGxvY2F0ZVdp
dGhOb3JtYWxEZXN0cnVjdG9yKHNpemVfdCBieXRlcykKICAgICB7CiAjaWYgRU5BQkxFKEFMTE9D
QVRJT05fTE9HR0lORykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTYyNTk0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTIwNSw4ICsxMjA1LDkgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFsRXhlY3V0
YQogTkVWRVJfSU5MSU5FIHZvaWQgSW50ZXJwcmV0ZXI6OmRlYnVnKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBEZWJ1Z0hvb2tJRCBkZWJ1Z0hvb2tJRCkKIHsKICAgICBEZWJ1Z2dlciogZGVidWdnZXIg
PSBjYWxsRnJhbWUtPnZtRW50cnlHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsKLSAgICBpZiAo
IWRlYnVnZ2VyIHx8ICFkZWJ1Z2dlci0+bmVlZHNPcERlYnVnQ2FsbGJhY2tzKCkpCisgICAgaWYg
KCFkZWJ1Z2dlcikKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChkZWJ1Z2dlci0+c2hvdWxk
UGF1c2UoKSB8fCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5udW1CcmVha3BvaW50cygpIHx8IGNh
bGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpOwogCiAgICAgc3dpdGNoIChkZWJ1Z0hvb2tJRCkgewog
ICAgICAgICBjYXNlIERpZEVudGVyQ2FsbEZyYW1lOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gMTYyNTk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05OTcsMTQgKzk5NywyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlv
biogY3VyCiAgICAgYnJlYWtwb2ludCgpOwogI2VsaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVn
Z2VyKCk7CiAgICAgY2hhciogZGVidWdnZXJBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0OjpkZWJ1Z2dlck9mZnNldCgpOwogICAg
IGxvYWRQdHIoZGVidWdnZXJBZGRyZXNzLCByZWdUMCk7CiAgICAgSnVtcCBub0RlYnVnZ2VyID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7Ci0gICAgY2hhciogZmxhZ0FkZHJlc3MgPSByZWlu
dGVycHJldF9jYXN0PGNoYXIqPihkZWJ1Z2dlcikgKyBEZWJ1Z2dlcjo6bmVlZHNPcERlYnVnQ2Fs
bGJhY2tzT2Zmc2V0KCk7Ci0gICAgSnVtcCBza2lwRGVidWdIb29rID0gYnJhbmNoVGVzdDgoWmVy
bywgQWJzb2x1dGVBZGRyZXNzKGZsYWdBZGRyZXNzKSk7CisKKyAgICBEZWJ1Z2dlciogZGVidWdn
ZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7CisgICAgY2hhciogc2hvdWxkUGF1c2VBZGRy
ZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGVidWdnZXIpICsgRGVidWdnZXI6OnNob3Vs
ZFBhdXNlT2Zmc2V0KCk7CisgICAgSnVtcCBjYWxsYmFja05lZWRlZCA9IGJyYW5jaFRlc3Q4KE5v
blplcm8sIEFic29sdXRlQWRkcmVzcyhzaG91bGRQYXVzZUFkZHJlc3MpKTsKKworICAgIGNoYXIq
IG51bUJyZWFrcG9pbnRzQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGVCbG9j
aygpKSArIENvZGVCbG9jazo6bnVtQnJlYWtwb2ludHNPZmZzZXQoKTsKKyAgICBsb2FkMzIobnVt
QnJlYWtwb2ludHNBZGRyZXNzLCByZWdUMCk7CisgICAgSnVtcCBub0JyZWFrcG9pbnRTZXQgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworCisgICAgY2FsbGJhY2tOZWVkZWQubGluayh0aGlz
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKLSAgICBza2lwRGVidWdIb29rLmxpbmsodGhpcyk7CisKKyAgICBub0Jy
ZWFrcG9pbnRTZXQubGluayh0aGlzKTsKICAgICBub0RlYnVnZ2VyLmxpbmsodGhpcyk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxNjI1OTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTUsMTMgKzcxNSwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3Vy
CiAgICAgYnJlYWtwb2ludCgpOwogI2VsaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNvZGVCbG9jaygpLT5nbG9iYWxPYmpl
Y3QoKTsKLSAgICBEZWJ1Z2dlciogZGVidWdnZXIgPSBnbG9iYWxPYmplY3QtPmRlYnVnZ2VyKCk7
CiAgICAgY2hhciogZGVidWdnZXJBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZ2xv
YmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0OjpkZWJ1Z2dlck9mZnNldCgpOwogICAgIEp1bXAg
bm9EZWJ1Z2dlciA9IGJyYW5jaFRlc3RQdHIoWmVybywgQWJzb2x1dGVBZGRyZXNzKGRlYnVnZ2Vy
QWRkcmVzcykpOwotICAgIGNoYXIqIGZsYWdBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oZGVidWdnZXIpICsgRGVidWdnZXI6Om5lZWRzT3BEZWJ1Z0NhbGxiYWNrc09mZnNldCgpOwot
ICAgIEp1bXAgc2tpcERlYnVnSG9vayA9IGJyYW5jaFRlc3Q4KFplcm8sIEFic29sdXRlQWRkcmVz
cyhmbGFnQWRkcmVzcykpOworCisgICAgRGVidWdnZXIqIGRlYnVnZ2VyID0gZ2xvYmFsT2JqZWN0
LT5kZWJ1Z2dlcigpOworICAgIGNoYXIqIHNob3VsZFBhdXNlQWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGRlYnVnZ2VyKSArIERlYnVnZ2VyOjpzaG91bGRQYXVzZU9mZnNldCgpOwor
ICAgIEp1bXAgY2FsbGJhY2tOZWVkZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBYnNvbHV0ZUFk
ZHJlc3Moc2hvdWxkUGF1c2VBZGRyZXNzKSk7CisKKyAgICBjaGFyKiBudW1CcmVha3BvaW50c0Fk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlQmxvY2soKSkgKyBDb2RlQmxvY2s6
Om51bUJyZWFrcG9pbnRzT2Zmc2V0KCk7CisgICAgbG9hZDMyKG51bUJyZWFrcG9pbnRzQWRkcmVz
cywgcmVnVDApOworICAgIEp1bXAgbm9CcmVha3BvaW50U2V0ID0gYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QwKTsKKworICAgIGNhbGxiYWNrTmVlZGVkLmxpbmsodGhpcyk7CiAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0g
ICAgc2tpcERlYnVnSG9vay5saW5rKHRoaXMpOworCisgICAgbm9CcmVha3BvaW50U2V0Lmxpbmso
dGhpcyk7CiAgICAgbm9EZWJ1Z2dlci5saW5rKHRoaXMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0oY3VycmVudEluc3RydWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE2MjU5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29y
a2luZyBjb3B5KQpAQCAtODM1LDEzICs4MzUsMTggQEAgX2xsaW50X29wX3Byb2ZpbGVfZGlkX2Nh
bGw6CiAKIF9sbGludF9vcF9kZWJ1ZzoKICAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIHQwCi0gICAgbG9hZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0
MF0sIHQwCisgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQxCisgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2dsb2JhbE9iamVjdFt0MV0sIHQwCiAgICAgbG9hZHAgSlNHbG9iYWxPYmplY3Q6Om1fZGVi
dWdnZXJbdDBdLCB0MAogICAgIGJ0aXogdDAsIC5vcERlYnVnRG9uZQotICAgIGxvYWRiIERlYnVn
Z2VyOjptX25lZWRzT3BEZWJ1Z0NhbGxiYWNrc1t0MF0sIHQwCi0gICAgYnRieiB0MCwgLm9wRGVi
dWdEb25lCiAKKyAgICBsb2FkYiBEZWJ1Z2dlcjo6bV9zaG91bGRQYXVzZVt0MF0sIHQwCisgICAg
YnRibnogdDAsIC5vcERlYnVnRG9DYWxsYmFjaworCisgICAgbG9hZGkgQ29kZUJsb2NrOjptX251
bUJyZWFrcG9pbnRzW3QxXSwgdDAKKyAgICBidGl6IHQwLCAub3BEZWJ1Z0RvbmUKKworLm9wRGVi
dWdEb0NhbGxiYWNrOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2RlYnVnKQog
Lm9wRGVidWdEb25lOiAgICAgICAgICAgICAgICAgICAgCiAgICAgZGlzcGF0Y2goMykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAxNjI1OTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3MiwxMCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFi
bGU6Omluc3RhbGxDb2RlKENvZGVCCiAKICAgICBpZiAob2xkQ29kZUJsb2NrKQogICAgICAgICBv
bGRDb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKKworICAgIERlYnVnZ2VyKiBkZWJ1
Z2dlciA9IGdlbmVyaWNDb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOworICAg
IGlmIChkZWJ1Z2dlcikKKyAgICAgICAgZGVidWdnZXItPnJlZ2lzdGVyQ29kZUJsb2NrKGdlbmVy
aWNDb2RlQmxvY2spOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3Q29kZUJsb2NrRm9yKAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>