<?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>125530</bug_id>
          
          <creation_ts>2013-12-10 12:33:48 -0800</creation_ts>
          <short_desc>DFG should have a separate StoreBarrier node</short_desc>
          <delta_ts>2013-12-18 16:36:26 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>121074</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Hahnenberg">mhahnenberg</reporter>
          <assigned_to name="Mark Hahnenberg">mhahnenberg</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>958459</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-10 12:33:48 -0800</bug_when>
    <thetext>This is in preparation for GenGC. We use a separate node instead of making them implicitly part of other nodes so that it&apos;s easier to run analyses on them, e.g. for barrier elision. They will be inserted during the fixup phase. Initially they will not generate any code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960585</commentid>
    <comment_count>1</comment_count>
      <attachid>219431</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 11:13:18 -0800</bug_when>
    <thetext>Created attachment 219431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960588</commentid>
    <comment_count>2</comment_count>
      <attachid>219431</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 11:19:16 -0800</bug_when>
    <thetext>Comment on attachment 219431
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5514
&gt; +#if USE(JSVALUE64)
&gt; +    jit.rshift64(MacroAssembler::TrustedImm32(3 + 4), scratch2);
&gt; +#else
&gt; +    jit.rshift32(MacroAssembler::TrustedImm32(3 + 4), scratch2);
&gt; +#endif

Get rid of magic numbers. I&apos;ll probably add constants to MarkedBlock for both the 3 (markByteShiftAmount) and the 4 (atomShiftAmount).

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5523
&gt; +    size_t markIndex = (reinterpret_cast&lt;size_t&gt;(owner) &amp; ~MarkedBlock::blockMask) &gt;&gt; (3 + 4);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960592</commentid>
    <comment_count>3</comment_count>
      <attachid>219431</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-17 11:26:28 -0800</bug_when>
    <thetext>Comment on attachment 219431
Patch

Attachment 219431 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/49928267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960593</commentid>
    <comment_count>4</comment_count>
      <attachid>219433</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 11:27:39 -0800</bug_when>
    <thetext>Created attachment 219433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960594</commentid>
    <comment_count>5</comment_count>
      <attachid>219431</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-12-17 11:30:22 -0800</bug_when>
    <thetext>Comment on attachment 219431
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:407
&gt; +                    node-&gt;convertToPhantom();

The release assert means you should never hit this

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:554
&gt; -                fixEdge&lt;KnownCellUse&gt;(child1);
&gt;                  fixEdge&lt;Int32Use&gt;(child2);
&gt; +                fixEdge&lt;KnownCellUse&gt;(child1);

Why this reordering?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5659
&gt; +#if CPU(X86)
&gt; +    jit.push(scratch1);
&gt; +    jit.push(scratch1);
&gt; +#endif
&gt; +

This unaligns the stack in the subsequent call doesn&apos;t it?  the return address will be pushed to the stack leading to 3*sizeof(void*) alignment (i can&apos;t remember the x86 calling convention at all)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960596</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 11:33:19 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 219431 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219431&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:407
&gt; &gt; +                    node-&gt;convertToPhantom();
&gt; 
&gt; The release assert means you should never hit this
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:554
&gt; &gt; -                fixEdge&lt;KnownCellUse&gt;(child1);
&gt; &gt;                  fixEdge&lt;Int32Use&gt;(child2);
&gt; &gt; +                fixEdge&lt;KnownCellUse&gt;(child1);
&gt; 
&gt; Why this reordering?
No reason, just cruft I forgot to undo. Will revert.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:5659
&gt; &gt; +#if CPU(X86)
&gt; &gt; +    jit.push(scratch1);
&gt; &gt; +    jit.push(scratch1);
&gt; &gt; +#endif
&gt; &gt; +
&gt; 
&gt; This unaligns the stack in the subsequent call doesn&apos;t it?  the return address will be pushed to the stack leading to 3*sizeof(void*) alignment (i can&apos;t remember the x86 calling convention at all)
I think that&apos;s correct. I was doing stack adjustments to make sure things were aligned, but I removed it and forgot to change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960612</commentid>
    <comment_count>7</comment_count>
      <attachid>219433</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-12-17 12:02:45 -0800</bug_when>
    <thetext>Comment on attachment 219433
Patch

Attachment 219433 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/50118231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960641</commentid>
    <comment_count>8</comment_count>
      <attachid>219433</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 13:06:42 -0800</bug_when>
    <thetext>Comment on attachment 219433
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; +        Node* storeNode = node-&gt;storeNode();

I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 

The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960650</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 13:17:25 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 219433 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219433&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; &gt; +        Node* storeNode = node-&gt;storeNode();
&gt; 
&gt; I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 
&gt; 
&gt; The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.

Why exactly is it so fragile?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960672</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 14:34:05 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 219433 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219433&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; &gt; &gt; +        Node* storeNode = node-&gt;storeNode();
&gt; &gt; 
&gt; &gt; I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 
&gt; &gt; 
&gt; &gt; The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.
&gt; 
&gt; Why exactly is it so fragile?

There are multiple places that not only have to know what a StoreBarrier is, but also, how StoreBarrier ought to behave depending on its storeNode().  That&apos;s fragile: imagine changing the meaning of one of the store nodes, or adding a new store node; you&apos;ll have to add it in all of the places that StoreBarrier gets handled.  Also imagine adding a new phase that tries to understand what various nodes do; now you&apos;ll have to make sure you take care of StoreBarrier.  You&apos;ve already done this wrong in this patch: Clobberize appears to assume that StoreBarrier always reads/writes BarrierState even though StoreBarrier does *nothing* for some kinds of storeNode().

The worst part about this complexity that you&apos;ve added is that it accomplishes nothing.  Why can&apos;t you just *not emit a StoreBarrier* in fixup phase if the store node doesn&apos;t actually do a barrier-able store?  Why do you have to have each phase that inspects a StoreBarrier have to again recompute whether or not the fixup phase should have inserted the StoreBarrier to begin with?

The whole point of the fixup phase is to minimize this kind of madness.  Just change fixup phase to not insert a StoreBarrier if it isn&apos;t needed, and then you&apos;ll be able to delete a bunch of the code in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960673</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 14:38:40 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; (From update of attachment 219433 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219433&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; &gt; &gt; &gt; +        Node* storeNode = node-&gt;storeNode();
&gt; &gt; &gt; 
&gt; &gt; &gt; I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 
&gt; &gt; &gt; 
&gt; &gt; &gt; The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.
&gt; &gt; 
&gt; &gt; Why exactly is it so fragile?
&gt; 
&gt; There are multiple places that not only have to know what a StoreBarrier is, but also, how StoreBarrier ought to behave depending on its storeNode().  That&apos;s fragile: imagine changing the meaning of one of the store nodes, or adding a new store node; you&apos;ll have to add it in all of the places that StoreBarrier gets handled.  Also imagine adding a new phase that tries to understand what various nodes do; now you&apos;ll have to make sure you take care of StoreBarrier.  You&apos;ve already done this wrong in this patch: Clobberize appears to assume that StoreBarrier always reads/writes BarrierState even though StoreBarrier does *nothing* for some kinds of storeNode().
&gt; 
&gt; The worst part about this complexity that you&apos;ve added is that it accomplishes nothing.  Why can&apos;t you just *not emit a StoreBarrier* in fixup phase if the store node doesn&apos;t actually do a barrier-able store?  Why do you have to have each phase that inspects a StoreBarrier have to again recompute whether or not the fixup phase should have inserted the StoreBarrier to begin with?
&gt; 
&gt; The whole point of the fixup phase is to minimize this kind of madness.  Just change fixup phase to not insert a StoreBarrier if it isn&apos;t needed, and then you&apos;ll be able to delete a bunch of the code in this patch.

But, broadly, I think you&apos;re taking the wrong approach to DFG IR.  Store barriers are a *simple* concept.  They shouldn&apos;t require adding a whole new kind of node-&gt;node edge to the DFG IR.  A new opcode (StoreBarrier) is understandable.  But a new way in which nodes refer to each other is definitely overkill for such a simple thing.

Do you really expect everyone who ever writes any optimization or transformation over DFG IR to have to understand that DFG nodes may refer to each other in one of precisely two ways:

- Use edges.

- Super special StoreBarrier-&gt;storeNode() edges that exist solely for the purpose of avoiding doing a tiny bit of work in FixupPhase.

It&apos;s important that a compiler IR is *clean*.  This is how we can communicate it to each other, and how we can remember what the IR semantics are when we&apos;re stuck having to fix super subtle bugs.  The cleaner the IR, the easier it is to reason about the compiler&apos;s correctness.  Adding a super special way for nodes to refer to each other should have a *damn good* justification, and I just don&apos;t see such a justification here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960688</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 15:26:36 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; (From update of attachment 219433 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219433&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; &gt; &gt; &gt; &gt; +        Node* storeNode = node-&gt;storeNode();
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.
&gt; &gt; &gt; 
&gt; &gt; &gt; Why exactly is it so fragile?
&gt; &gt; 
&gt; &gt; There are multiple places that not only have to know what a StoreBarrier is, but also, how StoreBarrier ought to behave depending on its storeNode().  That&apos;s fragile: imagine changing the meaning of one of the store nodes, or adding a new store node; you&apos;ll have to add it in all of the places that StoreBarrier gets handled.  Also imagine adding a new phase that tries to understand what various nodes do; now you&apos;ll have to make sure you take care of StoreBarrier.  You&apos;ve already done this wrong in this patch: Clobberize appears to assume that StoreBarrier always reads/writes BarrierState even though StoreBarrier does *nothing* for some kinds of storeNode().
&gt; &gt; 
&gt; &gt; The worst part about this complexity that you&apos;ve added is that it accomplishes nothing.  Why can&apos;t you just *not emit a StoreBarrier* in fixup phase if the store node doesn&apos;t actually do a barrier-able store?  Why do you have to have each phase that inspects a StoreBarrier have to again recompute whether or not the fixup phase should have inserted the StoreBarrier to begin with?
&gt; &gt; 
&gt; &gt; The whole point of the fixup phase is to minimize this kind of madness.  Just change fixup phase to not insert a StoreBarrier if it isn&apos;t needed, and then you&apos;ll be able to delete a bunch of the code in this patch.
&gt; 
&gt; But, broadly, I think you&apos;re taking the wrong approach to DFG IR.  Store barriers are a *simple* concept.  They shouldn&apos;t require adding a whole new kind of node-&gt;node edge to the DFG IR.  A new opcode (StoreBarrier) is understandable.  But a new way in which nodes refer to each other is definitely overkill for such a simple thing.
&gt; 
&gt; Do you really expect everyone who ever writes any optimization or transformation over DFG IR to have to understand that DFG nodes may refer to each other in one of precisely two ways:
&gt; 
&gt; - Use edges.
&gt; 
&gt; - Super special StoreBarrier-&gt;storeNode() edges that exist solely for the purpose of avoiding doing a tiny bit of work in FixupPhase.
&gt; 
&gt; It&apos;s important that a compiler IR is *clean*.  This is how we can communicate it to each other, and how we can remember what the IR semantics are when we&apos;re stuck having to fix super subtle bugs.  The cleaner the IR, the easier it is to reason about the compiler&apos;s correctness.  Adding a super special way for nodes to refer to each other should have a *damn good* justification, and I just don&apos;t see such a justification here.

This is why we have code reviews!

First of all, the storeNode wasn&apos;t intentionally used to avoid doing work in the fixup phase, and I&apos;m not advocating for it over another approach. It&apos;s just how I coded it up, and it&apos;s easy to get rid of it. I agree that storeNode doesn&apos;t buy us much if anything. I was mainly using it for referring to the other node&apos;s op. I can replace the storeNode with just the op. 

Second, it seems to me that the fixup phase doesn&apos;t have enough information to decide ahead of time whether or not a particular store node needs or doesn&apos;t need a store barrier unless it takes a very conservative approach. So why not just add StoreBarriers along with each node that might need them?  Then we could use the abstract interpreter and the write barrier elision phase to prune away ones that we could prove we didn&apos;t need. I&apos;ll also add code to use the predictions for the child nodes to avoid unnecessarily inserting store barriers.

Finally, I think that inserting store barriers *only* during the fixup phase is also a fragile approach. For any further transformations after the fixup phase you then have to be careful not to insert a node that could cause a GC between the store and initial barrier. That&apos;s why I also add StoreBarriers wherever we insert a new node that requires a barrier (e.g. in the constant folding phase). Again, it&apos;s simple: if you do a store then you insert a barrier node. Let somebody else figure out whether or not it was necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960693</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 15:46:58 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; &gt; (From update of attachment 219433 [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=219433&amp;action=review
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:1592
&gt; &gt; &gt; &gt; &gt; &gt; +        Node* storeNode = node-&gt;storeNode();
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I really *really* don&apos;t like this. At all. The store barrier should not point to the &quot;store&quot; node. Instead, you should only plant a store barrier in fix up if you know that the store node needs one. Thereafter, the store barrier node should always unconditionally mean that you have a store barrier. 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; The way you&apos;ve done it currently is super fragile and I don&apos;t think we want it.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Why exactly is it so fragile?
&gt; &gt; &gt; 
&gt; &gt; &gt; There are multiple places that not only have to know what a StoreBarrier is, but also, how StoreBarrier ought to behave depending on its storeNode().  That&apos;s fragile: imagine changing the meaning of one of the store nodes, or adding a new store node; you&apos;ll have to add it in all of the places that StoreBarrier gets handled.  Also imagine adding a new phase that tries to understand what various nodes do; now you&apos;ll have to make sure you take care of StoreBarrier.  You&apos;ve already done this wrong in this patch: Clobberize appears to assume that StoreBarrier always reads/writes BarrierState even though StoreBarrier does *nothing* for some kinds of storeNode().
&gt; &gt; &gt; 
&gt; &gt; &gt; The worst part about this complexity that you&apos;ve added is that it accomplishes nothing.  Why can&apos;t you just *not emit a StoreBarrier* in fixup phase if the store node doesn&apos;t actually do a barrier-able store?  Why do you have to have each phase that inspects a StoreBarrier have to again recompute whether or not the fixup phase should have inserted the StoreBarrier to begin with?
&gt; &gt; &gt; 
&gt; &gt; &gt; The whole point of the fixup phase is to minimize this kind of madness.  Just change fixup phase to not insert a StoreBarrier if it isn&apos;t needed, and then you&apos;ll be able to delete a bunch of the code in this patch.
&gt; &gt; 
&gt; &gt; But, broadly, I think you&apos;re taking the wrong approach to DFG IR.  Store barriers are a *simple* concept.  They shouldn&apos;t require adding a whole new kind of node-&gt;node edge to the DFG IR.  A new opcode (StoreBarrier) is understandable.  But a new way in which nodes refer to each other is definitely overkill for such a simple thing.
&gt; &gt; 
&gt; &gt; Do you really expect everyone who ever writes any optimization or transformation over DFG IR to have to understand that DFG nodes may refer to each other in one of precisely two ways:
&gt; &gt; 
&gt; &gt; - Use edges.
&gt; &gt; 
&gt; &gt; - Super special StoreBarrier-&gt;storeNode() edges that exist solely for the purpose of avoiding doing a tiny bit of work in FixupPhase.
&gt; &gt; 
&gt; &gt; It&apos;s important that a compiler IR is *clean*.  This is how we can communicate it to each other, and how we can remember what the IR semantics are when we&apos;re stuck having to fix super subtle bugs.  The cleaner the IR, the easier it is to reason about the compiler&apos;s correctness.  Adding a super special way for nodes to refer to each other should have a *damn good* justification, and I just don&apos;t see such a justification here.
&gt; 
&gt; This is why we have code reviews!
&gt; 
&gt; First of all, the storeNode wasn&apos;t intentionally used to avoid doing work in the fixup phase, and I&apos;m not advocating for it over another approach. It&apos;s just how I coded it up, and it&apos;s easy to get rid of it. I agree that storeNode doesn&apos;t buy us much if anything. I was mainly using it for referring to the other node&apos;s op. I can replace the storeNode with just the op. 

What do you mean by replacing the storeNode with just the op?

I think that all possible solutions that are consistent with how ssa-like compiler IRs work would have the barrier not referring to the store in any way. 

&gt; 
&gt; Second, it seems to me that the fixup phase doesn&apos;t have enough information to decide ahead of time whether or not a particular store node needs or doesn&apos;t need a store barrier unless it takes a very conservative approach. So why not just add StoreBarriers along with each node that might need them?  Then we could use the abstract interpreter and the write barrier elision phase to prune away ones that we could prove we didn&apos;t need. I&apos;ll also add code to use the predictions for the child nodes to avoid unnecessarily inserting store barriers.

I could see this approach working: always insert store barriers and remove them when you realize that the predicted types are something you wouldn&apos;t barrier. It just seems like this could lead to dumbness. Remember after you insert the StoreBarrier you necessarily forget what you inserted it for. (You do this because anything else would be insane. And to appease the compiler gods who frown on such shenanigans.) So now say you have some node that is storing an int32 into a typed array. The store barrier&apos;s value child will be predicted int32. Should the store barrier speculate int32 or just NonCell?  In this case it should speculate int32. But what about the case where you&apos;re storing a double into a typed array? Here it&apos;s clearly bad if the store barrier speculates int32. It&apos;s also hugely inefficient if it speculates NonCell, since NonCell doesn&apos;t prove double (it proves int or double or Boolean or null or undefined, god I love this language!). See how that&apos;s rapidly descending into madness?  Otoh you can just observe, during fix up, that you&apos;re storing to a typed array and just not insert a store barrier to begin with!  Bang problem solved. You can of course still do other optimizations and reasoning, but fixup&apos;s existing knowledge is likely to prove useful: it&apos;ll prevent you from having to worry about large class of &quot;obviously don&apos;t need a barrier&quot; cases. 

Broadly, the fix up phase is exactly the right place to make the bulk of these decisions. That&apos;s the place where we know that we are speculating in a way that would result in a barrier. The typed array case is an example of this but there are probably others. 

The CFA would be conservative here since that doesn&apos;t add speculations and it&apos;s job is to preserve any speculations that had already been inserted. So for example if you inserted a store barrier that speculated int32 and then proved that the barrier is unneeded for unrelated reasons then you&apos;d still need to keep the int32 check. 

It&apos;s ok to have the CFA and folder remove store barriers as an additional optimization, but I would y rely solely on CFA. 

&gt; 
&gt; Finally, I think that inserting store barriers *only* during the fixup phase is also a fragile approach. For any further transformations after the fixup phase you then have to be careful not to insert a node that could cause a GC between the store and initial barrier. That&apos;s why I also add StoreBarriers wherever we insert a new node that requires a barrier (e.g. in the constant folding phase). Again, it&apos;s simple: if you do a store then you insert a barrier node. Let somebody else figure out whether or not it was necessary.

This will never happen. It&apos;s incorrect for the compiler&apos;s post-fix up passes to make the code do things it wasn&apos;t doing before. If you sort of squint carefully you&apos;ll note that each phase essentially removes things. The closest thing to adding things is hoisting, but we don&apos;t hoist stores so store barriers don&apos;t come into play. 

Anyway. The whole point of fix up phase is to put things like this into that phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960772</commentid>
    <comment_count>14</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-17 18:01:53 -0800</bug_when>
    <thetext>&gt; What do you mean by replacing the storeNode with just the op?
&gt; 
&gt; I think that all possible solutions that are consistent with how ssa-like compiler IRs work would have the barrier not referring to the store in any way. 

I just mean a field of type NodeType. Depending on the node it was inserted for, a StoreBarrier can do slightly different things (e.g. what if the original node didn&apos;t have a &quot;value&quot; child). I was just using the NodeType as a proxy for &quot;this barrier has a base and a value, this barrier just has a base, this barrier uses the global object as its base, etc.&quot; To be clear, the stored NodeType would be immutable from the time of the barrier&apos;s creation, meaning there would be no direct link between the store node and the barrier node.

Alternatively I could introduce a different enum that represented each of these unique kinds of barrier, but I figured the ops themselves were good enough. 

&gt; It&apos;s ok to have the CFA and folder remove store barriers as an additional optimization, but I would y rely solely on CFA. 
&gt; 

Did you mean &quot;I wouldn&apos;t rely solely...&quot;?

&gt; Anyway. The whole point of fix up phase is to put things like this into that phase.

After moving the checking of ArrayMode into fixup, I see what you mean by it moving a lot of code there from a bunch of other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>960784</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-17 18:33:22 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt; What do you mean by replacing the storeNode with just the op?
&gt; &gt; 
&gt; &gt; I think that all possible solutions that are consistent with how ssa-like compiler IRs work would have the barrier not referring to the store in any way. 
&gt; 
&gt; I just mean a field of type NodeType.

Oh, OK - in that case carry on!

&gt; Depending on the node it was inserted for, a StoreBarrier can do slightly different things (e.g. what if the original node didn&apos;t have a &quot;value&quot; child). I was just using the NodeType as a proxy for &quot;this barrier has a base and a value, this barrier just has a base, this barrier uses the global object as its base, etc.&quot; 

I think you can do this as one of two ways, and I think both fit with existing DFG idioms.

1) Have two StoreBarrier nodes.  One I would call StoreBarrier, and the other I would call ConditionalStoreBarrier.  StoreBarrier would just take a base and nothing else and would imply always running a barrier on that object.  ConditionalStoreBarrier would also take a value and would only execute a barrier on the base if the value had the appropriate type or whatever.  I would handle the global object by simply planting a WeakJSConstant for the global object and using the other node types.

2) Have one StoreBarrier node, and make it behave like a ConditionalStoreBarrier if !!child2().

&gt; To be clear, the stored NodeType would be immutable from the time of the barrier&apos;s creation, meaning there would be no direct link between the store node and the barrier node.

Yay!

&gt; 
&gt; Alternatively I could introduce a different enum that represented each of these unique kinds of barrier, but I figured the ops themselves were good enough.

I sometimes like to do that, like for the GetByVal.  But it&apos;s a really vicious trade-off.  For example, with the ByVal nodes and their ArrayMode, what often happens is at some point I&apos;ll have a brainfart and forget about all of the different ways that ByVal could behave and end up implementing a case for GetByVal in some phase that blindly assumes too much.  In my experience this kind of brainfarting is less likely when you have separate node types for all of the possible behaviors.  But, with GetByVal I currently prefer the ArrayMode approach just because there are *so darn many* array modes and there are enough places in the compiler where you just don&apos;t really care about the array mode.

So, I&apos;m not opposed to having a separate enum, in principle.  But here, I think that the global object case can be expressed by just passing a WeakJSConstant as a base; the presence-or-lack of a value could just be expressed by either having a value child or not having one.

&gt; 
&gt; &gt; It&apos;s ok to have the CFA and folder remove store barriers as an additional optimization, but I would y rely solely on CFA. 
&gt; &gt; 
&gt; 
&gt; Did you mean &quot;I wouldn&apos;t rely solely...&quot;?

Yup!

&gt; 
&gt; &gt; Anyway. The whole point of fix up phase is to put things like this into that phase.
&gt; 
&gt; After moving the checking of ArrayMode into fixup, I see what you mean by it moving a lot of code there from a bunch of other places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961047</commentid>
    <comment_count>16</comment_count>
      <attachid>219557</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 12:03:27 -0800</bug_when>
    <thetext>Created attachment 219557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961057</commentid>
    <comment_count>17</comment_count>
      <attachid>219557</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-12-18 12:37:16 -0800</bug_when>
    <thetext>Comment on attachment 219557
Patch

Attachment 219557 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/46118079</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961061</commentid>
    <comment_count>18</comment_count>
      <attachid>219559</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 12:38:57 -0800</bug_when>
    <thetext>Created attachment 219559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961076</commentid>
    <comment_count>19</comment_count>
      <attachid>219559</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 13:08:49 -0800</bug_when>
    <thetext>Comment on attachment 219559
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreter.h:155
&gt; +    template &lt;typename T&gt;
&gt; +    bool isKnownNotCell(T node)
&gt; +    {
&gt; +        return !(forNode(node).m_type &amp; SpecCell);
&gt; +    }
&gt; +

I have a feeling there is already an idiom for this:

!m_interpreter.needsTypeCheck(node, ~SpecCell)

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:1601
&gt; +    void fixupHeapStore(Node* node)
&gt; +    {
&gt; +        Node* barrierNode = 0;
&gt; +        switch (node-&gt;op()) {
&gt; +        case ArrayPush: {
&gt; +            switch (node-&gt;arrayMode().type()) {
&gt; +            case Array::Contiguous:
&gt; +            case Array::ArrayStorage: {
&gt; +                barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                    Edge(node-&gt;child1().node(), KnownCellUse), Edge(node-&gt;child2().node(), UntypedUse));
&gt; +            }
&gt; +
&gt; +            default:
&gt; +                return;
&gt; +            }
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case PutById:
&gt; +        case PutByIdDirect: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child1().node(), CellUse), Edge(node-&gt;child2().node(), UntypedUse));
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        // The barrier must go after these nodes because they allocate their new property storage first and then do the store.
&gt; +        case AllocatePropertyStorage:
&gt; +        case ReallocatePropertyStorage: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, StoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child1().node(), KnownCellUse));
&gt; +            fixupNode(barrierNode);
&gt; +            m_insertionSet.insert(m_indexInBlock + 1, barrierNode);
&gt; +            return;
&gt; +        }
&gt; +
&gt; +        case PutStructure: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, StoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child1().node(), KnownCellUse));
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case PutGlobalVar: {
&gt; +            Node* globalObjectNode = m_insertionSet.insertNode(m_indexInBlock, SpecNone, WeakJSConstant, node-&gt;codeOrigin, OpInfo(m_graph.globalObjectFor(node-&gt;codeOrigin)));
&gt; +            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(globalObjectNode, KnownCellUse), Edge(node-&gt;child1().node(), UntypedUse));
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case TearOffActivation: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, StoreBarrierWithNullCheck, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child1().node(), UntypedUse));
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case PutByOffset: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child2().node(), KnownCellUse), Edge(node-&gt;child3().node(), UntypedUse));
&gt; +            break;
&gt; +        }
&gt; +
&gt; +        case PutClosureVar: {
&gt; +            barrierNode = m_graph.addNode(SpecNone, ConditionalStoreBarrier, m_currentNode-&gt;codeOrigin, 
&gt; +                Edge(node-&gt;child1().node(), KnownCellUse), Edge(node-&gt;child3().node(), UntypedUse));
&gt; +            break;
&gt; +        }
&gt; +

Seems like it would be better to have a insertBarrier() helper that did insertNode/fixupNode.  That way you won&apos;t have to have this nested switch on NodeType.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961078</commentid>
    <comment_count>20</comment_count>
      <attachid>219559</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 13:17:06 -0800</bug_when>
    <thetext>Comment on attachment 219559
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierElisionPhase.cpp:49
&gt; +    bool couldCauseGC(Node* node)

All of these methods should be private.  That&apos;s just how the other phases are.

And put the run() method at the top.

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierElisionPhase.cpp:97
&gt; +    void clearVariableBarriers()
&gt; +    {
&gt; +        for (unsigned i = 0; i &lt; m_graph.m_variableAccessData.size(); ++i)
&gt; +            m_graph.m_variableAccessData[i].checkAndSetNeedsBarrier(true);
&gt; +    }

Kill the variable access data stuff.

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierElisionPhase.cpp:152
&gt; +    bool handleLocal(HashSet&lt;Node*&gt;&amp; dontNeedBarriers, Node* node)
&gt; +    {
&gt; +        ASSERT(node-&gt;hasLocal(m_graph));
&gt; +        switch (node-&gt;op()) {
&gt; +        case GetLocal: {
&gt; +            if (!node-&gt;variableAccessData()-&gt;needsBarrier())
&gt; +                dontNeedBarriers.add(node);
&gt; +            return false;
&gt; +        }
&gt; +
&gt; +        case MovHint:
&gt; +        case MovHintAndCheck:
&gt; +        case SetLocal: {
&gt; +            Node* child = node-&gt;child1().node();
&gt; +            VariableAccessData* variable = node-&gt;variableAccessData();
&gt; +            if (dontNeedBarriers.contains(child))
&gt; +                return variable-&gt;checkAndSetNeedsBarrier(false);
&gt; +            return variable-&gt;checkAndSetNeedsBarrier(true);
&gt; +        }
&gt; +
&gt; +        default:
&gt; +            return false;
&gt; +        }
&gt; +    }

Kill

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierElisionPhase.cpp:195
&gt; +    HashMap&lt;BasicBlock*, HashSet&lt;Node*&gt;&gt; m_nodeStateAtTail;

Kill this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961107</commentid>
    <comment_count>21</comment_count>
      <attachid>219570</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 14:19:24 -0800</bug_when>
    <thetext>Created attachment 219570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961110</commentid>
    <comment_count>22</comment_count>
      <attachid>219570</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-18 14:22:37 -0800</bug_when>
    <thetext>Comment on attachment 219570
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGStoreBarrierElisionPhase.cpp:114
&gt; +        if (node-&gt;op() != StoreBarrier)
&gt; +            return;

Other kinds of barriers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961119</commentid>
    <comment_count>23</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 14:47:26 -0800</bug_when>
    <thetext>Committed r160796: &lt;http://trac.webkit.org/changeset/160796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961172</commentid>
    <comment_count>24</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 16:35:54 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961173</commentid>
    <comment_count>25</comment_count>
      <attachid>219585</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 16:35:58 -0800</bug_when>
    <thetext>Created attachment 219585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961175</commentid>
    <comment_count>26</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-18 16:36:26 -0800</bug_when>
    <thetext>Command line flub, ignore this patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219431</attachid>
            <date>2013-12-17 11:13:18 -0800</date>
            <delta_ts>2013-12-17 11:30:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131217111313.patch</filename>
            <type>text/plain</type>
            <size>108810</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxMy0xMi0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHByZXBhcmF0aW9uIGZvciBHZW5HQy4gV2UgdXNlIGEgc2VwYXJhdGUgU3RvcmVCYXJyaWVyIG5v
ZGUgaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBpbXBsaWNpdGx5IAorICAgICAgICBwYXJ0IG9mIG90
aGVyIG5vZGVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gcnVuIGFuYWx5c2VzIG9uIHRoZW0sIGUu
Zy4gZm9yIHRoZSBTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuIAorICAgICAgICBUaGV5IGFyZSBp
bnNlcnRlZCBkdXJpbmcgdGhlIGZpeHVwIHBoYXNlLiBJbml0aWFsbHkgdGhleSBkbyBub3QgZ2Vu
ZXJhdGUgYW55IGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KTogV2hlbmV2ZXIgd2UgaW5zZXJ0IG5ldyBub2RlcyB0aGF0IHJlcXVpcmUgU3RvcmVCYXJyaWVy
cywKKyAgICAgICAgd2UgaGF2ZSB0byBhZGQgdGhvc2UgbmV3IFN0b3JlQmFycmllcnMgdG9vLiBJ
dCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgYW5kIAor
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIG5vZGVzIHJlcXVpcmUgdGhlaXIgU3Rv
cmVCYXJyaWVycyB0byBjb21lIGFmdGVyIHRoZW0gc2luY2UgdGhleSBhbGxvY2F0ZSBmaXJzdCwK
KyAgICAgICAgd2hpY2ggY291bGQgY2F1c2UgYSBHQywgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3Vs
dGluZyBidWZmZXIgaW50byB0aGVpciBKU0NlbGwsIHdoaWNoIHJlcXVpcmVzIHRoZSBiYXJyaWVy
LgorICAgICAgICBJZiB3ZSBldmVyIHJlcXVpcmUgdGhhdCB3cml0ZSBiYXJyaWVycyBvY2N1ciBi
ZWZvcmUgc3RvcmVzLCB3ZSdsbCBoYXZlIHRvIHNwbGl0IHRoZXNlIG5vZGVzIGludG8gCisgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlICsgU3RvcmVCYXJyaWVyICsgUHV0UHJvcGVydHlT
dG9yYWdlLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwSGVhcFN0b3JlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1N0b3JlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3RvcmVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6
CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNv
bXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpnZW5lcmljV3JpdGVCYXJyaWVyKTogVGhlIGZhc3QgcGF0aCB3cml0
ZSBiYXJyaWVyIGNoZWNrLiBJdCBsb2FkcyB0aGUgCisgICAgICAgIGJ5dGUgdGhhdCBjb250YWlu
cyB0aGUgbWFyayBiaXQgb2YgdGhlIG9iamVjdC4gCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIpOiBJZiB0aGUgZmFzdCBwYXRoIGNo
ZWNrIGZhaWxzIHdlIHRyeSB0byBzdG9yZSB0aGUgCisgICAgICAgIGNlbGwgaW4gdGhlIFdyaXRl
QmFycmllckJ1ZmZlciBzbyBhcyB0byBhdm9pZCBmcmVxdWVudGx5IGZsdXNoaW5nIGFsbCByZWdp
c3RlcnMgaW4gb3JkZXIgdG8gbWFrZSBhIEMgY2FsbC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKTogTW9yZSBiYXJlYm9uZXMgdmVyc2lvbiBvZiB0aGUgd3Jp
dGUgYmFycmllciB0byBiZSBleGVjdXRlZCAKKyAgICAgICAgZHVyaW5nIGFuIE9TUiBleGl0IGlu
dG8gYmFzZWxpbmUgY29kZS4gV2UgbXVzdCBkbyB0aGlzIHNvIHRoYXQgdGhlIGJhc2VsaW5lIEpJ
VCBvYmplY3QgYW5kIGFycmF5IHByb2ZpbGVzIAorICAgICAgICBhcmUgcHJvcGVybHkgY2xlYXJl
ZCBkdXJpbmcgR0MuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAgICAgICog
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA6IEFkZGVkLiBOZXcgREZHIHBoYXNl
IHRoYXQgZG9lcyBibG9jay1sb2NhbCBlbGlzaW9uIG9mIHJlZHVuZGFudAorICAgICAgICBTdG9y
ZUJhcnJpZXJzLiBFdmVyeSB0aW1lIGEgU3RvcmVCYXJyaWVyIG9uIGEgcGFydGljdWxhciBvYmpl
Y3QgaXMgZXhlY3V0ZWQsIGEgYml0IGlzIHNldCBpbmRpY2F0aW5nIHRoYXQgCisgICAgICAgIHRo
YXQgb2JqZWN0IGRvZXNuJ3QgbmVlZCBhbnkgbW9yZSBTdG9yZUJhcnJpZXJzLiAKKyAgICAgICAg
KEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpjb3Vs
ZENhdXNlR0MpOiBOb2RlcyB0aGF0IGNvdWxkIGNhdXNlIGEgR0MgcmVzZXQgdGhlIGJpdHMgZm9y
IGFsbCBvZiB0aGUgCisgICAgICAgIG9iamVjdHMga25vd24gaW4gdGhlIGN1cnJlbnQgYmxvY2su
IAorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6YWxsb2NhdGVz
RnJlc2hPYmplY3QpOiBBIG5vZGUgdGhhdCBjcmVhdGVzIGEgbmV3IG9iamVjdCBhdXRvbWF0aWNh
bGx5IAorICAgICAgICBzZXRzIHRoZSBiaXQgZm9yIHRoYXQgb2JqZWN0IHNpbmNlIGlmIGEgR0Mg
b2NjdXJyZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGF0IG9iamVjdCdzIGFsbG9jYXRpb24gdGhlbiB0
aGF0IAorICAgICAgICBvYmplY3Qgd291bGQgbm90IG5lZWQgYSBiYXJyaWVyIHNpbmNlIGl0IHdv
dWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgYSB5b3VuZyBnZW5lcmF0aW9uIG9iamVjdCB1bnRpbCB0
aGUgCisgICAgICAgIG5leHQgR0MgcG9pbnQuCisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlOjpub3RpY2VGcmVzaE9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpnZXRCYXNlT2ZTdG9yZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpzaG91bGRCZUVsaWRlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjplbGlkZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6Y2xlYXJWYXJpYWJsZUJh
cnJpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6Omhh
bmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6
aGFuZGxlTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFz
ZTo6aGFuZGxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lv
bik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlk
YXRlOjp2YWxpZGF0ZSk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om5lZWRzQmFycmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjaGVja0FuZFNldE5lZWRz
QmFycmllcik6CisgICAgICAgICogaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwOiBBZGRlZC4g
VGhlIFdyaXRlQmFycmllckJ1ZmZlciBidWZmZXJzIGEgc2V0IG9mIEpTQ2VsbHMgdGhhdCBhcmUg
YXdhaXRpbmcgCisgICAgICAgIGEgcGVuZGluZyBXcml0ZUJhcnJpZXIuIFRoaXMgYnVmZmVyIGlz
IHVzZWQgYnkgdGhlIERGRyB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBvdXQgdG8g
QyByZXBlYXRlZGx5CisgICAgICAgIHRvIGludm9rZSBhIHdyaXRlIGJhcnJpZXIgb24gYSBzaW5n
bGUgSlNDZWxsLiBJbnN0ZWFkIHRoZSBERkcgaGFzIGlubGluZSBjb2RlIHRvIGZpbGwgdGhlIFdy
aXRlQmFycmllciBidWZmZXIKKyAgICAgICAgdW50aWwgaXRzIGZ1bGwsIGFuZCB0aGVuIHRvIGNh
bGwgb3V0IHRvIEMgdG8gZmx1c2ggaXQuIFRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgd2lsbCBhbHNv
IGJlIGZsdXNoZWQgcHJpb3IgdG8gCisgICAgICAgIGVhY2ggRWRlbkNvbGxlY3Rpb24uCisgICAg
ICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6V3JpdGVCYXJyaWVyQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjp+V3JpdGVCYXJyaWVyQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OldyaXRl
QmFycmllckJ1ZmZlcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6
OmFkZCk6CisgICAgICAgICogaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpjYXBhY2l0eU9mZnNldCk6CisgICAgICAgIChK
U0M6OldyaXRlQmFycmllckJ1ZmZlcjo6YnVmZmVyT2Zmc2V0KToKKworCiAyMDEzLTEyLTE3ICBK
dWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VAY2lzY28uY29tPgogCiAgICAgICAgIEZpeCBhcm12
NyBhbmQgc2g0IGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCisgICAg
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHVGh1bmtzLmNwcAogICAgIGRmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtMjE5LDYgKzIyMCw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwCiAgICAgaGVhcC9XZWFrSGFu
ZGxlT3duZXIuY3BwCiAgICAgaGVhcC9XZWFrU2V0LmNwcAorICAgIGhlYXAvV3JpdGVCYXJyaWVy
QnVmZmVyLmNwcAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAKIAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNiAr
Mzg3LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBcCkBAIC01NzYsNiArNTc4LDggQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha1NldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0SW5saW5lcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvY29uZmlnLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00MjgsNiArNDI4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4K
QEAgLTQ3MSw2ICs0NzIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFr
QmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrSGFuZGxl
T3duZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrU2V0LmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyQnVmZmVy
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yQWdlbnRSZWdpc3RyeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIiAvPgpAQCAtOTQ4LDYgKzk1MCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBTG93ZXJpbmdQaGFz
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0YWNrTGF5b3V0UGhh
c2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1RodW5rcy5oIiAvPgpAQCAtMTAyNiw2ICsxMDI5LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXFdlYWtTZXRJbmxpbmVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJTdXBwb3J0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRCYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oIiAvPgpA
QCAtMTM4NCw0ICsxMzg4LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJn
ZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21p
emF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTYwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAiPgogICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5jcHAiPgorICAgICAgPEZpbHRlcj5o
ZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTE0OSw2ICsxMTUyLDkgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCI+CiAgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAiPgorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdUaHVua3MuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC0xNzU0LDYgKzE3NjAsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxXZWFrU2V0SW5saW5lcy5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXcml0
ZUJhcnJpZXJCdWZmZXIuaCI+CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0Ns
SW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpA
QCAtMzA1Nyw2ICszMDY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
dGFja0xheW91dFBoYXNlLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsOSArNzE4LDEzIEBACiAJCTI2MDBCNUE3MTUyQkFB
QTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi87IH07CiAJCTJBMjgyNUQwMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVs
ZWFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQTI4MjVDRjE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovOyB9
OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZB
MjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJMkE0RUM5MEIx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIg
LyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCAqLzsgfTsKKwkJMkE0RUM5MEMxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmll
ckJ1ZmZlci5oICovOyB9OwogCQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2
RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJE
RjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi87IH07CiAJ
CTJBQUQ5NjRBMTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUQ5NjQ5MTg1
Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCAqLzsgfTsKKwkJMkFD
Q0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4
NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsK
KwkJMkFDQ0YzREYxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0Yz
REQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovOyB9
OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdD
OThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHls
aWIgKi87IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CkBAIC0yMDIxLDkgKzIw
MjUsMTMgQEAKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVG
IC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgz
NDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlbGF5ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJC
dWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTRFQzkwQTE4NjBENkMy
MDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdyaXRlQmFycmllckJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJz
aXZlQWxsb2NhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
Y3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
QUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFDQ0YzREQxODVGRTI2QjAwODNFMkFE
IC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdT
dG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHls
aWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xp
YnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQk0NDkwOTdFRTBGOEY4MUI1MDA3
NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTExLDYgKzMxMTksOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkE0
RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCisJCQkJ
MkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJ
CTE0ODE2RTE5MTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
MTQ4MTZFMUExNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZE
OEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCkBAIC0zODQ3LDYg
KzM4NTcsOCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkyQUNDRjNEQzE4NUZFMjZCMDA4
M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLywKKwkJCQkyQUNDRjNE
RDE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJ
CQkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJ
CQkJQTc3QTQyMzcxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJ
CUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8s
CkBAIC00OTc3LDYgKzQ5ODksNyBAQAogCQkJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBT
bG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDlGMkYwMTdBMEFDMDQw
MDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2
QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBNEVD
OTBDMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTUwNTAsNiArNTA2Myw3IEBACiAJCQkJMTRC
RTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCTJBQ0NGM0RGMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkw
MDQwMERFRCAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdD
QTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLywKQEAgLTU3MDUsNiArNTcxOSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzg4NTNGOTE3
OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEy
ODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDky
RjBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQw
MEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTcxNyw2ICs1NzMyLDcgQEAKIAkJCQkwRkIxNEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERDUxRUIwRkI4REY3
NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUx
MTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRThFNDExMkU3MkVGMDBB
MzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24g
MTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oVmFyaWFibGVzKSBcCiAgICAgbWFjcm8oVHlwZWRBcnJheVByb3Bl
cnRpZXMpIFwKICAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAgbWFjcm8oQmFycmllclN0YXRlKSBc
CiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKICAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCiAg
ICAgbWFjcm8oQWJzb2x1dGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3LDYgKzE0NywxMiBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOwogICAgIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgaXNLbm93bk5vdENlbGwoVCBub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoZm9yTm9kZShub2RlKS5tX3R5cGUgJiBTcGVjQ2VsbCk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4m
LCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhj
b25zdCBDb2RlT3JpZ2luJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1ODgsNiArMTU4OCw4MCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgICAg
IE5vZGUqIHN0b3JlTm9kZSA9IG5vZGUtPnN0b3JlTm9kZSgpOworICAgICAgICBzd2l0Y2ggKHN0
b3JlTm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICAgICAg
c3dpdGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgICAgIGlmIChpc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoK
KyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAgICAgIGlmIChpc0tub3duTm90Q2VsbChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWND
ZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgorICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAgaWYgKGlzS25v
d25Ob3RDZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIGZpbHRlcihub2Rl
LT5jaGlsZDEoKSwgU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOiB7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0
QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgc3dpdGNo
IChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgaWYg
KGlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBm
aWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoK
ICAgICAgICAgLy8gV2UgcHJldGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdh
bnQgdG8gZ2V0IGFsbCBzdGF0ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1
bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KK3ZvaWQgY2xvYmJlcml6ZUZvckFsbG9jYXRp
b24oUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit7CisgICAgcmVhZChH
Q1N0YXRlKTsKKyAgICByZWFkKEJhcnJpZXJTdGF0ZSk7CisgICAgd3JpdGUoR0NTdGF0ZSk7Cisg
ICAgd3JpdGUoQmFycmllclN0YXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0
b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIFJlYWRGdW5jdG9yJiByZWFkLCBXcml0ZUZ1bmN0b3ImIHdyaXRlKQogewog
ICAgIC8vIFNvbWUgbm90ZXM6CkBAIC0xNjAsMTAgKzE2OSw5IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9jYXRpb24o
cmVhZCwgd3JpdGUpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICB3cml0ZShX
YXRjaHBvaW50X2ZpcmUpOwotICAgICAgICByZWFkKEdDU3RhdGUpOwotICAgICAgICB3cml0ZShH
Q1N0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEZ1bmN0aW9uUmVl
bnRyeVdhdGNocG9pbnQ6CkBAIC0xNzMsOCArMTgxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhp
czoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAg
ICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJl
YWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRj
aHBvaW50OgpAQCAtNDM1LDE1ICs0NDIsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdDU3Rh
dGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9j
YXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJm
bHkpOwogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdD
U3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFs
bG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgpAQCAtNDU2LDggKzQ2MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKICAgICAgICAgd3JpdGUoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUoR0NTdGF0
ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
CkBAIC01NDQsMTUgKzU0OCwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlv
bjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKLSAgICAgICAgcmVhZChHQ1N0YXRl
KTsKLSAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0
aW9uKHJlYWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE5l
d1R5cGVkQXJyYXk6CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRl
KTsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgICAgICB3
cml0ZShHQ1N0YXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC02NDEsOCArNjQzLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwotICAgICAgICByZWFkKEdDU3Rh
dGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9j
YXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
Q291bnRFeGVjdXRpb246CkBAIC02NTAsNiArNjUxLDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKICAgICAg
ICAgd3JpdGUoSW50ZXJuYWxTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgICAgICByZWFkKEJhcnJpZXJTdGF0ZSk7CisgICAgICAgIHdyaXRlKEJh
cnJpZXJTdGF0ZSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9k
ZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyOCArMzAwLDMz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgY29kZU9yaWdpbiwgT3BJ
bmZvKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCks
IEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmln
aW4sIGNoaWxkRWRnZSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBjb2RlT3JpZ2luLCBPcEluZm8ocmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShyZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2lu
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxk
RWRnZSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVjdHVyZSA9IG1fZ3JhcGgu
YWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgY29kZU9y
aWdpbiwgT3BJbmZvKHB1dFN0cnVjdHVyZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBL
bm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgVW50eXBlZFVzZSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXhJbkJsb2NrLCBw
dXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJp
ZXIsIGNvZGVPcmlnaW4sIE9wSW5mbyhub2RlKSwgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCks
IEtub3duQ2VsbFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gc3RhdHVzLm9mZnNldCgpOwpAQCAtMzI5LDcgKzMzNCw4MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vz
c0RhdGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAgICAgICAgICAgICAgIE5vZGUqIHN0b3JlTm9k
ZSA9IG5vZGUtPnN0b3JlTm9kZSgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RvcmVOb2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2ludGVycHJldGVyLmlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbnRlcnBy
ZXRlci5pc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbnRlcnBy
ZXRlci5pc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIFRlYXJPZmZBY3Rp
dmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ludGVycHJldGVy
LmlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUwLDggKzU1MCw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KGNoaWxkMyk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJV
c2U+KGNoaWxkMik7CisgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxk
MSk7CisgICAgICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4Myw2ICs1
ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8UmVhbE51bWJlclVzZT4o
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzY3LDE4
ICs3NjksMzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBT
dG9yZShub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKLSAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFNraXBUb3BTY29w
ZToKICAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6IHsKICAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGZpeHVwSGVhcFN0b3JlKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7
CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkp
CkBAIC04MDAsMTIgKzgxNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CiAgICAgICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQdXRC
eUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJ
bnN0YW5jZToKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseTogewpAQCAtODMyLDYgKzg1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5
MSw2ICs5MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0
aGVtLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAg
IGNhc2UgVGVhck9mZkFjdGl2YXRpb246IHsKKyAgICAgICAgICAgIGZpeHVwSGVhcFN0b3JlKG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIElzU3Ry
aW5nOgogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkgewpAQCAtOTE0LDcgKzk0Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlT
Y29wZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgTm90aWZ5V3Jp
dGU6CiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFZhcklu
amVjdGlvbldhdGNocG9pbnQ6CkBAIC05MzEsNyArOTU5LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBJc09iamVjdDoKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICBjYXNlIENy
ZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgICAg
IGNhc2UgQ3JlYXRlQXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAg
ICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKQEAgLTk1MSw2ICs5NzgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgogICAgICAgICBjYXNlIExvb3BIaW50OgorICAgICAgICBjYXNlIFN0b3JlQmFycmll
cjoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNl
IFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTAzLDYgKzE1
MzEsOTEgQEAgcHJpdmF0ZToKICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKHVzZUtpbmQpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGZpeHVwSGVhcFN0b3JlKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogV2UgdXNlIENlbGxVc2Ugb3IgVW50eXBlZFVzZSBldmVyeXdoZXJlIGhl
cmUsIGJ1dCBzaG91bGQgd2UgYWxzbyBiZSB1c2luZyBLbm93bkNlbGxVc2Ugd2hlcmUgYXBwcm9w
cmlhdGU/CisgICAgICAgIE5vZGUqIGJhcnJpZXJOb2RlOworICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgICAgIGJhcnJpZXJO
b2RlID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9yZUJh
cnJpZXIsIAorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5m
byhub2RlKSwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSksIEVkZ2Uo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlk
RGlyZWN0OiB7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAg
ICAgICAgICAgICAgICBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCAKKyAgICAgICAgICAgICAgICBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obm9kZSksIEVkZ2Uobm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBDZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIFVudHlwZWRV
c2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIGJh
cnJpZXIgbXVzdCBnbyBhZnRlciB0aGVzZSBub2RlcyBiZWNhdXNlIHRoZXkgYWxsb2NhdGUgdGhl
aXIgbmV3IHByb3BlcnR5IHN0b3JhZ2UgZmlyc3QgYW5kIHRoZW4gZG8gdGhlIHN0b3JlLgorICAg
ICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIFJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9ncmFwaC5h
ZGROb2RlKAorICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIAorICAgICAg
ICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlKSwgRWRnZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgZml4dXBO
b2RlKGJhcnJpZXJOb2RlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChtX2lu
ZGV4SW5CbG9jayArIDEsIGJhcnJpZXJOb2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICBiYXJyaWVy
Tm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBTcGVjTm9uZSwgU3RvcmVC
YXJyaWVyLCAKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcElu
Zm8obm9kZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZh
dGlvbjoKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAgICAgIGJhcnJpZXJO
b2RlID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9yZUJh
cnJpZXIsIAorICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5m
byhub2RlKSwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDogewor
ICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAg
ICAgU3BlY05vbmUsIFN0b3JlQmFycmllciwgCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG5vZGUpLCBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwg
S25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOiB7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAg
ICAgICAgICAgICBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCAKKyAgICAgICAgICAgICAgICBtX2N1
cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obm9kZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSwgVW50eXBl
ZFVzZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1
dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5
VmFsQWxpYXM6IHsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAgVXNlS2luZCBiYXNl
VXNlS2luZCA9IEtub3duQ2VsbFVzZTsKKyNlbHNlCisgICAgICAgICAgICBVc2VLaW5kIGJhc2VV
c2VLaW5kID0gQ2VsbFVzZTsKKyNlbmRpZgorICAgICAgICAgICAgRWRnZSBiYXNlID0gbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2UgdmFsdWUgPSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBo
LmFkZE5vZGUoCisgICAgICAgICAgICAgICAgU3BlY05vbmUsIFN0b3JlQmFycmllciwgCisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG5vZGUpLCBFZGdl
KGJhc2Uubm9kZSgpLCBiYXNlVXNlS2luZCksIEVkZ2UodmFsdWUubm9kZSgpLCBVbnR5cGVkVXNl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBmaXh1cE5vZGUoYmFycmllck5vZGUpOworICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQobV9pbmRleEluQmxvY2ssIGJhcnJpZXJOb2RlKTsKKyAg
ICB9CisKICAgICB2b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBlZGdlLm5vZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIEFTU0VSVChoYXNQaGkoKSk7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9k
ZSo+KG1fb3BJbmZvKTsKICAgICB9CisKKyAgICBib29sIGhhc1N0b3JlTm9kZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gb3AoKSA9PSBTdG9yZUJhcnJpZXI7CisgICAgfQorCisgICAgTm9kZSog
c3RvcmVOb2RlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yZU5vZGUoKSk7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZvKTsKKyAgICB9CiAgICAgCiAg
ICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CkBAIC0xNTU1LDYgKzE1NjYsNyBAQCBwdWJs
aWM6CiAgICAgdW5pb24gewogICAgICAgICBOb2RlKiByZXBsYWNlbWVudDsKICAgICAgICAgQmFz
aWNCbG9jayogb3duZXI7CisgICAgICAgIGJvb2wgbmVlZHNCYXJyaWVyOwogICAgIH0gbWlzYzsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjkxLDYgKzI5MSw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICAvKiBDaGVja3MgdGhlIHdhdGNoZG9nIHRpbWVyLiBJZiB0aGUgdGltZXIg
aGFzIGZpcmVkLCB3ZSBPU1IgZXhpdCB0byB0aGUgKi8gXAogICAgIC8qIGJhc2VsaW5lIEpJVCB0
byByZWRvIHRoZSB3YXRjaGRvZyB0aW1lciBjaGVjaywgYW5kIHNlcnZpY2UgdGhlIHRpbWVyLiAq
LyBcCiAgICAgbWFjcm8oQ2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgLyogV3JpdGUgYmFycmllcnMgISAqL1wKKyAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkg
aW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUg
c3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBO
b2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0
aXZlSklULmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9n
Lmg+CiAKQEAgLTQ0OCw5ICs0NDksMTkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVF
eGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNz
ZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKG9wZXJhbmQpKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICAKLSAgICAvLyAxMSkgQW5kIGZpbmlzaC4KLSAgICAKKworI2lmIEVOQUJMRShXUklURV9CQVJS
SUVSX1BST0ZJTElORykgCisgICAgLy8gMTEpIFdyaXRlIGJhcnJpZXIgdGhlIG93bmVyIGV4ZWN1
dGFibGUgYmVjYXVzZSB3ZSdyZSBqdW1waW5nIGludG8gYSBkaWZmZXJlbnQgYmxvY2suCisgICAg
Zm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbik7CisgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSksIEdQUkluZm86Om5vbkFy
Z0dQUjApOyAKKyAgICAgICAgU3BlY3VsYXRpdmVKSVQ6Om9zcldyaXRlQmFycmllcihtX2ppdCwg
R1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6bm9uQXJnR1BSMSwgR1BSSW5mbzo6bm9uQXJn
R1BSMik7CisgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIDEyKSBBbmQgZmluaXNoLgogICAg
IGFkanVzdEFuZEp1bXBUb1RhcmdldChtX2ppdCwgZXhpdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZp
c2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAi
REZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIgor
I2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC00MDIsOSArNDAzLDE5IEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0LnN0
b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5k
KSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gMTEpIEFuZCBmaW5pc2guCi0gICAg
CisKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpIAorICAgIC8vIDExKSBXcml0
ZSBiYXJyaWVyIHRoZSBvd25lciBleGVjdXRhYmxlIGJlY2F1c2Ugd2UncmUganVtcGluZyBpbnRv
IGEgZGlmZmVyZW50IGJsb2NrLgorICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhp
dC5tX2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZXIpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0
LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBtX2ppdC5tb3ZlKEFz
c2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsgCisgICAgICAgIFNwZWN1bGF0aXZlSklU
Ojpvc3JXcml0ZUJhcnJpZXIobV9qaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86Om5v
bkFyZ0dQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAg
ICAvLyAxMikgQW5kIGZpbmlzaC4KICAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4
aXQpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdTU0FMb3dlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZH
U3RhY2tMYXlvdXRQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIgpAQCAtMjIzLDYgKzIyNCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQ
bGFuOjpjb21waWxlSW5UaHIKIAogICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENv
bnZlcmdlZDsKIAorICAgIHBlcmZvcm1TdG9yZUJhcnJpZXJFbGlzaW9uKGRmZyk7CiAgICAgcGVy
Zm9ybVN0b3JlRWxpbWluYXRpb24oZGZnKTsKICAgICAKICAgICAvLyBJZiB3ZSdyZSBkb2luZyB2
YWxpZGF0aW9uLCB0aGVuIHJ1biBzb21lIGFuYWx5c2VzLCB0byBnaXZlIHRoZW0gYW4gb3Bwb3J0
dW5pdHkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQ2LDYgKzU0Niw3IEBAIHByaXZhdGU6CiAKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgIC8vIFRoZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCBy
ZXR1cm4gYW55dGhpbmcuCisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgICAgICBjYXNl
IFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1
dENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBi
b29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBMb29wSGlu
dDoKICAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgY2FzZSBJbnQ1MlRvVmFsdWU6CisgICAg
Y2FzZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNl
IE5vdGlmeVdyaXRlOgogICAgIGNhc2UgRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5
bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdl
IHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJS
ZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9h
ZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtp
bmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7Ci0gICAgd3Jp
dGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVVc2UsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsKLSAgICAKICAgICBKSVRQdXRCeUlk
R2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVz
ZWRSZWdpc3RlcnMoKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShiYXNlUGF5bG9hZEdQUiksIEpTVmFsdWVSZWdzKHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpLApAQCAtMTExMiw2ICsxMTEwLDIzIEBAIEpJVENvbXBpbGVy
OjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90TnVtYmVyOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2Um
IGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCit7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQorICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkp
OworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworCisgICAg
d3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCB2YWx1ZUVkZ2UsIHNjcmF0
Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNl
RWRnZSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlRWRnZSk7CisjZW5kaWYKK30KKwogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI2MTEs
MTIgKzI2MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxk
MywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0
QnlWYWwobm9kZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCB2YWx1ZVBheWxvYWRSZWcsIHZhbHVl
VGFnUmVnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjMzLDEzICsyNjQz
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2
YWx1ZVRhZ1JlZywgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRj
aFJlZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCkBAIC0yODE5LDExICsyODIzLDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHZhbHVl
VGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2Fk
R1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVUYWdH
UFIsIG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRj
aC5ncHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7
CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpAQCAt
Mjg3MiwxMSArMjg3MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAg
ICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKIAot
ICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJy
aWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwot
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUg
Yml6YXJyZSBsZW5ndGhzLgpAQCAtMzY3MywxOSArMzY2NywxOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVnaXN0ZXIodGhp
cyk7Ci0gICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworCiAgICAgICAgIEdQ
UlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1
ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BS
ID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2hSZWdpc3Rlci5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQx
KCkpOwogCiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7
CiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkp
KTsKLSAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hp
bGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4ODIsMTEgKzM4
NzUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIAotI2lmIEVOQUJMRShXUklU
RV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdy
aXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBp
dAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2Vu
ZGlmCi0gICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSks
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMzk0OCwxOSArMzkz
NiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJ
RVJfUFJPRklMSU5HKQotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLSNlbmRpZgogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQzKCkpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAg
ICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAg
IAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3JpdGVCYXJy
aWVyKGJhc2UuZ3ByKCksIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MpOwotI2VuZGlmCisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5v
ZGUtPmNoaWxkMigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vz
c0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC0zOTgxLDEyICszOTY0LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVQ
YXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAg
ICB2YWx1ZS51c2UoKTsKLQotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4s
IGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG5vZGUtPmNoaWxkMigpLCBz
Y3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CisgICAgICAg
IGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3RE
aXJlY3QpOwogICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtNDAwMCwxMiArMzk4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBh
eWxvYWRHUFIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0KLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZVRhZ0dQ
UiwgdmFsdWVQYXlsb2FkR1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRl
bnRpZmllck51bWJlcigpLCBEaXJlY3QpOworICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNv
ZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hH
UFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAgICBub1Jlc3Vs
dChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDIzLDEyICs0MDAwLDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBQdXRHbG9i
YWxWYXI6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0
ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS50
YWdHUFIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBz
Y3JhdGNoUmVnKTsKLSAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4g
dG8gaGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5kIF9PTkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2
ZQogICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVyIC0gYSBnb29kIG9wdGltaXphdGlvbiB3b3Vs
ZCBiZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50ZXIgaW50bwpAQCAtNDY5NCw2ICs0NjY1LDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29t
cGlsZUluKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7
CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAg
ICAgIGJyZWFrOwpAQCAtNDc1Miw2ICs0NzI4LDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCisjaWYgRU5BQkxFKFdS
SVRFX0JBUlJJRVJfUFJPRklMSU5HKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJS
ZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBp
c05vdENlbGw7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAg
ICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVl
VGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKwor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVC
YXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRv
V3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRl
ZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworCisgICAgaWYgKCFpc0tub3duQ2VsbCh2
YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZh
bHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
MikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CisgICAgaWYgKCFpc0tub3du
Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gz
MihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmlu
aXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwgc2NyYXRj
aDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyLCBzY3Jh
dGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOwor
CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENl
bGwubGluaygmbV9qaXQpOworfQorI2VuZGlmIC8vIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJ
TElORykKKwogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEwICsyMDYsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
c2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0
QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVH
UFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0KQogewotICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQ
UiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoR1BSKTsK
LQogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
c2NyYXRjaEdQUiwgZmFsc2UsCkBAIC0xNDczLDYgKzE0NzEsMjMgQEAgSklUQ29tcGlsZXI6Okp1
bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYgYmFz
ZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKK3sKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9G
SUxJTkcpCisgICAgQVNTRVJUKCFpc0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uubm9kZSgpKSk7CisK
KyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1ZUVkZ2UpOworICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoMSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisKKyAgICB3cml0
ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3By
KCksIHNjcmF0Y2gyLmdwcigpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGJhc2VFZGdlKTsK
KyAgICBVTlVTRURfUEFSQU0odmFsdWVFZGdlKTsKKyNlbmRpZgorfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMjkwNywxMSArMjky
Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAmJiBIZWFwOjppc1dyaXRlQmFycmllckVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
ICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hpbGQzLCBX
cml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7Ci0gICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsK
ICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAgLTI5ODcs
MTEgKzI5OTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxk
MywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOwotICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxk
NCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0z
MDkyLDcgKzMwOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAogICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG93QXJndW1lbnREYXRhKCkpKSk7Ci0g
ICAgCisKICAgICAgICAgICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHNjcmF0Y2gyUmVnKTsK
ICAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gyUmVnLCBzY3JhdGNo
MlJlZyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMzE5MywxMSArMzE5OCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFwOjppc1dyaXRlQmFy
cmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9k
ZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigp
LCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3Ro
KCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQpKTsKQEAgLTMyNDIsMTEgKzMyNDIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1
ZS5ncHIoKTsKIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAg
ICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5n
dGhHUFIpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQo
KSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0
byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpAQCAtMzk3OSwxOCArMzk3NCwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
c2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdp
c3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVn
aXN0ZXIodGhpcyk7CiAKLSAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+
Y2hpbGQxKCkpOwogCiAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNo
aWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CiAgICAg
ICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00MTc5LDE0ICs0
MTcxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwogCiAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQot
ICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgICAgIHdyaXRlQmFycmll
cihiYXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwg
V3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7Ci0jZW5kaWYKLSAgICAgICAgCiAgICAgICAg
IG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKICAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CkBAIC00MjQ1LDIzICs0MjMzLDIwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0
QnlPZmZzZXQ6IHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotI2VuZGlm
CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIAotI2lm
IEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yUHJv
cGVydHlBY2Nlc3MpOwotI2VuZGlmCisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0RhdGEg
PSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKHN0b3Jh
Z2VBY2Nlc3NEYXRhLm9mZnNldCkpKTsKLSAgICAgICAgCisKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQyNzUsMTIgKzQyNjAsOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQ
UiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3By
KCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsK
KyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQ
Uiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwogCi0g
ICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIs
IG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5v
dERpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC00MjkzLDEyICs0Mjc1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAg
ICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIsIG5v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAgICBjYWNoZWRQdXRCeUlk
KG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDIoKSwgc2Ny
YXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwotCi0gICAgICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQzMTMsMTQgKzQyOTIsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFB1
dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVP
cmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlh
YmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBt
X2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLT5yZWdpc3RlclBvaW50ZXIoKSk7CiAKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC00OTczLDYgKzQ5NDUsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7Cisg
ICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KwogI2lmIEVOQUJMRShGVExfSklUKSAgICAgICAgCiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9v
cDogewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRk
MzIoCkBAIC01MDUzLDYgKzUwMzAsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7CiB9CiAKKyNpZiBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVn
IG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsK
KyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2Vs
bCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0
Y2gxLCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwg
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0
KTsKKworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNO
b3RDZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAg
aXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1
ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lciwg
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVy
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9q
aXQpOworCisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBp
c05vdENlbGwubGluaygmbV9qaXQpOworfQorI2VuZGlmIC8vIEVOQUJMRShXUklURV9CQVJSSUVS
X1BST0ZJTElORykKKwogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTA5LDUzICs5MDksNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVk
Z2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gx
LCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKLSAgICBV
TlVTRURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0KLSAg
ICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjpl
bWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtp
bmQpKTsKLSNlbmRpZgotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BS
UmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIFVOVVNFRF9QQVJBTShv
d25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0oc2Ny
YXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVz
ZUtpbmQpOwotICAgIAotICAgIGlmIChIZWFwOjppc01hcmtlZCh2YWx1ZSkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21w
aWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZv
cih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVC
YXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKLXsKLSAgICBVTlVTRURfUEFS
QU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLQotICAgIGlmIChpc0tub3du
Tm90Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2pp
dCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlm
Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2RlKQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAtNDMy
OSwyNiArNDI4MiwyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9w
CiAgICAgfQogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgCiAgICAgQVNTRVJUKCFu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09IG5v
ZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9CiAgICAgICAg
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0
aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2Yo
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAKLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7CisgICAg
bV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVh
ZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSKSk7Ci0gICAgICAg
IAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgICAgICAKLSAgICBzdG9y
YWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG5vZGUpOworICAgICAgICBzbG93UGF0aENhbGwoc2xvd1Bh
dGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBh
Y2l0eSwgc2NyYXRjaEdQUjEpKTsKKworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
KTsKKworICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5vZGUpOwogfQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2Rl
KQpAQCAtNDM2Nyw2ICs0MzIwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFs
bG9jYXRlUHIKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdl
LCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOwogICAg
ICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TnVsbCA9IG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
IG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7CisKICAg
ICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDM4MiwyMCArNDMzOSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3ByKCk7
CiAgICAgICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAgZW1p
dEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjIp
OworICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMyKG5ld1NpemUp
LCBzY3JhdGNoR1BSMSk7CiAKLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjIpOworICAgIG1faml0LmFk
ZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBz
Y3JhdGNoR1BSMSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwotICAgIC8v
IFdlIGhhdmUgc2NyYXRjaEdQUjIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3JhdGNo
CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7
CisKKyAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7Ci0g
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQUiwg
LShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hHUFIx
KTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lk
KikpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3Rv
cmFnZUdQUiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNj
cmF0Y2hHUFIyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNp
emVvZih2b2lkKikpKSk7CiAgICAgfQotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
KTsKLSAgICAKLSAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBub2RlKTsKKyAgICBtX2pp
dC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisKKyAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hH
UFIxLCBub2RlKTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdpc3Rl
ckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheU1vZGUgYXJyYXlNb2Rl
KQpAQCAtNTQ1MSw2ICs1NDA5LDI5MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJhbmNo
ZXMoKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKK3sKKyAg
ICBOb2RlKiBzdG9yZU5vZGUgPSBub2RlLT5zdG9yZU5vZGUoKTsKKworICAgIHN3aXRjaCAoc3Rv
cmVOb2RlLT5vcCgpKSB7CisgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgc3dpdGNoIChz
dG9yZU5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAg
IGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgIGNhc2Ug
UHV0QnlJZDoKKyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAgY29tcGlsZUJhc2VW
YWx1ZVN0b3JlQmFycmllcihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICBBU1NF
UlQoIWlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOworCisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhp
cyk7CisKKyAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihzdG9yZU5v
ZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIHNjcmF0Y2gxLmdw
cigpLCBzY3JhdGNoMi5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAK
KyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNo
Mi5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgVGVhck9mZkFjdGl2
YXRpb246IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBp
c051bGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGJhc2UuZ3ByKCkp
OworICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0
Y2gyLmdwcigpKTsKKyAgICAgICAgaXNOdWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICBjYXNlIFB1dEJ5VmFsOgor
ICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICBzd2l0Y2ggKHN0b3JlTm9kZS0+YXJy
YXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpBcmd1
bWVudHM6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgY29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihub2RlLT5jaGls
ZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gSWYgb3VyIHN0b3JlIG5v
ZGUgd2FzIGNvbnZlcnRlZCBpbnRvIGEgbm9uLXN0b3JlIG5vZGUgdGhlbiB3ZSBzaG91bGQgCisg
ICAgICAgIC8vIGhhdmUgYWxyZWFkeSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
bm9SZXN1bHQobm9kZSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpn
ZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIGppdC5tb3ZlKG93bmVyLCBzY3Jh
dGNoMSk7CisgICAgaml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKworICAgIGppdC5hbmRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNj
cmF0Y2gxKTsKKyAgICBqaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKH5N
YXJrZWRCbG9jazo6YmxvY2tNYXNrKSwgc2NyYXRjaDIpOworCisgICAgLy8gU2hpZnQgaW5kZXgK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDMgKyA0KSwgc2NyYXRjaDIpOworI2Vsc2UKKyAgICBqaXQucnNoaWZ0MzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzICsgNCksIHNjcmF0Y2gyKTsKKyNlbmRpZgorCisg
ICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAgICByZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZN
YXJrcygpKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpnZW5lcmlj
V3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwqIG93bmVyKQoreworICAgIE1h
cmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7CisgICAgc2l6
ZV90IG1hcmtJbmRleCA9IChyZWludGVycHJldF9jYXN0PHNpemVfdD4ob3duZXIpICYgfk1hcmtl
ZEJsb2NrOjpibG9ja01hc2spID4+ICgzICsgNCk7CisgICAgdWludDhfdCogYWRkcmVzcyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSAr
IE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpICsgbWFya0luZGV4OworICAgIHJldHVybiBq
aXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNv
bHV0ZUFkZHJlc3MoYWRkcmVzcykpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxh
dGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BS
UmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VS
VChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgLy8gTG9hZCBXcml0ZUJhcnJpZXJCdWZmZXIg
ZnJvbSBIZWFwCisgICAgV3JpdGVCYXJyaWVyQnVmZmVyKiB3cml0ZUJhcnJpZXJCdWZmZXIgPSAm
aml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZmZXI7CisgICAgaml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAgLy8gTG9hZCBjdXJy
ZW50SW5kZXgKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gx
LCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSwgc2NyYXRjaDIpOwor
ICAgIC8vIEJyYW5jaCBpZiBjdXJyZW50SW5kZXggPj0gY2FwYWNpdHkKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRl
QmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgLy8gU3RvcmUgbmV3IGN1
cnJlbnRJbmRleAorICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAg
ICBqaXQuc3RvcmUzMihzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEs
IFdyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpKTsKKworICAgIC8vIExv
YWQgYnVmZmVyCisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6YnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAg
Ly8gU3RvcmUgY2VsbCBpbnRvIGJ1ZmZlci4gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZv
aWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4KKyAgICBqaXQuc3Rv
cmVQdHIoY2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2
b2lkKikpKSk7CisKKyAgICAvLyBKdW1wIHRvIGRvbmUKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gaml0Lmp1bXAoKTsKKyAgICAvLyBMaW5rIGZyb20gYnJhbmNoCisgICAgbmVlZFRvRmx1
c2gubGluaygmaml0KTsKKworICAgIC8vIENhbGwgQyBzbG93IHBhdGguCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAg
IGppdC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCAmaml0LnZtKCktPndyaXRlQmFy
cmllclJlZ2lzdGVyQnVmZmVyW2ldKTsKKworI2lmIENQVShYODYpCisgICAgaml0LnB1c2goc2Ny
YXRjaDEpOworICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyNlbmRpZgorCisgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShjZWxsKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsID0gaml0LmNhbGwoKTsKKworI2lmIENQVShYODYpCisgICAgaml0LnBvcChzY3JhdGNoMSk7
CisgICAgaml0LnBvcChzY3JhdGNoMSk7CisjZW5kaWYKKworICAgIGZvciAodW5zaWduZWQgaSA9
IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQubG9hZFB0cigm
aml0LnZtKCktPndyaXRlQmFycmllclJlZ2lzdGVyQnVmZmVyW2ldLCBHUFJJbmZvOjp0b1JlZ2lz
dGVyKGkpKTsKKworICAgIC8vIExpbmsgRG9uZQorICAgIGRvbmUubGluaygmaml0KTsKKworICAg
IHJldHVybiBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikK
K3sKKyAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgIFdyaXRlQmFycmllckJ1
ZmZlciogd3JpdGVCYXJyaWVyQnVmZmVyID0gJm1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJp
ZXJCdWZmZXI7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZl
ciksIHNjcmF0Y2gxKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpLCBzY3Jh
dGNoMik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQoKSkp
OworCisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgbV9q
aXQuc3RvcmUzMihzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdy
aXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpKTsKKworICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZl
cjo6YnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBv
ZiAtc2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4K
KyAgICBtX2ppdC5zdG9yZVB0cihjZWxsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisgICAgbmVlZFRvRmx1c2gubGluaygmbV9qaXQpOworCisgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciwgY2VsbCk7CisgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworICAgIGRvbmUubGluaygmbV9qaXQpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCogY2Vs
bCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgQVNTRVJUKHNjcmF0
Y2gxICE9IHNjcmF0Y2gyKTsKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIqIHdyaXRlQmFycmllckJ1
ZmZlciA9ICZtX2ppdC52bSgpLT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOworICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJp
ZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEpJVENvbXBp
bGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBX
cml0ZUJhcnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1
cnJlbnRJbmRleE9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwg
c2NyYXRjaDEpOworICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVj
YXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCisgICAgbV9qaXQuc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihjZWxsKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwg
c2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
LXNpemVvZih2b2lkKikpKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKKworICAgIC8vIENhbGwgQyBz
bG93IHBhdGgKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsK
KyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgZG9uZS5s
aW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJS
ZWcgb3duZXJHUFIsIEpTQ2VsbCogdmFsdWUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKQoreworICAgIGlmIChIZWFwOjppc01hcmtlZCh2YWx1ZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3Jp
dGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9y
ZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAg
IGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKGppdCk7
CisgICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwor
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gx
KTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworCisgICAgSklUQ29tcGlsZXI6Okp1
bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25lciwg
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5m
bzo6dG9SZWdpc3RlcihpKSwgJmppdC52bSgpLT53cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltp
XSk7CisKKyAgICAvLyBXZSBuZWVkIHRoZXNlIGV4dHJhIHNsb3RzIGJlY2F1c2Ugc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlIHdpbGwgdXNlIHBva2Ugb24geDg2LgorI2lmIENQVShYODYpCisg
ICAgaml0LnB1c2goc2NyYXRjaDEpOworICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyNlbmRpZgor
CisgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lcik7CisgICAgaml0Lm1v
dmUoVHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcGVyYXRpb25PU1JXcml0
ZUJhcnJpZXIpKSwgc2NyYXRjaDEpOworICAgIGppdC5jYWxsKHNjcmF0Y2gxKTsKKworI2lmIENQ
VShYODYpCisgICAgaml0LnBvcChzY3JhdGNoMSk7CisgICAgaml0LnBvcChzY3JhdGNoMSk7Cisj
ZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsg
aS0tOykKKyAgICAgICAgaml0LmxvYWRQdHIoJmppdC52bSgpLT53cml0ZUJhcnJpZXJSZWdpc3Rl
ckJ1ZmZlcltpXSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7IAorCisgICAgZGVmaW5pdGVseU5v
dE1hcmtlZC5saW5rKCZqaXQpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2
ZUpJVDo6d3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJl
ZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VSVChvd25lciAhPSBzY3Jh
dGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwgb3du
ZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9
IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoaml0LCBvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJmppdCk7CisgICAgcmV0dXJuIGNhbGw7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25l
ckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVy
KG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQu
bGluaygmbV9qaXQpOworfQorI2Vsc2UKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9y
ZUJhcnJpZXIoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2pp
dC5ncmFwaCgpLCBub2RlLCBzcGVjdWxhdGUpOworICAgIG5vUmVzdWx0KG5vZGUpOworfQorI2Vu
ZGlmIC8vIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDkg
KzI4OSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVk
V2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKICAgICB9
CiAKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQ
UiwgRWRnZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIx
ID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0g
ICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0
ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJS
ZWcgc2NyYXRjaEdQUjIgPSBJbnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihK
U0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmll
clVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOworI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNl
bGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHN0b3JlVG9X
cml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKTsKKyAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKiwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIEpJVENvbXBpbGVy
OjpKdW1wIGdlbmVyaWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25l
ciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHN0YXRpYyBKSVRDb21w
aWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwq
IG93bmVyKTsKKyAgICBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiwg
R1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmLCBHUFJS
ZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHdy
aXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gy
KTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEpTQ2VsbCogdmFsdWUsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHZvaWQgd3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMik7CisjZW5kaWYKKyAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSopOwog
CiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEgPSBJ
bnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHBy
ZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BSUmVn
KQogICAgIHsKQEAgLTcwMCwxNCArNzEzLDE2IEBAIHB1YmxpYzoKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBH
UFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJz
TW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwg
R1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hH
UFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQ
dXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6
SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VsaWYgVVNFKEpT
VkFMVUUzMl82NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJh
c2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQ
UiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3Bp
bGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJZChD
b2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BS
UmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRCeUlk
KENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBK
SVRDb21waWxlcjo6SnVtcCgpKTsKICNlbmRpZgogICAgIAogICAgIHZvaWQgY29tcGlsZUluKE5v
ZGUqKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRnZSYg
YmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7CisKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9u
UGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwog
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBO
b2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1
bGF0aXZlQ29tcGFyZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxz
ZSk7CkBAIC0xMDU5LDYgKzEwNzQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBKU0Nl
bGwqIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoVHJ1c3RlZEltbVB0cihhcmcxKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGluZUNh
bGxGcmFtZSkpOwpAQCAtMTA3NSwxMiArMTA5NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMikpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwog
ICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0K
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBv
cGVyYXRpb24sIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGFyZzIpCisgICAgeworICAgICAgICBtX2pp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcyKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRUNDIG9wZXJhdGlvbiwgSlNDZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEp
LCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKKyAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VWd3Mgb3BlcmF0aW9uLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQpCiAgICAgewpAQCAtMTM0MCw3ICsxMzcwLDYgQEAgcHVibGljOgogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAg
fQotCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9F
SlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVyKQog
ICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTdG9yZUJhcnJpZXJFbGlzaW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckVsaXNpb25QaGFz
ZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVyIGVs
aXNpb24iKQorICAgICAgICAsIG1fY3VycmVudEJsb2NrKDApCisgICAgICAgICwgbV9jdXJyZW50
SW5kZXgoMCkKKyAgICB7CisgICAgICAgIG1fZ2NDbG9iYmVyU2V0LmFkZChHQ1N0YXRlKTsKKyAg
ICB9CisKKyAgICBib29sIGNvdWxkQ2F1c2VHQyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgbV9nY0Nsb2JiZXJTZXQpOworICAg
IH0KKworICAgIGJvb2wgYWxsb2NhdGVzRnJlc2hPYmplY3QoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAg
ICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAg
ICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Cisg
ICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJp
ZXJzLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFsbG9jYXRlc0ZyZXNoT2Jq
ZWN0KG5vZGUpKTsKKyAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQobm9kZSk7CisgICAgfQor
CisgICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUoTm9kZSogc3RvcmVOb2RlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzdG9yZU5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246
CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAg
ICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAg
ICAgICByZXR1cm4gc3RvcmVOb2RlLT5jaGlsZDEoKS5ub2RlKCk7CisKKyAgICAgICAgY2FzZSBQ
dXRCeU9mZnNldDoKKyAgICAgICAgICAgIHJldHVybiBzdG9yZU5vZGUtPmNoaWxkMigpLm5vZGUo
KTsKKworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFs
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICByZXR1cm4gbV9ncmFw
aC52YXJBcmdDaGlsZChzdG9yZU5vZGUsIDApLm5vZGUoKTsKKworICAgICAgICBjYXNlIFB1dEds
b2JhbFZhcjoKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBzaG91bGRCZUVsaWRlZChIYXNoU2V0PE5vZGUqPiYgZG9u
dE5lZWRCYXJyaWVycywgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFN0b3JlQmFycmllcik7CisgICAgICAgIE5vZGUqIHN0b3JlTm9kZSA9IG5vZGUtPnN0
b3JlTm9kZSgpOworICAgICAgICBzd2l0Y2ggKHN0b3JlTm9kZS0+b3AoKSkgeworICAgICAgICAv
LyBCZWNhdXNlIHRoZXNlIGFsbG9jYXRlIGFuZCB0aGVuIHN0b3JlLCB0aGV5IHNob3VsZCBuZXZl
ciBiZSBlbGlkZWQuCisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAgQVNTRVJU
KCFkb250TmVlZEJhcnJpZXJzLmNvbnRhaW5zKGdldEJhc2VPZlN0b3JlKHN0b3JlTm9kZSkpKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgVGVhck9m
ZkFjdGl2YXRpb246CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjYXNlIFB1
dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZh
bDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgICAgICByZXR1cm4gZG9u
dE5lZWRCYXJyaWVycy5jb250YWlucyhnZXRCYXNlT2ZTdG9yZShzdG9yZU5vZGUpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICAvLyBGSVhN
RTogV2UgY291bGQga2VlcCB0cmFjayBvZiB3aGV0aGVyIHdlIG5lZWQgdG8gYmFycmllciB0aGUg
Z2xvYmFsIG9iamVjdCBoZXJlLAorICAgICAgICAgICAgLy8gYnV0IGZvciBub3cgd2UnbGwganVz
dCBhc3N1bWUgd2UgY2FuJ3QgZWxpZGUgYmFycmllcnMgb24gdGhlIGdsb2JhbCBvYmplY3QuCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OiB7
CisgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSB3ZSBwb2ludCB0byBoYXMgYmVlbiB0cmFuc2Zv
cm1lZCBpbnRvIGEgTm9kZSB0eXBlIHRoYXQgZG9lc24ndCAKKyAgICAgICAgICAgIC8vIG5lZWQg
YSBiYXJyaWVyIHRoZW4gd2UgY2FuIGVsaWRlIHRoaXMgYmFycmllci4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGVsaWRl
QmFycmllcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0g
U3RvcmVCYXJyaWVyKTsKKyAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgIH0K
KworICAgIHZvaWQgY2xlYXJWYXJpYWJsZUJhcnJpZXJzKCkKKyAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5jaGVja0Fu
ZFNldE5lZWRzQmFycmllcih0cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZU5vZGUoSGFz
aFNldDxOb2RlKj4mIGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBpZiAoY291bGRDYXVzZUdDKG5vZGUpKSB7CisgICAgICAgICAgICBkb250TmVlZEJhcnJpZXJz
LmNsZWFyKCk7CisgICAgICAgICAgICBjbGVhclZhcmlhYmxlQmFycmllcnMoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChhbGxvY2F0ZXNGcmVzaE9iamVjdChub2RlKSkKKyAgICAgICAgICAg
IG5vdGljZUZyZXNoT2JqZWN0KGRvbnROZWVkQmFycmllcnMsIG5vZGUpOworCisgICAgICAgIGlm
IChub2RlLT5vcCgpICE9IFN0b3JlQmFycmllcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoc2hvdWxkQmVFbGlkZWQoZG9udE5lZWRCYXJyaWVycywgbm9kZSkpIHsKKyAgICAg
ICAgICAgIGVsaWRlQmFycmllcihub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIE5vZGUqIGJhc2UgPSBnZXRCYXNlT2ZTdG9yZShub2RlLT5zdG9yZU5vZGUo
KSk7CisgICAgICAgIGlmICghYmFzZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhiYXNlKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFiYXNlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bmVlZHNCYXJyaWVyKCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQoYmFz
ZSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVMb2NhbChIYXNoU2V0PE5vZGUqPiYgZG9udE5l
ZWRCYXJyaWVycywgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNM
b2NhbChtX2dyYXBoKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBj
YXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5uZWVkc0JhcnJpZXIoKSkKKyAgICAgICAgICAgICAgICBkb250TmVlZEJhcnJpZXJzLmFk
ZChub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CisgICAgICAgIGNh
c2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCku
bm9kZSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKGRvbnROZWVkQmFycmllcnMu
Y29udGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJsZS0+Y2hlY2tB
bmRTZXROZWVkc0JhcnJpZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT5j
aGVja0FuZFNldE5lZWRzQmFycmllcih0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgSGFzaFNl
dDxOb2RlKj4gZG9udE5lZWRCYXJyaWVyczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleElu
QmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykg
eworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBpbmRleEluQmxvY2s7CisgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKKyAgICAgICAgICAgIGlm
IChub2RlLT5oYXNMb2NhbChtX2dyYXBoKSkgeworICAgICAgICAgICAgICAgIGhhbmRsZUxvY2Fs
KGRvbnROZWVkQmFycmllcnMsIG5vZGUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGVOb2RlKGRvbnROZWVkQmFycmllcnMsIG5v
ZGUpOworICAgICAgICB9CisgICAgICAgIGlmICghbV9ub2RlU3RhdGVBdFRhaWwuY29udGFpbnMo
YmxvY2spKSB7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBuZXdTZXQ7CisgICAgICAgICAg
ICBtX25vZGVTdGF0ZUF0VGFpbC5zZXQoYmxvY2ssIG5ld1NldCk7CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBpdGVyID0gbV9ub2RlU3RhdGVBdFRhaWwuZmluZChibG9jayk7CisgICAgICAgIGJv
b2wgcmVzdWx0ID0gIShkb250TmVlZEJhcnJpZXJzID09IGl0ZXItPnZhbHVlKTsKKyAgICAgICAg
aXRlci0+dmFsdWUuc3dhcChkb250TmVlZEJhcnJpZXJzKTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBib29sIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2spCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gaGFuZGxlQmxvY2sobV9jdXJyZW50Qmxv
Y2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBDbG9iYmVyU2V0IG1fZ2NDbG9iYmVyU2V0OworICAgIEhhc2hN
YXA8QmFzaWNCbG9jayosIEhhc2hTZXQ8Tm9kZSo+PiBtX25vZGVTdGF0ZUF0VGFpbDsKKyAgICBC
YXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsK
K307CisgICAgCitib29sIHBlcmZvcm1TdG9yZUJhcnJpZXJFbGlzaW9uKEdyYXBoJiBncmFwaCkK
K3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFN0b3JlIEJhcnJpZXIg
RWxpc2lvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2U+KGdyYXBoKTsKK30KKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU3RvcmVCYXJyaWVyRWxpc2lv
blBoYXNlX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFw
aDsKKworYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhh
c2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNiArMTYzLDggQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSwg
ZWRnZSksIGVkZ2UtPmhhc1Jlc3VsdCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChmYWxzZSkKICAg
ICAgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCiAgICAgICAgICwgbV9pc0xvYWRl
ZEZyb20oZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0JhcnJpZXIodHJ1ZSkKICAgICAgICAgLCBt
X2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCiAgICAgewogICAgICAg
ICBjbGVhclZvdGVzKCk7CkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3N0
cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9jaGVja0FycmF5
SG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZh
bHNlKQorICAgICAgICAsIG1fbmVlZHNCYXJyaWVyKHRydWUpCiAgICAgICAgICwgbV9kb3VibGVG
b3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgIHsKICAgICAgICAgY2xlYXJW
b3RlcygpOwpAQCAtMzU0LDYgKzM1NiwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gRmx1c2hlZEF0KGZsdXNoRm9ybWF0KCksIG1hY2hpbmVMb2NhbCgpKTsKICAgICB9CisKKyAg
ICBib29sIG5lZWRzQmFycmllcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9uZWVkc0JhcnJp
ZXI7CisgICAgfQorCisgICAgYm9vbCBjaGVja0FuZFNldE5lZWRzQmFycmllcihib29sIG5lZWRz
QmFycmllcikKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbmVlZHNCYXJyaWVyICE9IG1f
bmVlZHNCYXJyaWVyOworICAgICAgICBtX25lZWRzQmFycmllciA9IG5lZWRzQmFycmllcjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIC8vIFRoaXMg
aXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZp
ZWQgd2l0aApAQCAtMzc0LDYgKzM4OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NoZWNrQXJy
YXlIb2lzdGluZ0ZhaWxlZDsKICAgICBib29sIG1faXNQcm9maXRhYmxlVG9VbmJveDsKICAgICBi
b29sIG1faXNMb2FkZWRGcm9tOworICAgIGJvb2wgbV9uZWVkc0JhcnJpZXI7CiAKICAgICBmbG9h
dCBtX3ZvdGVzWzJdOyAvLyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZvdGluZyBidXQgbWF5
IGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9ybWF0U3RhdGUgbV9k
b3VibGVGb3JtYXRTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlz
aW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IHZvaWQgc2V0TWFya2VkKGNvbnN0IHZvaWQqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1dy
aXRlQmFycmllckVuYWJsZWQoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNv
bnN0IEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlND
ZWxsKiwgSlNWYWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBK
U0NlbGwqLCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRG
b3IoSlNDZWxsKik7CkBAIC0zNzAsNiArMzcxLDExIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlm
CiAgICAgfQogCisgICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCopCisgICAgeworICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJp
ZXIoKTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKiwgSlNDZWxsKikKICAgICB7CiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpj
b3VudFdyaXRlQmFycmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllckJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0NBc3NlcnRpb25zLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworV3JpdGVCYXJyaWVyQnVmZmVyOjpXcml0ZUJhcnJpZXJC
dWZmZXIodW5zaWduZWQgY2FwYWNpdHkpCisgICAgOiBtX2N1cnJlbnRJbmRleCgwKQorICAgICwg
bV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAsIG1fYnVmZmVyKHN0YXRpY19jYXN0PEpTQ2VsbCoq
PihmYXN0TWFsbG9jKHNpemVvZihKU0NlbGwqKSAqIGNhcGFjaXR5KSkpCit7Cit9CisKK1dyaXRl
QmFycmllckJ1ZmZlcjo6fldyaXRlQmFycmllckJ1ZmZlcigpCit7CisgICAgZmFzdEZyZWUobV9i
dWZmZXIpOworICAgIG1fYnVmZmVyID0gMDsKK30KKwordm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6
OmZsdXNoKEhlYXAmIGhlYXApCit7CisgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IG1fY2Fw
YWNpdHkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50SW5kZXg7ICsraSkK
KyAgICAgICAgaGVhcC53cml0ZUJhcnJpZXIobV9idWZmZXJbaV0pOworICAgIG1fY3VycmVudElu
ZGV4ID0gMDsKK30KKwordm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KCkKK3sKKyAgICBt
X2N1cnJlbnRJbmRleCA9IDA7Cit9CisKK3ZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjphZGQoSlND
ZWxsKiBjZWxsKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY2VsbCk7Cisg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDwgbV9jYXBhY2l0eSk7CisgICAgbV9idWZmZXJbbV9j
dXJyZW50SW5kZXgrK10gPSBjZWxsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V3JpdGVCYXJyaWVyQnVmZmVyX2gKKyNkZWZpbmUgV3JpdGVCYXJyaWVyQnVmZmVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFw
OworY2xhc3MgSlNDZWxsOworCituYW1lc3BhY2UgRlRMIHsgY2xhc3MgTG93ZXJERkdUb0xMVk07
IH0KKworY2xhc3MgV3JpdGVCYXJyaWVyQnVmZmVyIHsKKyAgICBmcmllbmQgY2xhc3MgRlRMOjpM
b3dlckRGR1RvTExWTTsKK3B1YmxpYzoKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIodW5zaWduZWQg
Y2FwYWNpdHkpOworICAgIH5Xcml0ZUJhcnJpZXJCdWZmZXIoKTsKKworICAgIHZvaWQgYWRkKEpT
Q2VsbCopOworICAgIHZvaWQgZmx1c2goSGVhcCYpOworICAgIHZvaWQgcmVzZXQoKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudEluZGV4T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoV3JpdGVCYXJyaWVyQnVmZmVyLCBtX2N1cnJlbnRJbmRleCk7
CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBjYXBhY2l0eU9mZnNldCgpCisgICAgewor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdyaXRlQmFycmllckJ1ZmZlciwgbV9jYXBh
Y2l0eSk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBidWZmZXJPZmZzZXQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXcml0ZUJhcnJpZXJCdWZmZXIsIG1f
YnVmZmVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7
CisgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICBKU0NlbGwqKiBtX2J1ZmZlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV3JpdGVCYXJyaWVyQnVmZmVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219433</attachid>
            <date>2013-12-17 11:27:39 -0800</date>
            <delta_ts>2013-12-18 12:03:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131217112744.patch</filename>
            <type>text/plain</type>
            <size>109909</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxMy0xMi0xNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHByZXBhcmF0aW9uIGZvciBHZW5HQy4gV2UgdXNlIGEgc2VwYXJhdGUgU3RvcmVCYXJyaWVyIG5v
ZGUgaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBpbXBsaWNpdGx5IAorICAgICAgICBwYXJ0IG9mIG90
aGVyIG5vZGVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gcnVuIGFuYWx5c2VzIG9uIHRoZW0sIGUu
Zy4gZm9yIHRoZSBTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuIAorICAgICAgICBUaGV5IGFyZSBp
bnNlcnRlZCBkdXJpbmcgdGhlIGZpeHVwIHBoYXNlLiBJbml0aWFsbHkgdGhleSBkbyBub3QgZ2Vu
ZXJhdGUgYW55IGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KTogV2hlbmV2ZXIgd2UgaW5zZXJ0IG5ldyBub2RlcyB0aGF0IHJlcXVpcmUgU3RvcmVCYXJyaWVy
cywKKyAgICAgICAgd2UgaGF2ZSB0byBhZGQgdGhvc2UgbmV3IFN0b3JlQmFycmllcnMgdG9vLiBJ
dCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgYW5kIAor
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIG5vZGVzIHJlcXVpcmUgdGhlaXIgU3Rv
cmVCYXJyaWVycyB0byBjb21lIGFmdGVyIHRoZW0gc2luY2UgdGhleSBhbGxvY2F0ZSBmaXJzdCwK
KyAgICAgICAgd2hpY2ggY291bGQgY2F1c2UgYSBHQywgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3Vs
dGluZyBidWZmZXIgaW50byB0aGVpciBKU0NlbGwsIHdoaWNoIHJlcXVpcmVzIHRoZSBiYXJyaWVy
LgorICAgICAgICBJZiB3ZSBldmVyIHJlcXVpcmUgdGhhdCB3cml0ZSBiYXJyaWVycyBvY2N1ciBi
ZWZvcmUgc3RvcmVzLCB3ZSdsbCBoYXZlIHRvIHNwbGl0IHRoZXNlIG5vZGVzIGludG8gCisgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlICsgU3RvcmVCYXJyaWVyICsgUHV0UHJvcGVydHlT
dG9yYWdlLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwSGVhcFN0b3JlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1N0b3JlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3RvcmVOb2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRD
b21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6
CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNv
bXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpnZW5lcmljV3JpdGVCYXJyaWVyKTogVGhlIGZhc3QgcGF0aCB3cml0
ZSBiYXJyaWVyIGNoZWNrLiBJdCBsb2FkcyB0aGUgCisgICAgICAgIGJ5dGUgdGhhdCBjb250YWlu
cyB0aGUgbWFyayBiaXQgb2YgdGhlIG9iamVjdC4gCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIpOiBJZiB0aGUgZmFzdCBwYXRoIGNo
ZWNrIGZhaWxzIHdlIHRyeSB0byBzdG9yZSB0aGUgCisgICAgICAgIGNlbGwgaW4gdGhlIFdyaXRl
QmFycmllckJ1ZmZlciBzbyBhcyB0byBhdm9pZCBmcmVxdWVudGx5IGZsdXNoaW5nIGFsbCByZWdp
c3RlcnMgaW4gb3JkZXIgdG8gbWFrZSBhIEMgY2FsbC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKTogTW9yZSBiYXJlYm9uZXMgdmVyc2lvbiBvZiB0aGUgd3Jp
dGUgYmFycmllciB0byBiZSBleGVjdXRlZCAKKyAgICAgICAgZHVyaW5nIGFuIE9TUiBleGl0IGlu
dG8gYmFzZWxpbmUgY29kZS4gV2UgbXVzdCBkbyB0aGlzIHNvIHRoYXQgdGhlIGJhc2VsaW5lIEpJ
VCBvYmplY3QgYW5kIGFycmF5IHByb2ZpbGVzIAorICAgICAgICBhcmUgcHJvcGVybHkgY2xlYXJl
ZCBkdXJpbmcgR0MuCisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAgICAgICog
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA6IEFkZGVkLiBOZXcgREZHIHBoYXNl
IHRoYXQgZG9lcyBibG9jay1sb2NhbCBlbGlzaW9uIG9mIHJlZHVuZGFudAorICAgICAgICBTdG9y
ZUJhcnJpZXJzLiBFdmVyeSB0aW1lIGEgU3RvcmVCYXJyaWVyIG9uIGEgcGFydGljdWxhciBvYmpl
Y3QgaXMgZXhlY3V0ZWQsIGEgYml0IGlzIHNldCBpbmRpY2F0aW5nIHRoYXQgCisgICAgICAgIHRo
YXQgb2JqZWN0IGRvZXNuJ3QgbmVlZCBhbnkgbW9yZSBTdG9yZUJhcnJpZXJzLiAKKyAgICAgICAg
KEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpjb3Vs
ZENhdXNlR0MpOiBOb2RlcyB0aGF0IGNvdWxkIGNhdXNlIGEgR0MgcmVzZXQgdGhlIGJpdHMgZm9y
IGFsbCBvZiB0aGUgCisgICAgICAgIG9iamVjdHMga25vd24gaW4gdGhlIGN1cnJlbnQgYmxvY2su
IAorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6YWxsb2NhdGVz
RnJlc2hPYmplY3QpOiBBIG5vZGUgdGhhdCBjcmVhdGVzIGEgbmV3IG9iamVjdCBhdXRvbWF0aWNh
bGx5IAorICAgICAgICBzZXRzIHRoZSBiaXQgZm9yIHRoYXQgb2JqZWN0IHNpbmNlIGlmIGEgR0Mg
b2NjdXJyZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGF0IG9iamVjdCdzIGFsbG9jYXRpb24gdGhlbiB0
aGF0IAorICAgICAgICBvYmplY3Qgd291bGQgbm90IG5lZWQgYSBiYXJyaWVyIHNpbmNlIGl0IHdv
dWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgYSB5b3VuZyBnZW5lcmF0aW9uIG9iamVjdCB1bnRpbCB0
aGUgCisgICAgICAgIG5leHQgR0MgcG9pbnQuCisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlOjpub3RpY2VGcmVzaE9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpnZXRCYXNlT2ZTdG9yZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpzaG91bGRCZUVsaWRlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjplbGlkZUJhcnJpZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6Y2xlYXJWYXJpYWJsZUJh
cnJpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6Omhh
bmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6
aGFuZGxlTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFz
ZTo6aGFuZGxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lv
bik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlk
YXRlOjp2YWxpZGF0ZSk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOgor
ICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6VmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6Om5lZWRzQmFycmllcik6
CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpjaGVja0FuZFNldE5lZWRz
QmFycmllcik6CisgICAgICAgICogaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwOiBBZGRlZC4g
VGhlIFdyaXRlQmFycmllckJ1ZmZlciBidWZmZXJzIGEgc2V0IG9mIEpTQ2VsbHMgdGhhdCBhcmUg
YXdhaXRpbmcgCisgICAgICAgIGEgcGVuZGluZyBXcml0ZUJhcnJpZXIuIFRoaXMgYnVmZmVyIGlz
IHVzZWQgYnkgdGhlIERGRyB0byBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YgY2FsbGluZyBvdXQgdG8g
QyByZXBlYXRlZGx5CisgICAgICAgIHRvIGludm9rZSBhIHdyaXRlIGJhcnJpZXIgb24gYSBzaW5n
bGUgSlNDZWxsLiBJbnN0ZWFkIHRoZSBERkcgaGFzIGlubGluZSBjb2RlIHRvIGZpbGwgdGhlIFdy
aXRlQmFycmllciBidWZmZXIKKyAgICAgICAgdW50aWwgaXRzIGZ1bGwsIGFuZCB0aGVuIHRvIGNh
bGwgb3V0IHRvIEMgdG8gZmx1c2ggaXQuIFRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgd2lsbCBhbHNv
IGJlIGZsdXNoZWQgcHJpb3IgdG8gCisgICAgICAgIGVhY2ggRWRlbkNvbGxlY3Rpb24uCisgICAg
ICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6V3JpdGVCYXJyaWVyQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjp+V3JpdGVCYXJyaWVyQnVmZmVyKToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpmbHVzaCk6CisgICAgICAgIChKU0M6OldyaXRl
QmFycmllckJ1ZmZlcjo6cmVzZXQpOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6
OmFkZCk6CisgICAgICAgICogaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6V3JpdGVCYXJyaWVyQnVmZmVyOjpjYXBhY2l0eU9mZnNldCk6CisgICAgICAgIChK
U0M6OldyaXRlQmFycmllckJ1ZmZlcjo6YnVmZmVyT2Zmc2V0KToKKworCiAyMDEzLTEyLTE3ICBK
dWxpZW4gQnJpYW5jZWF1ICA8amJyaWFuY2VAY2lzY28uY29tPgogCiAgICAgICAgIEZpeCBhcm12
NyBhbmQgc2g0IGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYgKzE3Miw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCiAgICAgZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCiAgICAgZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwCisgICAg
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAKICAgICBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHAKICAgICBkZmcvREZHVGh1bmtzLmNwcAogICAgIGRmZy9ERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcApAQCAtMjE5LDYgKzIyMCw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgaGVhcC9XZWFrQmxvY2suY3BwCiAgICAgaGVhcC9XZWFrSGFu
ZGxlT3duZXIuY3BwCiAgICAgaGVhcC9XZWFrU2V0LmNwcAorICAgIGhlYXAvV3JpdGVCYXJyaWVy
QnVmZmVyLmNwcAogICAgIGhlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAKIAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zODcsNiAr
Mzg3LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCBcCkBAIC01NzYsNiArNTc4LDggQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V2Vha1NldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrU2V0SW5saW5lcy5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAgXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvY29uZmlnLmggXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC00MjgsNiArNDI4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
U0FDb252ZXJzaW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4K
QEAgLTQ3MSw2ICs0NzIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFr
QmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrSGFuZGxl
T3duZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrU2V0LmNw
cCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyQnVmZmVy
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yQWdlbnRSZWdpc3RyeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIiAvPgpAQCAtOTQ4LDYgKzk1MCw3
IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBTG93ZXJpbmdQaGFz
ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0YWNrTGF5b3V0UGhh
c2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1RodW5rcy5oIiAvPgpAQCAtMTAyNiw2ICsxMDI5LDcgQEAKICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrU2V0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXFdlYWtTZXRJbmxpbmVzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJTdXBwb3J0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRCYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oIiAvPgpA
QCAtMTM4NCw0ICsxMzg4LDQgQEAKICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJn
ZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0b21p
emF0aW9uc1xtYXNtLnRhcmdldHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTYwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDkg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAiPgogICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5jcHAiPgorICAgICAgPEZpbHRlcj5o
ZWFwPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTE0OSw2ICsxMTUyLDkgQEAKICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCI+CiAgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAiPgorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdUaHVua3MuY3BwIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC0xNzU0LDYgKzE3NjAsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxXZWFrU2V0SW5saW5lcy5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
PgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXcml0
ZUJhcnJpZXJCdWZmZXIuaCI+CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0Ns
SW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3Vw
cG9ydC5oIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpA
QCAtMzA1Nyw2ICszMDY2LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
dGFja0xheW91dFBoYXNlLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0Ns
SW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2UuaCI+CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgorICAgIDwvQ2xJbmNs
dWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsOSArNzE4LDEzIEBACiAJCTI2MDBCNUE3MTUyQkFB
QTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5n
Sm9pbmVyLmggKi87IH07CiAJCTJBMjgyNUQwMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVs
ZWFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyQTI4MjVDRjE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovOyB9
OwogCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzIxMUI1NzQxNzZB
MjI0RDAwMEUyQTIzIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJMkE0RUM5MEIx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTRFQzkwOTE4NjBENkMyMDA5NEY3ODIg
LyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCAqLzsgfTsKKwkJMkE0RUM5MEMxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmll
ckJ1ZmZlci5oICovOyB9OwogCQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2
RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJE
RjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi87IH07CiAJ
CTJBQUQ5NjRBMTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUQ5NjQ5MTg1
Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCAqLzsgfTsKKwkJMkFD
Q0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4
NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsK
KwkJMkFDQ0YzREYxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0Yz
REQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovOyB9
OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdD
OThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHls
aWIgKi87IH07CiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CkBAIC0yMDIxLDkgKzIw
MjUsMTMgQEAKIAkJMjYwMEI1QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVG
IC8qIEpTU3RyaW5nSm9pbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgz
NDFGMkQwMDg3RkJBOSAvKiBEZWxheWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERlbGF5ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJC
dWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQTRFQzkwQTE4NjBENkMy
MDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdyaXRlQmFycmllckJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJBN0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJz
aXZlQWxsb2NhdGlvblNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
Y3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
QUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFDQ0YzREQxODVGRTI2QjAwODNFMkFE
IC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdT
dG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHls
aWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29t
cGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xp
YnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQk0NDkwOTdFRTBGOEY4MUI1MDA3
NkEzMjcgLyogRmVhdHVyZURlZmluZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gRmVhdHVyZURlZmluZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0zMTExLDYgKzMxMTksOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyog
aGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkE0
RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCisJCQkJ
MkE0RUM5MEExODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJ
CTE0ODE2RTE5MTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJ
MTQ4MTZFMUExNTRDQzU2QzAwQjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZE
OEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCkBAIC0zODQ3LDYg
KzM4NTcsOCBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkyQUNDRjNEQzE4NUZFMjZCMDA4
M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLywKKwkJCQkyQUNDRjNE
RDE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJ
CQkJQTc3QTQyMzYxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJ
CQkJQTc3QTQyMzcxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJ
CUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8s
CkBAIC00OTc3LDYgKzQ5ODksNyBAQAogCQkJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBT
bG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDlGMkYwMTdBMEFDMDQw
MDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2
QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBNEVD
OTBDMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92
aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKQEAgLTUwNTAsNiArNTA2Myw3IEBACiAJCQkJMTRC
RTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyogV2Vha01hcERhdGEuaCBp
biBIZWFkZXJzICovLAorCQkJCTJBQ0NGM0RGMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkw
MDQwMERFRCAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdD
QTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggaW4gSGVhZGVy
cyAqLywKQEAgLTU3MDUsNiArNTcxOSw3IEBACiAJCQkJMEYyNEU1NTUxN0YwQjcxQzAwQUJCMjE3
IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzg4NTNGOTE3
OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEy
ODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDky
RjBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQw
MEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NTcxNyw2ICs1NzMyLDcgQEAKIAkJCQkwRkIxNEUxRTE4MTI0QUNFMDA5QjZCNEQgLyogSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERDUxRUIwRkI4REY3
NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcxMjM2RTUx
MTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQwMDI4ODY4MiAvKiBKSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRThFNDExMkU3MkVGMDBB
MzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2aXNpb24g
MTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oVmFyaWFibGVzKSBcCiAgICAgbWFjcm8oVHlwZWRBcnJheVByb3Bl
cnRpZXMpIFwKICAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAgbWFjcm8oQmFycmllclN0YXRlKSBc
CiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKICAgICBtYWNybyhJbnRlcm5hbFN0YXRlKSBcCiAg
ICAgbWFjcm8oQWJzb2x1dGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQ3LDYgKzE0NywxMiBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBm
aWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOwogICAgIAorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgaXNLbm93bk5vdENlbGwoVCBub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoZm9yTm9kZShub2RlKS5tX3R5cGUgJiBTcGVjQ2VsbCk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4m
LCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhj
b25zdCBDb2RlT3JpZ2luJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1ODgsNiArMTU4OCw4MCBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBDaGVja1RpZXJVcEF0UmV0
dXJuOgogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgICAg
IE5vZGUqIHN0b3JlTm9kZSA9IG5vZGUtPnN0b3JlTm9kZSgpOworICAgICAgICBzd2l0Y2ggKHN0
b3JlTm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICAgICAg
c3dpdGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgICAgIGlmIChpc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOworICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoK
KyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6IHsKKyAgICAgICAgICAgIGlmIChpc0tub3duTm90Q2VsbChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWND
ZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgorICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAgaWYgKGlzS25v
d25Ob3RDZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIGZpbHRlcihub2Rl
LT5jaGlsZDEoKSwgU3BlY0NlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOiB7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0
QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgc3dpdGNo
IChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICAgICAgaWYg
KGlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBm
aWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGludDoK
ICAgICAgICAgLy8gV2UgcHJldGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5IHdh
bnQgdG8gZ2V0IGFsbCBzdGF0ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1
bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KK3ZvaWQgY2xvYmJlcml6ZUZvckFsbG9jYXRp
b24oUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit7CisgICAgcmVhZChH
Q1N0YXRlKTsKKyAgICByZWFkKEJhcnJpZXJTdGF0ZSk7CisgICAgd3JpdGUoR0NTdGF0ZSk7Cisg
ICAgd3JpdGUoQmFycmllclN0YXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1bmN0
b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIFJlYWRGdW5jdG9yJiByZWFkLCBXcml0ZUZ1bmN0b3ImIHdyaXRlKQogewog
ICAgIC8vIFNvbWUgbm90ZXM6CkBAIC0xNjAsMTAgKzE2OSw5IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKICAg
ICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9jYXRpb24o
cmVhZCwgd3JpdGUpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICB3cml0ZShX
YXRjaHBvaW50X2ZpcmUpOwotICAgICAgICByZWFkKEdDU3RhdGUpOwotICAgICAgICB3cml0ZShH
Q1N0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEZ1bmN0aW9uUmVl
bnRyeVdhdGNocG9pbnQ6CkBAIC0xNzMsOCArMTgxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhp
czoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAg
ICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJl
YWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRj
aHBvaW50OgpAQCAtNDM1LDE1ICs0NDIsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdDU3Rh
dGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9j
YXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJm
bHkpOwogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdD
U3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFs
bG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgpAQCAtNDU2LDggKzQ2MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKICAgICAgICAgd3JpdGUoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUoR0NTdGF0
ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
CkBAIC01NDQsMTUgKzU0OCwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5jdGlv
bjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKLSAgICAgICAgcmVhZChHQ1N0YXRl
KTsKLSAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0
aW9uKHJlYWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIE5l
d1R5cGVkQXJyYXk6CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRl
KTsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgICAgICB3
cml0ZShHQ1N0YXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC02NDEsOCArNjQzLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwotICAgICAgICByZWFkKEdDU3Rh
dGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9j
YXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
Q291bnRFeGVjdXRpb246CkBAIC02NTAsNiArNjUxLDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKICAgICAg
ICAgd3JpdGUoSW50ZXJuYWxTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgU3Rv
cmVCYXJyaWVyOgorICAgICAgICByZWFkKEJhcnJpZXJTdGF0ZSk7CisgICAgICAgIHdyaXRlKEJh
cnJpZXJTdGF0ZSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9k
ZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMCwyOCArMzAwLDMz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMubmV3
U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkpOwotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgY29kZU9yaWdpbiwgT3BJ
bmZvKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKSwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCks
IEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3Jh
Z2UgPSBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmln
aW4sIGNoaWxkRWRnZSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBjb2RlT3JpZ2luLCBPcEluZm8ocmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShyZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRpb24oKSkgewotICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2lu
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxk
RWRnZSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVjdHVyZSA9IG1fZ3JhcGgu
YWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgY29kZU9y
aWdpbiwgT3BJbmZvKHB1dFN0cnVjdHVyZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBL
bm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgVW50eXBlZFVzZSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXhJbkJsb2NrLCBw
dXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJp
ZXIsIGNvZGVPcmlnaW4sIE9wSW5mbyhub2RlKSwgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCks
IEtub3duQ2VsbFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gc3RhdHVzLm9mZnNldCgpOwpAQCAtMzI5LDcgKzMzNCw4MiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vz
c0RhdGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAgICAgICAgICAgICAgIE5vZGUqIHN0b3JlTm9k
ZSA9IG5vZGUtPnN0b3JlTm9kZSgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RvcmVOb2Rl
LT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheVB1c2g6IHsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChtX2ludGVycHJldGVyLmlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbnRlcnBy
ZXRlci5pc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAgICAgICAgICBpZiAobV9pbnRlcnBy
ZXRlci5pc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIFRlYXJPZmZBY3Rp
dmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChzdG9yZU5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ludGVycHJldGVy
LmlzS25vd25Ob3RDZWxsKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUwLDggKzU1MCw5IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KGNoaWxkMyk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihjaGlsZDEpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJV
c2U+KGNoaWxkMik7CisgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxk
MSk7CisgICAgICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4Myw2ICs1
ODQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8UmVhbE51bWJlclVzZT4o
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzY3LDE4
ICs3NjksMzMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBT
dG9yZShub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVy
czoKLSAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFNraXBUb3BTY29w
ZToKICAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0gICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgot
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6IHsKICAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogewor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGZpeHVwSGVhcFN0b3JlKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7
CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkp
CkBAIC04MDAsMTIgKzgxNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2Ug
UHV0QnlJZERpcmVjdDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CiAgICAgICAg
IGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQdXRC
eUlkOgotICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJ
bnN0YW5jZToKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseTogewpAQCAtODMyLDYgKzg1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMSgpLT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShu
b2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5
MSw2ICs5MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0
aGVtLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAg
IGNhc2UgVGVhck9mZkFjdGl2YXRpb246IHsKKyAgICAgICAgICAgIGZpeHVwSGVhcFN0b3JlKG5v
ZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIElzU3Ry
aW5nOgogICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJp
bmcoKSkgewpAQCAtOTE0LDcgKzk0Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlT
Y29wZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2Jh
bFZhcjoKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgTm90aWZ5V3Jp
dGU6CiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFZhcklu
amVjdGlvbldhdGNocG9pbnQ6CkBAIC05MzEsNyArOTU5LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBJc09iamVjdDoKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICBjYXNlIENy
ZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgICAg
IGNhc2UgQ3JlYXRlQXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAg
ICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKQEAgLTk1MSw2ICs5NzgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRy
eUxvY2FsOgogICAgICAgICBjYXNlIExvb3BIaW50OgorICAgICAgICBjYXNlIFN0b3JlQmFycmll
cjoKICAgICAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgogICAgICAgICBjYXNl
IFR5cGVkQXJyYXlXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTAzLDYgKzE1
MzEsOTEgQEAgcHJpdmF0ZToKICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKHVzZUtpbmQpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGZpeHVwSGVhcFN0b3JlKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogV2UgdXNlIENlbGxVc2Ugb3IgVW50eXBlZFVzZSBldmVyeXdoZXJlIGhl
cmUsIGJ1dCBzaG91bGQgd2UgYWxzbyBiZSB1c2luZyBLbm93bkNlbGxVc2Ugd2hlcmUgYXBwcm9w
cmlhdGU/CisgICAgICAgIE5vZGUqIGJhcnJpZXJOb2RlID0gMDsKKyAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAgICAgICBiYXJy
aWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBTcGVjTm9uZSwgU3Rv
cmVCYXJyaWVyLCAKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBP
cEluZm8obm9kZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpLCBF
ZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgVW50eXBlZFVzZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0
QnlJZERpcmVjdDogeworICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUo
CisgICAgICAgICAgICAgICAgU3BlY05vbmUsIFN0b3JlQmFycmllciwgCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG5vZGUpLCBFZGdlKG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSwgQ2VsbFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBVbnR5
cGVkVXNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
ZSBiYXJyaWVyIG11c3QgZ28gYWZ0ZXIgdGhlc2Ugbm9kZXMgYmVjYXVzZSB0aGV5IGFsbG9jYXRl
IHRoZWlyIG5ldyBwcm9wZXJ0eSBzdG9yYWdlIGZpcnN0IGFuZCB0aGVuIGRvIHRoZSBzdG9yZS4K
KyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3Jh
cGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCAKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obm9kZSksIEVk
Z2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIGZp
eHVwTm9kZShiYXJyaWVyTm9kZSk7CisgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
bV9pbmRleEluQmxvY2sgKyAxLCBiYXJyaWVyTm9kZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICAgICAgYmFy
cmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoCisgICAgICAgICAgICAgICAgU3BlY05vbmUsIFN0
b3JlQmFycmllciwgCisgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwg
T3BJbmZvKG5vZGUpLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVGVhck9mZkFj
dGl2YXRpb246CisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBiYXJy
aWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKKyAgICAgICAgICAgICAgICBTcGVjTm9uZSwgU3Rv
cmVCYXJyaWVyLCAKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCBP
cEluZm8obm9kZSksIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKAorICAgICAgICAg
ICAgICAgIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIAorICAgICAgICAgICAgICAgIG1fY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlKSwgRWRnZShub2RlLT5jaGlsZDIoKS5ub2Rl
KCksIEtub3duQ2VsbFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNl
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0Q2xv
c3VyZVZhcjogeworICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoCisg
ICAgICAgICAgICAgICAgU3BlY05vbmUsIFN0b3JlQmFycmllciwgCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgT3BJbmZvKG5vZGUpLCBFZGdlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVu
dHlwZWRVc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbEFsaWFzOiB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIFVzZUtpbmQg
YmFzZVVzZUtpbmQgPSBLbm93bkNlbGxVc2U7CisjZWxzZQorICAgICAgICAgICAgVXNlS2luZCBi
YXNlVXNlS2luZCA9IENlbGxVc2U7CisjZW5kaWYKKyAgICAgICAgICAgIEVkZ2UgYmFzZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlIHZhbHVlID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9n
cmFwaC5hZGROb2RlKAorICAgICAgICAgICAgICAgIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIAor
ICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIE9wSW5mbyhub2RlKSwg
RWRnZShiYXNlLm5vZGUoKSwgYmFzZVVzZUtpbmQpLCBFZGdlKHZhbHVlLm5vZGUoKSwgVW50eXBl
ZFVzZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZml4dXBOb2RlKGJhcnJpZXJOb2RlKTsKKyAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG1faW5kZXhJbkJsb2NrLCBiYXJyaWVyTm9kZSk7
CisgICAgfQorCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewogICAgICAg
ICBOb2RlKiBub2RlID0gZWRnZS5ub2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw2ICs2MDYsMTcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICBBU1NFUlQoaGFzUGhpKCkpOwogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PE5vZGUqPihtX29wSW5mbyk7CiAgICAgfQorCisgICAgYm9vbCBoYXNTdG9yZU5vZGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gU3RvcmVCYXJyaWVyOworICAgIH0KKworICAgIE5v
ZGUqIHN0b3JlTm9kZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3RvcmVOb2RlKCkpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX29wSW5mbyk7CisgICAgfQogICAg
IAogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAgICAgewpAQCAtMTU1NSw2ICsxNTY2LDcgQEAg
cHVibGljOgogICAgIHVuaW9uIHsKICAgICAgICAgTm9kZSogcmVwbGFjZW1lbnQ7CiAgICAgICAg
IEJhc2ljQmxvY2sqIG93bmVyOworICAgICAgICBib29sIG5lZWRzQmFycmllcjsKICAgICB9IG1p
c2M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShy
ZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw2ICsyOTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgLyogQ2hlY2tzIHRoZSB3YXRjaGRvZyB0aW1lci4gSWYgdGhlIHRp
bWVyIGhhcyBmaXJlZCwgd2UgT1NSIGV4aXQgdG8gdGhlICovIFwKICAgICAvKiBiYXNlbGluZSBK
SVQgdG8gcmVkbyB0aGUgd2F0Y2hkb2cgdGltZXIgY2hlY2ssIGFuZCBzZXJ2aWNlIHRoZSB0aW1l
ci4gKi8gXAogICAgIG1hY3JvKENoZWNrV2F0Y2hkb2dUaW1lciwgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCisgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNh
bGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkg
dGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0
aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKKyNpbmNsdWRlICJERkdTcGVj
dWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogCkBAIC00NDgsOSArNDQ5LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoR1BSSW5mbzo6cmVnVDAs
IEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgLy8gMTEpIEFuZCBmaW5pc2guCi0gICAgCisKKyNpZiBFTkFCTEUoV1JJVEVf
QkFSUklFUl9QUk9GSUxJTkcpIAorICAgIC8vIDExKSBXcml0ZSBiYXJyaWVyIHRoZSBvd25lciBl
eGVjdXRhYmxlIGJlY2F1c2Ugd2UncmUganVtcGluZyBpbnRvIGEgZGlmZmVyZW50IGJsb2NrLgor
ICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KGNvZGVPcmlnaW4pOworICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsgCisgICAgICAgIFNwZWN1bGF0aXZlSklUOjpvc3JXcml0ZUJhcnJpZXIobV9q
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86Om5vbkFyZ0dQUjEsIEdQUkluZm86Om5v
bkFyZ0dQUjIpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyAxMikgQW5kIGZpbmlzaC4K
ICAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAko
cmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAtNDAyLDkgKzQwMywxOSBAQCB2
b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBtX2pp
dC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3Iob3Bl
cmFuZCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIDExKSBBbmQgZmluaXNoLgot
ICAgIAorCisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKSAKKyAgICAvLyAxMSkg
V3JpdGUgYmFycmllciB0aGUgb3duZXIgZXhlY3V0YWJsZSBiZWNhdXNlIHdlJ3JlIGp1bXBpbmcg
aW50byBhIGRpZmZlcmVudCBibG9jay4KKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBt
X2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAgICAgbV9qaXQubW92
ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7IAorICAgICAgICBTcGVjdWxhdGl2
ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKG1faml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZv
Ojpub25BcmdHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICAgICAgaWYgKCFjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgor
CisgICAgLy8gMTIpIEFuZCBmaW5pc2guCiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KG1faml0
LCBleGl0KTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBQ29udmVy
c2lvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1N0YWNrTGF5b3V0UGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaCIKICNpbmNsdWRlICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVk
ZSAiREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCIKQEAgLTIyMyw2ICsyMjQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9p
bnRDb252ZXJnZWQ7CiAKKyAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihkZmcpOwogICAg
IHBlcmZvcm1TdG9yZUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgCiAgICAgLy8gSWYgd2UncmUgZG9p
bmcgdmFsaWRhdGlvbiwgdGhlbiBydW4gc29tZSBhbmFseXNlcywgdG8gZ2l2ZSB0aGVtIGFuIG9w
cG9ydHVuaXR5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYwNjgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0Niw2ICs1NDYsNyBAQCBwcml2YXRlOgogCiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9u
J3QgcmV0dXJuIGFueXRoaW5nLgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAg
Y2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2Fz
ZSBQdXRDbG9zdXJlVmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsNiArMjQxLDcg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgTG9v
cEhpbnQ6CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAgIGNhc2UgSW50NTJUb1ZhbHVlOgor
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAg
Y2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCAr
MjAwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwg
RWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
R1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBh
eWxvYWRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQ
dXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewotICAg
IHdyaXRlQmFycmllcihiYXNlUGF5bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlVXNlLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQUik7Ci0gICAgCiAgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2lu
LCB1c2VkUmVnaXN0ZXJzKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICBK
U1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkoYmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh2YWx1
ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwKQEAgLTExMTIsNiArMTExMCwyMyBAQCBKSVRDb21w
aWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihF
ZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQoreworI2lmIEVOQUJMRShXUklURV9CQVJS
SUVSX1BST0ZJTElORykKKyAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2Rl
KCkpKTsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOwor
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7CisgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKwor
ICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVFZGdlLCBz
Y3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
YmFzZUVkZ2UpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUVkZ2UpOworI2VuZGlmCit9CisKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0y
NjExLDEyICsyNjI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJy
aWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBj
aGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb21waWxlQ29udGlndW91
c1B1dEJ5VmFsKG5vZGUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSwgdmFsdWVQYXlsb2FkUmVnLCB2
YWx1ZVRhZ1JlZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjYzMywxMyAr
MjY0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJl
ZywgdmFsdWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNj
cmF0Y2hSZWcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIApAQCAtMjgxOSwxMSArMjgyMyw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyB2
YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlUGF5
bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKIAotICAgICAgICAgICAgaWYgKEhlYXA6Omlz
V3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVl
VGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNj
cmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgo
KSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsK
QEAgLTI4NzIsMTEgKzI4NzEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsK
ICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7
CiAKLSAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAg
IHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRl
QmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BS
KTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gaGFu
ZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTM2NzMsMTkgKzM2NjcsMTggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3Bl
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJz
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVy
KHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKwogICAgICAg
ICBHUFJSZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBHUFJSZWcg
dmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9h
ZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBz
Y3JhdGNoUmVnaXN0ZXIuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNo
aWxkMSgpKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lz
dGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFn
KSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29tcGlsZXI6
OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdpc3Rl
cikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUt
PmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQUik7CiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zODgyLDEx
ICszODc1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICAKLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhp
cyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWly
ZXMgaXQKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsK
LSNlbmRpZgotICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTM5NDgsMTkg
KzM5MzYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwog
ICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwotICAg
ICAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIHdyaXRl
QmFycmllcihiYXNlLmdwcigpLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgorCisgICAgICAgIHNwZWN1bGF0ZShub2Rl
LCBub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VB
Y2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIApAQCAtMzk4MSwxMiArMzk2NCw5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZh
bHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAg
ICAgICAgdmFsdWUudXNlKCk7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3Jp
Z2luLCBiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBub2RlLT5jaGlsZDIo
KSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOworICAg
ICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlVGFnR1BS
LCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwg
Tm90RGlyZWN0KTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTQwMDAsMTIgKzM5ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1
ZS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwot
Ci0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVU
YWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUt
PmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2Rl
LT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CiAKLSAgICAgICAgbm9S
ZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDAyMywxMiArNDAwMCw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgUHV0
R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgdmFs
dWUudGFnR1BSKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vz
cywgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogaWYgd2UgaGFw
cGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYgd2UgaGFwcGVuIHRv
IGhhdmUKICAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6YXRpb24g
d291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KQEAgLTQ2OTQsNiArNDY2
NSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGNvbXBpbGVJbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFN0b3JlQmFycmll
cjogeworICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewogICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwog
ICAgICAgICBicmVhazsKQEAgLTQ3NTIsNiArNDcyOCwzNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAorI2lmIEVOQUJM
RShXUklURV9CQVJSSUVSX1BST0ZJTElORykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1ZVVzZSwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAg
ICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2
YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dy
aXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgc3Rv
cmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAg
ICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKworICAgIGlmICghaXNLbm93bkNl
bGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNL
bm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
ZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIsIHNj
cmF0Y2gxLCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lciwg
c2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0
KTsKKworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMCArMjA2LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hl
ZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZh
bHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRh
cmdldCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKLSAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFs
dWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaEdQ
Uik7Ci0KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9qaXQuY29kZUJs
b2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZUdQ
UiksIHNjcmF0Y2hHUFIsIGZhbHNlLApAQCAtMTQ3Myw2ICsxNDcxLDIzIEBAIEpJVENvbXBpbGVy
OjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90TnVtYmVyOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2Um
IGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCit7CisjaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQorICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkp
OworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworCisgICAg
d3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gx
LmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlRWRn
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlRWRnZSk7CisjZW5kaWYKK30KKwogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI5MDcsMTEg
KzI5MjIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxk
MywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOwotICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxk
NCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0y
OTg3LDExICsyOTk3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJy
aWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBj
aGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKLSAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBj
aGlsZDQpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpA
QCAtMzA5Miw3ICszMDk3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlUmVnLCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkp
OwotICAgIAorCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVnLCBzY3JhdGNoMlJl
Zyk7CiAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMlJlZywgc2Ny
YXRjaDJSZWcpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTMxOTMsMTEgKzMxOTgs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIs
IG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5n
cHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BS
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxl
bmd0aCgpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0KSk7CkBAIC0zMjQyLDExICszMjQyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CiAKLSAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAg
ICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQy
KCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zm
c2V0KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWZ1
c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTM5NzksMTggKzM5NzQsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
cmVnaXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aFJlZ2lzdGVyKHRoaXMpOwogCi0gICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAg
ICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoUmVnaXN0ZXIuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5v
ZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJl
Z2lzdGVyKSkpOwotICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2Rl
LT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDE3OSwx
NCArNDE3MSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRy
YW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsK
IAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgCi0gICAgICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElO
RykKLSAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhl
IHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlmCi0gICAgICAgIAogICAg
ICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAgICAgCiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNDI0NSwyMyArNDIzMywyMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OiB7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSNl
bmRpZgogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoMih0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICAK
LSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIHdyaXRlQmFycmll
cihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgorCisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2Rl
LT5jaGlsZDIoKSk7CiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NE
YXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKV07CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BS
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShz
dG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00Mjc1LDEyICs0MjYwLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNl
KCk7CisgICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFs
dWVHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsK
IAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVl
R1BSLCBub2RlLT5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigp
LCBOb3REaXJlY3QpOwotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtNDI5MywxMiArNDI3NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3By
KCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAg
Ci0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOworICAgICAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBzY3JhdGNoR1BS
LCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CiAKLSAgICAgICAgY2FjaGVkUHV0
QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCks
IHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKLQotICAgICAg
ICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MzEzLDE0ICs0Mjky
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVy
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5j
b2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JW
YXJpYWJsZUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgbV9qaXQuc3RvcmU2NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwog
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtNDk3Myw2ICs0OTQ1LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFN0b3JlQmFycmllcjog
eworICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5j
aEFkZDMyKApAQCAtNTA1Myw2ICs1MDMwLDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCisjaWYgRU5BQkxFKFdSSVRF
X0JBUlJJRVJfUFJPRklMSU5HKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQ
UlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENl
bGw7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05v
dENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BS
LCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVm
aW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBz
Y3JhdGNoMSwgc2NyYXRjaDIpOworICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJH
UFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZt
X2ppdCk7CisKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAg
IGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQ
UlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzTm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAg
ICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3du
ZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihv
d25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmso
Jm1faml0KTsKKworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAg
ICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoV1JJVEVfQkFS
UklFUl9QUk9GSUxJTkcpCisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwOSw1MyArOTA5LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRyZW4oTm9kZSogbgogICAgIH0KIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3Jh
dGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwot
ICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwot
Ci0gICAgaWYgKGlzS25vd25Ob3RDZWxsKHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxl
cjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1
c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VL
aW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKLXsKLSAgICBVTlVTRURfUEFS
QU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFN
KHNjcmF0Y2gxKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJB
TSh1c2VLaW5kKTsKLSAgICAKLSAgICBpZiAoSGVhcDo6aXNNYXJrZWQodmFsdWUpKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklU
Q29tcGlsZXI6OmVtaXRDb3VudChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50
ZXJGb3IodXNlS2luZCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdy
aXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0Y2gpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKG93bmVyKTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0KLSAgICBpZiAoaXNL
bm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5B
QkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQo
bV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNl
bmRpZgotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkKIHsK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAg
LTQzMjksMjYgKzQyODIsMjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcAogICAgIH0KICAgICAKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAg
R1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAgIAogICAgIEFTU0VS
VCghbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9
PSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQogICAg
ICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIo
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6
ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUjEpOwogCi0gICAgbV9qaXQuYWRkUHRyKEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOwor
ICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGlu
Z0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwotICAg
ICAgICAKLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgCi0gICAg
c3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSLCBub2RlKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFs
Q2FwYWNpdHksIHNjcmF0Y2hHUFIxKSk7CisKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7CisKKyAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSog
bm9kZSkKQEAgLTQzNjcsNiArNDMyMCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UmVhbGxvY2F0ZVByCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3Rv
cmFnZSwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsK
ICAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdE51bGwgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOwor
CiAgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTQzODIsMjAgKzQzMzksMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVJlYWxsb2NhdGVQcgogICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdw
cigpOwogICAgICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAg
IGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hH
UFIyKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihuZXdT
aXplKSwgc2NyYXRjaEdQUjEpOwogCi0gICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVz
dGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2pp
dC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSwgc2NyYXRjaEdQUjEpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKLSAg
ICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIyID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0gc2Ny
YXRjaAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBzY3JhdGNoR1BSMSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVl
KSkpOworCisgICAgLy8gV2UgaGF2ZSBzY3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNo
R1BSMiA9IHNjcmF0Y2gKICAgICBmb3IgKHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkg
ewotICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VH
UFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNo
R1BSMSk7Ci0gICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yo
dm9pZCopKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9s
ZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkp
LCBzY3JhdGNoR1BSMik7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkg
KyBzaXplb2Yodm9pZCopKSkpOwogICAgIH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BS
MiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSk7Ci0gICAgCi0gICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMiwgbm9kZSk7CisgICAg
bV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworCisgICAgc3RvcmFnZVJlc3VsdChzY3Jh
dGNoR1BSMSwgbm9kZSk7CiB9CiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVn
aXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1wb3JhcnkmIHRlbXBvcmFyeSwgQXJyYXlNb2RlIGFycmF5
TW9kZSkKQEAgLTU0NTEsNiArNTQwOSwyOTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0Jy
YW5jaGVzKCkKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5vZGUpCit7
CisgICAgTm9kZSogc3RvcmVOb2RlID0gbm9kZS0+c3RvcmVOb2RlKCk7CisKKyAgICBzd2l0Y2gg
KHN0b3JlTm9kZS0+b3AoKSkgeworICAgIGNhc2UgQXJyYXlQdXNoOiB7CisgICAgICAgIHN3aXRj
aCAoc3RvcmVOb2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czoKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAg
ICAgICBjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICBj
YXNlIFB1dEJ5SWQ6CisgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CisgICAgICAgIGNvbXBpbGVC
YXNlVmFsdWVTdG9yZUJhcnJpZXIobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKKyAgICAgICAg
QVNTRVJUKCFpc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gy
KHRoaXMpOworCisgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Ioc3Rv
cmVOb2RlLT5jb2RlT3JpZ2luKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBzY3JhdGNo
MS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7Cisg
ICAgCisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2Ny
YXRjaDIuZ3ByKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFRlYXJPZmZB
Y3RpdmF0aW9uOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBiYXNlLmdw
cigpKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHNjcmF0Y2gxLmdwcigpLCBz
Y3JhdGNoMi5ncHIoKSk7CisgICAgICAgIGlzTnVsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgY2FzZSBQdXRCeVZh
bDoKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyAgICAgICAgc3dpdGNoIChzdG9yZU5vZGUt
PmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgorICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIobm9kZS0+
Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIElmIG91ciBzdG9y
ZSBub2RlIHdhcyBjb252ZXJ0ZWQgaW50byBhIG5vbi1zdG9yZSBub2RlIHRoZW4gd2Ugc2hvdWxk
IAorICAgICAgICAvLyBoYXZlIGFscmVhZHkgYmVlbiBjb25zdGFudCBmb2xkZWQuCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG5vUmVzdWx0KG5vZGUpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6Z2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBqaXQubW92ZShvd25lciwg
c2NyYXRjaDEpOworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisKKyAgICBqaXQuYW5k
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2sp
LCBzY3JhdGNoMSk7CisgICAgaml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih+TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gyKTsKKworICAgIC8vIFNoaWZ0IGlu
ZGV4CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQucnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YXRvbVNoaWZ0QW1vdW50ICsgTWFya2VkQmxvY2s6
Om1hcmtCeXRlU2hpZnRBbW91bnQpLCBzY3JhdGNoMik7CisjZWxzZQorICAgIGppdC5yc2hpZnQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tU2hpZnRBbW91
bnQgKyBNYXJrZWRCbG9jazo6bWFya0J5dGVTaGlmdEFtb3VudCksIHNjcmF0Y2gyKTsKKyNlbmRp
ZgorCisgICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAgICByZXR1cm4gaml0LmJyYW5jaFRl
c3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZNYXJrcygpKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpn
ZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwqIG93bmVyKQorewor
ICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7Cisg
ICAgc2l6ZV90IG1hcmtJbmRleCA9IChyZWludGVycHJldF9jYXN0PHNpemVfdD4ob3duZXIpICYg
fk1hcmtlZEJsb2NrOjpibG9ja01hc2spID4+IChNYXJrZWRCbG9jazo6YXRvbVNoaWZ0QW1vdW50
ICsgTWFya2VkQmxvY2s6Om1hcmtCeXRlU2hpZnRBbW91bnQpOworICAgIHVpbnQ4X3QqIGFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihi
bG9jaykgKyBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSArIG1hcmtJbmRleDsKKyAgICBy
ZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
U3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAg
ICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgIC8vIExvYWQgV3JpdGVCYXJyaWVy
QnVmZmVyIGZyb20gSGVhcAorICAgIFdyaXRlQmFycmllckJ1ZmZlciogd3JpdGVCYXJyaWVyQnVm
ZmVyID0gJmppdC52bSgpLT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOworICAgIGppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyKSwgc2NyYXRjaDEpOworICAgIC8vIExv
YWQgY3VycmVudEluZGV4CisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSksIHNjcmF0
Y2gyKTsKKyAgICAvLyBCcmFuY2ggaWYgY3VycmVudEluZGV4ID49IGNhcGFjaXR5CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gx
LCBXcml0ZUJhcnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgIC8vIFN0b3Jl
IG5ldyBjdXJyZW50SW5kZXgKKyAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
Mik7CisgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSk7CisKKyAg
ICAvLyBMb2FkIGJ1ZmZlcgorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwgc2NyYXRjaDEp
OworICAgIC8vIFN0b3JlIGNlbGwgaW50byBidWZmZXIuIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNp
emVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCisgICAg
aml0LnN0b3JlUHRyKGNlbGwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNj
cmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1z
aXplb2Yodm9pZCopKSkpOworCisgICAgLy8gSnVtcCB0byBkb25lCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgLy8gTGluayBmcm9tIGJyYW5jaAorICAgIG5l
ZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAvLyBDYWxsIEMgc2xvdyBwYXRoLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQor
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgJmppdC52bSgpLT53
cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSk7CisKKyNpZiBDUFUoWDg2KQorICAgIGppdC5w
dXNoKHNjcmF0Y2gxKTsKKyAgICBqaXQucHVzaChzY3JhdGNoMSk7CisjZW5kaWYKKworICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoY2VsbCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyNpZiBDUFUoWDg2KQorICAgIGppdC5wb3Aoc2Ny
YXRjaDEpOworICAgIGppdC5wb3Aoc2NyYXRjaDEpOworI2VuZGlmCisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0Lmxv
YWRQdHIoJmppdC52bSgpLT53cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisKKyAgICAvLyBMaW5rIERvbmUKKyAgICBkb25lLmxpbmsoJmppdCk7
CisKKyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpCit7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKKyAgICBXcml0ZUJh
cnJpZXJCdWZmZXIqIHdyaXRlQmFycmllckJ1ZmZlciA9ICZtX2ppdC52bSgpLT5oZWFwLm1fd3Jp
dGVCYXJyaWVyQnVmZmVyOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zm
c2V0KCkpKTsKKworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwor
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSk7CisKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJp
ZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgIC8vIFdlIHVzZSBhbiBv
ZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2Ny
YXRjaDIuCisgICAgbV9qaXQuc3RvcmVQdHIoY2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKKworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VS
VChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgV3JpdGVCYXJyaWVyQnVmZmVyKiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSAmbV9qaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyKSwgc2NyYXRjaDEp
OworICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3Jp
dGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNj
cmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVm
ZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSkpOworCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpidWZmZXJPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9p
ZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgorICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoY2VsbCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKyAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CisKKyAgICAvLyBD
YWxsIEMgc2xvdyBwYXRoCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciwg
Y2VsbCk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworICAg
IGRvbmUubGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJp
ZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKK3sKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodmFsdWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2Vu
ZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Cisg
ICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3du
ZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIFVOVVNFRF9QQVJB
TShqaXQpOworICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gxKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIEFTU0VSVChvd25lciAhPSBz
Y3JhdGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwg
b3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksICZqaXQudm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJC
dWZmZXJbaV0pOworCisgICAgLy8gV2UgbmVlZCB0aGVzZSBleHRyYSBzbG90cyBiZWNhdXNlIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSB3aWxsIHVzZSBwb2tlIG9uIHg4Ni4KKyNpZiBDUFUo
WDg2KQorICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICBqaXQucHVzaChzY3JhdGNoMSk7Cisj
ZW5kaWYKKworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUob3duZXIpOworICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3BlcmF0aW9u
T1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gxKTsKKyAgICBqaXQuY2FsbChzY3JhdGNoMSk7CisK
KyNpZiBDUFUoWDg2KQorICAgIGppdC5wb3Aoc2NyYXRjaDEpOworICAgIGppdC5wb3Aoc2NyYXRj
aDEpOworI2VuZGlmCisgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdp
c3RlcnM7IGktLTspCisgICAgICAgIGppdC5sb2FkUHRyKCZqaXQudm0oKS0+d3JpdGVCYXJyaWVy
UmVnaXN0ZXJCdWZmZXJbaV0sIEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOyAKKworICAgIGRlZmlu
aXRlbHlOb3RNYXJrZWQubGluaygmaml0KTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3Bl
Y3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVy
LCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBBU1NFUlQob3duZXIg
IT0gc2NyYXRjaDEpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CisKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihq
aXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwgPSBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBz
Y3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVy
biBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2pp
dCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmll
ckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90
TWFya2VkLmxpbmsoJm1faml0KTsKK30KKyNlbHNlCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5vZGUpCit7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERS
RU4obV9qaXQuZ3JhcGgoKSwgbm9kZSwgc3BlY3VsYXRlKTsKKyAgICBub1Jlc3VsdChub2RlKTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4OSw5ICsyODksMjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7
CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcg
dmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3Jh
dGNoR1BSMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJS
ZWcpOwotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1
ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJl
ZywgR1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0
ZUJhcnJpZXJVc2VLaW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCisgICAgc3RhdGljIE1hY3JvQXNzZW1i
bGVyOjpDYWxsIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQ
UlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBz
dG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2Vs
bCosIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHN0YXRpYyBKSVRD
b21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJS
ZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICBzdGF0aWMg
SklUQ29tcGlsZXI6Okp1bXAgZ2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwg
SlNDZWxsKiBvd25lcik7CisgICAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxsSGVs
cGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOwor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAg
dm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBz
Y3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBKU0NlbGwqIHZh
bHVlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisKKyAgICB2b2lkIHdyaXRl
QmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2Vs
bCogb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBH
UFJSZWcgc2NyYXRjaDIpOworI2VuZGlmCisgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKE5v
ZGUqKTsKIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJSZWcgcHJlc2Vy
dmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRHUFJSZWcsIEdQ
UlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0ID0gSW52YWxp
ZEdQUlJlZykKICAgICB7CkBAIC03MDAsMTQgKzcxMywxNiBAQCBwdWJsaWM6CiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFz
ZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJl
Z2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIHZvaWQg
Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbGlm
IFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQ
UlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyByZXN1
bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVt
YmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1w
KCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lkIGNhY2hlZFB1
dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdH
UFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNo
R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxlcjo6SnVt
cCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIHZvaWQgY2FjaGVk
UHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRh
Z0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFy
Z2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKICAgICAKICAgICB2b2lkIGNvbXBp
bGVJbihOb2RlKik7CiAgICAgCisgICAgdm9pZCBjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVy
KEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOworCiAgICAgdm9pZCBub25TcGVjdWxh
dGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZh
bHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKEVkZ2Ugb3Bl
cmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgYm9vbCBu
b25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0
ID0gZmFsc2UpOwpAQCAtMTA1OSw2ICsxMDc0LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDIG9wZXJhdGlv
biwgSlNDZWxsKiBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKwogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNJY2Ygb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihp
bmxpbmVDYWxsRnJhbWUpKTsKQEAgLTEwNzUsMTIgKzEwOTYsMjEgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFy
ZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uKTsKICAgICB9Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7
CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsK
ICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW1QdHIo
YXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVy
YXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEpTQ2VsbCogYXJnMSwgR1BSUmVnIGFyZzIpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0
cihhcmcxKSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrKG9wZXJhdGlvbik7CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FVndzIG9wZXJhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0KQogICAgIHsKQEAgLTEzNDAsNyArMTM3MCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgdm9pZCogcG9p
bnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTdG9yZUJhcnJpZXJFbGlz
aW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAic3RvcmUgYmFy
cmllciBlbGlzaW9uIikKKyAgICAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQorICAgICAgICAsIG1f
Y3VycmVudEluZGV4KDApCisgICAgeworICAgICAgICBtX2djQ2xvYmJlclNldC5hZGQoR0NTdGF0
ZSk7CisgICAgfQorCisgICAgYm9vbCBjb3VsZENhdXNlR0MoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB3cml0ZXNPdmVybGFwKG1fZ3JhcGgsIG5vZGUsIG1fZ2NDbG9iYmVyU2V0
KTsKKyAgICB9CisKKyAgICBib29sIGFsbG9jYXRlc0ZyZXNoT2JqZWN0KE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBOZXdPYmpl
Y3Q6CisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6
ZToKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBub3RpY2VGcmVzaE9iamVjdChIYXNoU2V0PE5vZGUqPiYgZG9udE5l
ZWRCYXJyaWVycywgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChhbGxvY2F0ZXNG
cmVzaE9iamVjdChub2RlKSk7CisgICAgICAgIGRvbnROZWVkQmFycmllcnMuYWRkKG5vZGUpOwor
ICAgIH0KKworICAgIE5vZGUqIGdldEJhc2VPZlN0b3JlKE5vZGUqIHN0b3JlTm9kZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoc3RvcmVOb2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIFRlYXJPZmZBY3Rp
dmF0aW9uOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2FzZSBQdXRCeUlk
OgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2UgQXJyYXlQdXNoOgor
ICAgICAgICAgICAgcmV0dXJuIHN0b3JlTm9kZS0+Y2hpbGQxKCkubm9kZSgpOworCisgICAgICAg
IGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICByZXR1cm4gc3RvcmVOb2RlLT5jaGlsZDIo
KS5ub2RlKCk7CisKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICAgICAgcmV0dXJu
IG1fZ3JhcGgudmFyQXJnQ2hpbGQoc3RvcmVOb2RlLCAwKS5ub2RlKCk7CisKKyAgICAgICAgY2Fz
ZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgc2hvdWxkQmVFbGlkZWQoSGFzaFNldDxOb2Rl
Kj4mIGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSA9PSBTdG9yZUJhcnJpZXIpOworICAgICAgICBOb2RlKiBzdG9yZU5vZGUgPSBu
b2RlLT5zdG9yZU5vZGUoKTsKKyAgICAgICAgc3dpdGNoIChzdG9yZU5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgLy8gQmVjYXVzZSB0aGVzZSBhbGxvY2F0ZSBhbmQgdGhlbiBzdG9yZSwgdGhleSBzaG91
bGQgbmV2ZXIgYmUgZWxpZGVkLgorICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
OgorICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAg
IEFTU0VSVCghZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhnZXRCYXNlT2ZTdG9yZShzdG9yZU5v
ZGUpKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgorICAgICAgICBjYXNl
IFRlYXJPZmZBY3RpdmF0aW9uOgorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAg
Y2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICAgICAgcmV0
dXJuIGRvbnROZWVkQmFycmllcnMuY29udGFpbnMoZ2V0QmFzZU9mU3RvcmUoc3RvcmVOb2RlKSk7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogeworICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIGtlZXAgdHJhY2sgb2Ygd2hldGhlciB3ZSBuZWVkIHRvIGJhcnJp
ZXIgdGhlIGdsb2JhbCBvYmplY3QgaGVyZSwKKyAgICAgICAgICAgIC8vIGJ1dCBmb3Igbm93IHdl
J2xsIGp1c3QgYXNzdW1lIHdlIGNhbid0IGVsaWRlIGJhcnJpZXJzIG9uIHRoZSBnbG9iYWwgb2Jq
ZWN0LgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDogeworICAgICAgICAgICAgLy8gSWYgdGhlIG5vZGUgd2UgcG9pbnQgdG8gaGFzIGJlZW4g
dHJhbnNmb3JtZWQgaW50byBhIE5vZGUgdHlwZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgICAgICAv
LyBuZWVkIGEgYmFycmllciB0aGVuIHdlIGNhbiBlbGlkZSB0aGlzIGJhcnJpZXIuCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBlbGlkZUJhcnJpZXIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5v
cCgpID09IFN0b3JlQmFycmllcik7CisgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
KyAgICB9CisKKyAgICB2b2lkIGNsZWFyVmFyaWFibGVCYXJyaWVycygpCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YS5z
aXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJsZUFjY2Vzc0RhdGFbaV0u
Y2hlY2tBbmRTZXROZWVkc0JhcnJpZXIodHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBoYW5kbGVO
b2RlKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKGNvdWxkQ2F1c2VHQyhub2RlKSkgeworICAgICAgICAgICAgZG9udE5lZWRC
YXJyaWVycy5jbGVhcigpOworICAgICAgICAgICAgY2xlYXJWYXJpYWJsZUJhcnJpZXJzKCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdGVzRnJlc2hPYmplY3Qobm9kZSkpCisgICAg
ICAgICAgICBub3RpY2VGcmVzaE9iamVjdChkb250TmVlZEJhcnJpZXJzLCBub2RlKTsKKworICAg
ICAgICBpZiAobm9kZS0+b3AoKSAhPSBTdG9yZUJhcnJpZXIpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHNob3VsZEJlRWxpZGVkKGRvbnROZWVkQmFycmllcnMsIG5vZGUpKSB7
CisgICAgICAgICAgICBlbGlkZUJhcnJpZXIobm9kZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBOb2RlKiBiYXNlID0gZ2V0QmFzZU9mU3RvcmUobm9kZS0+c3Rv
cmVOb2RlKCkpOworICAgICAgICBpZiAoIWJhc2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKGRvbnROZWVkQmFycmllcnMuY29udGFpbnMoYmFzZSkpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghYmFzZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm5lZWRzQmFycmllcigpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRvbnROZWVkQmFycmllcnMu
YWRkKGJhc2UpOworICAgIH0KKworICAgIGJvb2wgaGFuZGxlTG9jYWwoSGFzaFNldDxOb2RlKj4m
IGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9k
ZS0+aGFzTG9jYWwobV9ncmFwaCkpOworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAgICAgaWYgKCFub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+bmVlZHNCYXJyaWVyKCkpCisgICAgICAgICAgICAgICAgZG9udE5lZWRCYXJy
aWVycy5hZGQobm9kZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgorICAg
ICAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIGlmIChkb250TmVlZEJh
cnJpZXJzLmNvbnRhaW5zKGNoaWxkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUt
PmNoZWNrQW5kU2V0TmVlZHNCYXJyaWVyKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiB2YXJp
YWJsZS0+Y2hlY2tBbmRTZXROZWVkc0JhcnJpZXIodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgYm9vbCBoYW5kbGVCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAg
IEhhc2hTZXQ8Tm9kZSo+IGRvbnROZWVkQmFycmllcnM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleElu
QmxvY2spIHsKKyAgICAgICAgICAgIG1fY3VycmVudEluZGV4ID0gaW5kZXhJbkJsb2NrOworICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworCisgICAgICAg
ICAgICBpZiAobm9kZS0+aGFzTG9jYWwobV9ncmFwaCkpIHsKKyAgICAgICAgICAgICAgICBoYW5k
bGVMb2NhbChkb250TmVlZEJhcnJpZXJzLCBub2RlKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaGFuZGxlTm9kZShkb250TmVlZEJhcnJp
ZXJzLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fbm9kZVN0YXRlQXRUYWlsLmNv
bnRhaW5zKGJsb2NrKSkgeworICAgICAgICAgICAgSGFzaFNldDxOb2RlKj4gbmV3U2V0OworICAg
ICAgICAgICAgbV9ub2RlU3RhdGVBdFRhaWwuc2V0KGJsb2NrLCBuZXdTZXQpOworICAgICAgICB9
CisgICAgICAgIGF1dG8gaXRlciA9IG1fbm9kZVN0YXRlQXRUYWlsLmZpbmQoYmxvY2spOworICAg
ICAgICBib29sIHJlc3VsdCA9ICEoZG9udE5lZWRCYXJyaWVycyA9PSBpdGVyLT52YWx1ZSk7Cisg
ICAgICAgIGl0ZXItPnZhbHVlLnN3YXAoZG9udE5lZWRCYXJyaWVycyk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgYm9vbCBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNo
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
MDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGhhbmRsZUJsb2NrKG1fY3Vy
cmVudEJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2xvYmJlclNldCBtX2djQ2xvYmJlclNldDsKKyAg
ICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBIYXNoU2V0PE5vZGUqPj4gbV9ub2RlU3RhdGVBdFRhaWw7
CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CisgICAgdW5zaWduZWQgbV9jdXJyZW50
SW5kZXg7Cit9OworICAgIAorYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYg
Z3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBTdG9yZSBC
YXJyaWVyIEVsaXNpb24gUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlPihncmFwaCk7Cit9CisKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25Q
aGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZV9oCisjZGVmaW5lIERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZV9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xh
c3MgR3JhcGg7CisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFycmllckVsaXNpb24oR3JhcGgmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzLDYgKzE2Myw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUsIGVkZ2UpLCBlZGdlLT5oYXNSZXN1bHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nl
c3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9jaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFs
c2UpCiAgICAgICAgICwgbV9pc1Byb2ZpdGFibGVUb1VuYm94KGZhbHNlKQogICAgICAgICAsIG1f
aXNMb2FkZWRGcm9tKGZhbHNlKQorICAgICAgICAsIG1fbmVlZHNCYXJyaWVyKHRydWUpCiAgICAg
ICAgICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgIHsK
ICAgICAgICAgY2xlYXJWb3RlcygpOwpAQCAtNzQsNiArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9zdHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1fY2hl
Y2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1faXNQcm9maXRhYmxlVG9V
bmJveChmYWxzZSkKKyAgICAgICAgLCBtX25lZWRzQmFycmllcih0cnVlKQogICAgICAgICAsIG1f
ZG91YmxlRm9ybWF0U3RhdGUoRW1wdHlEb3VibGVGb3JtYXRTdGF0ZSkKICAgICB7CiAgICAgICAg
IGNsZWFyVm90ZXMoKTsKQEAgLTM1NCw2ICszNTYsMTggQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIEZsdXNoZWRBdChmbHVzaEZvcm1hdCgpLCBtYWNoaW5lTG9jYWwoKSk7CiAgICAg
fQorCisgICAgYm9vbCBuZWVkc0JhcnJpZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbmVl
ZHNCYXJyaWVyOworICAgIH0KKworICAgIGJvb2wgY2hlY2tBbmRTZXROZWVkc0JhcnJpZXIoYm9v
bCBuZWVkc0JhcnJpZXIpCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IG5lZWRzQmFycmll
ciAhPSBtX25lZWRzQmFycmllcjsKKyAgICAgICAgbV9uZWVkc0JhcnJpZXIgPSBuZWVkc0JhcnJp
ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICAv
LyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdy
ZSB1bmlmaWVkIHdpdGgKQEAgLTM3NCw2ICszODgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9j
aGVja0FycmF5SG9pc3RpbmdGYWlsZWQ7CiAgICAgYm9vbCBtX2lzUHJvZml0YWJsZVRvVW5ib3g7
CiAgICAgYm9vbCBtX2lzTG9hZGVkRnJvbTsKKyAgICBib29sIG1fbmVlZHNCYXJyaWVyOwogCiAg
ICAgZmxvYXQgbV92b3Rlc1syXTsgLy8gVXNlZCBwcmltYXJpbHkgZm9yIGRvdWJsZSB2b3Rpbmcg
YnV0IG1heSBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgogICAgIERvdWJsZUZvcm1hdFN0
YXRlIG1fZG91YmxlRm9ybWF0U3RhdGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5o
CShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAKICAgICAgICAgc3RhdGljIGJv
b2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFy
cmllcihjb25zdCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNv
bnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIo
Y29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB1aW50OF90KiBhZGRyZXNz
T2ZDYXJkRm9yKEpTQ2VsbCopOwpAQCAtMzcwLDYgKzM3MSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNlbmRpZgogICAgIH0KIAorICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihjb25z
dCBKU0NlbGwqKQorICAgIHsKKyAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmNvdW50V3Jp
dGVCYXJyaWVyKCk7CisgICAgfQorCiAgICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVy
KGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCiAgICAgewogICAgICAgICBXcml0ZUJhcnJpZXJDb3Vu
dGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTIgKzczLDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGF0b21TaXplID0gODsgLy8gYnl0ZXMKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBh
dG9tU2hpZnRBbW91bnQgPSA0OyAvLyBsb2dfMihhdG9tU2l6ZSkgRklYTUU6IENoYW5nZSBhdG9t
U2l6ZSB0byAxNi4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1NpemUgPSA2NCAq
IEtCOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrTWFzayA9IH4oYmxvY2tTaXpl
IC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogCiAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6ZSAvIGF0b21TaXplOwog
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21NYXNrID0gYXRvbXNQZXJCbG9jayAtIDE7
CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXJrQnl0ZVNoaWZ0QW1vdW50ID0gMzsg
Ly8gbG9nXzIod29yZCBzaXplIGZvciBtX21hcmtzKSBGSVhNRTogQ2hhbmdlIHdvcmQgc2l6ZSBm
b3IgbV9tYXJrcyB0byB1aW50OF90LgorCiAgICAgICAgIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAg
ICAgICAgICBGcmVlQ2VsbCogbmV4dDsKICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXJCdWZmZXIuaCIKKworI2luY2x1ZGUgIkdDQXNz
ZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK1dyaXRlQmFycmllckJ1ZmZl
cjo6V3JpdGVCYXJyaWVyQnVmZmVyKHVuc2lnbmVkIGNhcGFjaXR5KQorICAgIDogbV9jdXJyZW50
SW5kZXgoMCkKKyAgICAsIG1fY2FwYWNpdHkoY2FwYWNpdHkpCisgICAgLCBtX2J1ZmZlcihzdGF0
aWNfY2FzdDxKU0NlbGwqKj4oZmFzdE1hbGxvYyhzaXplb2YoSlNDZWxsKikgKiBjYXBhY2l0eSkp
KQoreworfQorCitXcml0ZUJhcnJpZXJCdWZmZXI6On5Xcml0ZUJhcnJpZXJCdWZmZXIoKQorewor
ICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICBtX2J1ZmZlciA9IDA7Cit9CisKK3ZvaWQgV3Jp
dGVCYXJyaWVyQnVmZmVyOjpmbHVzaChIZWFwJiBoZWFwKQoreworICAgIEFTU0VSVChtX2N1cnJl
bnRJbmRleCA8PSBtX2NhcGFjaXR5KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3Vy
cmVudEluZGV4OyArK2kpCisgICAgICAgIGhlYXAud3JpdGVCYXJyaWVyKG1fYnVmZmVyW2ldKTsK
KyAgICBtX2N1cnJlbnRJbmRleCA9IDA7Cit9CisKK3ZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjpy
ZXNldCgpCit7CisgICAgbV9jdXJyZW50SW5kZXggPSAwOworfQorCit2b2lkIFdyaXRlQmFycmll
ckJ1ZmZlcjo6YWRkKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tT
X1ZBTElEKGNlbGwpOworICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8IG1fY2FwYWNpdHkpOwor
ICAgIG1fYnVmZmVyW21fY3VycmVudEluZGV4KytdID0gY2VsbDsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJp
ZXJCdWZmZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dy
aXRlQmFycmllckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdyaXRlQmFycmllckJ1ZmZlcl9oCisjZGVmaW5lIFdyaXRlQmFycmll
ckJ1ZmZlcl9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgSGVhcDsKK2NsYXNzIEpTQ2VsbDsKKworbmFtZXNwYWNlIEZUTCB7IGNsYXNz
IExvd2VyREZHVG9MTFZNOyB9CisKK2NsYXNzIFdyaXRlQmFycmllckJ1ZmZlciB7CisgICAgZnJp
ZW5kIGNsYXNzIEZUTDo6TG93ZXJERkdUb0xMVk07CitwdWJsaWM6CisgICAgV3JpdGVCYXJyaWVy
QnVmZmVyKHVuc2lnbmVkIGNhcGFjaXR5KTsKKyAgICB+V3JpdGVCYXJyaWVyQnVmZmVyKCk7CisK
KyAgICB2b2lkIGFkZChKU0NlbGwqKTsKKyAgICB2b2lkIGZsdXNoKEhlYXAmKTsKKyAgICB2b2lk
IHJlc2V0KCk7CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IGN1cnJlbnRJbmRleE9mZnNldCgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdyaXRlQmFycmllckJ1ZmZlciwg
bV9jdXJyZW50SW5kZXgpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FwYWNpdHlP
ZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXcml0ZUJhcnJp
ZXJCdWZmZXIsIG1fY2FwYWNpdHkpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3QgYnVm
ZmVyT2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV3JpdGVC
YXJyaWVyQnVmZmVyLCBtX2J1ZmZlcik7CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVk
IG1fY3VycmVudEluZGV4OworICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgSlNDZWxsKiog
bV9idWZmZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdyaXRlQmFy
cmllckJ1ZmZlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219557</attachid>
            <date>2013-12-18 12:03:27 -0800</date>
            <delta_ts>2013-12-18 12:38:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131218120325.patch</filename>
            <type>text/plain</type>
            <size>111137</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHByZXBhcmF0aW9uIGZvciBHZW5HQy4gV2UgdXNlIGEgc2VwYXJhdGUgU3RvcmVCYXJyaWVyIG5v
ZGUgaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBpbXBsaWNpdGx5IAorICAgICAgICBwYXJ0IG9mIG90
aGVyIG5vZGVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gcnVuIGFuYWx5c2VzIG9uIHRoZW0sIGUu
Zy4gZm9yIHRoZSBTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuIAorICAgICAgICBUaGV5IGFyZSBp
bnNlcnRlZCBkdXJpbmcgdGhlIGZpeHVwIHBoYXNlLiBJbml0aWFsbHkgdGhleSBkbyBub3QgZ2Vu
ZXJhdGUgYW55IGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KTogV2hlbmV2ZXIgd2UgaW5zZXJ0IG5ldyBub2RlcyB0aGF0IHJlcXVpcmUgU3RvcmVCYXJyaWVy
cywKKyAgICAgICAgd2UgaGF2ZSB0byBhZGQgdGhvc2UgbmV3IFN0b3JlQmFycmllcnMgdG9vLiBJ
dCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgYW5kIAor
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIG5vZGVzIHJlcXVpcmUgdGhlaXIgU3Rv
cmVCYXJyaWVycyB0byBjb21lIGFmdGVyIHRoZW0gc2luY2UgdGhleSBhbGxvY2F0ZSBmaXJzdCwK
KyAgICAgICAgd2hpY2ggY291bGQgY2F1c2UgYSBHQywgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3Vs
dGluZyBidWZmZXIgaW50byB0aGVpciBKU0NlbGwsIHdoaWNoIHJlcXVpcmVzIHRoZSBiYXJyaWVy
LgorICAgICAgICBJZiB3ZSBldmVyIHJlcXVpcmUgdGhhdCB3cml0ZSBiYXJyaWVycyBvY2N1ciBi
ZWZvcmUgc3RvcmVzLCB3ZSdsbCBoYXZlIHRvIHNwbGl0IHRoZXNlIG5vZGVzIGludG8gCisgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlICsgU3RvcmVCYXJyaWVyICsgUHV0UHJvcGVydHlT
dG9yYWdlLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwSGVhcFN0b3JlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpnZW5lcmljV3JpdGVCYXJyaWVy
KTogVGhlIGZhc3QgcGF0aCB3cml0ZSBiYXJyaWVyIGNoZWNrLiBJdCBsb2FkcyB0aGUgCisgICAg
ICAgIGJ5dGUgdGhhdCBjb250YWlucyB0aGUgbWFyayBiaXQgb2YgdGhlIG9iamVjdC4gCisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIp
OiBJZiB0aGUgZmFzdCBwYXRoIGNoZWNrIGZhaWxzIHdlIHRyeSB0byBzdG9yZSB0aGUgCisgICAg
ICAgIGNlbGwgaW4gdGhlIFdyaXRlQmFycmllckJ1ZmZlciBzbyBhcyB0byBhdm9pZCBmcmVxdWVu
dGx5IGZsdXNoaW5nIGFsbCByZWdpc3RlcnMgaW4gb3JkZXIgdG8gbWFrZSBhIEMgY2FsbC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKTogTW9yZSBiYXJlYm9u
ZXMgdmVyc2lvbiBvZiB0aGUgd3JpdGUgYmFycmllciB0byBiZSBleGVjdXRlZCAKKyAgICAgICAg
ZHVyaW5nIGFuIE9TUiBleGl0IGludG8gYmFzZWxpbmUgY29kZS4gV2UgbXVzdCBkbyB0aGlzIHNv
IHRoYXQgdGhlIGJhc2VsaW5lIEpJVCBvYmplY3QgYW5kIGFycmF5IHByb2ZpbGVzIAorICAgICAg
ICBhcmUgcHJvcGVybHkgY2xlYXJlZCBkdXJpbmcgR0MuCisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVy
YXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA6
IEFkZGVkLiBOZXcgREZHIHBoYXNlIHRoYXQgZG9lcyBibG9jay1sb2NhbCBlbGlzaW9uIG9mIHJl
ZHVuZGFudAorICAgICAgICBTdG9yZUJhcnJpZXJzLiBFdmVyeSB0aW1lIGEgU3RvcmVCYXJyaWVy
IG9uIGEgcGFydGljdWxhciBvYmplY3QgaXMgZXhlY3V0ZWQsIGEgYml0IGlzIHNldCBpbmRpY2F0
aW5nIHRoYXQgCisgICAgICAgIHRoYXQgb2JqZWN0IGRvZXNuJ3QgbmVlZCBhbnkgbW9yZSBTdG9y
ZUJhcnJpZXJzLiAKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6
OlN0b3JlQmFycmllckVsaXNpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlOjpjb3VsZENhdXNlR0MpOiBOb2RlcyB0aGF0IGNvdWxkIGNhdXNlIGEg
R0MgcmVzZXQgdGhlIGJpdHMgZm9yIGFsbCBvZiB0aGUgCisgICAgICAgIG9iamVjdHMga25vd24g
aW4gdGhlIGN1cnJlbnQgYmxvY2suIAorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVs
aXNpb25QaGFzZTo6YWxsb2NhdGVzRnJlc2hPYmplY3QpOiBBIG5vZGUgdGhhdCBjcmVhdGVzIGEg
bmV3IG9iamVjdCBhdXRvbWF0aWNhbGx5IAorICAgICAgICBzZXRzIHRoZSBiaXQgZm9yIHRoYXQg
b2JqZWN0IHNpbmNlIGlmIGEgR0Mgb2NjdXJyZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGF0IG9iamVj
dCdzIGFsbG9jYXRpb24gdGhlbiB0aGF0IAorICAgICAgICBvYmplY3Qgd291bGQgbm90IG5lZWQg
YSBiYXJyaWVyIHNpbmNlIGl0IHdvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgYSB5b3VuZyBnZW5l
cmF0aW9uIG9iamVjdCB1bnRpbCB0aGUgCisgICAgICAgIG5leHQgR0MgcG9pbnQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpub3RpY2VGcmVzaE9iamVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpnZXRCYXNlT2ZT
dG9yZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpzaG91
bGRCZUVsaWRlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
OjplbGlkZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZTo6Y2xlYXJWYXJpYWJsZUJhcnJpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3Jl
QmFycmllckVsaXNpb25QaGFzZTo6aGFuZGxlTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JlQmFycmllckVsaXNpb25QaGFzZTo6aGFuZGxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJm
b3JtU3RvcmVCYXJyaWVyRWxpc2lvbik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vz
c0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bmVlZHNCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNoZWNrQW5kU2V0
TmVlZHNCYXJyaWVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXIpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6Om9mZnNldE9mTWFya3MpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVy
LmNwcDogQWRkZWQuIFRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgYnVmZmVycyBhIHNldCBvZiBKU0Nl
bGxzIHRoYXQgYXJlIGF3YWl0aW5nIAorICAgICAgICBhIHBlbmRpbmcgV3JpdGVCYXJyaWVyLiBU
aGlzIGJ1ZmZlciBpcyB1c2VkIGJ5IHRoZSBERkcgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNh
bGxpbmcgb3V0IHRvIEMgcmVwZWF0ZWRseQorICAgICAgICB0byBpbnZva2UgYSB3cml0ZSBiYXJy
aWVyIG9uIGEgc2luZ2xlIEpTQ2VsbC4gSW5zdGVhZCB0aGUgREZHIGhhcyBpbmxpbmUgY29kZSB0
byBmaWxsIHRoZSBXcml0ZUJhcnJpZXIgYnVmZmVyCisgICAgICAgIHVudGlsIGl0cyBmdWxsLCBh
bmQgdGhlbiB0byBjYWxsIG91dCB0byBDIHRvIGZsdXNoIGl0LiBUaGUgV3JpdGVCYXJyaWVyQnVm
ZmVyIHdpbGwgYWxzbyBiZSBmbHVzaGVkIHByaW9yIHRvIAorICAgICAgICBlYWNoIEVkZW5Db2xs
ZWN0aW9uLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OldyaXRlQmFycmllckJ1
ZmZlcik6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6fldyaXRlQmFycmllckJ1
ZmZlcik6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Zmx1c2gpOgorICAgICAg
ICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6V3JpdGVC
YXJyaWVyQnVmZmVyOjphZGQpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9m
ZnNldCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCk6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25z
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTEyLTE4ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXgg
bWFrZSBkaXN0Y2hlY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAorICAgIGRm
Zy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKICAgICBkZmcvREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKQEAgLTIxOSw2ICsyMjAsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogICAgIGhlYXAvV2Vha0hhbmRs
ZU93bmVyLmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKKyAgICBoZWFwL1dyaXRlQmFycmllckJ1
ZmZlci5jcHAKICAgICBoZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwCiAKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4
Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggXApAQCAtNTc2LDYgKzU3OCw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldElubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2NvbmZpZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI4LDYgKzQyOCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTU0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1RodW5rcy5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAiIC8+CkBA
IC00NzEsNiArNDcyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0Js
b2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93
bmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBv
cnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckFnZW50UmVnaXN0cnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIgLz4KQEAgLTk0OCw2ICs5NTAsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2Uu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaHVua3MuaCIgLz4KQEAgLTEwMjYsNiArMTAyOSw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxXZWFrU2V0SW5saW5lcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50QmFzZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCIgLz4KQEAg
LTEzODQsNCArMTM4OCw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0
cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXph
dGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2MDY4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3OSw5IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtTZXQuY3BwIj4KICAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTExNDksNiArMTE1Miw5IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAiPgogICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVGh1bmtzLmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgpAQCAtMTc1NCw2ICsxNzYwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcV2Vha1NldElubGluZXMuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVC
YXJyaWVyQnVmZmVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbElu
Y2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBv
cnQuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAg
LTMwNTcsNiArMzA2Niw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3Rh
Y2tMYXlvdXRQaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmgiPgorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzE4LDkgKzcxOCwxMyBAQAogCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pv
aW5lci5oICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVh
c2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsK
IAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIy
NEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CisJCTJBNEVDOTBCMTg2
MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi87IH07CisJCTJBNEVDOTBDMTg2MEQ2QzIwMDk0Rjc4
MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJC
dWZmZXIuaCAqLzsgfTsKIAkJMkE2RjQ2MjYxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBNkY0
NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3BlcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkE3QTU4RUYxODA4QTRDNDAwMjBCREY3
IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkE3QTU4RUUxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwICovOyB9OwogCQky
QUFEOTY0QTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUFEOTY0OTE4NTY5
NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggKi87IH07CisJCTJBQ0NG
M0RFMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREMxODVG
RTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi87IH07CisJ
CTJBQ0NGM0RGMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQ0NGM0RE
MTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLzsgfTsK
IAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFEODkzMjkxN0UzODY4
RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9OwogCQkzNzFEODQyRDE3Qzk4
QjZFMDBFQ0Y5OTQgLyogbGliei5keWxpYiBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGli
ICovOyB9OwogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyogRGF0ZUNvbnZlcnNpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQyMTIwMjI5MEFE
NDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9OwpAQCAtMjAyMSw5ICsyMDI1
LDEzIEBACiAJCTI2MDBCNUE0MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmluZ0pvaW5lci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAv
KiBKU1N0cmluZ0pvaW5lci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N0
cmluZ0pvaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTI4MjVDRjE4MzQx
RjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEZWxheWVkUmVsZWFzZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTJBNEVDOTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV3JpdGVCYXJyaWVyQnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE0RUM5MEExODYwRDZDMjAw
OTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcE9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyQTdBNThFRTE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWZlckdDLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFBRDk2NDkxODU2OTQxNzAwMUY5M0JFIC8qIFJlY3Vyc2l2
ZUFsbG9jYXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWN1
cnNpdmVBbGxvY2F0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkFD
Q0YzREMxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdG9yZUJhcnJpZXJFbGlz
aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAv
KiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3Rv
cmVCYXJyaWVyRWxpc2lvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
RDg5MzI5MTdFMzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcEl0ZXJhdGlvblNjb3BlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGli
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBp
bGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNyL2xpYi9saWJ6
LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJNDQ5MDk3RUUwRjhGODFCNTAwNzZB
MzI3IC8qIEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEZlYXR1cmVEZWZpbmVzLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzExMSw2ICszMTE5LDggQEAKIAkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhl
YXAgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTJBNEVD
OTA5MTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwICovLAorCQkJCTJB
NEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCAqLywKIAkJCQkx
NDgxNkUxOTE1NENDNTZDMDBCODA1NEMgLyogQmxvY2tBbGxvY2F0b3IuY3BwICovLAogCQkJCTE0
ODE2RTFBMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5oICovLAogCQkJCTBGRDhB
MzExMTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQuY3BwICovLApAQCAtMzg0Nyw2ICsz
ODU3LDggQEAKIAkJODZFQzlEQjMxMzI4REY0NDAwMkIyQUQ3IC8qIGRmZyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkFDQ0YzREMxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgKi8sCisJCQkJMkFDQ0YzREQx
ODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAogCQkJ
CUE3N0E0MjM2MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwICovLAogCQkJ
CUE3N0E0MjM3MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCAqLywKIAkJCQlB
NzA0RDhGRTE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oICovLApA
QCAtNDk3Nyw2ICs0OTg5LDcgQEAKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMgLyogU2xv
dFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1
MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3
NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQkyQTRFQzkw
QzE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01MDUwLDYgKzUwNjMsNyBAQAogCQkJCTE0QkU3
RDMzMTcxMzVDRjQwMEQxODA3QSAvKiBXZWFrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdDQTNBRTQxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDQTNBRUMxN0RBNTE2ODAwNjUzOEFGIC8qIFdlYWtNYXBEYXRhLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyQUNDRjNERjE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTVEOTNBQzE4NTE0Rjc5MDA0
MDBERUQgLyogSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0Ez
QUU2MTdEQTQxQUUwMDY1MzhBRiAvKiBXZWFrTWFwUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDIwQkU3QjEwQUE2RERCMDBGNDU1RDIgLyogV2Vha1JhbmRvbS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NzA1LDYgKzU3MTksNyBAQAogCQkJCTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAv
KiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4ODUzRjkxNzk3
MjYyOTAwMTQ0MEU0IC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5Q0YxMDdFQzM3NjAwNDI3QTQ4IC8qIEludGVybmFsRnVuY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgy
MDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyOUQ5MkYw
RUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkE5MEVEMDBF
RTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTU3
MTcsNiArNTczMiw3IEBACiAJCQkJMEZCMTRFMUUxODEyNEFDRTAwOUI2QjREIC8qIEpJVElubGlu
ZUNhY2hlR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREQ1MUVCMEZCOERGNzQw
MDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MTIzNkU1MTE5
NUYzM0MwMEJEMjE3NCAvKiBKSVRPcGNvZGVzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjI0RTU0QzE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkNDODVDNDBFRTdBODk0MDAyODg2ODIgLyogSklUUHJv
cGVydHlBY2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUU4RTQxMTJFNzJFRjAwQTM3
Rjk4IC8qIEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE2
MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKFZhcmlhYmxlcykgXAogICAgIG1hY3JvKFR5cGVkQXJyYXlQcm9wZXJ0
aWVzKSBcCiAgICAgbWFjcm8oR0NTdGF0ZSkgXAorICAgIG1hY3JvKEJhcnJpZXJTdGF0ZSkgXAog
ICAgIG1hY3JvKFJlZ0V4cFN0YXRlKSBcCiAgICAgbWFjcm8oSW50ZXJuYWxTdGF0ZSkgXAogICAg
IG1hY3JvKEFic29sdXRlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Nyw2ICsxNDcsMTIgQEAgcHVibGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBKU1ZhbHVlKTsKICAgICAKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzS25vd25Ob3RDZWxsKFQgbm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiAhKGZvck5vZGUobm9kZSkubV90eXBlICYgU3BlY0NlbGwpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwg
dW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29u
c3QgQ29kZU9yaWdpbiYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTYwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTg4LDYgKzE1ODgsMjIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tUaWVyVXBBdFJldHVy
bjoKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOiB7
CisgICAgICAgIGlmIChpc0tub3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKKyAgICAgICAgZmlsdGVy
KG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3Bl
Y0NlbGwpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0b3JlQmFycmllcldp
dGhOdWxsQ2hlY2s6IHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBDaGVja1Rp
ZXJVcEFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIC8vIFdlIHByZXRl
bmQgdGhhdCBpdCBjYW4gZXhpdCBiZWNhdXNlIGl0IG1heSB3YW50IHRvIGdldCBhbGwgc3RhdGUu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDE1IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0
ZUZ1bmN0b3I+Cit2b2lkIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKFJlYWRGdW5jdG9yJiByZWFk
LCBXcml0ZUZ1bmN0b3ImIHdyaXRlKQoreworICAgIHJlYWQoR0NTdGF0ZSk7CisgICAgcmVhZChC
YXJyaWVyU3RhdGUpOworICAgIHdyaXRlKEdDU3RhdGUpOworICAgIHdyaXRlKEJhcnJpZXJTdGF0
ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlYWRGdW5jdG9yLCB0eXBlbmFtZSBXcml0ZUZ1
bmN0b3I+CiB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBSZWFkRnVu
Y3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKIHsKICAgICAvLyBTb21lIG5vdGVzOgpA
QCAtMTYwLDEwICsxNjksOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgY2FzZSBDcmVhdGVBcmd1bWVu
dHM6CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsKICAgICAg
ICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgd3JpdGUoV2F0Y2hwb2ludF9maXJlKTsKLSAg
ICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgpAQCAt
MTczLDggKzE4MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7Ci0gICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdDU3RhdGUp
OworICAgICAgICBjbG9iYmVyaXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAg
IHJldHVybjsKIAogICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKQEAgLTQzNSwxNSAr
NDQyLDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAg
ICAgCiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgd3JpdGUoSlNP
YmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUo
R0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgd3JpdGUo
SlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3Jp
dGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEJ1dHRlcmZseToKQEAg
LTQ1Niw4ICs0NjEsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKICAgICAgICAgd3JpdGUoSlNDZWxs
X3N0cnVjdHVyZSk7CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICBjbG9iYmVy
aXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgpAQCAtNTQ0LDE1ICs1NDgsMTMg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTmV3
RnVuY3Rpb25Ob0NoZWNrOgogICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgY2FzZSBOZXdGdW5j
dGlvbkV4cHJlc3Npb246Ci0gICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdD
U3RhdGUpOworICAgICAgICBjbG9iYmVyaXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAg
ICBjbG9iYmVyaXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHN3aXRjaCAo
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgSW50MzJVc2U6Ci0gICAg
ICAgICAgICByZWFkKEdDU3RhdGUpOwotICAgICAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgIHJl
YWQoV29ybGQpOwpAQCAtNjQxLDggKzY0Myw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAg
d3JpdGUoU2lkZVN0YXRlKTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUo
R0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpAQCAt
NjUwLDYgKzY1MSwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
CiAgICAgICAgIHJlYWQoSW50ZXJuYWxTdGF0ZSk7CiAgICAgICAgIHdyaXRlKEludGVybmFsU3Rh
dGUpOwogICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNl
IENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxD
aGVjazoKKyAgICAgICAgcmVhZChCYXJyaWVyU3RhdGUpOworICAgICAgICB3cml0ZShCYXJyaWVy
U3RhdGUpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBl
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMjggKzMwMCwzNCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVj
dHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hp
bGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIGNvZGVPcmlnaW4sIEVkZ2Uobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0dXMu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPiBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0
KHN0YXR1cy5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICBOb2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIGNvZGVPcmlnaW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2Us
CiAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0
QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdp
biwgY2hpbGRFZGdlKSkpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgY29kZU9yaWdpbiwg
RWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Up
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzLmlzU2ltcGxlVHJhbnNpdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIAotICAgICAgICAgICAg
ICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25l
LCBQdXRTdHJ1Y3R1cmUsIGNvZGVPcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxk
RWRnZSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBjb2RlT3JpZ2luLCBFZGdlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvUHV0QnlPZmZzZXQobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSwgcHJv
cGVydHlTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBjb2RlT3Jp
Z2luLCAKKyAgICAgICAgICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIEtu
b3duQ2VsbFVzZSksIEVkZ2Uobm9kZS0+Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3RvcmFn
ZUFjY2Vzc0RhdGE7CiAgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ID0g
c3RhdHVzLm9mZnNldCgpOwpAQCAtMzI5LDcgKzMzNSwyMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0Rh
dGEpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAorCisgICAgICAgICAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOiB7CisgICAg
ICAgICAgICAgICAgaWYgKG1faW50ZXJwcmV0ZXIuaXNLbm93bk5vdENlbGwobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9t
KCk7CisgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhO
dWxsQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUyLDYgKzU1Miw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihjaGls
ZDEpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGNoaWxkMik7CisgICAgICAg
ICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTU4Myw2ICs1ODQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8UmVhbE51bWJlclVzZT4obm9kZS0+Y2hpbGQy
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzY3LDE4ICs3NjksMzMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxs
VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJl
VmFyOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVJlZ2lzdGVyczoKLSAgICAgICAg
Y2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIFNraXBUb3BTY29wZToKICAgICAgICAg
Y2FzZSBTa2lwU2NvcGU6Ci0gICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICBjYXNl
IEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6IHsKICAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeHVw
SGVhcFN0b3JlKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAg
ICBjYXNlIEdldEJ5SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCkBAIC04MDAsMTIg
KzgxNywxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVj
dDogeworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAg
ICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAg
ICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAg
ICAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgICAgICBjYXNlIEdldEJ1dHRlcmZseTogewpAQCAt
ODMyLDYgKzg1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgp
LT5oYXNTdG9yYWdlUmVzdWx0KCkpCiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTg5MSw2ICs5MTQsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVtLgogICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgVGVhck9m
ZkFjdGl2YXRpb246IHsKKyAgICAgICAgICAgIGZpeHVwSGVhcFN0b3JlKG5vZGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBjYXNlIElzU3RyaW5nOgogICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSkgewpAQCAt
OTE0LDcgKzk0Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlTY29wZToKICAgICAg
ICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKLSAgICAg
ICAgY2FzZSBQdXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgICAg
IGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgICAgICBjYXNlIFZhckluamVjdGlvbldhdGNo
cG9pbnQ6CkBAIC05MzEsNyArOTU5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc09iamVj
dDoKICAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRp
b246Ci0gICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CiAgICAgICAgIGNhc2UgQ3JlYXRl
QXJndW1lbnRzOgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgIGNhc2Ug
VGVhck9mZkFyZ3VtZW50czoKQEAgLTk1MSw2ICs5NzgsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAg
ICAgICBjYXNlIExvb3BIaW50OgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJX
aXRoTnVsbENoZWNrOgogICAgICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CiAg
ICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE1MDMsNiArMTUzMywxMDcgQEAgcHJpdmF0ZToKICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKHVz
ZUtpbmQpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGZpeHVwSGVhcFN0b3JlKE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBOb2RlKiBiYXJyaWVyTm9kZSA9IDA7CisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEFycmF5UHVzaDogeworICAgICAgICAgICAgc3dp
dGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAg
ICAgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgQ29u
ZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAorICAgICAg
ICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwg
RWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0
QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CisgICAgICAgICAgICBiYXJyaWVy
Tm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIs
IG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAorICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBDZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIFVu
dHlwZWRVc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VGhlIGJhcnJpZXIgbXVzdCBnbyBhZnRlciB0aGVzZSBub2RlcyBiZWNhdXNlIHRoZXkgYWxsb2Nh
dGUgdGhlaXIgbmV3IHByb3BlcnR5IHN0b3JhZ2UgZmlyc3QgYW5kIHRoZW4gZG8gdGhlIHN0b3Jl
LgorICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICBjYXNlIFJl
YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9n
cmFwaC5hZGROb2RlKFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4sIAorICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93
bkNlbGxVc2UpKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShiYXJyaWVyTm9kZSk7CisgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobV9pbmRleEluQmxvY2sgKyAxLCBiYXJyaWVyTm9k
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dFN0
cnVjdHVyZTogeworICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3Bl
Y05vbmUsIFN0b3JlQmFycmllciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAgICAg
ICAgICAgICAgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjog
eworICAgICAgICAgICAgTm9kZSogZ2xvYmFsT2JqZWN0Tm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBXZWFrSlNDb25zdGFudCwgbm9kZS0+
Y29kZU9yaWdpbiwgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmln
aW4pKSk7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9u
ZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAor
ICAgICAgICAgICAgICAgIEVkZ2UoZ2xvYmFsT2JqZWN0Tm9kZSwgS25vd25DZWxsVXNlKSwgRWRn
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjogeworICAgICAg
ICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFN0b3JlQmFycmll
cldpdGhOdWxsQ2hlY2ssIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAorICAgICAgICAgICAg
ICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKKyAgICAg
ICAgICAgIGJhcnJpZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBDb25kaXRpb25h
bFN0b3JlQmFycmllciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAg
ICAgRWRnZShub2RlLT5jaGlsZDIoKS5ub2RlKCksIEtub3duQ2VsbFVzZSksIEVkZ2Uobm9kZS0+
Y2hpbGQzKCkubm9kZSgpLCBVbnR5cGVkVXNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgYmFycmll
ck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVy
LCBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCAKKyAgICAgICAgICAgICAgICBFZGdlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2Rl
KCksIFVudHlwZWRVc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBQdXRCeVZhbEFsaWFzOiB7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgICAgIFVz
ZUtpbmQgYmFzZVVzZUtpbmQgPSBLbm93bkNlbGxVc2U7CisjZWxzZQorICAgICAgICAgICAgVXNl
S2luZCBiYXNlVXNlS2luZCA9IENlbGxVc2U7CisjZW5kaWYKKyAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6QXJndW1lbnRzOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgICAgICBFZGdlIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgICAgIEVkZ2UgdmFs
dWUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgICAgIGJhcnJp
ZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBDb25kaXRpb25hbFN0b3JlQmFycmll
ciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
YmFzZS5ub2RlKCksIGJhc2VVc2VLaW5kKSwgRWRnZSh2YWx1ZS5ub2RlKCksIFVudHlwZWRVc2Up
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBmaXh1cE5vZGUoYmFycmllck5vZGUpOworICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnQobV9pbmRleEluQmxvY2ssIGJhcnJpZXJOb2RlKTsKKyAgICB9CisKICAgICB2
b2lkIGZpeEludEVkZ2UoRWRnZSYgZWRnZSkKICAgICB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBl
ZGdlLm5vZGUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjA2LDcgKzYwNiwxOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VS
VChoYXNQaGkoKSk7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fb3BJbmZv
KTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIGlzU3RvcmVCYXJyaWVyKCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAg
Y2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJX
aXRoTnVsbENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29s
IGhhc0lkZW50aWZpZXIoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CkBAIC0xNTU1
LDYgKzE1NjcsNyBAQCBwdWJsaWM6CiAgICAgdW5pb24gewogICAgICAgICBOb2RlKiByZXBsYWNl
bWVudDsKICAgICAgICAgQmFzaWNCbG9jayogb3duZXI7CisgICAgICAgIGJvb2wgbmVlZHNCYXJy
aWVyOwogICAgIH0gbWlzYzsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDYgKzI5MSwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogQ2hlY2tzIHRoZSB3YXRjaGRvZyB0
aW1lci4gSWYgdGhlIHRpbWVyIGhhcyBmaXJlZCwgd2UgT1NSIGV4aXQgdG8gdGhlICovIFwKICAg
ICAvKiBiYXNlbGluZSBKSVQgdG8gcmVkbyB0aGUgd2F0Y2hkb2cgdGltZXIgY2hlY2ssIGFuZCBz
ZXJ2aWNlIHRoZSB0aW1lci4gKi8gXAogICAgIG1hY3JvKENoZWNrV2F0Y2hkb2dUaW1lciwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIC8qIFdyaXRlIGJhcnJpZXJzICEgKi9cCisgICAgbWFjcm8o
U3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oQ29uZGl0aW9uYWxT
dG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhTdG9yZUJhcnJpZXJX
aXRoTnVsbENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0
ZXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8g
YW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFz
IGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24g
MTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRG
R09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIKKyNp
bmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogCkBAIC00NDgsOSArNDQ5LDE5IEBAIHZvaWQgT1NSRXhp
dENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIo
R1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcihvcGVyYW5kKSk7CiAg
ICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gMTEpIEFuZCBmaW5pc2guCi0gICAgCisKKyNp
ZiBFTkFCTEUoR0dDKSAKKyAgICAvLyAxMSkgV3JpdGUgYmFycmllciB0aGUgb3duZXIgZXhlY3V0
YWJsZSBiZWNhdXNlIHdlJ3JlIGp1bXBpbmcgaW50byBhIGRpZmZlcmVudCBibG9jay4KKyAgICBm
b3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyA7IGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luKTsKKyAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMCk7IAorICAgICAgICBTcGVjdWxhdGl2ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKG1faml0LCBH
UFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjpub25BcmdHUFIxLCBHUFJJbmZvOjpub25BcmdH
UFIyKTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gMTIpIEFuZCBmaW5pc2guCiAgICAg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KG1faml0LCBleGl0KTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHJldmlz
aW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJE
RkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCisj
aW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAKQEAgLTQwMiw5ICs0MDMsMTkgQEAgdm9pZCBP
U1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKG9wZXJhbmQp
KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyAxMSkgQW5kIGZpbmlzaC4KLSAgICAK
KworI2lmIEVOQUJMRShHR0MpIAorICAgIC8vIDExKSBXcml0ZSBiYXJyaWVyIHRoZSBvd25lciBl
eGVjdXRhYmxlIGJlY2F1c2Ugd2UncmUganVtcGluZyBpbnRvIGEgZGlmZmVyZW50IGJsb2NrLgor
ICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IDsgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAg
Q29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJhc2VsaW5lQ29kZUJsb2NrRm9y
KGNvZGVPcmlnaW4pOworICAgICAgICBtX2ppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpLCBHUFJJbmZvOjpu
b25BcmdHUFIwKTsgCisgICAgICAgIFNwZWN1bGF0aXZlSklUOjpvc3JXcml0ZUJhcnJpZXIobV9q
aXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86Om5vbkFyZ0dQUjEsIEdQUkluZm86Om5v
bkFyZ0dQUjIpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICAvLyAxMikgQW5kIGZpbmlzaC4K
ICAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYg
KzU0LDcgQEAKICNpbmNsdWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTU0FMb3dlcmluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHU3RhY2tMYXlvdXRQaGFzZS5oIgor
I2luY2x1ZGUgIkRGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0
cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUaWVyVXBDaGVja0luamVjdGlv
blBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIgpAQCAtMjIz
LDYgKzIyNCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKIAog
ICAgIGRmZy5tX2ZpeHBvaW50U3RhdGUgPSBGaXhwb2ludENvbnZlcmdlZDsKIAorICAgIHBlcmZv
cm1TdG9yZUJhcnJpZXJFbGlzaW9uKGRmZyk7CiAgICAgcGVyZm9ybVN0b3JlRWxpbWluYXRpb24o
ZGZnKTsKICAgICAKICAgICAvLyBJZiB3ZSdyZSBkb2luZyB2YWxpZGF0aW9uLCB0aGVuIHJ1biBz
b21lIGFuYWx5c2VzLCB0byBnaXZlIHRoZW0gYW4gb3Bwb3J0dW5pdHkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQ2LDYgKzU0Niw5IEBAIHByaXZhdGU6CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIC8vIFRo
ZXNlIGdldCBpZ25vcmVkIGJlY2F1c2UgdGhleSBkb24ndCByZXR1cm4gYW55dGhpbmcuCisgICAg
ICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJy
aWVyOgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2Ug
UHV0Q2xvc3VyZVZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDYgKzI0MSw5IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgSW50NTJUb0RvdWJsZToKICAgICBjYXNlIEludDUyVG9WYWx1ZToKKyAg
ICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOgor
ICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKICAgICBjYXNlIEludmFsaWRhdGlv
blBvaW50OgogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBGdW5jdGlvblJlZW50cnlX
YXRjaHBvaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDAsMTAgKzIwMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU8KICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1
ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRh
cmdldCkKIHsKLSAgICB3cml0ZUJhcnJpZXIoYmFzZVBheWxvYWRHUFIsIHZhbHVlVGFnR1BSLCB2
YWx1ZVVzZSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwotICAg
IAogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KGJhc2VQYXlsb2FkR1BSKSwgSlNW
YWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksCkBAIC0xMTEyLDYgKzExMTAs
MjMgQEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVy
biBub3ROdW1iZXI7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVT
dG9yZUJhcnJpZXIoRWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKK3sKKyNpZiBFTkFC
TEUoR0dDKQorICAgIEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOwor
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgdmFsdWVFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDEodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworCisgICAgd3Jp
dGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLnRhZ0dQUigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gx
LmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlRWRn
ZSk7CisgICAgVU5VU0VEX1BBUkFNKHZhbHVlRWRnZSk7CisjZW5kaWYKK30KKwogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI2MTEsMTIg
KzI2MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAg
ICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxkMywg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGNvbXBpbGVDb250aWd1b3VzUHV0QnlW
YWwobm9kZSwgYmFzZSwgcHJvcGVydHksIHZhbHVlLCB2YWx1ZVBheWxvYWRSZWcsIHZhbHVlVGFn
UmVnKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjMzLDEzICsyNjQzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBz
Y3JhdGNoLmdwcigpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1
ZVRhZ1JlZywgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaFJl
Zyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogCkBAIC0yODE5LDExICsyODIzLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFn
R1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BS
ID0gdmFsdWUucGF5bG9hZEdQUigpOwogCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJh
cnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIs
IG5vZGUtPmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5n
cHIoKSwgc3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwpAQCAtMjg3
MiwxMSArMjg3MSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAg
ICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKIAotICAg
ICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVC
YXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAg
ICAgICAgICAgfQotCiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6
YXJyZSBsZW5ndGhzLgpAQCAtMzY3MywxOSArMzY2NywxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFB1
dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdlT3BlcmFuZCByZWdpc3RlcnModGhpcywg
bm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoUmVnaXN0ZXIodGhpcyk7
Ci0gICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOworCiAgICAgICAgIEdQUlJl
ZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVRh
Z0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0g
dmFsdWUucGF5bG9hZEdQUigpOwotICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2hS
ZWdpc3Rlci5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkp
OwogCiAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBzaXplb2YoUmVnaXN0ZXIpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7CiAg
ICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVQYXlsb2FkR1BSLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSArIE9C
SkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsK
LSAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQz
KCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM4ODIsMTEgKzM4NzUs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIAotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgLy8gTXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRl
IGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAot
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmllckZvckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlm
Ci0gICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
KTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMzk0OCwxOSArMzkzNiwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKLSNlbmRpZgogICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIAot
I2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2UuZ3ByKCksIHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9y
UHJvcGVydHlBY2Nlc3MpOwotI2VuZGlmCisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUt
PmNoaWxkMigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFnZUFjY2Vzc0Rh
dGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXTsKICAgICAgICAgCkBAIC0zOTgxLDEyICszOTY0LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVQYXls
b2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2
YWx1ZS51c2UoKTsKLQotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJh
c2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3Jh
dGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CisgICAgICAgIGNh
Y2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVl
UGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJl
Y3QpOwogICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRF
eHBsaWNpdGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApAQCAtNDAwMCwxMiArMzk4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAg
ICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAg
IGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZh
bHVlUGF5bG9hZEdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJl
Y3QpOwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwg
dmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIs
IG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKLQotICAgICAgICBub1Jlc3VsdChu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDIzLDEyICs0MDAwLDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBQdXRHbG9iYWxW
YXI6IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJh
cnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS50YWdH
UFIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3Jh
dGNoUmVnKTsKLSAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBpZiB3ZSBoYXBwZW4gdG8g
aGF2ZSBhIHNwYXJlIHJlZ2lzdGVyIC0gYW5kIF9PTkxZXyBpZiB3ZSBoYXBwZW4gdG8gaGF2ZQog
ICAgICAgICAvLyBhIHNwYXJlIHJlZ2lzdGVyIC0gYSBnb29kIG9wdGltaXphdGlvbiB3b3VsZCBi
ZSB0byBwdXQgdGhlIHJlZ2lzdGVyIHBvaW50ZXIgaW50bwpAQCAtNDY5NCw2ICs0NjY1LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGls
ZUluKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAg
IGNhc2UgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRo
TnVsbENoZWNrOiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7CiAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDc1Miw2ICs0NzMwLDM2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCisj
aWYgRU5BQkxFKEdHQykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcg
b3duZXJHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxs
OworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RD
ZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7CisKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllciht
X2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFy
cmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5
Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uu
bm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZVRhZ0dQ
UiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7Cisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFs
dWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90
TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXIpOworICAgIHN0b3JlVG9X
cml0ZUJhcnJpZXJCdWZmZXIob3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgZGVmaW5p
dGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVl
VXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKEdHQykKKwogI2VuZGlmCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEwICsyMDYsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoVGFyZ2V0KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewotICAgIHdyaXRlQmFycmllcihiYXNlR1BS
LCB2YWx1ZUdQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3Jh
dGNoR1BSKTsKLQogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgY29kZU9yaWdpbiwgdXNlZFJlZ2lzdGVycygpLCBHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlciwKICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgc2NyYXRjaEdQUiwgZmFsc2UsCkBAIC0xNDczLDYgKzE0NzEsMjMgQEAgSklUQ29t
cGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIo
RWRnZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSkKK3sKKyNpZiBFTkFCTEUoR0dDKQorICAg
IEFTU0VSVCghaXNLbm93bk5vdENlbGwodmFsdWVFZGdlLm5vZGUoKSkpOworCisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgSlNWYWx1ZU9wZXJhbmQg
dmFsdWUodGhpcywgdmFsdWVFZGdlKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7
CisgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworCisgICAgd3JpdGVCYXJyaWVyKGJh
c2UuZ3ByKCksIHZhbHVlLmdwcigpLCB2YWx1ZUVkZ2UsIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNo
Mi5ncHIoKSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShiYXNlRWRnZSk7CisgICAgVU5VU0VE
X1BBUkFNKHZhbHVlRWRnZSk7CisjZW5kaWYKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTI5MDcsMTEgKzI5MjIsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAg
IG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJlbG93LCB2YWx1ZVJlZywgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGFycmF5TW9kZS50eXBlKCkgPT0g
QXJyYXk6OkNvbnRpZ3VvdXMgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAg
ICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUuZ3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCkpOwotICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CiAgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CkBAIC0yOTg3LDExICsyOTk3LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMsIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQpOwogICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMzA5Miw3ICszMDk3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywKICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlUmVn
LCBBcmd1bWVudHM6Om9mZnNldE9mU2xvd0FyZ3VtZW50RGF0YSgpKSkpOwotICAgIAorCiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKHByb3BlcnR5UmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgICAgICAg
ICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoMlJlZywgc2NyYXRjaDJSZWcpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cigKQEAgLTMxOTMsMTEgKzMxOTgsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSAhPSBBcnJheTo6SW50MzIgJiYgSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigp
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxl
bmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSk7CiAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSk7CkBAIC0zMjQyLDExICszMjQyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAK
LSAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRlQmFycmll
ckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAg
ICAgICAgICAgIH0KLQogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpLCBzdG9yYWdl
TGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJp
emFycmUgbGVuZ3Rocy4KQEAgLTM5NzksMTggKzM5NzQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBQ
dXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVnaXN0ZXJzKHRoaXMs
IG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwotICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJlZ2lzdGVyKHRoaXMp
OwogCi0gICAgICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVH
UFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoUmVn
aXN0ZXIuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsK
IAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhy
ZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwotICAg
ICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGlsZDMoKSwgV3Jp
dGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3Vs
dChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDE3OSwxNCArNDE3MSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG1faml0Lmpp
dENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQu
Z3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKIAogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIo
dGhpcyk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgCi0g
ICAgICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgLy8g
TXVzdCBhbHdheXMgZW1pdCB0aGlzIHdyaXRlIGJhcnJpZXIgYXMgdGhlIHN0cnVjdHVyZSB0cmFu
c2l0aW9uIGl0c2VsZiByZXF1aXJlcyBpdAotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIFdyaXRlQmFycmll
ckZvckdlbmVyaWNBY2Nlc3MpOwotI2VuZGlmCi0gICAgICAgIAogICAgICAgICBtX2ppdC5zdG9y
ZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpKTsKICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwpAQCAtNDI0NSwyMyArNDIzMywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSNlbmRpZgogICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlz
KTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICAKLSNpZiBFTkFCTEUoV1JJ
VEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2
YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQzKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
KTsKLSNlbmRpZgorCisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7CiAK
ICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3Jh
cGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlR1BSLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShzdG9yYWdlQWNjZXNzRGF0
YS5vZmZzZXQpKSk7Ci0gICAgICAgIAorCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC00Mjc1LDEyICs0MjYwLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7CisgICAgICAgIGNh
Y2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hH
UFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgTm90RGlyZWN0KTsKIAotICAgICAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGls
ZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3QpOwot
ICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtNDI5MywxMiArNDI3NSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2Uu
dXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9k
ZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNo
R1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CisgICAgICAgIGNhY2hlZFB1
dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVHUFIsIHNjcmF0Y2hHUFIsIG5v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAgICBub1Jlc3VsdChub2Rl
LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MzEzLDE0ICs0MjkyLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
IHsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
d3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2luKSwgdmFs
dWUuZ3ByKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywg
c2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgbV9qaXQuc3RvcmU2
NCh2YWx1ZS5ncHIoKSwgbm9kZS0+cmVnaXN0ZXJQb2ludGVyKCkpOwogCiAgICAgICAgIG5vUmVz
dWx0KG5vZGUpOwpAQCAtNDk3Myw2ICs0OTQ1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIENvbmRp
dGlvbmFsU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazog
eworICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICNpZiBFTkFCTEUoRlRMX0pJVCkgICAgICAgIAogICAgIGNhc2UgQ2hlY2tUaWVyVXBJ
bkxvb3A6IHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0LmJyYW5j
aEFkZDMyKApAQCAtNTA1Myw2ICs1MDMyLDM2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgdXNlKG5vZGUpOwogfQogCisjaWYgRU5BQkxFKEdHQykK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJl
ZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsOworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBn
ZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRj
aDIpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworCisgICAgaWYgKCFp
c0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9q
aXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7CisgICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwgPSBtX2pp
dC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1h
cmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyKTsKKyAgICBzdG9yZVRvV3Jp
dGVCYXJyaWVyQnVmZmVyKG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmluaXRl
bHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworCisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVz
ZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworfQorI2VuZGlmIC8v
IEVOQUJMRShHR0MpCisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJE
RkdTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllckJ1ZmZlci5oIgog
I2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKQEAgLTkwOSw1MyArOTEwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dXNlQ2hpbGRy
ZW4oTm9kZSogbgogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJh
cnJpZXJVc2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQot
ewotICAgIFVOVVNFRF9QQVJBTShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BS
KTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNo
Mik7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotCi0gICAgaWYgKGlzS25vd25Ob3RDZWxs
KHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxs
KiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKLXsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNF
RF9QQVJBTSh2YWx1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLSAgICAKLSAgICBp
ZiAoSGVhcDo6aXNNYXJrZWQodmFsdWUpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
V1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudChtX2pp
dCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBH
UFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2lu
ZCwgR1BSUmVnIHNjcmF0Y2gpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyKTsKLSAgICBVTlVT
RURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoKTsKLSAgICBVTlVT
RURfUEFSQU0odXNlS2luZCk7Ci0KLSAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9k
ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklM
SU5HKQotICAgIEpJVENvbXBpbGVyOjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50
ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtpbmQpKTsKLSNlbmRpZgotfQotCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKQEAgLTQzMjksMjYgKzQyODMsMjYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcAogICAgIH0KICAgICAKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7
CiAgICAgICAgIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2Ny
YXRjaDEuZ3ByKCk7CiAgICAgICAgIAogICAgIEFTU0VSVCghbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAg
QVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgCiAgICAg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQogICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0
b3JhZ2UoCi0gICAgICAgICAgICBUcnVzdGVkSW1tMzIoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5
ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ICogc2l6ZW9mKEpTVmFsdWUpKSwgc2NyYXRjaEdQ
UjEpOwogCi0gICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9m
KEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hHUFIpOworICAgIG1faml0LmFkZFB0cihKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMSk7
CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICBzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aElu
aXRpYWxDYXBhY2l0eSwgc2NyYXRjaEdQUikpOwotICAgICAgICAKLSAgICBtX2ppdC5zdG9yZVB0
cihzY3JhdGNoR1BSLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0
dGVyZmx5T2Zmc2V0KCkpKTsKLSAgICAgICAgCi0gICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BS
LCBub2RlKTsKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25B
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIxKSk7
CisKKyAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisKKyAgICBzdG9yYWdlUmVz
dWx0KHNjcmF0Y2hHUFIxLCBub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKQEAgLTQzNjcsNiArNDMyMSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByCiAgICAgICAgIEdQ
UlJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVh
bGxvY2F0ZUJ1dHRlcmZseVRvR3Jvd1Byb3BlcnR5U3RvcmFnZSwgcmVzdWx0LmdwcigpLCBiYXNl
R1BSLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKTsKICAgICAgICAgCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vdE51bGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CisgICAgICAgIG5vdE51bGwubGluaygmbV9qaXQpOworCiAgICAgICAgIHN0b3JhZ2VSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQzODIsMjAg
KzQzNDAsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcgogICAg
IEdQUlJlZyBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gyLmdwcigpOwogICAgICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aCA9Ci0gICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFn
ZShUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQUjEpOwogCi0g
ICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIyKTsKKyAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjEpOwogICAgICAg
ICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dQ
YXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgc2NyYXRjaEdQUjIs
IG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKLSAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIy
ID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hHUFIxID0gc2NyYXRjaAorICAgICAgICBzbG93UGF0aENh
bGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBzY3Jh
dGNoR1BSMSwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOworCisgICAgLy8gV2UgaGF2ZSBz
Y3JhdGNoR1BSMSA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMiA9IHNjcmF0Y2gKICAgICBmb3Ig
KHB0cmRpZmZfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9s
ZFNpemUpOyBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKSkgewotICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpT
VmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgIG1faml0LnN0
b3JlUHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSMiwgLShv
ZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9sZFN0b3JhZ2VHUFIsIC0ob2Zmc2V0ICsg
c2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAg
IG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIyLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSMSwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSkpOwogICAg
IH0KLSAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgCi0gICAgc3RvcmFn
ZVJlc3VsdChzY3JhdGNoR1BSMiwgbm9kZSk7CisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQ
UjEsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSkpOworCisgICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMSwgbm9kZSk7CiB9CiAKIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbChHUFJUZW1w
b3JhcnkmIHRlbXBvcmFyeSwgQXJyYXlNb2RlIGFycmF5TW9kZSkKQEAgLTU0NTEsNiArNTQxMCwy
NDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bGlua0JyYW5jaGVzKCkKICAgICB9CiB9CiAKKyNp
ZiBFTkFCTEUoR0dDKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3JlQmFycmllcihO
b2RlKiBub2RlKQoreworICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgQ29uZGl0
aW9uYWxTdG9yZUJhcnJpZXI6IHsKKyAgICAgICAgY29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmll
cihub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAgCisg
ICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIu
Z3ByKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0b3JlQmFycmllcldp
dGhOdWxsQ2hlY2s6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIAorI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRD
b21waWxlcjo6WmVybywgYmFzZS5ncHIoKSk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLmdw
cigpLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworI2Vsc2UKKyAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFs
LCBiYXNlLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwor
ICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5wYXlsb2FkR1BSKCksIHNjcmF0Y2gxLmdwcigpLCBz
Y3JhdGNoMi5ncHIoKSk7CisjZW5kaWYKKyAgICAgICAgaXNOdWxsLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbm9SZXN1bHQo
bm9kZSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpnZW5lcmljV3Jp
dGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNo
MSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMSk7Cisg
ICAgaml0Lm1vdmUob3duZXIsIHNjcmF0Y2gyKTsKKworICAgIGppdC5hbmRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoTWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gxKTsK
KyAgICBqaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKH5NYXJrZWRCbG9j
azo6YmxvY2tNYXNrKSwgc2NyYXRjaDIpOworCisgICAgLy8gU2hpZnQgaW5kZXgKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIGppdC5yc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE1hcmtlZEJsb2NrOjphdG9tU2hpZnRBbW91bnQgKyBNYXJrZWRCbG9jazo6bWFya0J5dGVTaGlm
dEFtb3VudCksIHNjcmF0Y2gyKTsKKyNlbHNlCisgICAgaml0LnJzaGlmdDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmF0b21TaGlmdEFtb3VudCArIE1hcmtlZEJs
b2NrOjptYXJrQnl0ZVNoaWZ0QW1vdW50KSwgc2NyYXRjaDIpOworI2VuZGlmCisKKyAgICAvLyBF
bWl0IGxvYWQgYW5kIGJyYW5jaAorICAgIHJldHVybiBqaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gy
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIE1hcmtlZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkp
KTsKK30KKworSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmdlbmVyaWNXcml0ZUJh
cnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTQ2VsbCogb3duZXIpCit7CisgICAgTWFya2VkQmxv
Y2sqIGJsb2NrID0gTWFya2VkQmxvY2s6OmJsb2NrRm9yKG93bmVyKTsKKyAgICBzaXplX3QgbWFy
a0luZGV4ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Pihvd25lcikgJiB+TWFya2VkQmxvY2s6
OmJsb2NrTWFzaykgPj4gKE1hcmtlZEJsb2NrOjphdG9tU2hpZnRBbW91bnQgKyBNYXJrZWRCbG9j
azo6bWFya0J5dGVTaGlmdEFtb3VudCk7CisgICAgdWludDhfdCogYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJsb2NrKSArIE1hcmtl
ZEJsb2NrOjpvZmZzZXRPZk1hcmtzKCkpICsgbWFya0luZGV4OworICAgIHJldHVybiBqaXQuYnJh
bmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFk
ZHJlc3MoYWRkcmVzcykpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBTcGVjdWxhdGl2ZUpJ
VDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIGNl
bGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VSVChzY3Jh
dGNoMSAhPSBzY3JhdGNoMik7CisgICAgLy8gTG9hZCBXcml0ZUJhcnJpZXJCdWZmZXIgZnJvbSBI
ZWFwCisgICAgV3JpdGVCYXJyaWVyQnVmZmVyKiB3cml0ZUJhcnJpZXJCdWZmZXIgPSAmaml0LnZt
KCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZmZXI7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0
cih3cml0ZUJhcnJpZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAgLy8gTG9hZCBjdXJyZW50SW5k
ZXgKKyAgICBqaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0
ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIC8v
IEJyYW5jaCBpZiBjdXJyZW50SW5kZXggPj0gY2FwYWNpdHkKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmll
ckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgLy8gU3RvcmUgbmV3IGN1cnJlbnRJ
bmRleAorICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICBqaXQu
c3RvcmUzMihzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRl
QmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpKTsKKworICAgIC8vIExvYWQgYnVm
ZmVyCisgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdy
aXRlQmFycmllckJ1ZmZlcjo6YnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgLy8gU3Rv
cmUgY2VsbCBpbnRvIGJ1ZmZlci4gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6ZW9mKHZvaWQqKSBi
ZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4KKyAgICBqaXQuc3RvcmVQdHIo
Y2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikp
KSk7CisKKyAgICAvLyBKdW1wIHRvIGRvbmUKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
aml0Lmp1bXAoKTsKKyAgICAvLyBMaW5rIGZyb20gYnJhbmNoCisgICAgbmVlZFRvRmx1c2gubGlu
aygmaml0KTsKKworICAgIC8vIENhbGwgQyBzbG93IHBhdGguCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCAmaml0LnZtKCktPndyaXRlQmFycmllclJl
Z2lzdGVyQnVmZmVyW2ldKTsKKworI2lmIENQVShYODYpCisgICAgaml0LnB1c2goc2NyYXRjaDEp
OworICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyNlbmRpZgorCisgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShjZWxsKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
aml0LmNhbGwoKTsKKworI2lmIENQVShYODYpCisgICAgaml0LnBvcChzY3JhdGNoMSk7CisgICAg
aml0LnBvcChzY3JhdGNoMSk7CisjZW5kaWYKKworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUklu
Zm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KQorICAgICAgICBqaXQubG9hZFB0cigmaml0LnZt
KCktPndyaXRlQmFycmllclJlZ2lzdGVyQnVmZmVyW2ldLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkp
KTsKKworICAgIC8vIExpbmsgRG9uZQorICAgIGRvbmUubGluaygmaml0KTsKKworICAgIHJldHVy
biBjYWxsOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAg
ICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgIFdyaXRlQmFycmllckJ1ZmZlciog
d3JpdGVCYXJyaWVyQnVmZmVyID0gJm1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJCdWZm
ZXI7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlciksIHNj
cmF0Y2gxKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRj
aDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpLCBzY3JhdGNoMik7
CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQoKSkpOworCisg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgbV9qaXQuc3Rv
cmUzMihzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFy
cmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpKTsKKworICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6YnVm
ZmVyT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAtc2l6
ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4KKyAgICBt
X2ppdC5zdG9yZVB0cihjZWxsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0Y2gxLCBz
Y3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxpbnQzMl90Pigt
c2l6ZW9mKHZvaWQqKSkpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CisgICAgbmVlZFRvRmx1c2gubGluaygmbV9qaXQpOworCisgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25G
bHVzaFdyaXRlQmFycmllckJ1ZmZlciwgY2VsbCk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhJbnZhbGlkR1BSUmVnKTsKKworICAgIGRvbmUubGluaygmbV9qaXQpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCogY2VsbCwgR1BS
UmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9
IHNjcmF0Y2gyKTsKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIqIHdyaXRlQmFycmllckJ1ZmZlciA9
ICZtX2ppdC52bSgpLT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOworICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZm
ZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSwgc2NyYXRjaDIpOworICAgIEpJVENvbXBpbGVyOjpK
dW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJh
cnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgIG1faml0LmFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgc2NyYXRjaDIpOworICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJ
bmRleE9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwgc2NyYXRj
aDEpOworICAgIC8vIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3
ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCisgICAgbV9qaXQuc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihjZWxsKSwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNoMSwgc2NyYXRj
aDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVv
Zih2b2lkKikpKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKKworICAgIC8vIENhbGwgQyBzbG93IHBh
dGgKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAgICBz
aWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgZG9uZS5saW5rKCZt
X2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEpTQ2VsbCogdmFsdWUsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQor
eworICAgIGlmIChIZWFwOjppc01hcmtlZCh2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJy
aWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRvV3Jp
dGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmlu
aXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpv
c3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgVU5VU0VEX1BBUkFNKGppdCk7CisgICAg
VU5VU0VEX1BBUkFNKG93bmVyKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDEpOworICAgIFVO
VVNFRF9QQVJBTShzY3JhdGNoMik7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gxKTsKKyAg
ICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVm
aW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25lciwgc2NyYXRj
aDEsIHNjcmF0Y2gyKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpu
dW1iZXJPZlJlZ2lzdGVyczsgKytpKQorICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9S
ZWdpc3RlcihpKSwgJmppdC52bSgpLT53cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSk7CisK
KyAgICAvLyBXZSBuZWVkIHRoZXNlIGV4dHJhIHNsb3RzIGJlY2F1c2Ugc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlIHdpbGwgdXNlIHBva2Ugb24geDg2LgorI2lmIENQVShYODYpCisgICAgaml0
LnB1c2goc2NyYXRjaDEpOworICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICBqaXQucHVzaChz
Y3JhdGNoMSk7CisjZW5kaWYKKworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
b3duZXIpOworICAgIGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uT1NSV3JpdGVCYXJyaWVyKSksIHNjcmF0Y2gxKTsKKyAgICBqaXQuY2FsbChz
Y3JhdGNoMSk7CisKKyNpZiBDUFUoWDg2KQorICAgIGppdC5wb3Aoc2NyYXRjaDEpOworICAgIGpp
dC5wb3Aoc2NyYXRjaDEpOworICAgIGppdC5wb3Aoc2NyYXRjaDEpOworI2VuZGlmCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspCisgICAgICAg
IGppdC5sb2FkUHRyKCZqaXQudm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJCdWZmZXJbaV0sIEdQ
UkluZm86OnRvUmVnaXN0ZXIoaSkpOyAKKworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygm
aml0KTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFy
cmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQ
UlJlZyBzY3JhdGNoMikKK3sKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDEpOworICAgIEFT
U0VSVChvd25lciAhPSBzY3JhdGNoMik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0
ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwg
c2NyYXRjaDIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBzdG9yZVRvV3JpdGVC
YXJyaWVyQnVmZmVyKGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgZGVmaW5p
dGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworICAgIHJldHVybiBjYWxsOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgc2NyYXRj
aDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5
Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2Ny
YXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsK
K30KKyNlbHNlCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUq
IG5vZGUpCit7CisgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgc3BlY3VsYXRlKTsKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUo
R0dDKQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODksOSArMjg5LDIyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fY3VycmVudE5v
ZGUtPmNvZGVPcmlnaW4pOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBv
d25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VL
aW5kLCBHUFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBJbnZhbGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXJH
UFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BS
MSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwot
ICAgIHZvaWQgd3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRn
ZSB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52
YWxpZEdQUlJlZyk7CisjaWYgRU5BQkxFKEdHQykKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVn
IGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lkIHN0b3Jl
VG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVn
IHNjcmF0Y2gyKTsKKyAgICB2b2lkIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKiwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworCisgICAgc3RhdGljIEpJVENvbXBp
bGVyOjpKdW1wIGdlbmVyaWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBv
d25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHN0YXRpYyBKSVRD
b21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0Nl
bGwqIG93bmVyKTsKKyAgICBzdGF0aWMgdm9pZCBvc3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJz
JiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAg
c3RhdGljIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHdyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmLCBH
UFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lk
IHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0
Y2gyKTsKKyAgICB2b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEpTQ2VsbCogdmFsdWUs
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHZvaWQgd3JpdGVCYXJy
aWVyKEdQUlJlZyBvd25lciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgR1BSUmVnIHZhbHVlLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMik7CisjZW5kaWYKKyAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIoTm9kZSop
OwogCiAgICAgc3RhdGljIEdQUlJlZyBzZWxlY3RTY3JhdGNoR1BSKEdQUlJlZyBwcmVzZXJ2ZTEg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUyID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHByZXNlcnZlMyA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTQgPSBJbnZhbGlkR1BS
UmVnKQogICAgIHsKQEAgLTcwMCwxNCArNzEzLDE2IEBAIHB1YmxpYzoKIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlR1BS
LCBHUFJSZWcgcmVzdWx0R1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0
ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdp
biwgR1BSUmVnIGJhc2UsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0
Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpK
dW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNo
ZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VsaWYgVVNF
KEpTVkFMVUUzMl82NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVn
IGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRh
Z0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwg
U3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQgY2FjaGVkUHV0QnlJ
ZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwg
R1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgdm9pZCBjYWNoZWRQdXRC
eUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BS
LCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRl
bnRpZmllck51bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpKTsKICNlbmRpZgogICAgIAogICAgIHZvaWQgY29tcGlsZUlu
KE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIoRWRn
ZSYgYmFzZUVkZ2UsIEVkZ2UmIHZhbHVlRWRnZSk7CisKICAgICB2b2lkIG5vblNwZWN1bGF0aXZl
Tm9uUGVlcGhvbGVDb21wYXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2Up
OwogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5k
LCBOb2RlKiBicmFuY2hOb2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNw
ZWN1bGF0aXZlQ29tcGFyZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBm
YWxzZSk7CkBAIC0xMDU5LDYgKzEwNzQsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUMgb3BlcmF0aW9uLCBK
U0NlbGwqIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoVHJ1c3RlZEltbVB0cihhcmcxKSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0ljZiBvcGVyYXRpb24sIEdQUlJlZyBh
cmcxLCBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKGlubGlu
ZUNhbGxGcmFtZSkpOwpAQCAtMTA3NSwxMiArMTA5NiwyMSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMikp
OwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24p
OwogICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAg
IH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
QyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBKU0NlbGwqIGFyZzIpCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihhcmcy
KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CisgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVy
YXRpb25fRUNDIG9wZXJhdGlvbiwgSlNDZWxsKiBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFy
ZzEpLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2so
b3BlcmF0aW9uKTsKKyAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfSklUT3BlcmF0aW9uX0VWd3Mgb3BlcmF0aW9uLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQpCiAgICAgewpAQCAtMTM0MCw3ICsxMzcwLDYgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CiAg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAg
ICAgfQotCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyLCB2b2lkKiBwb2ludGVy
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEs
IGFyZzIsIFRydXN0ZWRJbW1QdHIocG9pbnRlcikpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlz
aW9uUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFN0b3JlQmFycmllckVsaXNpb25Q
aGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJzdG9yZSBiYXJyaWVy
IGVsaXNpb24iKQorICAgICAgICAsIG1fY3VycmVudEJsb2NrKDApCisgICAgICAgICwgbV9jdXJy
ZW50SW5kZXgoMCkKKyAgICB7CisgICAgICAgIG1fZ2NDbG9iYmVyU2V0LmFkZChHQ1N0YXRlKTsK
KyAgICB9CisKKyAgICBib29sIGNvdWxkQ2F1c2VHQyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgbV9nY0Nsb2JiZXJTZXQpOwor
ICAgIH0KKworICAgIGJvb2wgYWxsb2NhdGVzRnJlc2hPYmplY3QoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoK
KyAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgor
ICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6
CisgICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJh
cnJpZXJzLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFsbG9jYXRlc0ZyZXNo
T2JqZWN0KG5vZGUpKTsKKyAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQobm9kZSk7CisgICAg
fQorCisgICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUoTm9kZSogYmFycmllck5vZGUpCisgICAgewor
ICAgICAgICBBU1NFUlQoYmFycmllck5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOworICAgICAgICBy
ZXR1cm4gYmFycmllck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICB9CisKKyAgICBib29sIHNo
b3VsZEJlRWxpZGVkKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOworICAgICAg
ICByZXR1cm4gZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkp
OworICAgIH0KKworICAgIHZvaWQgZWxpZGVCYXJyaWVyKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSk7CisgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b20oKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyVmFyaWFibGVCYXJyaWVycygp
CisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9ncmFwaC5tX3Zhcmlh
YmxlQWNjZXNzRGF0YS5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fZ3JhcGgubV92YXJpYWJs
ZUFjY2Vzc0RhdGFbaV0uY2hlY2tBbmRTZXROZWVkc0JhcnJpZXIodHJ1ZSk7CisgICAgfQorCisg
ICAgdm9pZCBoYW5kbGVOb2RlKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKGNvdWxkQ2F1c2VHQyhub2RlKSkgeworICAgICAg
ICAgICAgZG9udE5lZWRCYXJyaWVycy5jbGVhcigpOworICAgICAgICAgICAgY2xlYXJWYXJpYWJs
ZUJhcnJpZXJzKCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYWxsb2NhdGVzRnJlc2hPYmpl
Y3Qobm9kZSkpCisgICAgICAgICAgICBub3RpY2VGcmVzaE9iamVjdChkb250TmVlZEJhcnJpZXJz
LCBub2RlKTsKKworICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBTdG9yZUJhcnJpZXIpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHNob3VsZEJlRWxpZGVkKGRvbnROZWVkQmFy
cmllcnMsIG5vZGUpKSB7CisgICAgICAgICAgICBlbGlkZUJhcnJpZXIobm9kZSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBOb2RlKiBiYXNlID0gZ2V0QmFzZU9m
U3RvcmUobm9kZSk7CisgICAgICAgIGlmICghYmFzZSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhiYXNlKSkgeworICAgICAgICAg
ICAgQVNTRVJUKCFiYXNlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+bmVlZHNCYXJyaWVyKCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZG9udE5lZWRCYXJyaWVy
cy5hZGQoYmFzZSk7CisgICAgfQorCisgICAgYm9vbCBoYW5kbGVMb2NhbChIYXNoU2V0PE5vZGUq
PiYgZG9udE5lZWRCYXJyaWVycywgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChu
b2RlLT5oYXNMb2NhbChtX2dyYXBoKSk7CisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgICAgICBpZiAoIW5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5uZWVkc0JhcnJpZXIoKSkKKyAgICAgICAgICAgICAgICBkb250TmVlZEJh
cnJpZXJzLmFkZChub2RlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6Cisg
ICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKGRvbnROZWVk
QmFycmllcnMuY29udGFpbnMoY2hpbGQpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YXJpYWJs
ZS0+Y2hlY2tBbmRTZXROZWVkc0JhcnJpZXIoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuIHZh
cmlhYmxlLT5jaGVja0FuZFNldE5lZWRzQmFycmllcih0cnVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBib29sIGhhbmRsZUJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAg
ICAgSGFzaFNldDxOb2RlKj4gZG9udE5lZWRCYXJyaWVyczsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgeworICAgICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBpbmRleEluQmxvY2s7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKKyAgICAg
ICAgICAgIGlmIChub2RlLT5oYXNMb2NhbChtX2dyYXBoKSkgeworICAgICAgICAgICAgICAgIGhh
bmRsZUxvY2FsKGRvbnROZWVkQmFycmllcnMsIG5vZGUpOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBoYW5kbGVOb2RlKGRvbnROZWVkQmFy
cmllcnMsIG5vZGUpOworICAgICAgICB9CisgICAgICAgIGlmICghbV9ub2RlU3RhdGVBdFRhaWwu
Y29udGFpbnMoYmxvY2spKSB7CisgICAgICAgICAgICBIYXNoU2V0PE5vZGUqPiBuZXdTZXQ7Cisg
ICAgICAgICAgICBtX25vZGVTdGF0ZUF0VGFpbC5zZXQoYmxvY2ssIG5ld1NldCk7CisgICAgICAg
IH0KKyAgICAgICAgYXV0byBpdGVyID0gbV9ub2RlU3RhdGVBdFRhaWwuZmluZChibG9jayk7Cisg
ICAgICAgIGJvb2wgcmVzdWx0ID0gIShkb250TmVlZEJhcnJpZXJzID09IGl0ZXItPnZhbHVlKTsK
KyAgICAgICAgaXRlci0+dmFsdWUuc3dhcChkb250TmVlZEJhcnJpZXJzKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBib29s
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2spCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gaGFuZGxlQmxvY2sobV9j
dXJyZW50QmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDbG9iYmVyU2V0IG1fZ2NDbG9iYmVyU2V0Owor
ICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEhhc2hTZXQ8Tm9kZSo+PiBtX25vZGVTdGF0ZUF0VGFp
bDsKKyAgICBCYXNpY0Jsb2NrKiBtX2N1cnJlbnRCbG9jazsKKyAgICB1bnNpZ25lZCBtX2N1cnJl
bnRJbmRleDsKK307CisgICAgCitib29sIHBlcmZvcm1TdG9yZUJhcnJpZXJFbGlzaW9uKEdyYXBo
JiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFN0b3Jl
IEJhcnJpZXIgRWxpc2lvbiBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxTdG9yZUJhcnJp
ZXJFbGlzaW9uUGhhc2U+KGdyYXBoKTsKK30KKworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKKyNkZWZpbmUgREZHU3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBHcmFwaDsKKworYm9vbCBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihHcmFwaCYpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBERkdTdG9yZUJhcnJpZXJF
bGlzaW9uUGhhc2VfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxl
ZChmYWxzZSkKICAgICAgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCiAgICAgICAg
ICwgbV9pc0xvYWRlZEZyb20oZmFsc2UpCisgICAgICAgICwgbV9uZWVkc0JhcnJpZXIodHJ1ZSkK
ICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91YmxlRm9ybWF0U3RhdGUpCiAg
ICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX3N0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwg
bV9jaGVja0FycmF5SG9pc3RpbmdGYWlsZWQoZmFsc2UpCiAgICAgICAgICwgbV9pc1Byb2ZpdGFi
bGVUb1VuYm94KGZhbHNlKQorICAgICAgICAsIG1fbmVlZHNCYXJyaWVyKHRydWUpCiAgICAgICAg
ICwgbV9kb3VibGVGb3JtYXRTdGF0ZShFbXB0eURvdWJsZUZvcm1hdFN0YXRlKQogICAgIHsKICAg
ICAgICAgY2xlYXJWb3RlcygpOwpAQCAtMzU0LDYgKzM1NiwxOCBAQCBwdWJsaWM6CiAgICAgewog
ICAgICAgICByZXR1cm4gRmx1c2hlZEF0KGZsdXNoRm9ybWF0KCksIG1hY2hpbmVMb2NhbCgpKTsK
ICAgICB9CisKKyAgICBib29sIG5lZWRzQmFycmllcigpCisgICAgeworICAgICAgICByZXR1cm4g
bV9uZWVkc0JhcnJpZXI7CisgICAgfQorCisgICAgYm9vbCBjaGVja0FuZFNldE5lZWRzQmFycmll
cihib29sIG5lZWRzQmFycmllcikKKyAgICB7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gbmVlZHNC
YXJyaWVyICE9IG1fbmVlZHNCYXJyaWVyOworICAgICAgICBtX25lZWRzQmFycmllciA9IG5lZWRz
QmFycmllcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5n
IHdlJ3JlIHVuaWZpZWQgd2l0aApAQCAtMzc0LDYgKzM4OCw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZDsKICAgICBib29sIG1faXNQcm9maXRhYmxlVG9V
bmJveDsKICAgICBib29sIG1faXNMb2FkZWRGcm9tOworICAgIGJvb2wgbV9uZWVkc0JhcnJpZXI7
CiAKICAgICBmbG9hdCBtX3ZvdGVzWzJdOyAvLyBVc2VkIHByaW1hcmlseSBmb3IgZG91YmxlIHZv
dGluZyBidXQgbWF5IGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCiAgICAgRG91YmxlRm9y
bWF0U3RhdGUgbV9kb3VibGVGb3JtYXRTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY5LDYgKzI2OSw5IEBAIEhlYXA6OkhlYXAo
Vk0qIHZtLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICAsIG1fY29weVZpc2l0b3IobV9zaGFyZWRE
YXRhKQogICAgICwgbV9oYW5kbGVTZXQodm0pCiAgICAgLCBtX2lzU2FmZVRvQ29sbGVjdChmYWxz
ZSkKKyNpZiBFTkFCTEUoR0dDKQorICAgICwgbV93cml0ZUJhcnJpZXJCdWZmZXIoMTI4KQorI2Vu
ZGlmCiAgICAgLCBtX3ZtKHZtKQogICAgICwgbV9sYXN0R0NMZW5ndGgoMCkKICAgICAsIG1fbGFz
dENvZGVEaXNjYXJkVGltZShXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpKQpAQCAt
OTk2LDQgKzk5OSwxNCBAQCB2b2lkIEhlYXA6OmRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lm
CiAgICAgY29sbGVjdElmTmVjZXNzYXJ5T3JEZWZlcigpOwogfQogCit2b2lkIEhlYXA6OmZsdXNo
V3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2VsbCogY2VsbCkKK3sKKyNpZiBFTkFCTEUoR0dDKQorICAg
IG1fd3JpdGVCYXJyaWVyQnVmZmVyLmZsdXNoKCp0aGlzKTsKKyAgICBtX3dyaXRlQmFycmllckJ1
ZmZlci5hZGQoY2VsbCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjZWxsKTsKKyNlbmRpZgor
fQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk9wdGlvbnMuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvci5oIgogI2luY2x1ZGUgIldlYWtIYW5kbGVPd25lci5oIgorI2lu
Y2x1ZGUgIldyaXRlQmFycmllckJ1ZmZlci5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllclN1cHBv
cnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aFNldC5oPgpAQCAtNzcsNiArNzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSGVhcCk7CiAgICAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3Mg
SklUOworICAgICAgICBmcmllbmQgY2xhc3MgREZHOjpTcGVjdWxhdGl2ZUpJVDsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEdDVGhyZWFkU2hhcmVkRGF0YTsKICAgICAgICAgc3RhdGljIEhlYXAqIGhl
YXAoY29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKICAgICAgICAgc3Rh
dGljIEhlYXAqIGhlYXAoY29uc3QgSlNDZWxsKik7CkBAIC05MywxMCArOTUsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyB2b2lkIHNldE1hcmtlZChjb25zdCB2b2lkKik7CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgaXNXcml0ZUJhcnJpZXJFbmFibGVkKCk7CisgICAgICAgIHN0
YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqKTsKICAgICAgICAgc3RhdGljIHZv
aWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpOwogICAgICAgICBzdGF0aWMg
dm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNDZWxsKik7CiAgICAgICAgIHN0YXRp
YyB1aW50OF90KiBhZGRyZXNzT2ZDYXJkRm9yKEpTQ2VsbCopOwogCisgICAgICAgIHZvaWQgZmx1
c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKik7CisKICAgICAgICAgSGVhcChWTSosIEhlYXBU
eXBlKTsKICAgICAgICAgfkhlYXAoKTsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBs
YXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwpAQCAtMjg0LDYgKzI4OSwxMCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAgICAgICAgIGJvb2wgbV9pc1NhZmVUb0NvbGxlY3Q7CiAKKyNpZiBFTkFC
TEUoR0dDKQorICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXIgbV93cml0ZUJhcnJpZXJCdWZmZXI7
CisjZW5kaWYKKwogICAgICAgICBWTSogbV92bTsKICAgICAgICAgZG91YmxlIG1fbGFzdEdDTGVu
Z3RoOwogICAgICAgICBkb3VibGUgbV9sYXN0Q29kZURpc2NhcmRUaW1lOwpAQCAtMzcwLDYgKzM3
OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogICAgIH0KIAorICAgIGlubGluZSB2b2lk
IEhlYXA6OndyaXRlQmFycmllcihjb25zdCBKU0NlbGwqKQorICAgIHsKKyAgICAgICAgV3JpdGVC
YXJyaWVyQ291bnRlcnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CisgICAgfQorCiAgICAgaW5saW5l
IHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCosIEpTQ2VsbCopCiAgICAgewog
ICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMTYwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtNzMsMTIgKzczLDE1IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHVibGljOgog
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaXplID0gODsgLy8gYnl0ZXMKKyAgICAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tU2hpZnRBbW91bnQgPSA0OyAvLyBsb2dfMihhdG9t
U2l6ZSkgRklYTUU6IENoYW5nZSBhdG9tU2l6ZSB0byAxNi4KICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBibG9ja1NpemUgPSA2NCAqIEtCOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGJsb2NrTWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93
ZXIgb2YgdHdvLgogCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbXNQZXJCbG9jayA9
IGJsb2NrU2l6ZSAvIGF0b21TaXplOwogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21N
YXNrID0gYXRvbXNQZXJCbG9jayAtIDE7CiAKKyAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBt
YXJrQnl0ZVNoaWZ0QW1vdW50ID0gMzsgLy8gbG9nXzIod29yZCBzaXplIGZvciBtX21hcmtzKSBG
SVhNRTogQ2hhbmdlIHdvcmQgc2l6ZSBmb3IgbV9tYXJrcyB0byB1aW50OF90LgorCiAgICAgICAg
IHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAgICAgICAgICBGcmVlQ2VsbCogbmV4dDsKICAgICAgICAg
fTsKQEAgLTE2OCw2ICsxNzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaExpdmVDZWxsKEZ1bmN0b3ImKTsKICAgICAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaERlYWRDZWxsKEZ1bmN0
b3ImKTsKIAorICAgICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWFya3MoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoTWFya2VkQmxvY2ssIG1fbWFya3MpOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNp
emUgLSAxOyAvLyBhdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZm
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyQnVmZmVyLmgiCisKKyNpbmNs
dWRlICJHQ0Fzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSlNDZWxs
LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitXcml0ZUJh
cnJpZXJCdWZmZXI6OldyaXRlQmFycmllckJ1ZmZlcih1bnNpZ25lZCBjYXBhY2l0eSkKKyAgICA6
IG1fY3VycmVudEluZGV4KDApCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQorICAgICwgbV9i
dWZmZXIoc3RhdGljX2Nhc3Q8SlNDZWxsKio+KGZhc3RNYWxsb2Moc2l6ZW9mKEpTQ2VsbCopICog
Y2FwYWNpdHkpKSkKK3sKK30KKworV3JpdGVCYXJyaWVyQnVmZmVyOjp+V3JpdGVCYXJyaWVyQnVm
ZmVyKCkKK3sKKyAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgbV9idWZmZXIgPSAwOworfQor
Cit2b2lkIFdyaXRlQmFycmllckJ1ZmZlcjo6Zmx1c2goSGVhcCYgaGVhcCkKK3sKKyAgICBBU1NF
UlQobV9jdXJyZW50SW5kZXggPD0gbV9jYXBhY2l0eSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2N1cnJlbnRJbmRleDsgKytpKQorICAgICAgICBoZWFwLndyaXRlQmFycmllcihtX2J1
ZmZlcltpXSk7CisgICAgbV9jdXJyZW50SW5kZXggPSAwOworfQorCit2b2lkIFdyaXRlQmFycmll
ckJ1ZmZlcjo6cmVzZXQoKQoreworICAgIG1fY3VycmVudEluZGV4ID0gMDsKK30KKwordm9pZCBX
cml0ZUJhcnJpZXJCdWZmZXI6OmFkZChKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9MT09LU19WQUxJRChjZWxsKTsKKyAgICBBU1NFUlQobV9jdXJyZW50SW5kZXggPCBtX2Nh
cGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX2N1cnJlbnRJbmRleCsrXSA9IGNlbGw7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVC
YXJyaWVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
V3JpdGVCYXJyaWVyQnVmZmVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXcml0ZUJhcnJpZXJCdWZmZXJfaAorI2RlZmluZSBX
cml0ZUJhcnJpZXJCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXA7CitjbGFzcyBKU0NlbGw7CisKK25hbWVzcGFjZSBG
VEwgeyBjbGFzcyBMb3dlckRGR1RvTExWTTsgfQorCitjbGFzcyBXcml0ZUJhcnJpZXJCdWZmZXIg
eworICAgIGZyaWVuZCBjbGFzcyBGVEw6Okxvd2VyREZHVG9MTFZNOworcHVibGljOgorICAgIFdy
aXRlQmFycmllckJ1ZmZlcih1bnNpZ25lZCBjYXBhY2l0eSk7CisgICAgfldyaXRlQmFycmllckJ1
ZmZlcigpOworCisgICAgdm9pZCBhZGQoSlNDZWxsKik7CisgICAgdm9pZCBmbHVzaChIZWFwJik7
CisgICAgdm9pZCByZXNldCgpOworCisgICAgc3RhdGljIHB0cmRpZmZfdCBjdXJyZW50SW5kZXhP
ZmZzZXQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXcml0ZUJhcnJp
ZXJCdWZmZXIsIG1fY3VycmVudEluZGV4KTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IGNhcGFjaXR5T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
V3JpdGVCYXJyaWVyQnVmZmVyLCBtX2NhcGFjaXR5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRy
ZGlmZl90IGJ1ZmZlck9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFdyaXRlQmFycmllckJ1ZmZlciwgbV9idWZmZXIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKKyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OworICAg
IEpTQ2VsbCoqIG1fYnVmZmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBXcml0ZUJhcnJpZXJCdWZmZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk2LDYgKzE2
OTYsMzkgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdAogICAgIGdl
bmVyaWNVbndpbmQodm0sIGV4ZWMsIGV4Y2VwdGlvblZhbHVlKTsKIH0KIAordm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIHZtLT5oZWFwLmZsdXNoV3JpdGVC
YXJyaWVyQnVmZmVyKGNlbGwpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uT1NS
V3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIGV4ZWMtPmhlYXAoKS0+d3JpdGVCYXJyaWVyKGNlbGwpOworfQorCisvLyBOQjog
V2UgZG9uJ3QgaW5jbHVkZSB0aGUgdmFsdWUgYXMgcGFydCBvZiB0aGUgYmFycmllciBiZWNhdXNl
IHRoZSB3cml0ZSBiYXJyaWVyIGVsaXNpb24KKy8vIHBoYXNlIGluIHRoZSBERkcgb25seSB0cmFj
a3Mgd2hldGhlciB0aGUgb2JqZWN0IGJlaW5nIHN0b3JlZCB0byBoYXMgYmVlbiBiYXJyaWVyZWQu
IEl0IAorLy8gd291bGQgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRvIHRyeSB0byBtb2RlbCB0
aGUgdmFsdWUgYmVpbmcgc3RvcmVkIGFzIHdlbGwuCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBIZWFwOjp3cml0ZUJhcnJpZXIoY2VsbCk7Cit9CisK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ29uc3QoRXhlY1N0YXRlKiBl
eGVjLCBJbnN0cnVjdGlvbiogcGMpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIHZh
bHVlID0gZXhlYy0+cihwY1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKKyAgICBwY1sxXS51LnJl
Z2lzdGVyUG9pbnRlci0+c2V0KCp2bSwgZXhlYy0+Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgp
LCB2YWx1ZSk7Cit9CisKIHZvaWQgSklUX09QRVJBVElPTiBsb29rdXBFeGNlcHRpb25IYW5kbGVy
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjA2ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSw3IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNJ
Q0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElkZW50aWZpZXIqLCBKU0NlbGwqLCBKU0NlbGwqKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDSWNmKShFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqLCBJbmxpbmVDYWxsRnJhbWUqKTsKIHR5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNKSikoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNQU1BTKShFeGVjU3RhdGUqLCBKU0NlbGwqLCB2b2lk
Kiwgc2l6ZV90LCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRUNaKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fRUlkSlopKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCk7CkBAIC0yNzcsNiArMjc4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0RnJv
bVNjb3BlKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKiBieXRlY29kZVBDKSBXVEZfSU5URVJOQUw7
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFeGVjU3RhdGUqLCBJbnN0
cnVjdGlvbiogYnl0ZWNvZGVQQykgV1RGX0lOVEVSTkFMOwogCit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEpTQ2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxX
cml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uT1NSV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOworCit2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSW5pdEdsb2JhbENvbnN0KEV4ZWNTdGF0ZSosIEluc3RydWN0aW9u
Kik7CisKIH0gLy8gZXh0ZXJuICJDIgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
CiAjaW5jbHVkZSAiRGF0ZUluc3RhbmNlQ2FjaGUuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxs
b2NhdG9yLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNs
dWRlICJJbnRyaW5zaWMuaCIKICNpbmNsdWRlICJKSVRUaHVua3MuaCIKQEAgLTM4Nyw2ICszODgs
OCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgQ2xhc3NJbmZvKiBjb25zdCBqc0Fy
cmF5Q2xhc3NJbmZvOwogICAgICAgICBjb25zdCBDbGFzc0luZm8qIGNvbnN0IGpzRmluYWxPYmpl
Y3RDbGFzc0luZm87CiAKKyAgICAgICAgdm9pZCogd3JpdGVCYXJyaWVyUmVnaXN0ZXJCdWZmZXJb
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOworCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIg
ZXhjZXB0aW9uTG9jYXRpb247CiAgICAgICAgIEpTVmFsdWUgaG9zdENhbGxSZXR1cm5WYWx1ZTsK
ICAgICAgICAgRXhlY1N0YXRlKiBuZXdDYWxsRnJhbWVSZXR1cm5WYWx1ZTsKSW5kZXg6IFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNjA3ODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEyIEBACisyMDEzLTEyLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgREZHIHNob3VsZCBoYXZlIGEgc2VwYXJhdGUgU3RvcmVCYXJy
aWVyIG5vZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNTUzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd3RmL1BsYXRmb3JtLmg6IEFkZGVkIGFuICNkZWZpbmUgZm9yIEVOQUJMRShHR0MpIHdoaWNo
IHdpbGwgYmUgdXNlZCBmb3IgbGFuZGluZyB0aGluZ3MgcmVsYXRlZCB0byBHZW5HQy4KKwogMjAx
My0xMi0xNiAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gVXBzdHJlYW0gV2ViQ29yZS9odG1sIGNoYW5nZXMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNp
b24gMTYwNjgyKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpA
QCAtNzg0LDYgKzc4NCwxMSBAQAogI2RlZmluZSBFTkFCTEVfVkVSQk9TRV9WQUxVRV9QUk9GSUxF
IDAKICNlbmRpZgogCisvKiBHZW5lcmF0aW9uYWwgY29sbGVjdG9yIGZvciBKU0MgKi8KKyNpZiAh
ZGVmaW5lZChFTkFCTEVfR0dDKQorI2RlZmluZSBFTkFCTEVfR0dDIDAKKyNlbmRpZgorCiAvKiBD
b3VudHMgdXNlcyBvZiB3cml0ZSBiYXJyaWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUg
c3VyZSB0byBhbHNvCiAgICBzZXQgRU5BQkxFX1NBTVBMSU5HX0NPVU5URVJTIHRvIDEuICovCiAj
aWYgIWRlZmluZWQoRU5BQkxFX1dSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219559</attachid>
            <date>2013-12-18 12:38:57 -0800</date>
            <delta_ts>2013-12-18 14:19:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131218123854.patch</filename>
            <type>text/plain</type>
            <size>111217</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNCBA
QAorMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHByZXBhcmF0aW9uIGZvciBHZW5HQy4gV2UgdXNlIGEgc2VwYXJhdGUgU3RvcmVCYXJyaWVyIG5v
ZGUgaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBpbXBsaWNpdGx5IAorICAgICAgICBwYXJ0IG9mIG90
aGVyIG5vZGVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gcnVuIGFuYWx5c2VzIG9uIHRoZW0sIGUu
Zy4gZm9yIHRoZSBTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuIAorICAgICAgICBUaGV5IGFyZSBp
bnNlcnRlZCBkdXJpbmcgdGhlIGZpeHVwIHBoYXNlLiBJbml0aWFsbHkgdGhleSBkbyBub3QgZ2Vu
ZXJhdGUgYW55IGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KTogV2hlbmV2ZXIgd2UgaW5zZXJ0IG5ldyBub2RlcyB0aGF0IHJlcXVpcmUgU3RvcmVCYXJyaWVy
cywKKyAgICAgICAgd2UgaGF2ZSB0byBhZGQgdGhvc2UgbmV3IFN0b3JlQmFycmllcnMgdG9vLiBJ
dCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgYW5kIAor
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIG5vZGVzIHJlcXVpcmUgdGhlaXIgU3Rv
cmVCYXJyaWVycyB0byBjb21lIGFmdGVyIHRoZW0gc2luY2UgdGhleSBhbGxvY2F0ZSBmaXJzdCwK
KyAgICAgICAgd2hpY2ggY291bGQgY2F1c2UgYSBHQywgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3Vs
dGluZyBidWZmZXIgaW50byB0aGVpciBKU0NlbGwsIHdoaWNoIHJlcXVpcmVzIHRoZSBiYXJyaWVy
LgorICAgICAgICBJZiB3ZSBldmVyIHJlcXVpcmUgdGhhdCB3cml0ZSBiYXJyaWVycyBvY2N1ciBi
ZWZvcmUgc3RvcmVzLCB3ZSdsbCBoYXZlIHRvIHNwbGl0IHRoZXNlIG5vZGVzIGludG8gCisgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlICsgU3RvcmVCYXJyaWVyICsgUHV0UHJvcGVydHlT
dG9yYWdlLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6OmZpeHVwSGVhcFN0b3JlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmlzU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTdG9yZUJhcnJpZXIp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpnZW5lcmljV3JpdGVCYXJyaWVy
KTogVGhlIGZhc3QgcGF0aCB3cml0ZSBiYXJyaWVyIGNoZWNrLiBJdCBsb2FkcyB0aGUgCisgICAg
ICAgIGJ5dGUgdGhhdCBjb250YWlucyB0aGUgbWFyayBiaXQgb2YgdGhlIG9iamVjdC4gCisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIp
OiBJZiB0aGUgZmFzdCBwYXRoIGNoZWNrIGZhaWxzIHdlIHRyeSB0byBzdG9yZSB0aGUgCisgICAg
ICAgIGNlbGwgaW4gdGhlIFdyaXRlQmFycmllckJ1ZmZlciBzbyBhcyB0byBhdm9pZCBmcmVxdWVu
dGx5IGZsdXNoaW5nIGFsbCByZWdpc3RlcnMgaW4gb3JkZXIgdG8gbWFrZSBhIEMgY2FsbC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKTogTW9yZSBiYXJlYm9u
ZXMgdmVyc2lvbiBvZiB0aGUgd3JpdGUgYmFycmllciB0byBiZSBleGVjdXRlZCAKKyAgICAgICAg
ZHVyaW5nIGFuIE9TUiBleGl0IGludG8gYmFzZWxpbmUgY29kZS4gV2UgbXVzdCBkbyB0aGlzIHNv
IHRoYXQgdGhlIGJhc2VsaW5lIEpJVCBvYmplY3QgYW5kIGFycmF5IHByb2ZpbGVzIAorICAgICAg
ICBhcmUgcHJvcGVybHkgY2xlYXJlZCBkdXJpbmcgR0MuCisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVy
YXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVCYXNlVmFsdWVTdG9yZUJhcnJpZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNhY2hlZFB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRl
QmFycmllcik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA6
IEFkZGVkLiBOZXcgREZHIHBoYXNlIHRoYXQgZG9lcyBibG9jay1sb2NhbCBlbGlzaW9uIG9mIHJl
ZHVuZGFudAorICAgICAgICBTdG9yZUJhcnJpZXJzLiBFdmVyeSB0aW1lIGEgU3RvcmVCYXJyaWVy
IG9uIGEgcGFydGljdWxhciBvYmplY3QgaXMgZXhlY3V0ZWQsIGEgYml0IGlzIHNldCBpbmRpY2F0
aW5nIHRoYXQgCisgICAgICAgIHRoYXQgb2JqZWN0IGRvZXNuJ3QgbmVlZCBhbnkgbW9yZSBTdG9y
ZUJhcnJpZXJzLiAKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2U6
OlN0b3JlQmFycmllckVsaXNpb25QaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJy
aWVyRWxpc2lvblBoYXNlOjpjb3VsZENhdXNlR0MpOiBOb2RlcyB0aGF0IGNvdWxkIGNhdXNlIGEg
R0MgcmVzZXQgdGhlIGJpdHMgZm9yIGFsbCBvZiB0aGUgCisgICAgICAgIG9iamVjdHMga25vd24g
aW4gdGhlIGN1cnJlbnQgYmxvY2suIAorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVs
aXNpb25QaGFzZTo6YWxsb2NhdGVzRnJlc2hPYmplY3QpOiBBIG5vZGUgdGhhdCBjcmVhdGVzIGEg
bmV3IG9iamVjdCBhdXRvbWF0aWNhbGx5IAorICAgICAgICBzZXRzIHRoZSBiaXQgZm9yIHRoYXQg
b2JqZWN0IHNpbmNlIGlmIGEgR0Mgb2NjdXJyZWQgYXMgdGhlIHJlc3VsdCBvZiB0aGF0IG9iamVj
dCdzIGFsbG9jYXRpb24gdGhlbiB0aGF0IAorICAgICAgICBvYmplY3Qgd291bGQgbm90IG5lZWQg
YSBiYXJyaWVyIHNpbmNlIGl0IHdvdWxkIGJlIGd1YXJhbnRlZWQgdG8gYmUgYSB5b3VuZyBnZW5l
cmF0aW9uIG9iamVjdCB1bnRpbCB0aGUgCisgICAgICAgIG5leHQgR0MgcG9pbnQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpub3RpY2VGcmVzaE9iamVjdCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpnZXRCYXNlT2ZT
dG9yZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlOjpzaG91
bGRCZUVsaWRlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNl
OjplbGlkZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZTo6Y2xlYXJWYXJpYWJsZUJhcnJpZXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3Jl
QmFycmllckVsaXNpb25QaGFzZTo6aGFuZGxlTG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OlN0
b3JlQmFycmllckVsaXNpb25QaGFzZTo6aGFuZGxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6
OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJm
b3JtU3RvcmVCYXJyaWVyRWxpc2lvbik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVs
aXNpb25QaGFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFyaWFibGVBY2Nlc3NEYXRhOjpWYXJpYWJsZUFjY2Vz
c0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6OlZhcmlhYmxlQWNjZXNzRGF0YTo6bmVlZHNCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmNoZWNrQW5kU2V0
TmVlZHNCYXJyaWVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpI
ZWFwOjpIZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIp
OgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJp
ZXIpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6Om9mZnNldE9mTWFya3MpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVy
LmNwcDogQWRkZWQuIFRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgYnVmZmVycyBhIHNldCBvZiBKU0Nl
bGxzIHRoYXQgYXJlIGF3YWl0aW5nIAorICAgICAgICBhIHBlbmRpbmcgV3JpdGVCYXJyaWVyLiBU
aGlzIGJ1ZmZlciBpcyB1c2VkIGJ5IHRoZSBERkcgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNh
bGxpbmcgb3V0IHRvIEMgcmVwZWF0ZWRseQorICAgICAgICB0byBpbnZva2UgYSB3cml0ZSBiYXJy
aWVyIG9uIGEgc2luZ2xlIEpTQ2VsbC4gSW5zdGVhZCB0aGUgREZHIGhhcyBpbmxpbmUgY29kZSB0
byBmaWxsIHRoZSBXcml0ZUJhcnJpZXIgYnVmZmVyCisgICAgICAgIHVudGlsIGl0cyBmdWxsLCBh
bmQgdGhlbiB0byBjYWxsIG91dCB0byBDIHRvIGZsdXNoIGl0LiBUaGUgV3JpdGVCYXJyaWVyQnVm
ZmVyIHdpbGwgYWxzbyBiZSBmbHVzaGVkIHByaW9yIHRvIAorICAgICAgICBlYWNoIEVkZW5Db2xs
ZWN0aW9uLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OldyaXRlQmFycmllckJ1
ZmZlcik6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6fldyaXRlQmFycmllckJ1
ZmZlcik6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Zmx1c2gpOgorICAgICAg
ICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6V3JpdGVC
YXJyaWVyQnVmZmVyOjphZGQpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9m
ZnNldCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCk6CisgICAg
ICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25z
Lmg6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTEyLTE4ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXgg
bWFrZSBkaXN0Y2hlY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShy
ZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAorICAgIGRm
Zy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKICAgICBkZmcvREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKQEAgLTIxOSw2ICsyMjAsNyBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogICAgIGhlYXAvV2Vha0hhbmRs
ZU93bmVyLmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKKyAgICBoZWFwL1dyaXRlQmFycmllckJ1
ZmZlci5jcHAKICAgICBoZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwCiAKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4
Nyw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0YWNrTGF5b3V0UGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggXApAQCAtNTc2LDYgKzU3OCw4IEBAIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dl
YWtTZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldElubGluZXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2NvbmZpZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDI4LDYgKzQyOCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NB
Q29udmVyc2lvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTU0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1RodW5rcy5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAiIC8+CkBA
IC00NzEsNiArNDcyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0Js
b2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93
bmVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBv
cnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
ckFnZW50UmVnaXN0cnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIgLz4KQEAgLTk0OCw2ICs5NTAsNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2Uu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNl
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaHVua3MuaCIgLz4KQEAgLTEwMjYsNiArMTAyOSw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxXZWFrU2V0SW5saW5lcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50QmFzZS5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCIgLz4KQEAg
LTEzODQsNCArMTM4OCw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0
cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXph
dGlvbnNcbWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmls
dGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2MDY4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3OSw5IEBA
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtTZXQuY3BwIj4KICAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTExNDksNiArMTE1Miw5IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAiPgogICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVGh1bmtzLmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwv
Q2xDb21waWxlPgpAQCAtMTc1NCw2ICsxNzYwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcV2Vha1NldElubGluZXMuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4K
ICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVC
YXJyaWVyQnVmZmVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbElu
Y2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBv
cnQuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAg
LTMwNTcsNiArMzA2Niw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3Rh
Y2tMYXlvdXRQaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmgiPgorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVk
ZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmgiPgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzE4LDkgKzcxOCwxMyBAQAogCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pv
aW5lci5oICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVh
c2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkEyODI1Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsK
IAkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIy
NEQwMDBFMkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CisJCTJBNEVDOTBCMTg2
MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi87IH07CisJCTJBNEVDOTBDMTg2MEQ2QzIwMDk0Rjc4
MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJC
dWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkyQTZGNDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1
Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTdBNThFRTE4
MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi87IH07CiAJCTJBQUQ5NjRBMTg1Njk0MTcw
MDFGOTNCRSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUQ5NjQ5MTg1Njk0MTcwMDFGOTNCRSAvKiBS
ZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCAqLzsgfTsKKwkJMkFDQ0YzREUxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyog
REZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMkFDQ0YzREYxODVGRTI2
QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREQxODVGRTI2QjAwODNFMkFE
IC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovOyB9OwogCQkyQUQ4OTMyQjE3RTM4
NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVh
cEl0ZXJhdGlvblNjb3BlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTQxMzU5
Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8q
IERhdGVDb252ZXJzaW9uLmggKi87IH07CkBAIC0yMDIxLDkgKzIwMjUsMTMgQEAKIAkJMjYwMEI1
QTQxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBE
ZWxheWVkUmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
bGF5ZWRSZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE0RUM5
MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyQTRFQzkwQTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVC
YXJyaWVyQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFy
cmllckJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1
OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJB
N0E1OEVFMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVyR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3Bl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2l2ZUFsbG9jYXRpb25T
Y29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQUNDRjNEQzE4NUZFMjZCMDA4
M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHBh
dGggPSBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMkFDQ0YzREQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9y
ZUJhcnJpZXJFbGlzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9u
UGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEODkzMjkxN0UzODY4RjAw
NjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGli
IjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xpYnouZHlsaWI7IHNvdXJjZVRy
ZWUgPSBTREtST09UOyB9OwogCQk0NDkwOTdFRTBGOEY4MUI1MDA3NkEzMjcgLyogRmVhdHVyZURl
ZmluZXMueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURl
ZmluZXMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTExLDYgKzMx
MTksOCBAQAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkE0RUM5MDkxODYwRDZDMjAwOTRG
NzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCisJCQkJMkE0RUM5MEExODYwRDZDMjAw
OTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJCTE0ODE2RTE5MTU0Q0M1NkMw
MEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJMTQ4MTZFMUExNTRDQzU2QzAw
QjgwNTRDIC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZEOEEzMTExN0Q0MzI2QzAwQ0Ey
QzQwIC8qIENvZGVCbG9ja1NldC5jcHAgKi8sCkBAIC0zODQ3LDYgKzM4NTcsOCBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQkyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLywKKwkJCQkyQUNDRjNERDE4NUZFMjZCMDA4M0UyQUQg
LyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJCQkJQTc3QTQyMzYxN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJQTc3QTQyMzcxN0EwQkJG
RDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJCUE3MDREOEZFMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8sCkBAIC00MzYxLDYgKzQzNzMs
NyBAQAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3
RE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTIxODU2OTcw
OTAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTMyNDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2Vu
ZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKQEAgLTUwNTAs
NiArNTA2Myw3IEBACiAJCQkJMTRCRTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01h
cENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4
QUYgLyogV2Vha01hcERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBQ0NGM0RGMTg1RkUyNkIw
MDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBX
ZWFrUmFuZG9tLmggaW4gSGVhZGVycyAqLywKQEAgLTU3MDUsNiArNTcxOSw3IEBACiAJCQkJMEYy
NEU1NTUxN0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyog
SW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQUNDRjNERTE4NUZFMjZC
MDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjlEN0Q0MEVEMjEyODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI5RDkyRjBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2QTkwRUQwMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNTcxNyw2ICs1NzMyLDcgQEAKIAkJCQkwRkIxNEUxRTE4MTI0
QUNFMDA5QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVC
YXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFC
QjIxNyAvKiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVF
N0E4OTQwMDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0MxRThFNDExMkU3MkVGMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEhlYXAuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oVmFyaWFibGVzKSBcCiAgICAg
bWFjcm8oVHlwZWRBcnJheVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAg
bWFjcm8oQmFycmllclN0YXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKICAgICBtYWNy
byhJbnRlcm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZp
c2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMiBAQCBwdWJsaWM6CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBl
KTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpT
VmFsdWUpOwogICAgIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgaXNLbm93
bk5vdENlbGwoVCBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoZm9yTm9kZShub2RlKS5t
X3R5cGUgJiBTcGVjQ2VsbCk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldv
cmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQg
Y2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1ODgsNiAr
MTU4OCwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Y2FzZSBDaGVja1RpZXJVcEF0UmV0dXJuOgogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgQ29u
ZGl0aW9uYWxTdG9yZUJhcnJpZXI6IHsKKyAgICAgICAgaWYgKGlzS25vd25Ob3RDZWxsKG5vZGUt
PmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRz
KHRydWUpOworICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICAgICAgZmls
dGVyKG5vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICBjYXNlIENoZWNrVGllclVwQW5kT1NSRW50ZXI6CiAgICAgY2FzZSBMb29wSGlu
dDoKICAgICAgICAgLy8gV2UgcHJldGVuZCB0aGF0IGl0IGNhbiBleGl0IGJlY2F1c2UgaXQgbWF5
IHdhbnQgdG8gZ2V0IGFsbCBzdGF0ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVh
ZEZ1bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KK3ZvaWQgY2xvYmJlcml6ZUZvckFsbG9j
YXRpb24oUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYgd3JpdGUpCit7CisgICAgcmVh
ZChHQ1N0YXRlKTsKKyAgICByZWFkKEJhcnJpZXJTdGF0ZSk7CisgICAgd3JpdGUoR0NTdGF0ZSk7
CisgICAgd3JpdGUoQmFycmllclN0YXRlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVhZEZ1
bmN0b3IsIHR5cGVuYW1lIFdyaXRlRnVuY3Rvcj4KIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIFJlYWRGdW5jdG9yJiByZWFkLCBXcml0ZUZ1bmN0b3ImIHdyaXRlKQog
ewogICAgIC8vIFNvbWUgbm90ZXM6CkBAIC0xNjAsMTAgKzE2OSw5IEBAIHZvaWQgY2xvYmJlcml6
ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKIAogICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoK
ICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9jYXRp
b24ocmVhZCwgd3JpdGUpOwogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICB3cml0
ZShXYXRjaHBvaW50X2ZpcmUpOwotICAgICAgICByZWFkKEdDU3RhdGUpOwotICAgICAgICB3cml0
ZShHQ1N0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEZ1bmN0aW9u
UmVlbnRyeVdhdGNocG9pbnQ6CkBAIC0xNzMsOCArMTgxLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRl
VGhpczoKICAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsK
LSAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9u
KHJlYWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2FzZSBWYXJJbmplY3Rpb25X
YXRjaHBvaW50OgpAQCAtNDM1LDE1ICs0NDIsMTMgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgICAgICAKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdD
U3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFs
bG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0
ZXJmbHkpOwogICAgICAgICB3cml0ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFk
KEdDU3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZv
ckFsbG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAg
IGNhc2UgR2V0QnV0dGVyZmx5OgpAQCAtNDU2LDggKzQ2MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkp
OwogICAgICAgICB3cml0ZShKU0NlbGxfc3RydWN0dXJlKTsKICAgICAgICAgd3JpdGUoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAgICAgICAgd3JpdGUoR0NT
dGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdyaXRlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3Jh
Z2U6CkBAIC01NDQsMTUgKzU0OCwxMyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlCiAgICAgY2FzZSBOZXdGdW5jdGlvbk5vQ2hlY2s6CiAgICAgY2FzZSBOZXdGdW5j
dGlvbjoKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKLSAgICAgICAgcmVhZChHQ1N0
YXRlKTsKLSAgICAgICAgd3JpdGUoR0NTdGF0ZSk7CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxv
Y2F0aW9uKHJlYWQsIHdyaXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNl
IE5ld1R5cGVkQXJyYXk6CisgICAgICAgIGNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKHJlYWQsIHdy
aXRlKTsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAg
ICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgICAg
ICB3cml0ZShHQ1N0YXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOgogICAgICAgICAgICAgcmVhZChXb3JsZCk7CkBAIC02NDEsOCArNjQzLDcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBUaHJvd1Jl
ZmVyZW5jZUVycm9yOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwotICAgICAgICByZWFkKEdD
U3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFs
bG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgQ291bnRFeGVjdXRpb246CkBAIC02NTAsNiArNjUxLDEzIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChJbnRlcm5hbFN0YXRlKTsKICAg
ICAgICAgd3JpdGUoSW50ZXJuYWxTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgIGNhc2UgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgY2Fz
ZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOgorICAgICAgICByZWFkKEJhcnJpZXJTdGF0ZSk7
CisgICAgICAgIHdyaXRlKEJhcnJpZXJTdGF0ZSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwMCwyOCArMzAwLDM0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICghc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChzdGF0dXMubmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHN0YXR1cy5vZmZzZXQoKSkp
OwotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZU9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRh
KSwgY2hpbGRFZGdlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmll
ciwgY29kZU9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkp
OworICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSA+IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgY29kZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFu
c2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UobV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkp
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
R2V0QnV0dGVyZmx5LCBjb2RlT3JpZ2luLCBjaGlsZEVkZ2UpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3Rv
cmVCYXJyaWVyLCBjb2RlT3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UocmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGVUcmFuc2l0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29k
ZU9yaWdpbiwgCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbkRhdGEp
LCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBt
X2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgY29kZU9yaWdpbiwgT3BJbmZv
KHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIs
IGNvZGVPcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KGluZGV4SW5CbG9jaywg
cHV0U3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChtX2dyYXBoLm1fc3RvcmFn
ZUFjY2Vzc0RhdGEuc2l6ZSgpLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ29uZGl0aW9u
YWxTdG9yZUJhcnJpZXIsIGNvZGVPcmlnaW4sIAorICAgICAgICAgICAgICAgICAgICBFZGdlKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSwgS25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5u
b2RlKCksIFVudHlwZWRVc2UpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBT
dG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKICAgICAgICAgICAgICAgICBzdG9y
YWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBzdGF0dXMub2Zmc2V0KCk7CkBAIC0zMjksNyArMzM1LDIw
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGNhc2UgQ29uZGl0aW9u
YWxTdG9yZUJhcnJpZXI6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9pbnRlcnByZXRlci5pc0tu
b3duTm90Q2VsbChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRl
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTIsNiArNTUy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQz
MlVzZT4oY2hpbGQyKTsKKyAgICAgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2RlKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNTgzLDYgKzU4NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxSZWFs
TnVtYmVyVXNlPihub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZpeHVwSGVhcFN0b3JlKG5vZGUpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CkBAIC03NjcsMTggKzc2OSwzMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZTogeworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGZpeHVwSGVhcFN0b3JlKG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXh1cEhlYXBTdG9yZShub2Rl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRDbG9z
dXJlUmVnaXN0ZXJzOgotICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
U2tpcFRvcFNjb3BlOgogICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAg
IGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBHZXRTY29wZTog
ewogICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgZml4dXBIZWFwU3RvcmUobm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRC
eUlkRmx1c2g6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUNlbGwoKSkKQEAgLTgwMCwxMiArODE3LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlJZDoKKyAg
ICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OiB7CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeHVwSGVhcFN0b3JlKG5vZGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJs
ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgotICAgICAg
ICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgY2Fz
ZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OiB7CkBAIC04MzIsNiArODU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc1N0b3JhZ2VSZXN1bHQoKSkKICAgICAgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeHVw
SGVhcFN0b3JlKG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtODkxLDYgKzkxNCwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gZml4dXAg
cnVsZXMgZm9yIHRoZW0uCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
cjoKKyAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjogeworICAgICAgICAgICAgZml4dXBI
ZWFwU3RvcmUobm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgSXNTdHJpbmc6CiAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNw
ZWN1bGF0ZVN0cmluZygpKSB7CkBAIC05MTQsNyArOTQzLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBHZXRNeVNjb3BlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2Fz
ZSBOb3RpZnlXcml0ZToKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAg
IGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKQEAgLTkzMSw3ICs5NTksNiBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIElzT2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAg
ICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlv
bjoKICAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFy
Z3VtZW50czoKICAgICAgICAgY2FzZSBUZWFyT2ZmQXJndW1lbnRzOgpAQCAtOTUxLDYgKzk3OCw5
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgIGNhc2UgRXh0
cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOgorICAg
ICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgICAgIGNhc2UgRnVuY3Rp
b25SZWVudHJ5V2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBUeXBlZEFycmF5V2F0Y2hwb2ludDoK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUwMyw2ICsxNTMzLDEwNyBAQCBwcml2YXRlOgogICAg
ICAgICBlZGdlLnNldFVzZUtpbmQodXNlS2luZCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZml4
dXBIZWFwU3RvcmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIE5vZGUqIGJhcnJpZXJOb2Rl
ID0gMDsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgQXJyYXlQ
dXNoOiB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9ncmFw
aC5hZGROb2RlKFNwZWNOb25lLCBDb25kaXRpb25hbFN0b3JlQmFycmllciwgbV9jdXJyZW50Tm9k
ZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgVW50eXBl
ZFVzZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6
IHsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBD
b25kaXRpb25hbFN0b3JlQmFycmllciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAg
ICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIENlbGxVc2UpLCBFZGdlKG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSwgVW50eXBlZFVzZSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUaGUgYmFycmllciBtdXN0IGdvIGFmdGVyIHRoZXNlIG5v
ZGVzIGJlY2F1c2UgdGhleSBhbGxvY2F0ZSB0aGVpciBuZXcgcHJvcGVydHkgc3RvcmFnZSBmaXJz
dCBhbmQgdGhlbiBkbyB0aGUgc3RvcmUuCisgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZTogeworICAgICAg
ICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFN0b3JlQmFycmll
ciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgRWRnZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOworICAgICAgICAgICAgZml4dXBOb2Rl
KGJhcnJpZXJOb2RlKTsKKyAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChtX2luZGV4
SW5CbG9jayArIDEsIGJhcnJpZXJOb2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICBiYXJyaWVyTm9k
ZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBtX2N1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luLCAKKyAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgS25vd25DZWxsVXNlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CisgICAgICAgICAgICBOb2RlKiBnbG9iYWxPYmplY3RO
b2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShtX2luZGV4SW5CbG9jaywgU3BlY05vbmUs
IFdlYWtKU0NvbnN0YW50LCBub2RlLT5jb2RlT3JpZ2luLCBPcEluZm8obV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+Y29kZU9yaWdpbikpKTsKKyAgICAgICAgICAgIGJhcnJpZXJOb2RlID0g
bV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBDb25kaXRpb25hbFN0b3JlQmFycmllciwgbV9jdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgRWRnZShnbG9iYWxPYmplY3RO
b2RlLCBLbm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgVW50eXBlZFVz
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFRlYXJP
ZmZBY3RpdmF0aW9uOiB7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9k
ZShTcGVjTm9uZSwgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgbV9jdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIFVu
dHlwZWRVc2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2Fz
ZSBQdXRCeU9mZnNldDogeworICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5v
ZGUoU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBtX2N1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luLCAKKyAgICAgICAgICAgICAgICBFZGdlKG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgS25v
d25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDMoKS5ub2RlKCksIFVudHlwZWRVc2UpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFy
OiB7CisgICAgICAgICAgICBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwg
Q29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG1fY3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAorICAg
ICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpLCBF
ZGdlKG5vZGUtPmNoaWxkMygpLm5vZGUoKSwgVW50eXBlZFVzZSkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBj
YXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6IHsKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgICAgICAgICAgVXNlS2luZCBiYXNlVXNlS2luZCA9IEtub3duQ2VsbFVzZTsK
KyNlbHNlCisgICAgICAgICAgICBVc2VLaW5kIGJhc2VVc2VLaW5kID0gQ2VsbFVzZTsKKyNlbmRp
ZgorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCkudHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgICAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAg
ICAgICAgICAgICAgIEVkZ2UgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgICAgICAgICAgRWRnZSB2YWx1ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7
CisgICAgICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUs
IENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCAKKyAg
ICAgICAgICAgICAgICAgICAgRWRnZShiYXNlLm5vZGUoKSwgYmFzZVVzZUtpbmQpLCBFZGdlKHZh
bHVlLm5vZGUoKSwgVW50eXBlZFVzZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGZpeHVwTm9kZShiYXJyaWVyTm9k
ZSk7CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChtX2luZGV4SW5CbG9jaywgYmFycmll
ck5vZGUpOworICAgIH0KKwogICAgIHZvaWQgZml4SW50RWRnZShFZGdlJiBlZGdlKQogICAgIHsK
ICAgICAgICAgTm9kZSogbm9kZSA9IGVkZ2Uubm9kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDYsNyArNjA2LDE5IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgQVNTRVJUKGhhc1BoaSgpKTsKICAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxOb2RlKj4obV9vcEluZm8pOwogICAgIH0KLSAgICAKKworICAgIGJvb2wgaXNTdG9y
ZUJhcnJpZXIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2Ug
U3RvcmVCYXJyaWVyOgorICAgICAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOgorICAg
ICAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIGJvb2wgaGFzSWRlbnRpZmllcigpCiAgICAgewogICAgICAgICBz
d2l0Y2ggKG9wKCkpIHsKQEAgLTE1NTUsNiArMTU2Nyw3IEBAIHB1YmxpYzoKICAgICB1bmlvbiB7
CiAgICAgICAgIE5vZGUqIHJlcGxhY2VtZW50OwogICAgICAgICBCYXNpY0Jsb2NrKiBvd25lcjsK
KyAgICAgICAgYm9vbCBuZWVkc0JhcnJpZXI7CiAgICAgfSBtaXNjOwogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTYwNjgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOTEsNiArMjkxLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICAv
KiBDaGVja3MgdGhlIHdhdGNoZG9nIHRpbWVyLiBJZiB0aGUgdGltZXIgaGFzIGZpcmVkLCB3ZSBP
U1IgZXhpdCB0byB0aGUgKi8gXAogICAgIC8qIGJhc2VsaW5lIEpJVCB0byByZWRvIHRoZSB3YXRj
aGRvZyB0aW1lciBjaGVjaywgYW5kIHNlcnZpY2UgdGhlIHRpbWVyLiAqLyBcCiAgICAgbWFjcm8o
Q2hlY2tXYXRjaGRvZ1RpbWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgLyogV3JpdGUgYmFy
cmllcnMgISAqL1wKKyAgICBtYWNybyhTdG9yZUJhcnJpZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
KyAgICBtYWNybyhDb25kaXRpb25hbFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwK
IAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBm
b3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVt
IHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR09TUkV4
aXRDb21waWxlckNvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKQEAgLTQ0OCw5
ICs0NDksMTkgQEAgdm9pZCBPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KGNvbnN0IAogICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihHUFJJbmZvOjpyZWdUMCwgQXNzZW1ibHlIZWxwZXJzOjpw
YXlsb2FkRm9yKG9wZXJhbmQpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAvLyAxMSkg
QW5kIGZpbmlzaC4KLSAgICAKKworI2lmIEVOQUJMRShHR0MpIAorICAgIC8vIDExKSBXcml0ZSBi
YXJyaWVyIHRoZSBvd25lciBleGVjdXRhYmxlIGJlY2F1c2Ugd2UncmUganVtcGluZyBpbnRvIGEg
ZGlmZmVyZW50IGJsb2NrLgorICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW47IDsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXIpIHsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IG1faml0LmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOworICAgICAgICBtX2ppdC5tb3ZlKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsgCisgICAgICAgIFNwZWN1bGF0aXZlSklUOjpv
c3JXcml0ZUJhcnJpZXIobV9qaXQsIEdQUkluZm86Om5vbkFyZ0dQUjAsIEdQUkluZm86Om5vbkFy
Z0dQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICAv
LyAxMikgQW5kIGZpbmlzaC4KICAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQobV9qaXQsIGV4aXQp
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaCIKKyNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKIApAQCAt
NDAyLDkgKzQwMywxOSBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3Qg
CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3Iob3BlcmFuZCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8v
IDExKSBBbmQgZmluaXNoLgotICAgIAorCisjaWYgRU5BQkxFKEdHQykgCisgICAgLy8gMTEpIFdy
aXRlIGJhcnJpZXIgdGhlIG93bmVyIGV4ZWN1dGFibGUgYmVjYXVzZSB3ZSdyZSBqdW1waW5nIGlu
dG8gYSBkaWZmZXJlbnQgYmxvY2suCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBl
eGl0Lm1fY29kZU9yaWdpbjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcikgeworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9q
aXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbik7CisgICAgICAgIG1faml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSksIEdQUkluZm86Om5vbkFyZ0dQUjApOyAKKyAgICAgICAgU3BlY3VsYXRpdmVK
SVQ6Om9zcldyaXRlQmFycmllcihtX2ppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6
bm9uQXJnR1BSMSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgICAgIGlmICghY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKwor
ICAgIC8vIDEyKSBBbmQgZmluaXNoLgogICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChtX2ppdCwg
ZXhpdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2
aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgIkRGR1NTQUNvbnZlcnNp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1NTQUxvd2VyaW5nUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdTdGFja0xheW91dFBoYXNlLmgiCisjaW5jbHVkZSAiREZHU3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlLmgiCiAjaW5jbHVkZSAiREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIgogI2luY2x1ZGUg
IkRGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmgiCkBAIC0yMjMsNiArMjI0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocgogCiAgICAgZGZnLm1fZml4cG9pbnRTdGF0ZSA9IEZpeHBvaW50
Q29udmVyZ2VkOwogCisgICAgcGVyZm9ybVN0b3JlQmFycmllckVsaXNpb24oZGZnKTsKICAgICBw
ZXJmb3JtU3RvcmVFbGltaW5hdGlvbihkZmcpOwogICAgIAogICAgIC8vIElmIHdlJ3JlIGRvaW5n
IHZhbGlkYXRpb24sIHRoZW4gcnVuIHNvbWUgYW5hbHlzZXMsIHRvIGdpdmUgdGhlbSBhbiBvcHBv
cnR1bml0eQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDYsNiArNTQ2LDkgQEAgcHJpdmF0ZToKIAogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgLy8gVGhlc2UgZ2V0IGlnbm9yZWQgYmVjYXVzZSB0aGV5IGRvbid0
IHJldHVybiBhbnl0aGluZy4KKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgIGNh
c2UgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0
aE51bGxDaGVjazoKICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2MDY4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDEsNiArMjQxLDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgogICAg
IGNhc2UgSW50NTJUb1ZhbHVlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgQ29u
ZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OgogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9pbnQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9u
IDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwxMCArMjAwLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2
YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BS
LCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEdQUlJlZyBzY3Jh
dGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kIHB1dEtpbmQsIEpJVENv
bXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0KQogewotICAgIHdyaXRlQmFycmllcihiYXNlUGF5
bG9hZEdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFj
Y2Vzcywgc2NyYXRjaEdQUik7Ci0gICAgCiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAg
ICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0ZXJzKCksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkoYmFzZVBheWxvYWRHUFIpLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2Fk
R1BSKSwKQEAgLTExMTIsNiArMTExMCwyMyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2
ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYg
dmFsdWVFZGdlKQoreworI2lmIEVOQUJMRShHR0MpCisgICAgQVNTRVJUKCFpc0tub3duTm90Q2Vs
bCh2YWx1ZUVkZ2Uubm9kZSgpKSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1ZUVkZ2Up
OworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaDIodGhpcyk7CisKKyAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUudGFnR1BS
KCksIHZhbHVlRWRnZSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGJhc2VFZGdlKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVFZGdlKTsK
KyNlbmRpZgorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwpAQCAtMjYxMSwxMiArMjYyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChI
ZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVn
LCB2YWx1ZVRhZ1JlZywgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2Ny
YXRjaC5ncHIoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAg
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChub2RlLCBiYXNlLCBwcm9wZXJ0eSwgdmFsdWUsIHZh
bHVlUGF5bG9hZFJlZywgdmFsdWVUYWdSZWcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTI2MzMsMTMgKzI2NDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFnUmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAor
CiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIGNoaWxkNCk7CiAgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKQEAgLTI4MTksMTEg
KzI4MjMsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgICAg
IEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAKLSAgICAgICAg
ICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmll
cihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3Ro
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mVmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlMzIodmFsdWVUYWdH
UFIsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7CkBAIC0yODcyLDExICsyODcxLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0g
dmFsdWUudGFnR1BSKCk7CiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFs
dWUucGF5bG9hZEdQUigpOwogCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJF
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
LSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUt
PmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwg
c3RvcmFnZUxlbmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxl
bmd0aE9mZnNldCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAgICAg
Ly8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCkBAIC0zNjczLDE5ICszNjY3LDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewotICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHJlZ2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2hSZWdpc3Rlcih0aGlzKTsKLSAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUu
Z3ByKCk7CisKICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgICAgIEdQ
UlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOworCisgICAgICAgIHNwZWN1bGF0
ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRh
Z0dQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIo
KSAqIHNpemVvZihSZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3Jp
cHRvciwgYXNCaXRzLnRhZykpKTsKICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVBheWxvYWRH
UFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkg
KiBzaXplb2YoUmVnaXN0ZXIpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy5wYXlsb2FkKSkpOwotICAgICAgICB3cml0ZUJhcnJpZXIoc2NvcGVHUFIsIHZh
bHVlVGFnR1BSLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVCYXJyaWVyRm9yVmFyaWFibGVBY2Nlc3Ms
IHNjcmF0Y2hHUFIpOwogICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMzg4MiwxMSArMzg3NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAg
ICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICAvLyBNdXN0
IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmllciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRp
b24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCBub2Rl
LT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVyRm9y
R2VuZXJpY0FjY2Vzcyk7Ci0jZW5kaWYKLSAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CkBAIC0zOTQ4LDE5ICszOTM2LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSNp
ZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotI2VuZGlmCiAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CiAKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2
YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBh
eWxvYWRHUFIoKTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5H
KQotICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWVUYWdHUFIsIG5vZGUtPmNo
aWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKKworICAgICAg
ICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQyKCkpOwogCiAgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOwogICAgICAgICAKQEAgLTM5ODEs
MTIgKzM5NjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0gICAgICAg
IGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgpOwotCi0gICAgICAgIGNhY2hlZFB1dEJ5
SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQUiwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQ
Uiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwg
Tm90RGlyZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNl
R1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CiAgICAgICAgIAotICAgICAgICBub1Jlc3VsdChu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MDAwLDEyICszOTgwLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVQ
YXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAg
ICB2YWx1ZS51c2UoKTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBi
YXNlR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBzY3JhdGNoR1BSLCBub2RlLT5p
ZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CiAKLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2Rl
LT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBub2Rl
LT5jaGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3Qp
OwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQw
MjMsMTIgKzQwMDAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAKICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
Y29kZU9yaWdpbiksIHZhbHVlLnRhZ0dQUigpLCBub2RlLT5jaGlsZDEoKSwgV3JpdGVCYXJyaWVy
Rm9yVmFyaWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotICAgICAgICB9CiAKICAgICAgICAgLy8g
RklYTUU6IGlmIHdlIGhhcHBlbiB0byBoYXZlIGEgc3BhcmUgcmVnaXN0ZXIgLSBhbmQgX09OTFlf
IGlmIHdlIGhhcHBlbiB0byBoYXZlCiAgICAgICAgIC8vIGEgc3BhcmUgcmVnaXN0ZXIgLSBhIGdv
b2Qgb3B0aW1pemF0aW9uIHdvdWxkIGJlIHRvIHB1dCB0aGUgcmVnaXN0ZXIgcG9pbnRlciBpbnRv
CkBAIC00Njk0LDYgKzQ2NjUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBjb21waWxlSW4obm9kZSk7CiAgICAgICAgIGJyZWFrOwogCisgICAg
Y2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoKKyAg
ICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6IHsKKyAgICAgICAgY29tcGlsZVN0b3Jl
QmFycmllcihub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6IHsKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0
ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgYnJlYWs7CkBAIC00NzUyLDYg
KzQ3MzAsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICB1c2Uobm9kZSk7CiB9CiAKKyNpZiBFTkFCTEUoR0dDKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdl
IHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRD
b21waWxlcjo6SnVtcCBpc05vdENlbGw7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5u
b2RlKCkpKQorICAgICAgICBpc05vdENlbGwgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQg
PSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKKyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpOworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworCisgICAgaWYg
KCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygm
bV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgR1BSUmVnIHZhbHVlVGFnR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGw7Cisg
ICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwg
PSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKKworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0
LCBvd25lcik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lciwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKworICAg
IGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorCiAjZW5kaWYKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDYsMTAgKzIwNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZEdldEJ5SWQo
Q29kZU8KICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdp
biwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVn
IHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwg
SklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRQdXRCeUlkKENvZGVPcmlnaW4gY29kZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJl
ZyB2YWx1ZUdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQpCiB7Ci0g
ICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCB2YWx1ZVVzZSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2hHUFIpOwotCiAgICAgSklUUHV0QnlJZEdlbmVyYXRv
ciBnZW4oCiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBjb2RlT3JpZ2luLCB1c2VkUmVnaXN0
ZXJzKCksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAogICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBzY3JhdGNoR1BSLCBmYWxzZSwKQEAgLTE0
NzMsNiArMTQ3MSwyMyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVy
CiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUJhc2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKQor
eworI2lmIEVOQUJMRShHR0MpCisgICAgQVNTRVJUKCFpc0tub3duTm90Q2VsbCh2YWx1ZUVkZ2Uu
bm9kZSgpKSk7CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdl
KTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCB2YWx1ZUVkZ2UpOworICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CisKKyAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIHZhbHVlRWRnZSwg
c2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGJhc2VFZGdlKTsKKyAgICBVTlVTRURfUEFSQU0odmFsdWVFZGdlKTsKKyNlbmRpZgorfQorCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSogbm9kZSkKIHsK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAt
MjkwNywxMSArMjkyMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIHZhbHVlUmVnLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyAmJiBIZWFwOjppc1dyaXRl
QmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIo
KSwgY2hpbGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7
Ci0gICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgY2hpbGQ0KTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKQEAgLTI5ODcsMTEgKzI5OTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNX
cml0ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZVJlZywgdmFsdWUu
Z3ByKCksIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3By
KCkpOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIGNoaWxkNCk7CiAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CkBAIC0zMDkyLDcgKzMwOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LAogICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJhc2VSZWcsIEFyZ3VtZW50czo6b2Zmc2V0T2ZTbG93QXJndW1lbnRE
YXRhKCkpKSk7Ci0gICAgCisKICAgICAgICAgICAgIG1faml0Lm1vdmUocHJvcGVydHlSZWcsIHNj
cmF0Y2gyUmVnKTsKICAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2gy
UmVnLCBzY3JhdGNoMlJlZyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKApAQCAtMzE5Mywx
MSArMzE5OCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpJbnQzMiAmJiBIZWFw
Ojppc1dyaXRlQmFycmllckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2
YWx1ZUdQUiwgbm9kZS0+Y2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
Y3JhdGNoLmdwcigpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9m
VmVjdG9yTGVuZ3RoKCkpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpKTsKQEAgLTMyNDIsMTEgKzMyNDIsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJSZWcgdmFs
dWVHUFIgPSB2YWx1ZS5ncHIoKTsKIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJy
aWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2Rl
LT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3ByKCks
IHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgICAg
IC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgpAQCAtMzk3OSwxOCArMzk3NCwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIFB1dENsb3N1cmVWYXI6IHsKLSAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBTdG9yYWdl
T3BlcmFuZCByZWdpc3RlcnModGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoUmVnaXN0ZXIodGhpcyk7CiAKLSAgICAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2Nv
cGUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZWdpc3RlcnNHUFIgPSByZWdpc3RlcnMuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgICAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHNjcmF0Y2hSZWdpc3Rlci5ncHIoKTsKKworICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogCiAgICAgICAgIG1faml0LnN0b3JlNjQodmFsdWVHUFIs
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHJlZ2lzdGVyc0dQUiwgbm9kZS0+dmFyTnVtYmVyKCkgKiBz
aXplb2YoUmVnaXN0ZXIpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVH
UFIsIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRj
aEdQUik7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC00MTc5LDE0ICs0MTcxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3Ry
dWN0dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCks
IG5vZGUpOwogCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwogICAgICAgICAKLSAgICAgICAgCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJf
UFJPRklMSU5HKQotICAgICAgICAvLyBNdXN0IGFsd2F5cyBlbWl0IHRoaXMgd3JpdGUgYmFycmll
ciBhcyB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gaXRzZWxmIHJlcXVpcmVzIGl0Ci0gICAgICAg
IHdyaXRlQmFycmllcihiYXNlR1BSLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSwgV3JpdGVCYXJyaWVyRm9yR2VuZXJpY0FjY2Vzcyk7Ci0jZW5kaWYKLSAgICAg
ICAgCiAgICAgICAgIG1faml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSkpOwogICAg
ICAgICAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC00MjQ1LDIzICs0MjMzLDIwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJ
TkcpCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQy
KCkpOwotI2VuZGlmCiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0g
ICAgICAgIAotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgd3Jp
dGVCYXJyaWVyKGJhc2UuZ3ByKCksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDMoKSwgV3JpdGVC
YXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MpOwotI2VuZGlmCisKKyAgICAgICAgc3BlY3VsYXRlKG5v
ZGUsIG5vZGUtPmNoaWxkMigpKTsKIAogICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgc3RvcmFn
ZUFjY2Vzc0RhdGEgPSBtX2ppdC5ncmFwaCgpLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKICAgICAgICAgCiAgICAgICAgIG1faml0LnN0b3JlNjQo
dmFsdWVHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIG9mZnNldFJlbGF0aXZl
VG9CYXNlKHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCkpKTsKLSAgICAgICAgCisKICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQyNzUsMTIgKzQyNjAs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2
YWx1ZS51c2UoKTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNl
R1BSLCB2YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3RE
aXJlY3QpOwogCi0gICAgICAgIGNhY2hlZFB1dEJ5SWQobm9kZS0+Y29kZU9yaWdpbiwgYmFzZUdQ
UiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigpLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVy
TnVtYmVyKCksIE5vdERpcmVjdCk7Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBub1Jlc3VsdChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC00MjkzLDEyICs0Mjc1LDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgYmFzZS51c2UoKTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0KLSAg
ICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQUiwg
bm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwgRGly
ZWN0KTsKKyAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2
YWx1ZUdQUiwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOwog
Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQzMTMs
MTQgKzQyOTIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAK
ICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoSGVhcDo6aXNXcml0
ZUJhcnJpZXJFbmFibGVkKCkpIHsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRo
aXMpOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICB3cml0ZUJhcnJpZXIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPmNvZGVPcmlnaW4pLCB2YWx1ZS5ncHIoKSwgbm9kZS0+Y2hpbGQxKCksIFdyaXRlQmFy
cmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoUmVnKTsKLSAgICAgICAgfQotICAgICAgICAK
KwogICAgICAgICBtX2ppdC5zdG9yZTY0KHZhbHVlLmdwcigpLCBub2RlLT5yZWdpc3RlclBvaW50
ZXIoKSk7CiAKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC00OTczLDYgKzQ5NDUsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgIGNhc2UgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBTdG9y
ZUJhcnJpZXJXaXRoTnVsbENoZWNrOiB7CisgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogI2lmIEVOQUJMRShGVExfSklUKSAgICAgICAg
CiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDogewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuYnJhbmNoQWRkMzIoCkBAIC01MDUzLDYgKzUwMzIsMzYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB1c2Uobm9kZSk7
CiB9CiAKKyNpZiBFTkFCTEUoR0dDKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEdQUlJlZyBvd25lckdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcg
c2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05v
dENlbGw7CisgICAgaWYgKCFpc0tub3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBp
c05vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0NjQoSklUQ29tcGlsZXI6Ok5vblplcm8sIHZhbHVl
R1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BS
LCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3du
ZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5r
KCZtX2ppdCk7CisKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAg
ICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Ondy
aXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzTm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisg
ICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVy
bywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxl
cjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwg
b3duZXIpOworICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXIsIHNjcmF0Y2gxLCBz
Y3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisKKyAgICBp
ZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbC5saW5r
KCZtX2ppdCk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKEdHQykKKwogI2VuZGlmCiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAi
V3JpdGVCYXJyaWVyQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtOTA5LDUzICs5MTAsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBuCiAgICAgfQogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIs
IEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BSKTsKLSAg
ICBVTlVTRURfUEFSQU0odmFsdWVHUFIpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7Ci0K
LSAgICBpZiAoaXNLbm93bk5vdENlbGwodmFsdWVVc2Uubm9kZSgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVy
OjplbWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVz
ZUtpbmQpKTsKLSNlbmRpZgotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIo
R1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kIHVzZUtp
bmQsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQotewotICAgIFVOVVNFRF9QQVJB
TShvd25lckdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICBVTlVTRURfUEFSQU0o
c2NyYXRjaDEpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMik7Ci0gICAgVU5VU0VEX1BBUkFN
KHVzZUtpbmQpOwotICAgIAotICAgIGlmIChIZWFwOjppc01hcmtlZCh2YWx1ZSkpCi0gICAgICAg
IHJldHVybjsKLQotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRD
b21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRl
ckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVC
YXJyaWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaCkKLXsKLSAgICBVTlVTRURf
UEFSQU0ob3duZXIpOwotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BB
UkFNKHNjcmF0Y2gpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLQotICAgIGlmIChpc0tu
b3duTm90Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFC
TEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3VudCht
X2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwotI2Vu
ZGlmCi19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2RlKQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwpAQCAt
NDMyOSwyNiArNDI4MywyNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQ
cm9wCiAgICAgfQogICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKICAgICAgICAgCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKKyAgICBH
UFJSZWcgc2NyYXRjaEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgCiAgICAgQVNTRVJU
KCFub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKICAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09
IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aCA9CiAgICAg
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZSgKLSAgICAgICAgICAgIFRydXN0ZWRJbW0zMihp
bml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXplb2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSKTsK
KyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CiAKLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUik7Cisg
ICAgbV9qaXQuYWRkUHRyKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5n
SGVhZGVyKSksIHNjcmF0Y2hHUFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBzY3JhdGNoR1BSKSk7Ci0gICAg
ICAgIAotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAgICAgICAKLSAgICBz
dG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIsIG5vZGUpOworICAgICAgICBzbG93UGF0aENhbGwoc2xv
d1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxD
YXBhY2l0eSwgc2NyYXRjaEdQUjEpKTsKKworICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIx
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpKTsKKworICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5vZGUpOwogfQogCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBu
b2RlKQpAQCAtNDM2Nyw2ICs0MzIxLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWFsbG9jYXRlUHIKICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9y
YWdlLCByZXN1bHQuZ3ByKCksIGJhc2VHUFIsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpOwog
ICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90TnVsbCA9IG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgbm90TnVsbC5saW5rKCZtX2ppdCk7CisK
ICAgICAgICAgc3RvcmFnZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtNDM4MiwyMCArNDM0MCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUmVhbGxvY2F0ZVByCiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gc2NyYXRjaDIuZ3By
KCk7CiAgICAgICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KLSAgICAgICAg
ZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKFRydXN0ZWRJbW0zMihuZXdTaXplKSwgc2NyYXRjaEdQ
UjIpOworICAgICAgICBlbWl0QWxsb2NhdGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMyKG5ld1Np
emUpLCBzY3JhdGNoR1BSMSk7CiAKLSAgICBtX2ppdC5hZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgc2NyYXRjaEdQUjIpOworICAgIG1faml0
LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikp
LCBzY3JhdGNoR1BSMSk7CiAgICAgICAgIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICBzbG93UGF0aENhbGwoc2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBzY3JhdGNoR1BSMiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSkpOwotICAg
IC8vIFdlIGhhdmUgc2NyYXRjaEdQUjIgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjEgPSBzY3Jh
dGNoCisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIHNjcmF0Y2hHUFIxLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUp
KSk7CisKKyAgICAvLyBXZSBoYXZlIHNjcmF0Y2hHUFIxID0gbmV3IHN0b3JhZ2UsIHNjcmF0Y2hH
UFIyID0gc2NyYXRjaAogICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IDA7IG9mZnNldCA8IHN0
YXRpY19jYXN0PHB0cmRpZmZfdD4ob2xkU2l6ZSk7IG9mZnNldCArPSBzaXplb2Yodm9pZCopKSB7
Ci0gICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xkU3RvcmFnZUdQ
UiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIyLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2
b2lkKikpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2xk
U3RvcmFnZUdQUiwgLShvZmZzZXQgKyBzaXplb2YoSlNWYWx1ZSkgKyBzaXplb2Yodm9pZCopKSks
IHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIxLCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSAr
IHNpemVvZih2b2lkKikpKSk7CiAgICAgfQotICAgIG1faml0LnN0b3JlUHRyKHNjcmF0Y2hHUFIy
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpKTsKLSAgICAKLSAgICBzdG9yYWdlUmVzdWx0KHNjcmF0Y2hHUFIyLCBub2RlKTsKKyAgICBt
X2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7CisKKyAgICBzdG9yYWdlUmVzdWx0KHNjcmF0
Y2hHUFIxLCBub2RlKTsKIH0KIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjp0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKEdQUlRlbXBvcmFyeSYgdGVtcG9yYXJ5LCBBcnJheU1vZGUgYXJyYXlN
b2RlKQpAQCAtNTQ1MSw2ICs1NDEwLDI0OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsaW5rQnJh
bmNoZXMoKQogICAgIH0KIH0KIAorI2lmIEVOQUJMRShHR0MpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlU3RvcmVCYXJyaWVyKE5vZGUqIG5vZGUpCit7CisgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CisgICAgY2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjogeworICAgICAgICBjb21w
aWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgU3RvcmVCYXJyaWVyOiB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKKyAgICAKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHNj
cmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgU3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CisgICAg
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdWxsID0g
bV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpaZXJvLCBiYXNlLmdwcigpKTsKKyAgICAg
ICAgd3JpdGVCYXJyaWVyKGJhc2UuZ3ByKCksIHNjcmF0Y2gxLmdwcigpLCBzY3JhdGNoMi5ncHIo
KSk7CisjZWxzZQorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bGwgPSBtX2ppdC5icmFu
Y2gzMihKSVRDb21waWxlcjo6RXF1YWwsIGJhc2UudGFnR1BSKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSk7CisgICAgICAgIHdyaXRlQmFycmllcihiYXNlLnBheWxvYWRH
UFIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKKyNlbmRpZgorICAgICAgICBp
c051bGwubGluaygmbV9qaXQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKworSklUQ29tcGlsZXI6Okp1bXAgU3Bl
Y3VsYXRpdmVKSVQ6OmdlbmVyaWNXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJl
ZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgaml0Lm1v
dmUob3duZXIsIHNjcmF0Y2gxKTsKKyAgICBqaXQubW92ZShvd25lciwgc2NyYXRjaDIpOworCisg
ICAgaml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihNYXJrZWRCbG9jazo6
YmxvY2tNYXNrKSwgc2NyYXRjaDEpOworICAgIGppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIofk1hcmtlZEJsb2NrOjpibG9ja01hc2spLCBzY3JhdGNoMik7CisKKyAgICAv
LyBTaGlmdCBpbmRleAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaml0LnJzaGlmdDY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTWFya2VkQmxvY2s6OmF0b21TaGlmdEFtb3VudCArIE1h
cmtlZEJsb2NrOjptYXJrQnl0ZVNoaWZ0QW1vdW50KSwgc2NyYXRjaDIpOworI2Vsc2UKKyAgICBq
aXQucnNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YXRv
bVNoaWZ0QW1vdW50ICsgTWFya2VkQmxvY2s6Om1hcmtCeXRlU2hpZnRBbW91bnQpLCBzY3JhdGNo
Mik7CisjZW5kaWYKKworICAgIC8vIEVtaXQgbG9hZCBhbmQgYnJhbmNoCisgICAgcmV0dXJuIGpp
dC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgTWFya2Vk
QmxvY2s6Om9mZnNldE9mTWFya3MoKSkpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxh
dGl2ZUpJVDo6Z2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgSlNDZWxsKiBv
d25lcikKK3sKKyAgICBNYXJrZWRCbG9jayogYmxvY2sgPSBNYXJrZWRCbG9jazo6YmxvY2tGb3Io
b3duZXIpOworICAgIHNpemVfdCBtYXJrSW5kZXggPSAocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+
KG93bmVyKSAmIH5NYXJrZWRCbG9jazo6YmxvY2tNYXNrKSA+PiAoTWFya2VkQmxvY2s6OmF0b21T
aGlmdEFtb3VudCArIE1hcmtlZEJsb2NrOjptYXJrQnl0ZVNoaWZ0QW1vdW50KTsKKyAgICB1aW50
OF90KiBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4ocmVpbnRlcnByZXRfY2Fz
dDxjaGFyKj4oYmxvY2spICsgTWFya2VkQmxvY2s6Om9mZnNldE9mTWFya3MoKSkgKyBtYXJrSW5k
ZXg7CisgICAgcmV0dXJuIGppdC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhZGRyZXNzKSk7Cit9CisKK01hY3JvQXNzZW1i
bGVyOjpDYWxsIFNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRj
aDIpCit7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKKyAgICAvLyBMb2FkIFdy
aXRlQmFycmllckJ1ZmZlciBmcm9tIEhlYXAKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIqIHdyaXRl
QmFycmllckJ1ZmZlciA9ICZqaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAg
ICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlciksIHNjcmF0Y2gxKTsK
KyAgICAvLyBMb2FkIGN1cnJlbnRJbmRleAorICAgIGppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0
KCkpLCBzY3JhdGNoMik7CisgICAgLy8gQnJhbmNoIGlmIGN1cnJlbnRJbmRleCA+PSBjYXBhY2l0
eQorICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gaml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjYXBhY2l0eU9mZnNldCgpKSk7CisKKyAg
ICAvLyBTdG9yZSBuZXcgY3VycmVudEluZGV4CisgICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgc2NyYXRjaDIpOworICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQo
KSkpOworCisgICAgLy8gTG9hZCBidWZmZXIKKyAgICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpidWZmZXJPZmZzZXQoKSks
IHNjcmF0Y2gxKTsKKyAgICAvLyBTdG9yZSBjZWxsIGludG8gYnVmZmVyLiBXZSB1c2UgYW4gb2Zm
c2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0
Y2gyLgorICAgIGppdC5zdG9yZVB0cihjZWxsLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNj
cmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgIC8vIEp1bXAgdG8gZG9uZQorICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOworICAgIC8vIExpbmsgZnJvbSBicmFu
Y2gKKyAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworCisgICAgLy8gQ2FsbCBDIHNsb3cgcGF0
aC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3Rl
cnM7ICsraSkKKyAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoaSksICZq
aXQudm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJCdWZmZXJbaV0pOworCisjaWYgQ1BVKFg4NikK
KyAgICBqaXQucHVzaChzY3JhdGNoMSk7CisgICAgaml0LnB1c2goc2NyYXRjaDEpOworI2VuZGlm
CisKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGNlbGwpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBqaXQuY2FsbCgpOworCisjaWYgQ1BVKFg4NikKKyAgICBq
aXQucG9wKHNjcmF0Y2gxKTsKKyAgICBqaXQucG9wKHNjcmF0Y2gxKTsKKyNlbmRpZgorCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspCisgICAg
ICAgIGppdC5sb2FkUHRyKCZqaXQudm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJCdWZmZXJbaV0s
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSkpOworCisgICAgLy8gTGluayBEb25lCisgICAgZG9uZS5s
aW5rKCZqaXQpOworCisgICAgcmV0dXJuIGNhbGw7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoR1BSUmVnIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VSVChzY3JhdGNoMSAhPSBzY3JhdGNoMik7Cisg
ICAgV3JpdGVCYXJyaWVyQnVmZmVyKiB3cml0ZUJhcnJpZXJCdWZmZXIgPSAmbV9qaXQudm0oKS0+
aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
d3JpdGVCYXJyaWVyQnVmZmVyKSwgc2NyYXRjaDEpOworICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5k
ZXhPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVz
aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gy
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpj
YXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNj
cmF0Y2gyKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSkp
OworCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwg
V3JpdGVCYXJyaWVyQnVmZmVyOjpidWZmZXJPZmZzZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAvLyBX
ZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9pZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRl
ZCAxIHRvIHNjcmF0Y2gyLgorICAgIG1faml0LnN0b3JlUHRyKGNlbGwsIE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIs
IHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2pp
dCk7CisKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBjZWxsKTsKKyAg
ICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworCisgICAgZG9uZS5saW5r
KCZtX2ppdCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJC
dWZmZXIoSlNDZWxsKiBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sK
KyAgICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgIFdyaXRlQmFycmllckJ1ZmZl
ciogd3JpdGVCYXJyaWVyQnVmZmVyID0gJm1faml0LnZtKCktPmhlYXAubV93cml0ZUJhcnJpZXJC
dWZmZXI7CisgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlciks
IHNjcmF0Y2gxKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpLCBzY3JhdGNo
Mik7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQoKSkpOwor
CisgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgbV9qaXQu
c3RvcmUzMihzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRl
QmFycmllckJ1ZmZlcjo6Y3VycmVudEluZGV4T2Zmc2V0KCkpKTsKKworICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaDEsIFdyaXRlQmFycmllckJ1ZmZlcjo6
YnVmZmVyT2Zmc2V0KCkpLCBzY3JhdGNoMSk7CisgICAgLy8gV2UgdXNlIGFuIG9mZnNldCBvZiAt
c2l6ZW9mKHZvaWQqKSBiZWNhdXNlIHdlIGFscmVhZHkgYWRkZWQgMSB0byBzY3JhdGNoMi4KKyAg
ICBtX2ppdC5zdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNlbGwpLCBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHNjcmF0Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBzdGF0
aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgbmVlZFRvRmx1c2gubGluaygmbV9qaXQpOwor
CisgICAgLy8gQ2FsbCBDIHNsb3cgcGF0aAorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKElu
dmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJp
ZXJCdWZmZXIsIGNlbGwpOworICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVnIHNjcmF0
Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1h
cmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2Ny
YXRjaDIpOworICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7Cit9CisK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6Om9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwg
R1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBV
TlVTRURfUEFSQU0oaml0KTsKKyAgICBVTlVTRURfUEFSQU0ob3duZXIpOworICAgIFVOVVNFRF9Q
QVJBTShzY3JhdGNoMSk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKKyAgICBBU1NFUlQo
b3duZXIgIT0gc2NyYXRjaDEpOworICAgIEFTU0VSVChvd25lciAhPSBzY3JhdGNoMik7CisKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFy
cmllcihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGpp
dC5zdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpLCAmaml0LnZtKCktPndyaXRlQmFycmll
clJlZ2lzdGVyQnVmZmVyW2ldKTsKKworICAgIC8vIFdlIG5lZWQgdGhlc2UgZXh0cmEgc2xvdHMg
YmVjYXVzZSBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUgd2lsbCB1c2UgcG9rZSBvbiB4ODYu
CisjaWYgQ1BVKFg4NikKKyAgICBqaXQucHVzaChzY3JhdGNoMSk7CisgICAgaml0LnB1c2goc2Ny
YXRjaDEpOworICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyNlbmRpZgorCisgICAgaml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShvd25lcik7CisgICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIpKSwgc2Ny
YXRjaDEpOworICAgIGppdC5jYWxsKHNjcmF0Y2gxKTsKKworI2lmIENQVShYODYpCisgICAgaml0
LnBvcChzY3JhdGNoMSk7CisgICAgaml0LnBvcChzY3JhdGNoMSk7CisgICAgaml0LnBvcChzY3Jh
dGNoMSk7CisjZW5kaWYKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0LmxvYWRQdHIoJmppdC52bSgpLT53cml0ZUJhcnJp
ZXJSZWdpc3RlckJ1ZmZlcltpXSwgR1BSSW5mbzo6dG9SZWdpc3RlcihpKSk7IAorCisgICAgZGVm
aW5pdGVseU5vdE1hcmtlZC5saW5rKCZqaXQpOworfQorCitNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBT
cGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3du
ZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VSVChvd25l
ciAhPSBzY3JhdGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKworICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVy
KGppdCwgb3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCA9IHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoaml0LCBvd25lciwgc2NyYXRjaDEs
IHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJmppdCk7CisgICAgcmV0
dXJuIGNhbGw7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcg
b3duZXJHUFIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1f
aml0LCBvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBzdG9yZVRvV3JpdGVCYXJy
aWVyQnVmZmVyKG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIGRlZmluaXRlbHlO
b3RNYXJrZWQubGluaygmbV9qaXQpOworfQorI2Vsc2UKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTdG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKK3sKKyAgICBERkdfTk9ERV9ET19UT19DSElM
RFJFTihtX2ppdC5ncmFwaCgpLCBub2RlLCBzcGVjdWxhdGUpOworICAgIG5vUmVzdWx0KG5vZGUp
OworfQorI2VuZGlmIC8vIEVOQUJMRShHR0MpCisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw5ICsyODksMjIgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
c1N0aWxsVmFsaWQobV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CiAgICAgfQogCi0gICAgdm9p
ZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFs
dWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoR1BSMSA9IEludmFsaWRH
UFJSZWcsIEdQUlJlZyBzY3JhdGNoR1BSMiA9IEludmFsaWRHUFJSZWcpOwotICAgIHZvaWQgd3Jp
dGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwgSlNDZWxsKiB2YWx1ZSwgV3JpdGVCYXJyaWVyVXNl
S2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHNjcmF0Y2hH
UFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIoSlNDZWxsKiBvd25l
ciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBH
UFJSZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnKTsKKyNpZiBFTkFCTEUoR0dDKQorICAg
IHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEND
YWxsSGVscGVycyYgaml0LCBHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOworICAgIHZvaWQgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgc3RvcmVUb1dyaXRl
QmFycmllckJ1ZmZlcihKU0NlbGwqLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7
CisKKyAgICBzdGF0aWMgSklUQ29tcGlsZXI6Okp1bXAgZ2VuZXJpY1dyaXRlQmFycmllcihDQ2Fs
bEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3Jh
dGNoMik7CisgICAgc3RhdGljIEpJVENvbXBpbGVyOjpKdW1wIGdlbmVyaWNXcml0ZUJhcnJpZXIo
Q0NhbGxIZWxwZXJzJiBqaXQsIEpTQ2VsbCogb3duZXIpOworICAgIHN0YXRpYyB2b2lkIG9zcldy
aXRlQmFycmllcihDQ2FsbEhlbHBlcnMmLCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKTsKKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgd3JpdGVC
YXJyaWVyKENDYWxsSGVscGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJS
ZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lciwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJyaWVyKEdQUlJl
ZyBvd25lciwgSlNDZWxsKiB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIp
OworCisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVk
Z2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAgICB2b2lk
IHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyNlbmRpZgorICAgIHZvaWQgY29t
cGlsZVN0b3JlQmFycmllcihOb2RlKik7CiAKICAgICBzdGF0aWMgR1BSUmVnIHNlbGVjdFNjcmF0
Y2hHUFIoR1BSUmVnIHByZXNlcnZlMSA9IEludmFsaWRHUFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTIg
PSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmUzID0gSW52YWxpZEdQUlJlZywgR1BSUmVn
IHByZXNlcnZlNCA9IEludmFsaWRHUFJSZWcpCiAgICAgewpAQCAtNzAwLDE0ICs3MTMsMTYgQEAg
cHVibGljOgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29k
ZU9yaWdpbiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1bHRHUFIsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwotICAgIHZvaWQg
Y2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZhbHVlLCBFZGdl
IHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6
SnVtcCgpKTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2Us
IEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGls
ZXI6Okp1bXAoKSk7CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHZvaWQgY2FjaGVkR2V0
QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BSUmVnIGJhc2VQYXls
b2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiwgdW5z
aWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQg
PSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7
Ci0gICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdlIHZhbHVl
VXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
KTsKKyAgICB2b2lkIGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2Fk
R1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEdQUlJlZyBz
Y3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwogI2VuZGlmCiAg
ICAgCiAgICAgdm9pZCBjb21waWxlSW4oTm9kZSopOwogICAgIAorICAgIHZvaWQgY29tcGlsZUJh
c2VWYWx1ZVN0b3JlQmFycmllcihFZGdlJiBiYXNlRWRnZSwgRWRnZSYgdmFsdWVFZGdlKTsKKwog
ICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFu
ZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5vZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0g
ZmFsc2UpOwogICAgIGJvb2wgbm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChOb2RlKiwgRWRnZSBv
cGVyYW5kLCBib29sIGludmVydCA9IGZhbHNlKTsKQEAgLTEwNTksNiArMTA3NCwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlv
bik7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9w
ZXJhdGlvbl9FQyBvcGVyYXRpb24sIEpTQ2VsbCogYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKGFyZzEpKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9
CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
SWNmIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW1QdHIoaW5saW5lQ2FsbEZyYW1lKSk7CkBAIC0xMDc1LDEyICsxMDk2LDIx
IEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFy
ZzEsIFRydXN0ZWRJbW0zMihhcmcyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQotCiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oVl9KSVRPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEpTQ2VsbCog
YXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBUcnVzdGVkSW1tUHRyKGFyZzIpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKKyAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBKU0NlbGwqIGFyZzEs
IEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSksIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KIAogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVZ3cyBvcGVyYXRpb24sIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKICAgICB7CkBAIC0xMzQwLDcgKzEz
NzAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmcxLCBhcmcyLCBhcmczKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VKUFAgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIsIHZvaWQqIHBvaW50ZXIpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgVHJ1c3RlZEltbVB0cihwb2ludGVyKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlclNldC5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIFN0b3JlQmFycmllckVsaXNpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFz
ZShncmFwaCwgInN0b3JlIGJhcnJpZXIgZWxpc2lvbiIpCisgICAgICAgICwgbV9jdXJyZW50Qmxv
Y2soMCkKKyAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQorICAgIHsKKyAgICAgICAgbV9nY0Ns
b2JiZXJTZXQuYWRkKEdDU3RhdGUpOworICAgIH0KKworICAgIGJvb2wgY291bGRDYXVzZUdDKE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gd3JpdGVzT3ZlcmxhcChtX2dyYXBoLCBu
b2RlLCBtX2djQ2xvYmJlclNldCk7CisgICAgfQorCisgICAgYm9vbCBhbGxvY2F0ZXNGcmVzaE9i
amVjdChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICBj
YXNlIE5ld0FycmF5V2l0aFNpemU6CisgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAg
ICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbm90aWNlRnJlc2hPYmplY3QoSGFz
aFNldDxOb2RlKj4mIGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBBU1NFUlQoYWxsb2NhdGVzRnJlc2hPYmplY3Qobm9kZSkpOworICAgICAgICBkb250TmVlZEJh
cnJpZXJzLmFkZChub2RlKTsKKyAgICB9CisKKyAgICBOb2RlKiBnZXRCYXNlT2ZTdG9yZShOb2Rl
KiBiYXJyaWVyTm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXJyaWVyTm9kZS0+aXNTdG9y
ZUJhcnJpZXIoKSk7CisgICAgICAgIHJldHVybiBiYXJyaWVyTm9kZS0+Y2hpbGQxKCkubm9kZSgp
OworICAgIH0KKworICAgIGJvb2wgc2hvdWxkQmVFbGlkZWQoSGFzaFNldDxOb2RlKj4mIGRvbnRO
ZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+aXNT
dG9yZUJhcnJpZXIoKSk7CisgICAgICAgIHJldHVybiBkb250TmVlZEJhcnJpZXJzLmNvbnRhaW5z
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorCisgICAgdm9pZCBlbGlkZUJhcnJpZXIo
Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5pc1N0b3JlQmFycmllcigp
KTsKKyAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgIH0KKworICAgIHZvaWQg
Y2xlYXJWYXJpYWJsZUJhcnJpZXJzKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2dyYXBoLm1fdmFyaWFibGVBY2Nlc3NEYXRhLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9ncmFwaC5tX3ZhcmlhYmxlQWNjZXNzRGF0YVtpXS5jaGVja0FuZFNldE5lZWRzQmFy
cmllcih0cnVlKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZU5vZGUoSGFzaFNldDxOb2RlKj4m
IGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAoY291bGRD
YXVzZUdDKG5vZGUpKSB7CisgICAgICAgICAgICBkb250TmVlZEJhcnJpZXJzLmNsZWFyKCk7Cisg
ICAgICAgICAgICBjbGVhclZhcmlhYmxlQmFycmllcnMoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChhbGxvY2F0ZXNGcmVzaE9iamVjdChub2RlKSkKKyAgICAgICAgICAgIG5vdGljZUZyZXNo
T2JqZWN0KGRvbnROZWVkQmFycmllcnMsIG5vZGUpOworCisgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFN0b3JlQmFycmllcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoc2hv
dWxkQmVFbGlkZWQoZG9udE5lZWRCYXJyaWVycywgbm9kZSkpIHsKKyAgICAgICAgICAgIGVsaWRl
QmFycmllcihub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXRCYXNlT2ZTdG9yZShub2RlKTsKKyAgICAgICAgaWYgKCFiYXNlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChkb250TmVlZEJhcnJpZXJzLmNvbnRh
aW5zKGJhc2UpKSB7CisgICAgICAgICAgICBBU1NFUlQoIWJhc2UtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5uZWVkc0JhcnJpZXIoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBkb250TmVlZEJhcnJpZXJzLmFkZChiYXNlKTsKKyAgICB9CisKKyAgICBib29sIGhh
bmRsZUxvY2FsKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0xvY2FsKG1fZ3JhcGgpKTsKKyAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAg
ICAgIGlmICghbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm5lZWRzQmFycmllcigpKQorICAg
ICAgICAgICAgICAgIGRvbnROZWVkQmFycmllcnMuYWRkKG5vZGUpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICBj
YXNlIE1vdkhpbnRBbmRDaGVjazoKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAg
ICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICBpZiAoZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhjaGlsZCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHZhcmlhYmxlLT5jaGVja0FuZFNldE5lZWRzQmFycmllcihmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm4gdmFyaWFibGUtPmNoZWNrQW5kU2V0TmVlZHNCYXJyaWVyKHRy
dWUpOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFuZGxlQmxvY2soQmFzaWNCbG9j
ayogYmxvY2spCisgICAgeworICAgICAgICBIYXNoU2V0PE5vZGUqPiBkb250TmVlZEJhcnJpZXJz
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8
IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRJ
bmRleCA9IGluZGV4SW5CbG9jazsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0xvY2FsKG1fZ3JhcGgp
KSB7CisgICAgICAgICAgICAgICAgaGFuZGxlTG9jYWwoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGhhbmRsZU5vZGUoZG9udE5lZWRCYXJyaWVycywgbm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFtX25vZGVTdGF0ZUF0VGFpbC5jb250YWlucyhibG9jaykpIHsKKyAgICAgICAgICAgIEhh
c2hTZXQ8Tm9kZSo+IG5ld1NldDsKKyAgICAgICAgICAgIG1fbm9kZVN0YXRlQXRUYWlsLnNldChi
bG9jaywgbmV3U2V0KTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGl0ZXIgPSBtX25vZGVTdGF0
ZUF0VGFpbC5maW5kKGJsb2NrKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhKGRvbnROZWVkQmFy
cmllcnMgPT0gaXRlci0+dmFsdWUpOworICAgICAgICBpdGVyLT52YWx1ZS5zd2FwKGRvbnROZWVk
QmFycmllcnMpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgcnVu
KCkKKyAgICB7CisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChj
aGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1f
Z3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRC
bG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBoYW5kbGVCbG9jayhtX2N1cnJlbnRCbG9jayk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIENsb2Ji
ZXJTZXQgbV9nY0Nsb2JiZXJTZXQ7CisgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgSGFzaFNldDxO
b2RlKj4+IG1fbm9kZVN0YXRlQXRUYWlsOworICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2Nr
OworICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworfTsKKyAgICAKK2Jvb2wgcGVyZm9ybVN0
b3JlQmFycmllckVsaXNpb24oR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgU3RvcmUgQmFycmllciBFbGlzaW9uIFBoYXNlIik7CisgICAgcmV0
dXJuIHJ1blBoYXNlPFN0b3JlQmFycmllckVsaXNpb25QaGFzZT4oZ3JhcGgpOworfQorCisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Vf
aAorI2RlZmluZSBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2VfaAorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCitib29sIHBlcmZvcm1TdG9yZUJh
cnJpZXJFbGlzaW9uKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDE2
MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgICAgICAsIG1f
Y2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKGZhbHNlKQogICAgICAgICAsIG1faXNQcm9maXRhYmxl
VG9VbmJveChmYWxzZSkKICAgICAgICAgLCBtX2lzTG9hZGVkRnJvbShmYWxzZSkKKyAgICAgICAg
LCBtX25lZWRzQmFycmllcih0cnVlKQogICAgICAgICAsIG1fZG91YmxlRm9ybWF0U3RhdGUoRW1w
dHlEb3VibGVGb3JtYXRTdGF0ZSkKICAgICB7CiAgICAgICAgIGNsZWFyVm90ZXMoKTsKQEAgLTc0
LDYgKzc1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fc3RydWN0dXJlQ2hlY2tIb2lzdGluZ0Zh
aWxlZChmYWxzZSkKICAgICAgICAgLCBtX2NoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZChmYWxzZSkK
ICAgICAgICAgLCBtX2lzUHJvZml0YWJsZVRvVW5ib3goZmFsc2UpCisgICAgICAgICwgbV9uZWVk
c0JhcnJpZXIodHJ1ZSkKICAgICAgICAgLCBtX2RvdWJsZUZvcm1hdFN0YXRlKEVtcHR5RG91Ymxl
Rm9ybWF0U3RhdGUpCiAgICAgewogICAgICAgICBjbGVhclZvdGVzKCk7CkBAIC0zNTQsNiArMzU2
LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBGbHVzaGVkQXQoZmx1c2hGb3Jt
YXQoKSwgbWFjaGluZUxvY2FsKCkpOwogICAgIH0KKworICAgIGJvb2wgbmVlZHNCYXJyaWVyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX25lZWRzQmFycmllcjsKKyAgICB9CisKKyAgICBib29s
IGNoZWNrQW5kU2V0TmVlZHNCYXJyaWVyKGJvb2wgbmVlZHNCYXJyaWVyKQorICAgIHsKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBuZWVkc0JhcnJpZXIgIT0gbV9uZWVkc0JhcnJpZXI7CisgICAgICAg
IG1fbmVlZHNCYXJyaWVyID0gbmVlZHNCYXJyaWVyOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVm
ZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCkBAIC0zNzQsNiArMzg4
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fY2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkOwogICAg
IGJvb2wgbV9pc1Byb2ZpdGFibGVUb1VuYm94OwogICAgIGJvb2wgbV9pc0xvYWRlZEZyb207Cisg
ICAgYm9vbCBtX25lZWRzQmFycmllcjsKIAogICAgIGZsb2F0IG1fdm90ZXNbMl07IC8vIFVzZWQg
cHJpbWFyaWx5IGZvciBkb3VibGUgdm90aW5nIGJ1dCBtYXkgYmUgcmV1c2VkIGZvciBvdGhlciBw
dXJwb3Nlcy4KICAgICBEb3VibGVGb3JtYXRTdGF0ZSBtX2RvdWJsZUZvcm1hdFN0YXRlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjks
NiArMjY5LDkgQEAgSGVhcDo6SGVhcChWTSogdm0sIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICwg
bV9jb3B5VmlzaXRvcihtX3NoYXJlZERhdGEpCiAgICAgLCBtX2hhbmRsZVNldCh2bSkKICAgICAs
IG1faXNTYWZlVG9Db2xsZWN0KGZhbHNlKQorI2lmIEVOQUJMRShHR0MpCisgICAgLCBtX3dyaXRl
QmFycmllckJ1ZmZlcigxMjgpCisjZW5kaWYKICAgICAsIG1fdm0odm0pCiAgICAgLCBtX2xhc3RH
Q0xlbmd0aCgwKQogICAgICwgbV9sYXN0Q29kZURpc2NhcmRUaW1lKFdURjo6bW9ub3RvbmljYWxs
eUluY3JlYXNpbmdUaW1lKCkpCkBAIC05OTYsNCArOTk5LDE0IEBAIHZvaWQgSGVhcDo6ZGVjcmVt
ZW50RGVmZXJyYWxEZXB0aEFuZEdDSWYKICAgICBjb2xsZWN0SWZOZWNlc3NhcnlPckRlZmVyKCk7
CiB9CiAKK3ZvaWQgSGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoSlNDZWxsKiBjZWxsKQor
eworI2lmIEVOQUJMRShHR0MpCisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuZmx1c2goKnRoaXMp
OworICAgIG1fd3JpdGVCYXJyaWVyQnVmZmVyLmFkZChjZWxsKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGNlbGwpOworI2VuZGlmCit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAj
aW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9yLmgiCiAjaW5jbHVkZSAi
V2Vha0hhbmRsZU93bmVyLmgiCisjaW5jbHVkZSAiV3JpdGVCYXJyaWVyQnVmZmVyLmgiCiAjaW5j
bHVkZSAiV3JpdGVCYXJyaWVyU3VwcG9ydC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CkBAIC03Nyw2ICs3OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIZWFwKTsKICAgICBwdWJsaWM6
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKSVQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBERkc6OlNw
ZWN1bGF0aXZlSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwog
ICAgICAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRp
YXRlIHZhbHVlcwogICAgICAgICBzdGF0aWMgSGVhcCogaGVhcChjb25zdCBKU0NlbGwqKTsKQEAg
LTkzLDEwICs5NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIHZvaWQgc2V0
TWFya2VkKGNvbnN0IHZvaWQqKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1dyaXRlQmFycmll
ckVuYWJsZWQoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2Vs
bCopOwogICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29uc3QgSlNDZWxsKiwgSlNW
YWx1ZSk7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0NlbGwqLCBK
U0NlbGwqKTsKICAgICAgICAgc3RhdGljIHVpbnQ4X3QqIGFkZHJlc3NPZkNhcmRGb3IoSlNDZWxs
Kik7CiAKKyAgICAgICAgdm9pZCBmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwqKTsKKwog
ICAgICAgICBIZWFwKFZNKiwgSGVhcFR5cGUpOwogICAgICAgICB+SGVhcCgpOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGxhc3RDaGFuY2VUb0ZpbmFsaXplKCk7CkBAIC0yODQsNiAr
Mjg5LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBtX2lzU2Fm
ZVRvQ29sbGVjdDsKIAorI2lmIEVOQUJMRShHR0MpCisgICAgICAgIFdyaXRlQmFycmllckJ1ZmZl
ciBtX3dyaXRlQmFycmllckJ1ZmZlcjsKKyNlbmRpZgorCiAgICAgICAgIFZNKiBtX3ZtOwogICAg
ICAgICBkb3VibGUgbV9sYXN0R0NMZW5ndGg7CiAgICAgICAgIGRvdWJsZSBtX2xhc3RDb2RlRGlz
Y2FyZFRpbWU7CkBAIC0zNzAsNiArMzc5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAg
ICAgfQogCisgICAgaW5saW5lIHZvaWQgSGVhcDo6d3JpdGVCYXJyaWVyKGNvbnN0IEpTQ2VsbCop
CisgICAgeworICAgICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6Y291bnRXcml0ZUJhcnJpZXIo
KTsKKyAgICB9CisKICAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3QgSlND
ZWxsKiwgSlNDZWxsKikKICAgICB7CiAgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3Vu
dFdyaXRlQmFycmllcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9jay5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03MywxMiArNzMsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbVNp
emUgPSA4OyAvLyBieXRlcworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaGlmdEFt
b3VudCA9IDQ7IC8vIGxvZ18yKGF0b21TaXplKSBGSVhNRTogQ2hhbmdlIGF0b21TaXplIHRvIDE2
LgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrU2l6ZSA9IDY0ICogS0I7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8g
YmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uCiAKICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgYXRvbU1hc2sgPSBhdG9tc1BlckJsb2NrIC0gMTsKIAorICAgICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1hcmtCeXRlU2hpZnRBbW91bnQgPSAzOyAvLyBsb2dfMih3
b3JkIHNpemUgZm9yIG1fbWFya3MpIEZJWE1FOiBDaGFuZ2Ugd29yZCBzaXplIGZvciBtX21hcmtz
IHRvIHVpbnQ4X3QuCisKICAgICAgICAgc3RydWN0IEZyZWVDZWxsIHsKICAgICAgICAgICAgIEZy
ZWVDZWxsKiBuZXh0OwogICAgICAgICB9OwpAQCAtMTY4LDYgKzE3MSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoTGl2
ZUNlbGwoRnVuY3RvciYpOwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9p
ZCBmb3JFYWNoRGVhZENlbGwoRnVuY3RvciYpOwogCisgICAgICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZNYXJrcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXJrZWRCbG9jaywgbV9t
YXJrcyk7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRv
bUFsaWdubWVudE1hc2sgPSBhdG9tU2l6ZSAtIDE7IC8vIGF0b21TaXplIG11c3QgYmUgYSBwb3dl
ciBvZiB0d28uCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmll
ckJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXcml0ZUJh
cnJpZXJCdWZmZXIuaCIKKworI2luY2x1ZGUgIkdDQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkhl
YXAuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK1dyaXRlQmFycmllckJ1ZmZlcjo6V3JpdGVCYXJyaWVyQnVmZmVyKHVu
c2lnbmVkIGNhcGFjaXR5KQorICAgIDogbV9jdXJyZW50SW5kZXgoMCkKKyAgICAsIG1fY2FwYWNp
dHkoY2FwYWNpdHkpCisgICAgLCBtX2J1ZmZlcihzdGF0aWNfY2FzdDxKU0NlbGwqKj4oZmFzdE1h
bGxvYyhzaXplb2YoSlNDZWxsKikgKiBjYXBhY2l0eSkpKQoreworfQorCitXcml0ZUJhcnJpZXJC
dWZmZXI6On5Xcml0ZUJhcnJpZXJCdWZmZXIoKQoreworICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsK
KyAgICBtX2J1ZmZlciA9IDA7Cit9CisKK3ZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjpmbHVzaChI
ZWFwJiBoZWFwKQoreworICAgIEFTU0VSVChtX2N1cnJlbnRJbmRleCA8PSBtX2NhcGFjaXR5KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY3VycmVudEluZGV4OyArK2kpCisgICAgICAg
IGhlYXAud3JpdGVCYXJyaWVyKG1fYnVmZmVyW2ldKTsKKyAgICBtX2N1cnJlbnRJbmRleCA9IDA7
Cit9CisKK3ZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjpyZXNldCgpCit7CisgICAgbV9jdXJyZW50
SW5kZXggPSAwOworfQorCit2b2lkIFdyaXRlQmFycmllckJ1ZmZlcjo6YWRkKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0xPT0tTX1ZBTElEKGNlbGwpOworICAgIEFTU0VS
VChtX2N1cnJlbnRJbmRleCA8IG1fY2FwYWNpdHkpOworICAgIG1fYnVmZmVyW21fY3VycmVudElu
ZGV4KytdID0gY2VsbDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdyaXRlQmFy
cmllckJ1ZmZlcl9oCisjZGVmaW5lIFdyaXRlQmFycmllckJ1ZmZlcl9oCisKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcDsKK2NsYXNz
IEpTQ2VsbDsKKworbmFtZXNwYWNlIEZUTCB7IGNsYXNzIExvd2VyREZHVG9MTFZNOyB9CisKK2Ns
YXNzIFdyaXRlQmFycmllckJ1ZmZlciB7CisgICAgZnJpZW5kIGNsYXNzIEZUTDo6TG93ZXJERkdU
b0xMVk07CitwdWJsaWM6CisgICAgV3JpdGVCYXJyaWVyQnVmZmVyKHVuc2lnbmVkIGNhcGFjaXR5
KTsKKyAgICB+V3JpdGVCYXJyaWVyQnVmZmVyKCk7CisKKyAgICB2b2lkIGFkZChKU0NlbGwqKTsK
KyAgICB2b2lkIGZsdXNoKEhlYXAmKTsKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBzdGF0aWMg
cHRyZGlmZl90IGN1cnJlbnRJbmRleE9mZnNldCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKFdyaXRlQmFycmllckJ1ZmZlciwgbV9jdXJyZW50SW5kZXgpOworICAgIH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FwYWNpdHlPZmZzZXQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXcml0ZUJhcnJpZXJCdWZmZXIsIG1fY2FwYWNpdHkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3QgYnVmZmVyT2Zmc2V0KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoV3JpdGVCYXJyaWVyQnVmZmVyLCBtX2J1ZmZlcik7
CisgICAgfQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OworICAgIHVu
c2lnbmVkIG1fY2FwYWNpdHk7CisgICAgSlNDZWxsKiogbV9idWZmZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFdyaXRlQmFycmllckJ1ZmZlcl9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2MDY4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2OTYsNiArMTY5NiwzOSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uVGhyb3coRXhlY1N0CiAgICAgZ2VuZXJpY1Vud2luZCh2bSwgZXhlYywgZXhjZXB0aW9uVmFs
dWUpOwogfQogCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJC
dWZmZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0qIHZtID0gJmV4
ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Cisg
ICAgdm0tPmhlYXAuZmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIoY2VsbCk7Cit9CisKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIGNlbGwpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgZXhlYy0+aGVhcCgpLT53cml0ZUJhcnJp
ZXIoY2VsbCk7Cit9CisKKy8vIE5COiBXZSBkb24ndCBpbmNsdWRlIHRoZSB2YWx1ZSBhcyBwYXJ0
IG9mIHRoZSBiYXJyaWVyIGJlY2F1c2UgdGhlIHdyaXRlIGJhcnJpZXIgZWxpc2lvbgorLy8gcGhh
c2UgaW4gdGhlIERGRyBvbmx5IHRyYWNrcyB3aGV0aGVyIHRoZSBvYmplY3QgYmVpbmcgc3RvcmVk
IHRvIGhhcyBiZWVuIGJhcnJpZXJlZC4gSXQgCisvLyB3b3VsZCBiZSBtdWNoIG1vcmUgY29tcGxp
Y2F0ZWQgdG8gdHJ5IHRvIG1vZGVsIHRoZSB2YWx1ZSBiZWluZyBzdG9yZWQgYXMgd2VsbC4KK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsKQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwor
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIEhlYXA6Ondy
aXRlQmFycmllcihjZWxsKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluaXRH
bG9iYWxDb25zdChFeGVjU3RhdGUqIGV4ZWMsIEluc3RydWN0aW9uKiBwYykKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5yKHBjWzJdLnUub3BlcmFuZCkuanNW
YWx1ZSgpOworICAgIHBjWzFdLnUucmVnaXN0ZXJQb2ludGVyLT5zZXQoKnZtLCBleGVjLT5jb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0KCksIHZhbHVlKTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9O
IGxvb2t1cEV4Y2VwdGlvbkhhbmRsZXIoRXhlY1N0YXRlKiBleGVjKQogewogICAgIFZNKiB2bSA9
ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDcgQEAgdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJ
T04gKCpWX0pJVE9wZXJhdGlvbl9FQ0lDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSWRlbnRpZmll
ciosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FQ0NJY2YpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCosIElubGluZUNh
bGxGcmFtZSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
Q0pKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1BTUFMpKEV4
ZWNTdGF0ZSosIEpTQ2VsbCosIHZvaWQqLCBzaXplX3QsIHZvaWQqLCBzaXplX3QpOwogdHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ1opKEV4ZWNTdGF0ZSosIEpT
Q2VsbCosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJh
dGlvbl9FQ0MpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FSWRKWikoRXhlY1N0YXRlKiwgSWRlbnRpZmll
ciosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKQEAgLTI3Nyw2ICsyNzgsMTMgQEAgRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRGcm9tU2NvcGUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIGJ5
dGVjb2RlUEMpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRU
b1Njb3BlKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKiBieXRlY29kZVBDKSBXVEZfSU5URVJOQUw7
CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlcihF
eGVjU3RhdGUqLCBKU0NlbGwqKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Xcml0ZUJh
cnJpZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7Cit2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVW5jb25kaXRpb25hbFdyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25PU1JXcml0ZUJhcnJpZXIoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Jbml0R2xvYmFsQ29uc3Qo
RXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKKwogfSAvLyBleHRlcm4gIkMiCiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
NjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJEYXRlSW5zdGFuY2VDYWNoZS5oIgog
I2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkludHJpbnNpYy5oIgogI2luY2x1ZGUgIkpJVFRo
dW5rcy5oIgpAQCAtMzg3LDYgKzM4OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25z
dCBDbGFzc0luZm8qIGNvbnN0IGpzQXJyYXlDbGFzc0luZm87CiAgICAgICAgIGNvbnN0IENsYXNz
SW5mbyogY29uc3QganNGaW5hbE9iamVjdENsYXNzSW5mbzsKIAorICAgICAgICB2b2lkKiB3cml0
ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyc107CisKICAg
ICAgICAgUmV0dXJuQWRkcmVzc1B0ciBleGNlcHRpb25Mb2NhdGlvbjsKICAgICAgICAgSlNWYWx1
ZSBob3N0Q2FsbFJldHVyblZhbHVlOwogICAgICAgICBFeGVjU3RhdGUqIG5ld0NhbGxGcmFtZVJl
dHVyblZhbHVlOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MDc4NCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMTItMTggIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGhh
dmUgYSBzZXBhcmF0ZSBTdG9yZUJhcnJpZXIgbm9kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NTMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkZWQgYW4gI2RlZmlu
ZSBmb3IgRU5BQkxFKEdHQykgd2hpY2ggd2lsbCBiZSB1c2VkIGZvciBsYW5kaW5nIHRoaW5ncyBy
ZWxhdGVkIHRvIEdlbkdDLgorCiAyMDEzLTEyLTE2ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFw
cGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBVcHN0cmVhbSBXZWJDb3JlL2h0bWwgY2hhbmdlcwpJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODQsNiArNzg0LDExIEBACiAjZGVmaW5lIEVOQUJM
RV9WRVJCT1NFX1ZBTFVFX1BST0ZJTEUgMAogI2VuZGlmCiAKKy8qIEdlbmVyYXRpb25hbCBjb2xs
ZWN0b3IgZm9yIEpTQyAqLworI2lmICFkZWZpbmVkKEVOQUJMRV9HR0MpCisjZGVmaW5lIEVOQUJM
RV9HR0MgMAorI2VuZGlmCisKIC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJzIHVzaW5n
IHNhbXBsaW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28KICAgIHNldCBFTkFCTEVfU0FNUExJ
TkdfQ09VTlRFUlMgdG8gMS4gKi8KICNpZiAhZGVmaW5lZChFTkFCTEVfV1JJVEVfQkFSUklFUl9Q
Uk9GSUxJTkcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219570</attachid>
            <date>2013-12-18 14:19:24 -0800</date>
            <delta_ts>2013-12-18 16:35:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131218141918.patch</filename>
            <type>text/plain</type>
            <size>105639</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExOCBA
QAorMjAxMy0xMi0xOCAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgor
CisgICAgICAgIERGRyBzaG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGlu
IHByZXBhcmF0aW9uIGZvciBHZW5HQy4gV2UgdXNlIGEgc2VwYXJhdGUgU3RvcmVCYXJyaWVyIG5v
ZGUgaW5zdGVhZCBvZiBtYWtpbmcgdGhlbSBpbXBsaWNpdGx5IAorICAgICAgICBwYXJ0IG9mIG90
aGVyIG5vZGVzIHNvIHRoYXQgaXQncyBlYXNpZXIgdG8gcnVuIGFuYWx5c2VzIG9uIHRoZW0sIGUu
Zy4gZm9yIHRoZSBTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuIAorICAgICAgICBUaGV5IGFyZSBp
bnNlcnRlZCBkdXJpbmcgdGhlIGZpeHVwIHBoYXNlLiBJbml0aWFsbHkgdGhleSBkbyBub3QgZ2Vu
ZXJhdGUgYW55IGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEhlYXAu
aDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmlzS25vd25Ob3RDZWxsKToKKyAgICAgICAgKiBk
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjo6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemVGb3JBbGxvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6REZH
OjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KTogV2hlbmV2ZXIgd2UgaW5zZXJ0IG5ldyBub2RlcyB0aGF0IHJlcXVpcmUgU3RvcmVCYXJyaWVy
cywKKyAgICAgICAgd2UgaGF2ZSB0byBhZGQgdGhvc2UgbmV3IFN0b3JlQmFycmllcnMgdG9vLiBJ
dCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgYW5kIAor
ICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlIG5vZGVzIHJlcXVpcmUgdGhlaXIgU3Rv
cmVCYXJyaWVycyB0byBjb21lIGFmdGVyIHRoZW0gc2luY2UgdGhleSBhbGxvY2F0ZSBmaXJzdCwK
KyAgICAgICAgd2hpY2ggY291bGQgY2F1c2UgYSBHQywgYW5kIHRoZW4gc3RvcmUgdGhlIHJlc3Vs
dGluZyBidWZmZXIgaW50byB0aGVpciBKU0NlbGwsIHdoaWNoIHJlcXVpcmVzIHRoZSBiYXJyaWVy
LgorICAgICAgICBJZiB3ZSBldmVyIHJlcXVpcmUgdGhhdCB3cml0ZSBiYXJyaWVycyBvY2N1ciBi
ZWZvcmUgc3RvcmVzLCB3ZSdsbCBoYXZlIHRvIHNwbGl0IHRoZXNlIG5vZGVzIGludG8gCisgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlICsgU3RvcmVCYXJyaWVyICsgUHV0UHJvcGVydHlT
dG9yYWdlLgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhh
c2U6Omluc2VydFN0b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjppc1N0b3JlQmFycmllcik6CisgICAgICAgICogZGZnL0RGR05v
ZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlU3RvcmVCYXJy
aWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Z2VuZXJpY1dyaXRlQmFy
cmllcik6IFRoZSBmYXN0IHBhdGggd3JpdGUgYmFycmllciBjaGVjay4gSXQgbG9hZHMgdGhlIAor
ICAgICAgICBieXRlIHRoYXQgY29udGFpbnMgdGhlIG1hcmsgYml0IG9mIHRoZSBvYmplY3QuIAor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKTogSWYgdGhlIGZhc3QgcGF0aCBjaGVjayBmYWlscyB3ZSB0cnkgdG8gc3RvcmUgdGhlIAor
ICAgICAgICBjZWxsIGluIHRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgc28gYXMgdG8gYXZvaWQgZnJl
cXVlbnRseSBmbHVzaGluZyBhbGwgcmVnaXN0ZXJzIGluIG9yZGVyIHRvIG1ha2UgYSBDIGNhbGwu
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zcldyaXRlQmFycmllcik6IE1vcmUgYmFy
ZWJvbmVzIHZlcnNpb24gb2YgdGhlIHdyaXRlIGJhcnJpZXIgdG8gYmUgZXhlY3V0ZWQgCisgICAg
ICAgIGR1cmluZyBhbiBPU1IgZXhpdCBpbnRvIGJhc2VsaW5lIGNvZGUuIFdlIG11c3QgZG8gdGhp
cyBzbyB0aGF0IHRoZSBiYXNlbGluZSBKSVQgb2JqZWN0IGFuZCBhcnJheSBwcm9maWxlcyAKKyAg
ICAgICAgYXJlIHByb3Blcmx5IGNsZWFyZWQgZHVyaW5nIEdDLgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxs
T3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcik6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjYWNoZWRQdXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUJhc2VWYWx1ZVN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp3
cml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
Y3BwOiBBZGRlZC4gTmV3IERGRyBwaGFzZSB0aGF0IGRvZXMgYmxvY2stbG9jYWwgZWxpc2lvbiBv
ZiByZWR1bmRhbnQKKyAgICAgICAgU3RvcmVCYXJyaWVycy4gRXZlcnkgdGltZSBhIFN0b3JlQmFy
cmllciBvbiBhIHBhcnRpY3VsYXIgb2JqZWN0IGlzIGV4ZWN1dGVkLCBhIGJpdCBpcyBzZXQgaW5k
aWNhdGluZyB0aGF0IAorICAgICAgICB0aGF0IG9iamVjdCBkb2Vzbid0IG5lZWQgYW55IG1vcmUg
U3RvcmVCYXJyaWVycy4gCisgICAgICAgIChKU0M6OkRGRzo6U3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlOjpTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3Jl
QmFycmllckVsaXNpb25QaGFzZTo6Y291bGRDYXVzZUdDKTogTm9kZXMgdGhhdCBjb3VsZCBjYXVz
ZSBhIEdDIHJlc2V0IHRoZSBiaXRzIGZvciBhbGwgb2YgdGhlIAorICAgICAgICBvYmplY3RzIGtu
b3duIGluIHRoZSBjdXJyZW50IGJsb2NrLiAKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJp
ZXJFbGlzaW9uUGhhc2U6OmFsbG9jYXRlc0ZyZXNoT2JqZWN0KTogQSBub2RlIHRoYXQgY3JlYXRl
cyBhIG5ldyBvYmplY3QgYXV0b21hdGljYWxseSAKKyAgICAgICAgc2V0cyB0aGUgYml0IGZvciB0
aGF0IG9iamVjdCBzaW5jZSBpZiBhIEdDIG9jY3VycmVkIGFzIHRoZSByZXN1bHQgb2YgdGhhdCBv
YmplY3QncyBhbGxvY2F0aW9uIHRoZW4gdGhhdCAKKyAgICAgICAgb2JqZWN0IHdvdWxkIG5vdCBu
ZWVkIGEgYmFycmllciBzaW5jZSBpdCB3b3VsZCBiZSBndWFyYW50ZWVkIHRvIGJlIGEgeW91bmcg
Z2VuZXJhdGlvbiBvYmplY3QgdW50aWwgdGhlIAorICAgICAgICBuZXh0IEdDIHBvaW50LgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6bm90aWNlRnJlc2hPYmpl
Y3QpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6Z2V0QmFz
ZU9mU3RvcmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25QaGFzZTo6
c2hvdWxkQmVFbGlkZWQpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVsaXNpb25Q
aGFzZTo6ZWxpZGVCYXJyaWVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yZUJhcnJpZXJFbGlz
aW9uUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmllckVs
aXNpb25QaGFzZTo6aGFuZGxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JlQmFycmll
ckVsaXNpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpwZXJmb3JtU3RvcmVCYXJy
aWVyRWxpc2lvbik6CisgICAgICAgICogZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjpI
ZWFwKToKKyAgICAgICAgKEpTQzo6SGVhcDo6Zmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpOgorICAg
ICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjp3cml0ZUJhcnJpZXIpOgor
ICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
Om9mZnNldE9mTWFya3MpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmNwcDog
QWRkZWQuIFRoZSBXcml0ZUJhcnJpZXJCdWZmZXIgYnVmZmVycyBhIHNldCBvZiBKU0NlbGxzIHRo
YXQgYXJlIGF3YWl0aW5nIAorICAgICAgICBhIHBlbmRpbmcgV3JpdGVCYXJyaWVyLiBUaGlzIGJ1
ZmZlciBpcyB1c2VkIGJ5IHRoZSBERkcgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGNhbGxpbmcg
b3V0IHRvIEMgcmVwZWF0ZWRseQorICAgICAgICB0byBpbnZva2UgYSB3cml0ZSBiYXJyaWVyIG9u
IGEgc2luZ2xlIEpTQ2VsbC4gSW5zdGVhZCB0aGUgREZHIGhhcyBpbmxpbmUgY29kZSB0byBmaWxs
IHRoZSBXcml0ZUJhcnJpZXIgYnVmZmVyCisgICAgICAgIHVudGlsIGl0cyBmdWxsLCBhbmQgdGhl
biB0byBjYWxsIG91dCB0byBDIHRvIGZsdXNoIGl0LiBUaGUgV3JpdGVCYXJyaWVyQnVmZmVyIHdp
bGwgYWxzbyBiZSBmbHVzaGVkIHByaW9yIHRvIAorICAgICAgICBlYWNoIEVkZW5Db2xsZWN0aW9u
LgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OldyaXRlQmFycmllckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6fldyaXRlQmFycmllckJ1ZmZlcik6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Zmx1c2gpOgorICAgICAgICAoSlND
OjpXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVy
QnVmZmVyOjphZGQpOgorICAgICAgICAqIGhlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJ1ZmZlcjo6Y2FwYWNpdHlPZmZzZXQpOgorICAg
ICAgICAoSlNDOjpXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCk6CisgICAgICAgICog
aml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6Cisg
ICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDEzLTEyLTE4ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggbWFrZSBk
aXN0Y2hlY2suCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE3Miw2ICsxNzIsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAogICAgIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAogICAgIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAorICAgIGRmZy9ERkdT
dG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwCiAgICAgZGZnL0RGR1RodW5rcy5jcHAKICAgICBkZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAKQEAgLTIxOSw2ICsyMjAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVf
U09VUkNFUwogICAgIGhlYXAvV2Vha0Jsb2NrLmNwcAogICAgIGhlYXAvV2Vha0hhbmRsZU93bmVy
LmNwcAogICAgIGhlYXAvV2Vha1NldC5jcHAKKyAgICBoZWFwL1dyaXRlQmFycmllckJ1ZmZlci5j
cHAKICAgICBoZWFwL1dyaXRlQmFycmllclN1cHBvcnQuY3BwCiAKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4Nyw4IEBA
IGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBTG93ZXJpbmdQaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
YWNrTGF5b3V0UGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNr
TGF5b3V0UGhhc2UuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJp
ZXJFbGlzaW9uUGhhc2UuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckVsaXNpb25QaGFzZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggXApAQCAtNTc2LDYgKzU3OCw4IEBAIGphdmFzY3Jp
cHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dlYWtTZXQu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldElubGluZXMuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1dyaXRlQmFycmllclN1cHBvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2NvbmZpZy5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDI4
LDYgKzQyOCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FM
b3dlcmluZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
dGFja0xheW91dFBoYXNlLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1RodW5rcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAiIC8+CkBAIC00NzEs
NiArNDcyLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0Jsb2NrLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50
UmVnaXN0cnkuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIgLz4KQEAgLTk0OCw2ICs5NTAsNyBAQAogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2UuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmgiIC8+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdUaHVua3MuaCIgLz4KQEAgLTEwMjYsNiArMTAyOSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxXZWFrU2V0SW5saW5lcy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50QmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50UmVnaXN0cnkuaCIgLz4KQEAgLTEzODQs
NCArMTM4OCw0IEBACiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAg
ICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxkQ3VzdG9taXphdGlvbnNc
bWFzbS50YXJnZXRzIiAvPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlzaW9uIDE2MDY4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMjc5LDYgKzI3OSw5IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtTZXQuY3BwIj4KICAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxX
cml0ZUJhcnJpZXJTdXBwb3J0LmNwcCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAg
ICA8L0NsQ29tcGlsZT4KQEAgLTExNDksNiArMTE1Miw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAiPgogICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIj4KKyAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVGh1bmtzLmNwcCI+CiAgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgogICAgIDwvQ2xDb21w
aWxlPgpAQCAtMTc1NCw2ICsxNzYwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcV2Vha1NldElubGluZXMuaCI+CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8
L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVy
QnVmZmVyLmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuaCI+
CiAgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTMwNTcs
NiArMzA2Niw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlv
dXRQaGFzZS5oIj4KICAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBo
YXNlLmgiPgorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgi
PgogICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNzE4LDkgKzcxOCwxMyBAQAogCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVF
NUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI2MDBCNUE1MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5o
ICovOyB9OwogCQkyQTI4MjVEMDE4MzQxRjJEMDA4N0ZCQTkgLyogRGVsYXllZFJlbGVhc2VTY29w
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkEyODI1
Q0YxODM0MUYyRDAwODdGQkE5IC8qIERlbGF5ZWRSZWxlYXNlU2NvcGUuaCAqLzsgfTsKIAkJMkE0
OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyMTFCNTc0MTc2QTIyNEQwMDBF
MkEyMyAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggKi87IH07CisJCTJBNEVDOTBCMTg2MEQ2QzIw
MDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5jcHAgKi87IH07CisJCTJBNEVDOTBDMTg2MEQ2QzIwMDk0Rjc4MiAvKiBX
cml0ZUJhcnJpZXJCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJBNEVDOTBBMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyQTZG
NDYyNjE3RTk1OUNFMDBDNDVDOTggLyogSGVhcE9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkE2RjQ2MjUxN0U5NTlDRTAwQzQ1Qzk4IC8q
IEhlYXBPcGVyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQTdBNThFRTE4MDhBNEM0
MDAyMEJERjcgLyogRGVmZXJHQy5jcHAgKi87IH07CiAJCTJBQUQ5NjRBMTg1Njk0MTcwMDFGOTNC
RSAvKiBSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJBQUQ5NjQ5MTg1Njk0MTcwMDFGOTNCRSAvKiBSZWN1cnNp
dmVBbGxvY2F0aW9uU2NvcGUuaCAqLzsgfTsKKwkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8q
IERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3Rv
cmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLzsgfTsKKwkJMkFDQ0YzREYxODVGRTI2QjAwODNF
MkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFDQ0YzREQxODVGRTI2QjAwODNFMkFEIC8qIERG
R1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovOyB9OwogCQkyQUQ4OTMyQjE3RTM4NjhGMDA2
NjgyNzYgLyogSGVhcEl0ZXJhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVhcEl0ZXJh
dGlvblNjb3BlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5
bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcx
RDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTQxMzU5Q0YzMEZE
RDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVD
b252ZXJzaW9uLmggKi87IH07CkBAIC0yMDIxLDkgKzIwMjUsMTMgQEAKIAkJMjYwMEI1QTQxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjYwMEI1QTUxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU3RyaW5nSm9pbmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBMjgyNUNGMTgzNDFGMkQwMDg3RkJBOSAvKiBEZWxheWVk
UmVsZWFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERlbGF5ZWRS
ZWxlYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMkE0RUM5MDkxODYw
RDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyQTRFQzkwQTE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVy
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdyaXRlQmFycmllckJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQTZGNDYyNTE3RTk1OUNFMDBD
NDVDOTggLyogSGVhcE9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJBN0E1OEVF
MTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IERlZmVyR0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
QUFEOTY0OTE4NTY5NDE3MDAxRjkzQkUgLyogUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQg
LyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMkFDQ0YzREQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNp
b25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdG9yZUJhcnJp
ZXJFbGlzaW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2
IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBIZWFwSXRlcmF0aW9uU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcx
RDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFt
ZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3IvbGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUgPSBT
REtST09UOyB9OwogCQk0NDkwOTdFRTBGOEY4MUI1MDA3NkEzMjcgLyogRmVhdHVyZURlZmluZXMu
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRmVhdHVyZURlZmluZXMu
eGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMTExLDYgKzMxMTksOCBA
QAogCQkxNDJFMzEyQTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMkE0RUM5MDkxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5jcHAgKi8sCisJCQkJMkE0RUM5MEExODYwRDZDMjAwOTRGNzgy
IC8qIFdyaXRlQmFycmllckJ1ZmZlci5oICovLAogCQkJCTE0ODE2RTE5MTU0Q0M1NkMwMEI4MDU0
QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgKi8sCiAJCQkJMTQ4MTZFMUExNTRDQzU2QzAwQjgwNTRD
IC8qIEJsb2NrQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZEOEEzMTExN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5jcHAgKi8sCkBAIC0zODQ3LDYgKzM4NTcsOCBAQAogCQk4NkVDOURCMzEz
MjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkyQUNDRjNEQzE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmNwcCAqLywKKwkJCQkyQUNDRjNERDE4NUZFMjZCMDA4M0UyQUQgLyogREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJCQkJQTc3QTQyMzYxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgKi8sCiAJCQkJQTc3QTQyMzcxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Fic3RyYWN0SGVhcC5oICovLAogCQkJCUE3MDREOEZFMTdBMEJBQTgwMDZCQTU1
NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggKi8sCkBAIC00MzYxLDYgKzQzNzMsNyBAQAog
CQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkE0RUM5MEMxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTIxODU2OTcwOTAwMkVE
NjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNTMy
NDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkg
aW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUt
Y29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKQEAgLTUwNTAsNiArNTA2
Myw3IEBACiAJCQkJMTRCRTdEMzMxNzEzNUNGNDAwRDE4MDdBIC8qIFdlYWtJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0NBM0FFNDE3REE0MUFFMDA2NTM4QUYgLyogV2Vha01hcENvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0NBM0FFQzE3REE1MTY4MDA2NTM4QUYgLyog
V2Vha01hcERhdGEuaCBpbiBIZWFkZXJzICovLAorCQkJCTJBQ0NGM0RGMTg1RkUyNkIwMDgzRTJB
RCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJbnNwZWN0b3JUeXBlQnVpbGRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdDQTNBRTYxN0RBNDFBRTAwNjUzOEFGIC8qIFdlYWtNYXBQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjBCRTdCMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFu
ZG9tLmggaW4gSGVhZGVycyAqLywKQEAgLTU3MDUsNiArNTcxOSw3IEBACiAJCQkJMEYyNEU1NTUx
N0YwQjcxQzAwQUJCMjE3IC8qIElubGluZUNhbGxGcmFtZVNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzg4NTNGOTE3OTcyNjI5MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJu
YWxGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0Uy
QUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjlEN0Q0MEVEMjEyODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI5RDkyRjBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2QTkwRUQwMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNTcxNyw2ICs1NzMyLDcgQEAKIAkJCQkwRkIxNEUxRTE4MTI0QUNFMDA5
QjZCNEQgLyogSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QkNERDUxRUIwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcxMjM2RTUxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVy
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTRDMTdFRTI3NDkwMEFCQjIxNyAv
KiBKSVRPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2Q0M4NUM0MEVFN0E4OTQw
MDI4ODY4MiAvKiBKSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Mx
RThFNDExMkU3MkVGMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oVmFyaWFibGVzKSBcCiAgICAgbWFjcm8o
VHlwZWRBcnJheVByb3BlcnRpZXMpIFwKICAgICBtYWNybyhHQ1N0YXRlKSBcCisgICAgbWFjcm8o
QmFycmllclN0YXRlKSBcCiAgICAgbWFjcm8oUmVnRXhwU3RhdGUpIFwKICAgICBtYWNybyhJbnRl
cm5hbFN0YXRlKSBcCiAgICAgbWFjcm8oQWJzb2x1dGUpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU4OCw2ICsxNTg4
LDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwQXRSZXR1cm46CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBDb25kaXRp
b25hbFN0b3JlQmFycmllcjogeworICAgICAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKG5vZGUtPmNo
aWxkMigpLm5vZGUoKSwgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRD
b25zdGFudHModHJ1ZSk7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFN0b3JlQmFycmllcjogeworICAg
ICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOiB7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKwogICAgIGNhc2UgQ2hlY2tUaWVyVXBBbmRPU1JFbnRlcjoKICAgICBjYXNl
IExvb3BIaW50OgogICAgICAgICAvLyBXZSBwcmV0ZW5kIHRoYXQgaXQgY2FuIGV4aXQgYmVjYXVz
ZSBpdCBtYXkgd2FudCB0byBnZXQgYWxsIHN0YXRlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
NywxNSBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgordm9pZCBjbG9iYmVyaXpl
Rm9yQWxsb2NhdGlvbihSZWFkRnVuY3RvciYgcmVhZCwgV3JpdGVGdW5jdG9yJiB3cml0ZSkKK3sK
KyAgICByZWFkKEdDU3RhdGUpOworICAgIHJlYWQoQmFycmllclN0YXRlKTsKKyAgICB3cml0ZShH
Q1N0YXRlKTsKKyAgICB3cml0ZShCYXJyaWVyU3RhdGUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZWFkRnVuY3RvciwgdHlwZW5hbWUgV3JpdGVGdW5jdG9yPgogdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgUmVhZEZ1bmN0b3ImIHJlYWQsIFdyaXRlRnVuY3RvciYg
d3JpdGUpCiB7CiAgICAgLy8gU29tZSBub3RlczoKQEAgLTE2MCwxMCArMTY5LDkgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogCiAgICAgY2FzZSBDcmVhdGVBY3Rp
dmF0aW9uOgogICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOgorICAgICAgICBjbG9iYmVyaXplRm9y
QWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAg
ICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7Ci0gICAgICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAg
ICAgIHdyaXRlKEdDU3RhdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2Ug
RnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKQEAgLTE3Myw4ICsxODEsNyBAQCB2b2lkIGNsb2Ji
ZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2Fz
ZSBDcmVhdGVUaGlzOgogICAgICAgICByZWFkKE1pc2NGaWVsZHMpOwotICAgICAgICByZWFkKEdD
U3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFs
bG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAKICAgICBjYXNlIFZhcklu
amVjdGlvbldhdGNocG9pbnQ6CkBAIC00MzUsMTUgKzQ0MiwxMyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2UgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAg
IHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICBjbG9iYmVy
aXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICByZWFkKEpTT2Jq
ZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIHdyaXRlKEpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAg
ICAgIHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICBjbG9i
YmVyaXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CkBAIC00NTYsOCArNDYxLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKEpTT2JqZWN0X2J1
dHRlcmZseSk7CiAgICAgICAgIHdyaXRlKEpTQ2VsbF9zdHJ1Y3R1cmUpOwogICAgICAgICB3cml0
ZShKU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICByZWFkKEdDU3RhdGUpOwotICAgICAgICB3
cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9jYXRpb24ocmVhZCwgd3Jp
dGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3Bl
cnR5U3RvcmFnZToKQEAgLTU0NCwxNSArNTQ4LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9DaGVjazoKICAgICBjYXNl
IE5ld0Z1bmN0aW9uOgogICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgotICAgICAgICBy
ZWFkKEdDU3RhdGUpOwotICAgICAgICB3cml0ZShHQ1N0YXRlKTsKKyAgICAgICAgY2xvYmJlcml6
ZUZvckFsbG9jYXRpb24ocmVhZCwgd3JpdGUpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAog
ICAgIGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgY2xvYmJlcml6ZUZvckFsbG9jYXRpb24o
cmVhZCwgd3JpdGUpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkg
ewogICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICAgICAgcmVhZChHQ1N0YXRlKTsKLSAg
ICAgICAgICAgIHdyaXRlKEdDU3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
YXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICByZWFkKFdvcmxkKTsKQEAgLTY0MSw4ICs2NDMs
NyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAKICAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Ci0gICAgICAg
IHJlYWQoR0NTdGF0ZSk7Ci0gICAgICAgIHdyaXRlKEdDU3RhdGUpOworICAgICAgICBjbG9iYmVy
aXplRm9yQWxsb2NhdGlvbihyZWFkLCB3cml0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKQEAgLTY1MCw2ICs2NTEsMTMgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICByZWFkKEludGVybmFsU3Rh
dGUpOwogICAgICAgICB3cml0ZShJbnRlcm5hbFN0YXRlKTsKICAgICAgICAgcmV0dXJuOworCisg
ICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoK
KyAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CisgICAgICAgIHJlYWQoQmFycmll
clN0YXRlKTsKKyAgICAgICAgd3JpdGUoQmFycmllclN0YXRlKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAwLDI4ICszMDAsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKCFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHN0YXR1cy5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQoc3RhdHVzLm9m
ZnNldCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UobV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3JpZ2luLCBPcEluZm8odHJhbnNp
dGlvbkRhdGEpLCBjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmln
aW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3Rv
cmVCYXJyaWVyLCBjb2RlT3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25D
ZWxsVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UoYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzLm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpID4gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldChzdGF0dXMub2Zmc2V0KCkpKTsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVk
Z2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBjb2RlT3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgY29kZU9yaWdpbiwgY2hp
bGRFZGdlKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBHZXRCdXR0ZXJmbHksIGNvZGVPcmlnaW4sIGNoaWxkRWRnZSkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBTdG9yZUJhcnJpZXIsIGNvZGVPcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
RWRnZShyZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZVRyYW5zaXRp
b24oKSkgewotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUHV0U3RydWN0
dXJlLCBjb2RlT3JpZ2luLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0
aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVj
dHVyZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBjb2RlT3JpZ2lu
LCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3Jl
QmFycmllciwgY29kZU9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2Vs
bFVzZSkpOworICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXhJ
bkJsb2NrLCBwdXRTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KG1fZ3JhcGgu
bV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCksIHByb3BlcnR5U3RvcmFnZSk7CisgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBD
b25kaXRpb25hbFN0b3JlQmFycmllciwgY29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgICAg
IEVkZ2Uobm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpLCBFZGdlKG5vZGUtPmNo
aWxkMygpLm5vZGUoKSwgVW50eXBlZFVzZSkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIHN0b3JhZ2VBY2Nlc3NEYXRhOwogICAgICAgICAgICAg
ICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCA9IHN0YXR1cy5vZmZzZXQoKTsKQEAgLTMyOSw3
ICszMzUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RvcmFnZUFj
Y2Vzc0RhdGEuYXBwZW5kKHN0b3JhZ2VBY2Nlc3NEYXRhKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgY2FzZSBD
b25kaXRpb25hbFN0b3JlQmFycmllcjogeworICAgICAgICAgICAgICAgIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDIoKS5ub2RlKCksIH5TcGVjQ2VsbCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOworICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgU3RvcmVC
YXJyaWVyOgorICAgICAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOiB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDY4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0OSw2ICs1NDksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhF
ZGdlPEludDMyVXNlPihjaGlsZDIpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNl
PihjaGlsZDMpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6Q29udGlndW91czoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpBcmd1bWVudHM6CisgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxV
c2U+KGNoaWxkMSk7CisgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIGNoaWxk
MSwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KGNoaWxkMSk7CiAgICAgICAg
ICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4oY2hpbGQyKTsKQEAgLTU4Miw2ICs1OTAsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPFJlYWxOdW1iZXJVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgaW5zZXJ0U3RvcmVC
YXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDEoKSwgbm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTc2NywxOCArNzc5LDMzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJs
b2NrLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGluc2VydFN0b3JlQmFycmllciht
X2luZGV4SW5CbG9jaywgbm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlUmVnaXN0ZXJz
OgotICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgU2tpcFRvcFNjb3Bl
OgogICAgICAgICBjYXNlIFNraXBTY29wZToKLSAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0g
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2FzZSBHZXRTY29wZTogewogICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOiB7Cisg
ICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrICsgMSwgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5
SWQ6CiAgICAgICAgIGNhc2UgR2V0QnlJZEZsdXNoOiB7CiAgICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCkBAIC04MDAsMTIgKzgyNywxNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDogeworICAgICAg
ICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBpbnNl
cnRTdG9yZUJhcnJpZXIobV9pbmRleEluQmxvY2ssIG5vZGUtPmNoaWxkMSgpLCBub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgQ2hl
Y2tFeGVjdXRhYmxlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNl
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rp
b246Ci0gICAgICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogog
ICAgICAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoK
ICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6IHsKQEAgLTgzMiw2ICs4NjQsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzU3RvcmFnZVJlc3VsdCgpKQog
ICAgICAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgaW5zZXJ0U3RvcmVCYXJyaWVyKG1faW5kZXhJbkJsb2NrLCBub2RlLT5jaGlsZDIoKSwg
bm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtODkxLDYgKzkyNCwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gZml4dXAg
cnVsZXMgZm9yIHRoZW0uCiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBjYXNlIFB1dEdsb2JhbFZh
cjogeworICAgICAgICAgICAgTm9kZSogZ2xvYmFsT2JqZWN0Tm9kZSA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUobV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBXZWFrSlNDb25zdGFudCwgbm9k
ZS0+Y29kZU9yaWdpbiwgCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBOb2RlKiBiYXJyaWVyTm9k
ZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXIsIG1f
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4sIAorICAgICAgICAgICAgICAgIEVkZ2UoZ2xvYmFsT2Jq
ZWN0Tm9kZSwgS25vd25DZWxsVXNlKSwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIFVudHlw
ZWRVc2UpKTsKKyAgICAgICAgICAgIGZpeHVwTm9kZShiYXJyaWVyTm9kZSk7CisgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQobV9pbmRleEluQmxvY2ssIGJhcnJpZXJOb2RlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZh
dGlvbjogeworICAgICAgICAgICAgTm9kZSogYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUo
U3BlY05vbmUsIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2ssIG1fY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4sIAorICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBVbnR5
cGVkVXNlKSk7CisgICAgICAgICAgICBmaXh1cE5vZGUoYmFycmllck5vZGUpOworICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG1faW5kZXhJbkJsb2NrLCBiYXJyaWVyTm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIGNhc2UgSXNTdHJpbmc6CiAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKSB7
CkBAIC05MTQsNyArOTY1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRNeVNjb3BlOgog
ICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgot
ICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9u
V2F0Y2hwb2ludDoKQEAgLTkzMSw3ICs5ODEsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElz
T2JqZWN0OgogICAgICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAgICAgIGNhc2UgQ3JlYXRlQWN0
aXZhdGlvbjoKLSAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKICAgICAgICAgY2FzZSBD
cmVhdGVBcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAg
Y2FzZSBUZWFyT2ZmQXJndW1lbnRzOgpAQCAtOTUxLDYgKzEwMDAsOSBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgogICAgICAgICBjYXNlIExvb3BIaW50OgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAg
ICAgICAgY2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9yZUJh
cnJpZXJXaXRoTnVsbENoZWNrOgogICAgICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRyeVdhdGNocG9p
bnQ6CiAgICAgICAgIGNhc2UgVHlwZWRBcnJheVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVh
azsKQEAgLTE1MDMsNiArMTU1NSwxOSBAQCBwcml2YXRlOgogICAgICAgICBlZGdlLnNldFVzZUtp
bmQodXNlS2luZCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgaW5zZXJ0U3RvcmVCYXJyaWVyKHVu
c2lnbmVkIGluZGV4SW5CbG9jaywgRWRnZSBjaGlsZDEsIEVkZ2UgY2hpbGQyID0gRWRnZSgpKQor
ICAgIHsKKyAgICAgICAgTm9kZSogYmFycmllck5vZGU7CisgICAgICAgIGlmICghY2hpbGQyKQor
ICAgICAgICAgICAgYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFN0b3Jl
QmFycmllciwgbV9jdXJyZW50Tm9kZS0+Y29kZU9yaWdpbiwgRWRnZShjaGlsZDEubm9kZSgpLCBj
aGlsZDEudXNlS2luZCgpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYmFycmllck5v
ZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBt
X2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luLCAKKyAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5u
b2RlKCksIGNoaWxkMS51c2VLaW5kKCkpLCBFZGdlKGNoaWxkMi5ub2RlKCksIGNoaWxkMi51c2VL
aW5kKCkpKTsKKyAgICAgICAgfQorICAgICAgICBmaXh1cE5vZGUoYmFycmllck5vZGUpOworICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoaW5kZXhJbkJsb2NrLCBiYXJyaWVyTm9kZSk7Cisg
ICAgfQorCiAgICAgdm9pZCBmaXhJbnRFZGdlKEVkZ2UmIGVkZ2UpCiAgICAgewogICAgICAgICBO
b2RlKiBub2RlID0gZWRnZS5ub2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw3ICs2MDYsMTkgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBBU1NFUlQoaGFzUGhpKCkpOwogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE5v
ZGUqPihtX29wSW5mbyk7CiAgICAgfQotICAgIAorCisgICAgYm9vbCBpc1N0b3JlQmFycmllcigp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CisgICAgICAgIGNhc2UgQ29uZGl0aW9uYWxTdG9yZUJhcnJpZXI6CisgICAgICAgIGNhc2Ug
U3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCiAgICAgYm9vbCBoYXNJZGVudGlmaWVyKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3Ao
KSkgewpAQCAtMTU1NSw2ICsxNTY3LDcgQEAgcHVibGljOgogICAgIHVuaW9uIHsKICAgICAgICAg
Tm9kZSogcmVwbGFjZW1lbnQ7CiAgICAgICAgIEJhc2ljQmxvY2sqIG93bmVyOworICAgICAgICBi
b29sIG5lZWRzQmFycmllcjsKICAgICB9IG1pc2M7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw2ICsy
OTEsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8qIENoZWNrcyB0
aGUgd2F0Y2hkb2cgdGltZXIuIElmIHRoZSB0aW1lciBoYXMgZmlyZWQsIHdlIE9TUiBleGl0IHRv
IHRoZSAqLyBcCiAgICAgLyogYmFzZWxpbmUgSklUIHRvIHJlZG8gdGhlIHdhdGNoZG9nIHRpbWVy
IGNoZWNrLCBhbmQgc2VydmljZSB0aGUgdGltZXIuICovIFwKICAgICBtYWNybyhDaGVja1dhdGNo
ZG9nVGltZXIsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICAvKiBXcml0ZSBiYXJyaWVycyAhICov
XAorICAgIG1hY3JvKFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
U3RvcmVCYXJyaWVyV2l0aE51bGxDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAogCiAvLyBUaGlz
IGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9k
ZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBv
dXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5j
cHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAK
ICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmgiCisjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKICNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KIApAQCAtNDQ4LDkgKzQ0OSwxOSBA
QCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKEdQUkluZm86OnJlZ1QwLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
b3BlcmFuZCkpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIDExKSBBbmQgZmluaXNo
LgotICAgIAorCisjaWYgRU5BQkxFKEdHQykgCisgICAgLy8gMTEpIFdyaXRlIGJhcnJpZXIgdGhl
IG93bmVyIGV4ZWN1dGFibGUgYmVjYXVzZSB3ZSdyZSBqdW1waW5nIGludG8gYSBkaWZmZXJlbnQg
YmxvY2suCisgICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdp
bjsgOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewor
ICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gbV9qaXQuYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoY29kZU9yaWdpbik7CisgICAgICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjApOyAKKyAgICAgICAgU3BlY3VsYXRpdmVKSVQ6Om9zcldyaXRlQmFy
cmllcihtX2ppdCwgR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6bm9uQXJnR1BSMSwgR1BS
SW5mbzo6bm9uQXJnR1BSMik7CisgICAgICAgIGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKworICAgIC8vIDEyKSBBbmQg
ZmluaXNoLgogICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChtX2ppdCwgZXhpdCk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
CiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5oIgorI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogCkBAIC00MDIsOSArNDAz
LDE5IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAgICAg
ICAgIG1faml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0ZvcihvcGVyYW5kKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gMTEpIEFuZCBm
aW5pc2guCi0gICAgCisKKyNpZiBFTkFCTEUoR0dDKSAKKyAgICAvLyAxMSkgV3JpdGUgYmFycmll
ciB0aGUgb3duZXIgZXhlY3V0YWJsZSBiZWNhdXNlIHdlJ3JlIGp1bXBpbmcgaW50byBhIGRpZmZl
cmVudCBibG9jay4KKyAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2Rl
T3JpZ2luOyA7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
KSB7CisgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBtX2ppdC5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKKyAgICAgICAgbV9qaXQubW92ZShBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7IAorICAgICAgICBTcGVjdWxhdGl2ZUpJVDo6b3NyV3Jp
dGVCYXJyaWVyKG1faml0LCBHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjpub25BcmdHUFIx
LCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgLy8gMTIp
IEFuZCBmaW5pc2guCiAgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KG1faml0LCBleGl0KTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNjA2
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSAiREZHU1NBQ29udmVyc2lvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHU1NBTG93ZXJpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1N0YWNrTGF5
b3V0UGhhc2UuaCIKKyNpbmNsdWRlICJERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuaCIKQEAgLTIyMyw2ICsyMjQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29t
cGlsZUluVGhyCiAKICAgICBkZmcubV9maXhwb2ludFN0YXRlID0gRml4cG9pbnRDb252ZXJnZWQ7
CiAKKyAgICBwZXJmb3JtU3RvcmVCYXJyaWVyRWxpc2lvbihkZmcpOwogICAgIHBlcmZvcm1TdG9y
ZUVsaW1pbmF0aW9uKGRmZyk7CiAgICAgCiAgICAgLy8gSWYgd2UncmUgZG9pbmcgdmFsaWRhdGlv
biwgdGhlbiBydW4gc29tZSBhbmFseXNlcywgdG8gZ2l2ZSB0aGVtIGFuIG9wcG9ydHVuaXR5Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU0Niw2ICs1NDYsOSBAQCBwcml2YXRlOgogCiAjaWZuZGVmIE5ERUJVRwog
ICAgICAgICAvLyBUaGVzZSBnZXQgaWdub3JlZCBiZWNhdXNlIHRoZXkgZG9uJ3QgcmV0dXJuIGFu
eXRoaW5nLgorICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBDb25kaXRp
b25hbFN0b3JlQmFycmllcjoKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXJXaXRoTnVsbENoZWNr
OgogICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgog
ICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
MSw2ICsyNDEsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAg
ICAgY2FzZSBMb29wSGludDoKICAgICBjYXNlIEludDUyVG9Eb3VibGU6CiAgICAgY2FzZSBJbnQ1
MlRvVmFsdWU6CisgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgY2FzZSBDb25kaXRpb25hbFN0
b3JlQmFycmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllcldpdGhOdWxsQ2hlY2s6CiAgICAgY2Fz
ZSBJbnZhbGlkYXRpb25Qb2ludDoKICAgICBjYXNlIE5vdGlmeVdyaXRlOgogICAgIGNhc2UgRnVu
Y3Rpb25SZWVudHJ5V2F0Y2hwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTYwNjgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjAwLDEwICsyMDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
YWNoZWRHZXRCeUlkKENvZGVPCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGgucmVs
ZWFzZSgpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkUHV0QnlJZChDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BS
LCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2
YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVu
c2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQgcHV0S2luZCwgSklUQ29tcGlsZXI6Okp1
bXAgc2xvd1BhdGhUYXJnZXQpCiB7Ci0gICAgd3JpdGVCYXJyaWVyKGJhc2VQYXlsb2FkR1BSLCB2
YWx1ZVRhZ0dQUiwgdmFsdWVVc2UsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3Jh
dGNoR1BSKTsKLSAgICAKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShiYXNlUGF5
bG9hZEdQUiksIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLApAQCAt
MTExMiw2ICsxMTEwLDIzIEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252
ZXIKICAgICByZXR1cm4gbm90TnVtYmVyOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQmFzZVZhbHVlU3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2Up
Cit7CisjaWYgRU5BQkxFKEdHQykKKyAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRn
ZS5ub2RlKCkpKTsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVk
Z2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7CisgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlz
KTsKKworICAgIHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS50YWdHUFIoKSwgdmFsdWVF
ZGdlLCBzY3JhdGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oYmFzZUVkZ2UpOworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUVkZ2UpOworI2VuZGlmCit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2Rl
KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CkBAIC0yNjExLDEyICsyNjI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICAKICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKEhlYXA6OmlzV3Jp
dGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlVGFn
UmVnLCBjaGlsZDMsIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKG5vZGUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSwgdmFsdWVQYXlsb2Fk
UmVnLCB2YWx1ZVRhZ1JlZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjYz
MywxMyArMjY0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZVJlZywgdmFsdWVUYWdSZWcsIGNoaWxkMywgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MsIHNjcmF0Y2hSZWcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hpbGQ0KTsKICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIApAQCAtMjgxOSwxMSArMjgyMyw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgICAgICAgICAgR1BSUmVnIHZh
bHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKIAotICAgICAgICAgICAgaWYgKEhl
YXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIs
IHZhbHVlVGFnR1BSLCBub2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MsIHNjcmF0Y2guZ3ByKCksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAgICAgfQotCiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7
CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1ZVRhZ0dQUiwgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpKTsKQEAgLTI4NzIsMTEgKzI4NzEsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdH
UFIoKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5wYXlsb2Fk
R1BSKCk7CiAKLSAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVuYWJsZWQoKSkg
ewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgICAgICAg
ICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQyKCks
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWZ1c2Ug
dG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KQEAgLTM2NzMsMTkgKzM2NjcsMTggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOiB7Ci0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgcmVn
aXN0ZXJzKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaFJl
Z2lzdGVyKHRoaXMpOwotICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKwog
ICAgICAgICBHUFJSZWcgcmVnaXN0ZXJzR1BSID0gcmVnaXN0ZXJzLmdwcigpOwogICAgICAgICBH
UFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKICAgICAgICAgR1BSUmVnIHZhbHVl
UGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoUmVnaXN0ZXIuZ3ByKCk7CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG5v
ZGUtPmNoaWxkMSgpKTsKIAogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlVGFnR1BSLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhyZWdpc3RlcnNHUFIsIG5vZGUtPnZhck51bWJlcigpICogc2l6ZW9m
KFJlZ2lzdGVyKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMudGFnKSkpOwogICAgICAgICBtX2ppdC5zdG9yZTMyKHZhbHVlUGF5bG9hZEdQUiwgSklUQ29t
cGlsZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihS
ZWdpc3RlcikgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7Ci0gICAgICAgIHdyaXRlQmFycmllcihzY29wZUdQUiwgdmFsdWVUYWdHUFIs
IG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJsZUFjY2Vzcywgc2NyYXRjaEdQ
Uik7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0z
ODgyLDExICszODc1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICAKLSNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAgIC8vIE11c3QgYWx3YXlzIGVt
aXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYg
cmVxdWlyZXMgaXQKLSAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNj
ZXNzKTsKLSNlbmRpZgotICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSk7CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTM5
NDgsMTkgKzM5MzYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRCeU9mZnNldDogewotI2lmIEVOQUJMRShX
UklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5kaWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQ
UigpOwogICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigp
OwotICAgICAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgICAg
IHdyaXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZVRhZ0dQUiwgbm9kZS0+Y2hpbGQzKCksIFdy
aXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzKTsKLSNlbmRpZgorCisgICAgICAgIHNwZWN1bGF0
ZShub2RlLCBub2RlLT5jaGlsZDIoKSk7CiAKICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0
b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUt
PnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CiAgICAgICAgIApAQCAtMzk4MSwxMiArMzk2NCw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BS
UmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgYmFzZS51c2Uo
KTsKLSAgICAgICAgdmFsdWUudXNlKCk7Ci0KLSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5j
b2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSLCBub2RlLT5j
aGlsZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBOb3REaXJlY3Qp
OworICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVl
VGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1i
ZXIoKSwgTm90RGlyZWN0KTsKICAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTQwMDAsMTIgKzM5ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIg
PSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVz
ZSgpOworICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZh
bHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJO
dW1iZXIoKSwgRGlyZWN0KTsKIAotICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmln
aW4sIGJhc2VHUFIsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIsIG5vZGUtPmNoaWxkMigp
LCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7Ci0KLSAgICAg
ICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDAyMywxMiArNDAw
MCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNh
c2UgUHV0R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaWYgKEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgd3JpdGVCYXJyaWVyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5jb2RlT3JpZ2lu
KSwgdmFsdWUudGFnR1BSKCksIG5vZGUtPmNoaWxkMSgpLCBXcml0ZUJhcnJpZXJGb3JWYXJpYWJs
ZUFjY2Vzcywgc2NyYXRjaFJlZyk7Ci0gICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogaWYg
d2UgaGFwcGVuIHRvIGhhdmUgYSBzcGFyZSByZWdpc3RlciAtIGFuZCBfT05MWV8gaWYgd2UgaGFw
cGVuIHRvIGhhdmUKICAgICAgICAgLy8gYSBzcGFyZSByZWdpc3RlciAtIGEgZ29vZCBvcHRpbWl6
YXRpb24gd291bGQgYmUgdG8gcHV0IHRoZSByZWdpc3RlciBwb2ludGVyIGludG8KQEAgLTQ2OTQs
NiArNDY2NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGNvbXBpbGVJbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFN0b3Jl
QmFycmllcjoKKyAgICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgU3Rv
cmVCYXJyaWVyV2l0aE51bGxDaGVjazogeworICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewog
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2Us
IEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICBicmVhazsKQEAgLTQ3NTIsNiArNDczMCwzNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShu
b2RlKTsKIH0KIAorI2lmIEVOQUJMRShHR0MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJh
cnJpZXIoR1BSUmVnIG93bmVyR1BSLCBHUFJSZWcgdmFsdWVUYWdHUFIsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzTm90Q2VsbDsKKyAgICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisg
ICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
dmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
OworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNX
cml0ZUJhcnJpZXIobV9qaXQsIG93bmVyR1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIHN0
b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIob3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Cisg
ICAgZGVmaW5pdGVseU5vdE1hcmtlZC5saW5rKCZtX2ppdCk7CisKKyAgICBpZiAoIWlzS25vd25D
ZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7Cit9
CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJS
ZWcgdmFsdWVUYWdHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNj
cmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKKyAgICBpZiAoIWlz
S25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbCA9IG1faml0LmJy
YW5jaDMyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAg
ZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVyKTsK
KyAgICBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIp
OworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmbV9qaXQpOworCisgICAgaWYgKCFpc0tu
b3duQ2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQorICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQp
OworfQorI2VuZGlmIC8vIEVOQUJMRShHR0MpCisKICNlbmRpZgogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwx
MCArMjA2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2FjaGVkR2V0QnlJZChDb2RlTwogICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcg
YmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQ
UiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBwdXRLaW5kLCBKSVRDb21waWxl
cjo6SnVtcCBzbG93UGF0aFRhcmdldCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNhY2hlZFB1dEJ5
SWQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHZhbHVlR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2luZCBw
dXRLaW5kLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCkKIHsKLSAgICB3cml0ZUJh
cnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc2NyYXRjaEdQUik7Ci0KICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKICAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIGNvZGVPcmlnaW4sIHVzZWRSZWdpc3RlcnMoKSwgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCiAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIHNjcmF0Y2hHUFIsIGZhbHNlLApAQCAtMTQ3Myw2ICsxNDcx
LDIzIEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1
cm4gbm90TnVtYmVyOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQmFzZVZhbHVl
U3RvcmVCYXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpCit7CisjaWYgRU5B
QkxFKEdHQykKKyAgICBBU1NFUlQoIWlzS25vd25Ob3RDZWxsKHZhbHVlRWRnZS5ub2RlKCkpKTsK
KworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIHZhbHVlRWRnZSk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gxKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKworICAgIHdy
aXRlQmFycmllcihiYXNlLmdwcigpLCB2YWx1ZS5ncHIoKSwgdmFsdWVFZGdlLCBzY3JhdGNoMS5n
cHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oYmFzZUVkZ2Up
OworICAgIFVOVVNFRF9QQVJBTSh2YWx1ZUVkZ2UpOworI2VuZGlmCit9CisKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlKiBub2RlKQogewogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0yOTA3LDExICsy
OTIyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCZWxvdywgdmFsdWVSZWcsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdp
c3RlcikpOwogICAgICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgICAgIGlmIChhcnJheU1v
ZGUudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzICYmIEhlYXA6OmlzV3JpdGVCYXJyaWVyRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VSZWcsIHZhbHVlLmdwcigpLCBjaGlsZDMs
IFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzY3JhdGNoLmdwcigpKTsKLSAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBjaGlsZDQp
OwogICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwpAQCAtMjk4
NywxMSArMjk5Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmll
ckVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMp
OwotICAgICAgICAgICAgICAgIHdyaXRlQmFycmllcihiYXNlUmVnLCB2YWx1ZS5ncHIoKSwgY2hp
bGQzLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSk7Ci0gICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgY2hp
bGQ0KTsKICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKQEAg
LTMwOTIsNyArMzA5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCiAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAogICAgICAgICAgICAgICAgICAg
ICAgICAgYmFzZVJlZywgQXJndW1lbnRzOjpvZmZzZXRPZlNsb3dBcmd1bWVudERhdGEoKSkpKTsK
LSAgICAKKwogICAgICAgICAgICAgbV9qaXQubW92ZShwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcp
OwogICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaDJSZWcsIHNjcmF0
Y2gyUmVnKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoCkBAIC0zMTkzLDExICszMTk4LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkludDMyICYmIEhlYXA6OmlzV3JpdGVC
YXJyaWVyRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBu
b2RlLT5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHNjcmF0Y2guZ3By
KCksIHN0b3JhZ2VMZW5ndGhHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCiAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5n
dGgoKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCkpOwpAQCAtMzI0MiwxMSArMzI0Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwogCi0gICAgICAgICAgICBpZiAoSGVhcDo6aXNXcml0ZUJhcnJpZXJFbmFibGVk
KCkpIHsKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUtPmNoaWxkMigp
LCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc2NyYXRjaC5ncHIoKSwgc3RvcmFnZUxl
bmd0aEdQUik7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNl
dCgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVmdXNl
IHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCkBAIC0zOTc5LDE4ICszOTc0LDE1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjogewotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHJl
Z2lzdGVycyh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2hS
ZWdpc3Rlcih0aGlzKTsKIAotICAgICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlZ2lzdGVyc0dQUiA9IHJlZ2lzdGVycy5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaFJlZ2lzdGVyLmdwcigpOworCisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBub2Rl
LT5jaGlsZDEoKSk7CiAKICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwgSklUQ29tcGls
ZXI6OkFkZHJlc3MocmVnaXN0ZXJzR1BSLCBub2RlLT52YXJOdW1iZXIoKSAqIHNpemVvZihSZWdp
c3RlcikpKTsKLSAgICAgICAgd3JpdGVCYXJyaWVyKHNjb3BlR1BSLCB2YWx1ZUdQUiwgbm9kZS0+
Y2hpbGQzKCksIFdyaXRlQmFycmllckZvclZhcmlhYmxlQWNjZXNzLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQxNzksMTQg
KzQxNzEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFu
c2l0aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CiAK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICAKLSNpZiBFTkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcp
Ci0gICAgICAgIC8vIE11c3QgYWx3YXlzIGVtaXQgdGhpcyB3cml0ZSBiYXJyaWVyIGFzIHRoZSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbiBpdHNlbGYgcmVxdWlyZXMgaXQKLSAgICAgICAgd3JpdGVCYXJy
aWVyKGJhc2VHUFIsIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJl
LCBXcml0ZUJhcnJpZXJGb3JHZW5lcmljQWNjZXNzKTsKLSNlbmRpZgotICAgICAgICAKICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSk7CiAgICAgICAgIAogICAg
ICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTQyNDUsMjMgKzQyMzMsMjAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQ
dXRCeU9mZnNldDogewotI2lmIEVOQUJMRShXUklURV9CQVJSSUVSX1BST0ZJTElORykKLSAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0jZW5k
aWYKICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gxKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDIodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdw
cigpOwogICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAgICAgCi0j
aWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgICAgICB3cml0ZUJhcnJpZXIo
YmFzZS5ncHIoKSwgdmFsdWUuZ3ByKCksIG5vZGUtPmNoaWxkMygpLCBXcml0ZUJhcnJpZXJGb3JQ
cm9wZXJ0eUFjY2Vzcyk7Ci0jZW5kaWYKKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+
Y2hpbGQyKCkpOwogCiAgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0
YSA9IG1faml0LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldOwogICAgICAgICAKICAgICAgICAgbV9qaXQuc3RvcmU2NCh2YWx1ZUdQUiwg
SklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoc3Rv
cmFnZUFjY2Vzc0RhdGEub2Zmc2V0KSkpOwotICAgICAgICAKKwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDI3NSwxMiArNDI2MCw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgR1BSUmVnIHZhbHVl
R1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIGJhc2UudXNlKCk7Ci0gICAgICAgIHZhbHVlLnVzZSgp
OworICAgICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVl
R1BSLCBzY3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIE5vdERpcmVjdCk7CiAK
LSAgICAgICAgY2FjaGVkUHV0QnlJZChub2RlLT5jb2RlT3JpZ2luLCBiYXNlR1BSLCB2YWx1ZUdQ
Uiwgbm9kZS0+Y2hpbGQyKCksIHNjcmF0Y2hHUFIsIG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSwg
Tm90RGlyZWN0KTsKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTQyOTMsMTIgKzQyNzUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigp
OwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBiYXNlLnVzZSgpOwotICAgICAgICB2YWx1ZS51c2UoKTsKLQotICAgICAgICBjYWNo
ZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLT5jaGls
ZDIoKSwgc2NyYXRjaEdQUiwgbm9kZS0+aWRlbnRpZmllck51bWJlcigpLCBEaXJlY3QpOworICAg
ICAgICBjYWNoZWRQdXRCeUlkKG5vZGUtPmNvZGVPcmlnaW4sIGJhc2VHUFIsIHZhbHVlR1BSLCBz
Y3JhdGNoR1BSLCBub2RlLT5pZGVudGlmaWVyTnVtYmVyKCksIERpcmVjdCk7CiAKLSAgICAgICAg
bm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtNDMxMywxNCArNDI5Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2Ug
UHV0R2xvYmFsVmFyOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChIZWFwOjppc1dyaXRlQmFycmllckVu
YWJsZWQoKSkgewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHdyaXRlQmFycmllcihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+Y29k
ZU9yaWdpbiksIHZhbHVlLmdwcigpLCBub2RlLT5jaGlsZDEoKSwgV3JpdGVCYXJyaWVyRm9yVmFy
aWFibGVBY2Nlc3MsIHNjcmF0Y2hSZWcpOwotICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAg
IG1faml0LnN0b3JlNjQodmFsdWUuZ3ByKCksIG5vZGUtPnJlZ2lzdGVyUG9pbnRlcigpKTsKIAog
ICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTQ5NzMsNiArNDk0NSwxMyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6Cisg
ICAgY2FzZSBDb25kaXRpb25hbFN0b3JlQmFycmllcjoKKyAgICBjYXNlIFN0b3JlQmFycmllcldp
dGhOdWxsQ2hlY2s6IHsKKyAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcihub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAjaWYgRU5BQkxFKEZUTF9KSVQpICAgICAgICAKICAgICBjYXNl
IENoZWNrVGllclVwSW5Mb29wOiB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5icmFuY2hBZGQzMigKQEAgLTUwNTMsNiArNTAzMiwzNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIHVzZShub2RlKTsKIH0KIAorI2lm
IEVOQUJMRShHR0MpCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoR1BSUmVnIG93
bmVyR1BSLCBHUFJSZWcgdmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJlZyBzY3JhdGNoMSwg
R1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbDsKKyAg
ICBpZiAoIWlzS25vd25DZWxsKHZhbHVlVXNlLm5vZGUoKSkpCisgICAgICAgIGlzTm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5
Tm90TWFya2VkID0gZ2VuZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gx
LCBzY3JhdGNoMik7CisgICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2Ny
YXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsK
KworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RD
ZWxsLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RD
ZWxsOworICAgIGlmICghaXNLbm93bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCB2YWx1ZUdQ
UiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKworICAgIEpJVENvbXBpbGVyOjpKdW1wIGRl
ZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKG1faml0LCBvd25lcik7Cisg
ICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsK
KyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKKworICAgIGlmICghaXNLbm93
bkNlbGwodmFsdWVVc2Uubm9kZSgpKSkKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoR0dDKQorCiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBA
CiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJp
ZXJCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC05MDksNTMgKzkxMCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnVzZUNoaWxkcmVuKE5vZGUqIG4KICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OndyaXRlQmFycmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1
ZVVzZSwgV3JpdGVCYXJyaWVyVXNlS2luZCB1c2VLaW5kLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKLXsKLSAgICBVTlVTRURfUEFSQU0ob3duZXJHUFIpOwotICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZUdQUik7Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gxKTsKLSAgICBVTlVTRURf
UEFSQU0oc2NyYXRjaDIpOwotICAgIFVOVVNFRF9QQVJBTSh1c2VLaW5kKTsKLQotICAgIGlmIChp
c0tub3duTm90Q2VsbCh2YWx1ZVVzZS5ub2RlKCkpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoV1JJVEVfQkFSUklFUl9QUk9GSUxJTkcpCi0gICAgSklUQ29tcGlsZXI6OmVtaXRDb3Vu
dChtX2ppdCwgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmppdENvdW50ZXJGb3IodXNlS2luZCkpOwot
I2VuZGlmCi19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihHUFJSZWcgb3du
ZXJHUFIsIEpTQ2VsbCogdmFsdWUsIFdyaXRlQmFycmllclVzZUtpbmQgdXNlS2luZCwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCi17Ci0gICAgVU5VU0VEX1BBUkFNKG93bmVyR1BS
KTsKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIFVOVVNFRF9QQVJBTShzY3JhdGNoMSk7
Ci0gICAgVU5VU0VEX1BBUkFNKHNjcmF0Y2gyKTsKLSAgICBVTlVTRURfUEFSQU0odXNlS2luZCk7
Ci0gICAgCi0gICAgaWYgKEhlYXA6OmlzTWFya2VkKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFKFdSSVRFX0JBUlJJRVJfUFJPRklMSU5HKQotICAgIEpJVENvbXBpbGVyOjpl
bWl0Q291bnQobV9qaXQsIFdyaXRlQmFycmllckNvdW50ZXJzOjpqaXRDb3VudGVyRm9yKHVzZUtp
bmQpKTsKLSNlbmRpZgotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lciwgR1BSUmVnIHZhbHVlR1BSLCBFZGdlIHZhbHVlVXNlLCBXcml0ZUJhcnJpZXJV
c2VLaW5kIHVzZUtpbmQsIEdQUlJlZyBzY3JhdGNoKQotewotICAgIFVOVVNFRF9QQVJBTShvd25l
cik7Ci0gICAgVU5VU0VEX1BBUkFNKHZhbHVlR1BSKTsKLSAgICBVTlVTRURfUEFSQU0oc2NyYXRj
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVzZUtpbmQpOwotCi0gICAgaWYgKGlzS25vd25Ob3RDZWxs
KHZhbHVlVXNlLm5vZGUoKSkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShXUklURV9C
QVJSSUVSX1BST0ZJTElORykKLSAgICBKSVRDb21waWxlcjo6ZW1pdENvdW50KG1faml0LCBXcml0
ZUJhcnJpZXJDb3VudGVyczo6aml0Q291bnRlckZvcih1c2VLaW5kKSk7Ci0jZW5kaWYKLX0KLQog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CkBAIC00MzI5LDI2ICs0
MjgzLDI2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICB9
CiAgICAgCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gxKHRoaXMpOwogICAgICAgICAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgICAgICAKICAgICBBU1NFUlQoIW5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCkpOwogICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KICAgICAgICAgZW1pdEFs
bG9jYXRlQmFzaWNTdG9yYWdlKAotICAgICAgICAgICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSAqIHNpemVvZihKU1ZhbHVl
KSksIHNjcmF0Y2hHUFIxKTsKIAotICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbTMyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSKTsKKyAgICBtX2ppdC5h
ZGRQdHIoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwg
c2NyYXRjaEdQUjEpOwogICAgICAgICAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHksIHNjcmF0Y2hHUFIpKTsKLSAgICAgICAgCi0gICAg
bV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUiwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSk7Ci0gICAgICAgIAotICAgIHN0b3JhZ2VSZXN1
bHQoc2NyYXRjaEdQUiwgbm9kZSk7CisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhp
cywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5LCBz
Y3JhdGNoR1BSMSkpOworCisgICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjEsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOworCisg
ICAgc3RvcmFnZVJlc3VsdChzY3JhdGNoR1BSMSwgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCkBAIC00
MzY3LDYgKzQzMjEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQ
cgogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQcm9wZXJ0eVN0b3JhZ2UsIHJlc3Vs
dC5ncHIoKSwgYmFzZUdQUiwgbmV3U2l6ZSAvIHNpemVvZihKU1ZhbHVlKSk7CiAgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3ROdWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQu
YnJlYWtwb2ludCgpOworICAgICAgICBub3ROdWxsLmxpbmsoJm1faml0KTsKKwogICAgICAgICBz
dG9yYWdlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC00MzgyLDIwICs0MzQwLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFs
bG9jYXRlUHIKICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAg
ICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQotICAgICAgICBlbWl0QWxsb2Nh
dGVCYXNpY1N0b3JhZ2UoVHJ1c3RlZEltbTMyKG5ld1NpemUpLCBzY3JhdGNoR1BSMik7CisgICAg
ICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZShUcnVzdGVkSW1tMzIobmV3U2l6ZSksIHNjcmF0
Y2hHUFIxKTsKIAotICAgIG1faml0LmFkZFB0cihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKHNp
emVvZihJbmRleGluZ0hlYWRlcikpLCBzY3JhdGNoR1BSMik7CisgICAgbV9qaXQuYWRkUHRyKEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksIHNjcmF0Y2hH
UFIxKTsKICAgICAgICAgCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQ
YXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Us
IHNjcmF0Y2hHUFIyLCBuZXdTaXplIC8gc2l6ZW9mKEpTVmFsdWUpKSk7Ci0gICAgLy8gV2UgaGF2
ZSBzY3JhdGNoR1BSMiA9IG5ldyBzdG9yYWdlLCBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gKKyAgICAg
ICAgc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgc2NyYXRjaEdQUjEsIG5ld1NpemUgLyBzaXplb2YoSlNWYWx1ZSkpKTsKKworICAg
IC8vIFdlIGhhdmUgc2NyYXRjaEdQUjEgPSBuZXcgc3RvcmFnZSwgc2NyYXRjaEdQUjIgPSBzY3Jh
dGNoCiAgICAgZm9yIChwdHJkaWZmX3Qgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgc3RhdGljX2Nhc3Q8
cHRyZGlmZl90PihvbGRTaXplKTsgb2Zmc2V0ICs9IHNpemVvZih2b2lkKikpIHsKLSAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BSLCAtKG9mZnNl
dCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQUjEpOwotICAg
ICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMSwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUjIsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZvaWQqKSkpKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6QWRkcmVzcyhvbGRTdG9yYWdlR1BS
LCAtKG9mZnNldCArIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZih2b2lkKikpKSwgc2NyYXRjaEdQ
UjIpOworICAgICAgICBtX2ppdC5zdG9yZVB0cihzY3JhdGNoR1BSMiwgSklUQ29tcGlsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUjEsIC0ob2Zmc2V0ICsgc2l6ZW9mKEpTVmFsdWUpICsgc2l6ZW9mKHZv
aWQqKSkpKTsKICAgICB9Ci0gICAgbV9qaXQuc3RvcmVQdHIoc2NyYXRjaEdQUjIsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSkpOwotICAg
IAotICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjIsIG5vZGUpOworICAgIG1faml0LnN0b3Jl
UHRyKHNjcmF0Y2hHUFIxLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6
YnV0dGVyZmx5T2Zmc2V0KCkpKTsKKworICAgIHN0b3JhZ2VSZXN1bHQoc2NyYXRjaEdQUjEsIG5v
ZGUpOwogfQogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OnRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0
QnlWYWwoR1BSVGVtcG9yYXJ5JiB0ZW1wb3JhcnksIEFycmF5TW9kZSBhcnJheU1vZGUpCkBAIC01
NDUxLDYgKzU0MTAsMjQ4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxpbmtCcmFuY2hlcygpCiAg
ICAgfQogfQogCisjaWYgRU5BQkxFKEdHQykKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVT
dG9yZUJhcnJpZXIoTm9kZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICBjYXNlIENvbmRpdGlvbmFsU3RvcmVCYXJyaWVyOiB7CisgICAgICAgIGNvbXBpbGVCYXNlVmFs
dWVTdG9yZUJhcnJpZXIobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBTdG9yZUJhcnJpZXI6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBzY3JhdGNoMSh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRo
aXMpOworICAgIAorICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3By
KCksIHNjcmF0Y2gyLmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBT
dG9yZUJhcnJpZXJXaXRoTnVsbENoZWNrOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2Uo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhp
cyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKKyAgICAKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bGwgPSBtX2ppdC5icmFu
Y2hUZXN0NjQoSklUQ29tcGlsZXI6Olplcm8sIGJhc2UuZ3ByKCkpOworICAgICAgICB3cml0ZUJh
cnJpZXIoYmFzZS5ncHIoKSwgc2NyYXRjaDEuZ3ByKCksIHNjcmF0Y2gyLmdwcigpKTsKKyNlbHNl
CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVsbCA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpFcXVhbCwgYmFzZS50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpKTsKKyAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2UucGF5bG9hZEdQUigpLCBzY3Jh
dGNoMS5ncHIoKSwgc2NyYXRjaDIuZ3ByKCkpOworI2VuZGlmCisgICAgICAgIGlzTnVsbC5saW5r
KCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIG5vUmVzdWx0KG5vZGUpOworfQorCitKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6Z2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93bmVyLCBH
UFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAgICBqaXQubW92ZShvd25lciwg
c2NyYXRjaDEpOworICAgIGppdC5tb3ZlKG93bmVyLCBzY3JhdGNoMik7CisKKyAgICBqaXQuYW5k
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKE1hcmtlZEJsb2NrOjpibG9ja01hc2sp
LCBzY3JhdGNoMSk7CisgICAgaml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih+TWFya2VkQmxvY2s6OmJsb2NrTWFzayksIHNjcmF0Y2gyKTsKKworICAgIC8vIFNoaWZ0IGlu
ZGV4CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBqaXQucnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihNYXJrZWRCbG9jazo6YXRvbVNoaWZ0QW1vdW50ICsgTWFya2VkQmxvY2s6
Om1hcmtCeXRlU2hpZnRBbW91bnQpLCBzY3JhdGNoMik7CisjZWxzZQorICAgIGppdC5yc2hpZnQz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE1hcmtlZEJsb2NrOjphdG9tU2hpZnRBbW91
bnQgKyBNYXJrZWRCbG9jazo6bWFya0J5dGVTaGlmdEFtb3VudCksIHNjcmF0Y2gyKTsKKyNlbmRp
ZgorCisgICAgLy8gRW1pdCBsb2FkIGFuZCBicmFuY2gKKyAgICByZXR1cm4gaml0LmJyYW5jaFRl
c3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHNjcmF0
Y2gxLCBzY3JhdGNoMiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBNYXJrZWRCbG9jazo6b2Zm
c2V0T2ZNYXJrcygpKSk7Cit9CisKK0pJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpn
ZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBKU0NlbGwqIG93bmVyKQorewor
ICAgIE1hcmtlZEJsb2NrKiBibG9jayA9IE1hcmtlZEJsb2NrOjpibG9ja0Zvcihvd25lcik7Cisg
ICAgc2l6ZV90IG1hcmtJbmRleCA9IChyZWludGVycHJldF9jYXN0PHNpemVfdD4ob3duZXIpICYg
fk1hcmtlZEJsb2NrOjpibG9ja01hc2spID4+IChNYXJrZWRCbG9jazo6YXRvbVNoaWZ0QW1vdW50
ICsgTWFya2VkQmxvY2s6Om1hcmtCeXRlU2hpZnRBbW91bnQpOworICAgIHVpbnQ4X3QqIGFkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihyZWludGVycHJldF9jYXN0PGNoYXIqPihi
bG9jaykgKyBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZNYXJrcygpKSArIG1hcmtJbmRleDsKKyAgICBy
ZXR1cm4gaml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxl
cjo6QWJzb2x1dGVBZGRyZXNzKGFkZHJlc3MpKTsKK30KKworTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
U3BlY3VsYXRpdmVKSVQ6OnN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMikKK3sKKyAg
ICBBU1NFUlQoc2NyYXRjaDEgIT0gc2NyYXRjaDIpOworICAgIC8vIExvYWQgV3JpdGVCYXJyaWVy
QnVmZmVyIGZyb20gSGVhcAorICAgIFdyaXRlQmFycmllckJ1ZmZlciogd3JpdGVCYXJyaWVyQnVm
ZmVyID0gJmppdC52bSgpLT5oZWFwLm1fd3JpdGVCYXJyaWVyQnVmZmVyOworICAgIGppdC5tb3Zl
KFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyKSwgc2NyYXRjaDEpOworICAgIC8vIExv
YWQgY3VycmVudEluZGV4CisgICAgaml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
Y3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSksIHNjcmF0
Y2gyKTsKKyAgICAvLyBCcmFuY2ggaWYgY3VycmVudEluZGV4ID49IGNhcGFjaXR5CisgICAgSklU
Q29tcGlsZXI6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gx
LCBXcml0ZUJhcnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgIC8vIFN0b3Jl
IG5ldyBjdXJyZW50SW5kZXgKKyAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
Mik7CisgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSk7CisKKyAg
ICAvLyBMb2FkIGJ1ZmZlcgorICAgIGppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwgc2NyYXRjaDEp
OworICAgIC8vIFN0b3JlIGNlbGwgaW50byBidWZmZXIuIFdlIHVzZSBhbiBvZmZzZXQgb2YgLXNp
emVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2NyYXRjaDIuCisgICAg
aml0LnN0b3JlUHRyKGNlbGwsIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaDEsIHNj
cmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGludDMyX3Q+KC1z
aXplb2Yodm9pZCopKSkpOworCisgICAgLy8gSnVtcCB0byBkb25lCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgLy8gTGluayBmcm9tIGJyYW5jaAorICAgIG5l
ZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisKKyAgICAvLyBDYWxsIEMgc2xvdyBwYXRoLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgKytpKQor
ICAgICAgICBqaXQuc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihpKSwgJmppdC52bSgpLT53
cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSk7CisKKyNpZiBDUFUoWDg2KQorICAgIGppdC5w
dXNoKHNjcmF0Y2gxKTsKKyAgICBqaXQucHVzaChzY3JhdGNoMSk7CisjZW5kaWYKKworICAgIGpp
dC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoY2VsbCk7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisKKyNpZiBDUFUoWDg2KQorICAgIGppdC5wb3Aoc2Ny
YXRjaDEpOworICAgIGppdC5wb3Aoc2NyYXRjaDEpOworI2VuZGlmCisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykKKyAgICAgICAgaml0Lmxv
YWRQdHIoJmppdC52bSgpLT53cml0ZUJhcnJpZXJSZWdpc3RlckJ1ZmZlcltpXSwgR1BSSW5mbzo6
dG9SZWdpc3RlcihpKSk7CisKKyAgICAvLyBMaW5rIERvbmUKKyAgICBkb25lLmxpbmsoJmppdCk7
CisKKyAgICByZXR1cm4gY2FsbDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dy
aXRlQmFycmllckJ1ZmZlcihHUFJSZWcgY2VsbCwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpCit7CisgICAgQVNTRVJUKHNjcmF0Y2gxICE9IHNjcmF0Y2gyKTsKKyAgICBXcml0ZUJh
cnJpZXJCdWZmZXIqIHdyaXRlQmFycmllckJ1ZmZlciA9ICZtX2ppdC52bSgpLT5oZWFwLm1fd3Jp
dGVCYXJyaWVyQnVmZmVyOworICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih3cml0ZUJhcnJp
ZXJCdWZmZXIpLCBzY3JhdGNoMSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgp
KSwgc2NyYXRjaDIpOworICAgIEpJVENvbXBpbGVyOjpKdW1wIG5lZWRUb0ZsdXNoID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmNhcGFjaXR5T2Zm
c2V0KCkpKTsKKworICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOwor
ICAgIG1faml0LnN0b3JlMzIoc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2gxLCBXcml0ZUJhcnJpZXJCdWZmZXI6OmN1cnJlbnRJbmRleE9mZnNldCgpKSk7CisKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gxLCBXcml0ZUJhcnJp
ZXJCdWZmZXI6OmJ1ZmZlck9mZnNldCgpKSwgc2NyYXRjaDEpOworICAgIC8vIFdlIHVzZSBhbiBv
ZmZzZXQgb2YgLXNpemVvZih2b2lkKikgYmVjYXVzZSB3ZSBhbHJlYWR5IGFkZGVkIDEgdG8gc2Ny
YXRjaDIuCisgICAgbV9qaXQuc3RvcmVQdHIoY2VsbCwgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzY3JhdGNoMSwgc2NyYXRjaDIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworICAgIG5lZWRUb0ZsdXNoLmxpbmsoJm1faml0KTsKKworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKEludmFsaWRHUFJSZWcpOworICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIGNlbGwpOworICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJlZyk7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihKU0Nl
bGwqIGNlbGwsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIEFTU0VS
VChzY3JhdGNoMSAhPSBzY3JhdGNoMik7CisgICAgV3JpdGVCYXJyaWVyQnVmZmVyKiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSAmbV9qaXQudm0oKS0+aGVhcC5tX3dyaXRlQmFycmllckJ1ZmZlcjsKKyAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyKSwgc2NyYXRjaDEp
OworICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3Jp
dGVCYXJyaWVyQnVmZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSksIHNjcmF0Y2gyKTsKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBuZWVkVG9GbHVzaCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpjYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICBtX2pp
dC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICBtX2ppdC5zdG9yZTMyKHNj
cmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVm
ZmVyOjpjdXJyZW50SW5kZXhPZmZzZXQoKSkpOworCisgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoMSwgV3JpdGVCYXJyaWVyQnVmZmVyOjpidWZmZXJPZmZz
ZXQoKSksIHNjcmF0Y2gxKTsKKyAgICAvLyBXZSB1c2UgYW4gb2Zmc2V0IG9mIC1zaXplb2Yodm9p
ZCopIGJlY2F1c2Ugd2UgYWxyZWFkeSBhZGRlZCAxIHRvIHNjcmF0Y2gyLgorICAgIG1faml0LnN0
b3JlUHRyKFRydXN0ZWRJbW1QdHIoY2VsbCksIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2Ny
YXRjaDEsIHNjcmF0Y2gyLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKKyAgICBuZWVkVG9GbHVzaC5saW5rKCZtX2ppdCk7CisKKyAgICAvLyBD
YWxsIEMgc2xvdyBwYXRoCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoSW52YWxpZEdQUlJl
Zyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciwg
Y2VsbCk7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhJbnZhbGlkR1BSUmVnKTsKKworICAg
IGRvbmUubGluaygmbV9qaXQpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjp3cml0ZUJhcnJp
ZXIoR1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJl
ZyBzY3JhdGNoMikKK3sKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodmFsdWUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkZWZpbml0ZWx5Tm90TWFya2VkID0gZ2Vu
ZXJpY1dyaXRlQmFycmllcihtX2ppdCwgb3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7Cisg
ICAgc3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihvd25lckdQUiwgc2NyYXRjaDEsIHNjcmF0Y2gy
KTsKKyAgICBkZWZpbml0ZWx5Tm90TWFya2VkLmxpbmsoJm1faml0KTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6b3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3du
ZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKQoreworICAgIFVOVVNFRF9QQVJB
TShqaXQpOworICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisgICAgVU5VU0VEX1BBUkFNKHNjcmF0
Y2gxKTsKKyAgICBVTlVTRURfUEFSQU0oc2NyYXRjaDIpOworICAgIEFTU0VSVChvd25lciAhPSBz
Y3JhdGNoMSk7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0Y2gyKTsKKworICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRlZmluaXRlbHlOb3RNYXJrZWQgPSBnZW5lcmljV3JpdGVCYXJyaWVyKGppdCwg
b3duZXIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnN0b3JlUHRy
KEdQUkluZm86OnRvUmVnaXN0ZXIoaSksICZqaXQudm0oKS0+d3JpdGVCYXJyaWVyUmVnaXN0ZXJC
dWZmZXJbaV0pOworCisgICAgLy8gV2UgbmVlZCB0aGVzZSBleHRyYSBzbG90cyBiZWNhdXNlIHNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSB3aWxsIHVzZSBwb2tlIG9uIHg4Ni4KKyNpZiBDUFUo
WDg2KQorICAgIGppdC5wdXNoKHNjcmF0Y2gxKTsKKyAgICBqaXQucHVzaChzY3JhdGNoMSk7Cisg
ICAgaml0LnB1c2goc2NyYXRjaDEpOworI2VuZGlmCisKKyAgICBqaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKG93bmVyKTsKKyAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbk9TUldyaXRlQmFycmllcikpLCBzY3JhdGNoMSk7Cisg
ICAgaml0LmNhbGwoc2NyYXRjaDEpOworCisjaWYgQ1BVKFg4NikKKyAgICBqaXQucG9wKHNjcmF0
Y2gxKTsKKyAgICBqaXQucG9wKHNjcmF0Y2gxKTsKKyAgICBqaXQucG9wKHNjcmF0Y2gxKTsKKyNl
bmRpZgorICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KQorICAgICAgICBqaXQubG9hZFB0cigmaml0LnZtKCktPndyaXRlQmFycmllclJlZ2lzdGVy
QnVmZmVyW2ldLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpKTsgCisKKyAgICBkZWZpbml0ZWx5Tm90
TWFya2VkLmxpbmsoJmppdCk7Cit9CisKK01hY3JvQXNzZW1ibGVyOjpDYWxsIFNwZWN1bGF0aXZl
SklUOjp3cml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBvd25lciwgR1BSUmVn
IHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgQVNTRVJUKG93bmVyICE9IHNjcmF0
Y2gxKTsKKyAgICBBU1NFUlQob3duZXIgIT0gc2NyYXRjaDIpOworCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIoaml0LCBvd25l
ciwgc2NyYXRjaDEsIHNjcmF0Y2gyKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0g
c3RvcmVUb1dyaXRlQmFycmllckJ1ZmZlcihqaXQsIG93bmVyLCBzY3JhdGNoMSwgc2NyYXRjaDIp
OworICAgIGRlZmluaXRlbHlOb3RNYXJrZWQubGluaygmaml0KTsKKyAgICByZXR1cm4gY2FsbDsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6d3JpdGVCYXJyaWVyKEdQUlJlZyBvd25lckdQUiwg
R1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpCit7CisgICAgSklUQ29tcGlsZXI6Okp1
bXAgZGVmaW5pdGVseU5vdE1hcmtlZCA9IGdlbmVyaWNXcml0ZUJhcnJpZXIobV9qaXQsIG93bmVy
R1BSLCBzY3JhdGNoMSwgc2NyYXRjaDIpOworICAgIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIo
b3duZXJHUFIsIHNjcmF0Y2gxLCBzY3JhdGNoMik7CisgICAgZGVmaW5pdGVseU5vdE1hcmtlZC5s
aW5rKCZtX2ppdCk7Cit9CisjZWxzZQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVN0b3Jl
QmFycmllcihOb2RlKiBub2RlKQoreworICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1faml0
LmdyYXBoKCksIG5vZGUsIHNwZWN1bGF0ZSk7CisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKEdHQykKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDkgKzI4OSwyMiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxp
ZChtX2N1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlQmFy
cmllcihHUFJSZWcgb3duZXJHUFIsIEdQUlJlZyB2YWx1ZUdQUiwgRWRnZSB2YWx1ZVVzZSwgV3Jp
dGVCYXJyaWVyVXNlS2luZCwgR1BSUmVnIHNjcmF0Y2hHUFIxID0gSW52YWxpZEdQUlJlZywgR1BS
UmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7Ci0gICAgdm9pZCB3cml0ZUJhcnJpZXIo
R1BSUmVnIG93bmVyR1BSLCBKU0NlbGwqIHZhbHVlLCBXcml0ZUJhcnJpZXJVc2VLaW5kLCBHUFJS
ZWcgc2NyYXRjaEdQUjEgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgc2NyYXRjaEdQUjIgPSBJbnZh
bGlkR1BSUmVnKTsKLSAgICB2b2lkIHdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCBHUFJSZWcg
dmFsdWVHUFIsIEVkZ2UgdmFsdWVVc2UsIFdyaXRlQmFycmllclVzZUtpbmQsIEdQUlJlZyBzY3Jh
dGNoR1BSMSA9IEludmFsaWRHUFJSZWcpOworI2lmIEVOQUJMRShHR0MpCisgICAgc3RhdGljIE1h
Y3JvQXNzZW1ibGVyOjpDYWxsIHN0b3JlVG9Xcml0ZUJhcnJpZXJCdWZmZXIoQ0NhbGxIZWxwZXJz
JiBqaXQsIEdQUlJlZyBjZWxsLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7Cisg
ICAgdm9pZCBzdG9yZVRvV3JpdGVCYXJyaWVyQnVmZmVyKEdQUlJlZyBjZWxsLCBHUFJSZWcgc2Ny
YXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCBzdG9yZVRvV3JpdGVCYXJyaWVyQnVm
ZmVyKEpTQ2VsbCosIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKworICAgIHN0
YXRpYyBKSVRDb21waWxlcjo6SnVtcCBnZW5lcmljV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYg
aml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoMSwgR1BSUmVnIHNjcmF0Y2gyKTsKKyAg
ICBzdGF0aWMgSklUQ29tcGlsZXI6Okp1bXAgZ2VuZXJpY1dyaXRlQmFycmllcihDQ2FsbEhlbHBl
cnMmIGppdCwgSlNDZWxsKiBvd25lcik7CisgICAgc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVy
KENDYWxsSGVscGVycyYsIEdQUlJlZyBvd25lciwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2Ny
YXRjaDIpOworICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCB3cml0ZUJhcnJpZXIoQ0Nh
bGxIZWxwZXJzJiwgR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNo
Mik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBHUFJSZWcgc2NyYXRjaDEs
IEdQUlJlZyBzY3JhdGNoMik7CisgICAgdm9pZCB3cml0ZUJhcnJpZXIoR1BSUmVnIG93bmVyLCBK
U0NlbGwqIHZhbHVlLCBHUFJSZWcgc2NyYXRjaDEsIEdQUlJlZyBzY3JhdGNoMik7CisKKyAgICB2
b2lkIHdyaXRlQmFycmllcihHUFJSZWcgb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVz
ZSwgR1BSUmVnIHNjcmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworICAgIHZvaWQgd3JpdGVCYXJy
aWVyKEpTQ2VsbCogb3duZXIsIEdQUlJlZyB2YWx1ZSwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNj
cmF0Y2gxLCBHUFJSZWcgc2NyYXRjaDIpOworI2VuZGlmCisgICAgdm9pZCBjb21waWxlU3RvcmVC
YXJyaWVyKE5vZGUqKTsKIAogICAgIHN0YXRpYyBHUFJSZWcgc2VsZWN0U2NyYXRjaEdQUihHUFJS
ZWcgcHJlc2VydmUxID0gSW52YWxpZEdQUlJlZywgR1BSUmVnIHByZXNlcnZlMiA9IEludmFsaWRH
UFJSZWcsIEdQUlJlZyBwcmVzZXJ2ZTMgPSBJbnZhbGlkR1BSUmVnLCBHUFJSZWcgcHJlc2VydmU0
ID0gSW52YWxpZEdQUlJlZykKICAgICB7CkBAIC03MDAsMTQgKzcxMywxNiBAQCBwdWJsaWM6CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIHZvaWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBH
UFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJlc3VsdEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
LCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBOZWVkVG9TcGlsbCk7Ci0gICAgdm9pZCBjYWNoZWRQdXRC
eUlkKENvZGVPcmlnaW4sIEdQUlJlZyBiYXNlLCBHUFJSZWcgdmFsdWUsIEVkZ2UgdmFsdWVVc2Us
IEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBK
SVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOwor
ICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZSwgR1BSUmVnIHZh
bHVlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHV0S2lu
ZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgp
KTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgdm9pZCBjYWNoZWRHZXRCeUlkKENvZGVP
cmlnaW4sIEdQUlJlZyBiYXNlVGFnR1BST3JOb25lLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQ
UlJlZyByZXN1bHRUYWdHUFIsIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBp
bGVyOjpKdW1wKCksIFNwaWxsUmVnaXN0ZXJzTW9kZSA9IE5lZWRUb1NwaWxsKTsKLSAgICB2b2lk
IGNhY2hlZFB1dEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcg
dmFsdWVUYWdHUFIsIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIsIEVkZ2UgdmFsdWVVc2UsIEdQUlJl
ZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQdXRLaW5kLCBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIHZv
aWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJl
ZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIs
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNs
b3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKICAgICAKICAgICB2
b2lkIGNvbXBpbGVJbihOb2RlKik7CiAgICAgCisgICAgdm9pZCBjb21waWxlQmFzZVZhbHVlU3Rv
cmVCYXJyaWVyKEVkZ2UmIGJhc2VFZGdlLCBFZGdlJiB2YWx1ZUVkZ2UpOworCiAgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGlu
dmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
KEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAg
ICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJv
b2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAtMTA1OSw2ICsxMDc0LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9
CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VD
IG9wZXJhdGlvbiwgSlNDZWxsKiBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIoYXJnMSkpOworICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOworICAgIH0KKwogICAgIEpJ
VENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNJY2Ygb3BlcmF0
aW9uLCBHUFJSZWcgYXJnMSwgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3Rl
ZEltbVB0cihpbmxpbmVDYWxsRnJhbWUpKTsKQEAgLTEwNzUsMTIgKzEwOTYsMjEgQEAgcHVibGlj
OgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3Rl
ZEltbTMyKGFyZzIpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2sob3BlcmF0aW9uKTsKICAgICB9Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJn
MikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
LCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJ
VE9wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgYXJnMSwgSlNDZWxsKiBhcmcyKQorICAg
IHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW1QdHIoYXJnMikpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVjayhvcGVyYXRpb24pOworICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24sIEpTQ2VsbCogYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1
c3RlZEltbVB0cihhcmcxKSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FVndzIG9wZXJhdGlvbiwgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQogICAgIHsKQEAgLTEzNDAsNyArMTM3MCw2IEBAIHB1
YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIsIGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRUpQUCBvcGVyYXRpb24sIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwg
dm9pZCogcG9pbnRlcikKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBhcmcyLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3Rv
cmVCYXJyaWVyRWxpc2lvblBoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RvcmVC
YXJyaWVyRWxpc2lvblBoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAi
c3RvcmUgYmFycmllciBlbGlzaW9uIikKKyAgICAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQorICAg
ICAgICAsIG1fY3VycmVudEluZGV4KDApCisgICAgeworICAgICAgICBtX2djQ2xvYmJlclNldC5h
ZGQoR0NTdGF0ZSk7CisgICAgfQorCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9j
a3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaGFuZGxlQmxvY2sobV9jdXJy
ZW50QmxvY2spOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIGNvdWxkQ2F1c2VHQyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHdyaXRlc092ZXJsYXAobV9ncmFwaCwgbm9kZSwgbV9nY0Nsb2JiZXJTZXQpOworICAg
IH0KKworICAgIGJvb2wgYWxsb2NhdGVzRnJlc2hPYmplY3QoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAg
ICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAg
ICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Cisg
ICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIG5vdGljZUZyZXNoT2JqZWN0KEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJp
ZXJzLCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGFsbG9jYXRlc0ZyZXNoT2Jq
ZWN0KG5vZGUpKTsKKyAgICAgICAgZG9udE5lZWRCYXJyaWVycy5hZGQobm9kZSk7CisgICAgfQor
CisgICAgTm9kZSogZ2V0QmFzZU9mU3RvcmUoTm9kZSogYmFycmllck5vZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoYmFycmllck5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOworICAgICAgICByZXR1
cm4gYmFycmllck5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICB9CisKKyAgICBib29sIHNob3Vs
ZEJlRWxpZGVkKEhhc2hTZXQ8Tm9kZSo+JiBkb250TmVlZEJhcnJpZXJzLCBOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmlzU3RvcmVCYXJyaWVyKCkpOworICAgICAgICBy
ZXR1cm4gZG9udE5lZWRCYXJyaWVycy5jb250YWlucyhub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwor
ICAgIH0KKworICAgIHZvaWQgZWxpZGVCYXJyaWVyKE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBBU1NFUlQobm9kZS0+aXNTdG9yZUJhcnJpZXIoKSk7CisgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZU5vZGUoSGFzaFNldDxOb2RlKj4m
IGRvbnROZWVkQmFycmllcnMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAoY291bGRD
YXVzZUdDKG5vZGUpKQorICAgICAgICAgICAgZG9udE5lZWRCYXJyaWVycy5jbGVhcigpOworCisg
ICAgICAgIGlmIChhbGxvY2F0ZXNGcmVzaE9iamVjdChub2RlKSkKKyAgICAgICAgICAgIG5vdGlj
ZUZyZXNoT2JqZWN0KGRvbnROZWVkQmFycmllcnMsIG5vZGUpOworCisgICAgICAgIGlmIChub2Rl
LT5vcCgpICE9IFN0b3JlQmFycmllcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBp
ZiAoc2hvdWxkQmVFbGlkZWQoZG9udE5lZWRCYXJyaWVycywgbm9kZSkpIHsKKyAgICAgICAgICAg
IGVsaWRlQmFycmllcihub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXRCYXNlT2ZTdG9yZShub2RlKTsKKyAgICAgICAgaWYgKCFi
YXNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChkb250TmVlZEJhcnJpZXJz
LmNvbnRhaW5zKGJhc2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkb250TmVlZEJh
cnJpZXJzLmFkZChiYXNlKTsKKyAgICB9CisKKyAgICBib29sIGhhbmRsZUJsb2NrKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj4gZG9udE5lZWRCYXJyaWVy
czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgbV9jdXJyZW50
SW5kZXggPSBpbmRleEluQmxvY2s7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICBoYW5kbGVOb2RlKGRvbnROZWVkQmFycmllcnMs
IG5vZGUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIENs
b2JiZXJTZXQgbV9nY0Nsb2JiZXJTZXQ7CisgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7
CisgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7Cit9OworICAgIAorYm9vbCBwZXJmb3JtU3Rv
cmVCYXJyaWVyRWxpc2lvbihHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2Ft
cGxpbmdSZWdpb24oIkRGRyBTdG9yZSBCYXJyaWVyIEVsaXNpb24gUGhhc2UiKTsKKyAgICByZXR1
cm4gcnVuUGhhc2U8U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlPihncmFwaCk7Cit9CisKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVy
RWxpc2lvblBoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZV9o
CisjZGVmaW5lIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZV9oCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKK2Jvb2wgcGVyZm9ybVN0b3JlQmFy
cmllckVsaXNpb24oR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTYw
NjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMzU0LDcgKzM1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBGbHVzaGVkQXQoZmx1c2hGb3JtYXQoKSwgbWFjaGluZUxvY2FsKCkpOwogICAg
IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZm
aWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKICAgICAvLyB3aWxsIGhh
dmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4g
QnV0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTYwNjgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2OSw2ICsyNjksOSBAQCBIZWFwOjpIZWFwKFZNKiB2bSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAgICAgLCBtX2NvcHlWaXNpdG9yKG1fc2hhcmVkRGF0YSkKICAgICAsIG1faGFuZGxlU2V0KHZt
KQogICAgICwgbV9pc1NhZmVUb0NvbGxlY3QoZmFsc2UpCisjaWYgRU5BQkxFKEdHQykKKyAgICAs
IG1fd3JpdGVCYXJyaWVyQnVmZmVyKDEyOCkKKyNlbmRpZgogICAgICwgbV92bSh2bSkKICAgICAs
IG1fbGFzdEdDTGVuZ3RoKDApCiAgICAgLCBtX2xhc3RDb2RlRGlzY2FyZFRpbWUoV1RGOjptb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkKQEAgLTk5Niw0ICs5OTksMTQgQEAgdm9pZCBIZWFw
OjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZgogICAgIGNvbGxlY3RJZk5lY2Vzc2FyeU9y
RGVmZXIoKTsKIH0KIAordm9pZCBIZWFwOjpmbHVzaFdyaXRlQmFycmllckJ1ZmZlcihKU0NlbGwq
IGNlbGwpCit7CisjaWYgRU5BQkxFKEdHQykKKyAgICBtX3dyaXRlQmFycmllckJ1ZmZlci5mbHVz
aCgqdGhpcyk7CisgICAgbV93cml0ZUJhcnJpZXJCdWZmZXIuYWRkKGNlbGwpOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oY2VsbCk7CisjZW5kaWYKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNjA2ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3IuaCIKICNp
bmNsdWRlICJXZWFrSGFuZGxlT3duZXIuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXJCdWZmZXIu
aCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXJTdXBwb3J0LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hD
b3VudGVkU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAgLTc3LDYgKzc4LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhlYXApOwogICAg
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJVDsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IERGRzo6U3BlY3VsYXRpdmVKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBHQ1RocmVhZFNoYXJl
ZERhdGE7CiAgICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTVmFsdWUpOyAvLyAwIGZv
ciBpbW1lZGlhdGUgdmFsdWVzCiAgICAgICAgIHN0YXRpYyBIZWFwKiBoZWFwKGNvbnN0IEpTQ2Vs
bCopOwpAQCAtOTMsMTAgKzk1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
dm9pZCBzZXRNYXJrZWQoY29uc3Qgdm9pZCopOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzV3Jp
dGVCYXJyaWVyRW5hYmxlZCgpOworICAgICAgICBzdGF0aWMgdm9pZCB3cml0ZUJhcnJpZXIoY29u
c3QgSlNDZWxsKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHdyaXRlQmFycmllcihjb25zdCBKU0Nl
bGwqLCBKU1ZhbHVlKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVCYXJyaWVyKGNvbnN0IEpT
Q2VsbCosIEpTQ2VsbCopOwogICAgICAgICBzdGF0aWMgdWludDhfdCogYWRkcmVzc09mQ2FyZEZv
cihKU0NlbGwqKTsKIAorICAgICAgICB2b2lkIGZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyKEpTQ2Vs
bCopOworCiAgICAgICAgIEhlYXAoVk0qLCBIZWFwVHlwZSk7CiAgICAgICAgIH5IZWFwKCk7CiAg
ICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKQEAg
LTI4NCw2ICsyODksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29s
IG1faXNTYWZlVG9Db2xsZWN0OwogCisjaWYgRU5BQkxFKEdHQykKKyAgICAgICAgV3JpdGVCYXJy
aWVyQnVmZmVyIG1fd3JpdGVCYXJyaWVyQnVmZmVyOworI2VuZGlmCisKICAgICAgICAgVk0qIG1f
dm07CiAgICAgICAgIGRvdWJsZSBtX2xhc3RHQ0xlbmd0aDsKICAgICAgICAgZG91YmxlIG1fbGFz
dENvZGVEaXNjYXJkVGltZTsKQEAgLTM3MCw2ICszNzksMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAj
ZW5kaWYKICAgICB9CiAKKyAgICBpbmxpbmUgdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXIoY29uc3Qg
SlNDZWxsKikKKyAgICB7CisgICAgICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjpjb3VudFdyaXRl
QmFycmllcigpOworICAgIH0KKwogICAgIGlubGluZSB2b2lkIEhlYXA6OndyaXRlQmFycmllcihj
b25zdCBKU0NlbGwqLCBKU0NlbGwqKQogICAgIHsKICAgICAgICAgV3JpdGVCYXJyaWVyQ291bnRl
cnM6OmNvdW50V3JpdGVCYXJyaWVyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDEyICs3MywxNSBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBhdG9tU2l6ZSA9IDg7IC8vIGJ5dGVzCisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRv
bVNoaWZ0QW1vdW50ID0gNDsgLy8gbG9nXzIoYXRvbVNpemUpIEZJWE1FOiBDaGFuZ2UgYXRvbVNp
emUgdG8gMTYuCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gNjQgKiBL
QjsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAt
IDEpOyAvLyBibG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIAogICAgICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGF0b21zUGVyQmxvY2sgPSBibG9ja1NpemUgLyBhdG9tU2l6ZTsKICAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tTWFzayA9IGF0b21zUGVyQmxvY2sgLSAxOwog
CisgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWFya0J5dGVTaGlmdEFtb3VudCA9IDM7IC8v
IGxvZ18yKHdvcmQgc2l6ZSBmb3IgbV9tYXJrcykgRklYTUU6IENoYW5nZSB3b3JkIHNpemUgZm9y
IG1fbWFya3MgdG8gdWludDhfdC4KKwogICAgICAgICBzdHJ1Y3QgRnJlZUNlbGwgewogICAgICAg
ICAgICAgRnJlZUNlbGwqIG5leHQ7CiAgICAgICAgIH07CkBAIC0xNjgsNiArMTcxLDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZv
ckVhY2hMaXZlQ2VsbChGdW5jdG9yJik7CiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5j
dG9yPiB2b2lkIGZvckVhY2hEZWFkQ2VsbChGdW5jdG9yJik7CiAKKyAgICAgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk1hcmtzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcmtlZEJs
b2NrLCBtX21hcmtzKTsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0gMTsgLy8gYXRvbVNpemUgbXVzdCBi
ZSBhIHBvd2VyIG9mIHR3by4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Xcml0ZUJhcnJpZXJCdWZmZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldyaXRlQmFycmllckJ1ZmZlci5oIgorCisjaW5jbHVkZSAiR0NBc3NlcnRpb25zLmgiCisjaW5j
bHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworV3JpdGVCYXJyaWVyQnVmZmVyOjpXcml0ZUJhcnJpZXJC
dWZmZXIodW5zaWduZWQgY2FwYWNpdHkpCisgICAgOiBtX2N1cnJlbnRJbmRleCgwKQorICAgICwg
bV9jYXBhY2l0eShjYXBhY2l0eSkKKyAgICAsIG1fYnVmZmVyKHN0YXRpY19jYXN0PEpTQ2VsbCoq
PihmYXN0TWFsbG9jKHNpemVvZihKU0NlbGwqKSAqIGNhcGFjaXR5KSkpCit7Cit9CisKK1dyaXRl
QmFycmllckJ1ZmZlcjo6fldyaXRlQmFycmllckJ1ZmZlcigpCit7CisgICAgZmFzdEZyZWUobV9i
dWZmZXIpOworICAgIG1fYnVmZmVyID0gMDsKK30KKwordm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6
OmZsdXNoKEhlYXAmIGhlYXApCit7CisgICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDw9IG1fY2Fw
YWNpdHkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jdXJyZW50SW5kZXg7ICsraSkK
KyAgICAgICAgaGVhcC53cml0ZUJhcnJpZXIobV9idWZmZXJbaV0pOworICAgIG1fY3VycmVudElu
ZGV4ID0gMDsKK30KKwordm9pZCBXcml0ZUJhcnJpZXJCdWZmZXI6OnJlc2V0KCkKK3sKKyAgICBt
X2N1cnJlbnRJbmRleCA9IDA7Cit9CisKK3ZvaWQgV3JpdGVCYXJyaWVyQnVmZmVyOjphZGQoSlND
ZWxsKiBjZWxsKQoreworICAgIEFTU0VSVF9HQ19PQkpFQ1RfTE9PS1NfVkFMSUQoY2VsbCk7Cisg
ICAgQVNTRVJUKG1fY3VycmVudEluZGV4IDwgbV9jYXBhY2l0eSk7CisgICAgbV9idWZmZXJbbV9j
dXJyZW50SW5kZXgrK10gPSBjZWxsOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1dyaXRlQmFycmllckJ1ZmZlci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV3JpdGVCYXJyaWVyQnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V3JpdGVCYXJyaWVyQnVmZmVyX2gKKyNkZWZpbmUgV3JpdGVCYXJyaWVyQnVmZmVyX2gKKworI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFw
OworY2xhc3MgSlNDZWxsOworCituYW1lc3BhY2UgRlRMIHsgY2xhc3MgTG93ZXJERkdUb0xMVk07
IH0KKworY2xhc3MgV3JpdGVCYXJyaWVyQnVmZmVyIHsKKyAgICBmcmllbmQgY2xhc3MgRlRMOjpM
b3dlckRGR1RvTExWTTsKK3B1YmxpYzoKKyAgICBXcml0ZUJhcnJpZXJCdWZmZXIodW5zaWduZWQg
Y2FwYWNpdHkpOworICAgIH5Xcml0ZUJhcnJpZXJCdWZmZXIoKTsKKworICAgIHZvaWQgYWRkKEpT
Q2VsbCopOworICAgIHZvaWQgZmx1c2goSGVhcCYpOworICAgIHZvaWQgcmVzZXQoKTsKKworICAg
IHN0YXRpYyBwdHJkaWZmX3QgY3VycmVudEluZGV4T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoV3JpdGVCYXJyaWVyQnVmZmVyLCBtX2N1cnJlbnRJbmRleCk7
CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBjYXBhY2l0eU9mZnNldCgpCisgICAgewor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFdyaXRlQmFycmllckJ1ZmZlciwgbV9jYXBh
Y2l0eSk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBidWZmZXJPZmZzZXQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihXcml0ZUJhcnJpZXJCdWZmZXIsIG1f
YnVmZmVyKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7
CisgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICBKU0NlbGwqKiBtX2J1ZmZlcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gV3JpdGVCYXJyaWVyQnVmZmVyX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY5Niw2ICsxNjk2LDM5IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25UaHJvdyhFeGVjU3QKICAgICBnZW5lcmljVW53aW5kKHZtLCBleGVjLCBleGNl
cHRpb25WYWx1ZSk7CiB9CiAKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25GbHVzaFdyaXRl
QmFycmllckJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBl
eGVjKTsKKyAgICB2bS0+aGVhcC5mbHVzaFdyaXRlQmFycmllckJ1ZmZlcihjZWxsKTsKK30KKwor
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogY2VsbCkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBleGVjLT5oZWFwKCktPndy
aXRlQmFycmllcihjZWxsKTsKK30KKworLy8gTkI6IFdlIGRvbid0IGluY2x1ZGUgdGhlIHZhbHVl
IGFzIHBhcnQgb2YgdGhlIGJhcnJpZXIgYmVjYXVzZSB0aGUgd3JpdGUgYmFycmllciBlbGlzaW9u
CisvLyBwaGFzZSBpbiB0aGUgREZHIG9ubHkgdHJhY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBiZWlu
ZyBzdG9yZWQgdG8gaGFzIGJlZW4gYmFycmllcmVkLiBJdCAKKy8vIHdvdWxkIGJlIG11Y2ggbW9y
ZSBjb21wbGljYXRlZCB0byB0cnkgdG8gbW9kZWwgdGhlIHZhbHVlIGJlaW5nIHN0b3JlZCBhcyB3
ZWxsLgordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblVuY29uZGl0aW9uYWxXcml0ZUJhcnJp
ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwpCit7CisgICAgVk0qIHZtID0gJmV4ZWMt
PnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAg
SGVhcDo6d3JpdGVCYXJyaWVyKGNlbGwpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSW5pdEdsb2JhbENvbnN0KEV4ZWNTdGF0ZSogZXhlYywgSW5zdHJ1Y3Rpb24qIHBjKQorewor
ICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIodm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnIocGNbMl0udS5vcGVy
YW5kKS5qc1ZhbHVlKCk7CisgICAgcGNbMV0udS5yZWdpc3RlclBvaW50ZXItPnNldCgqdm0sIGV4
ZWMtPmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUpOworfQorCiB2b2lkIEpJVF9P
UEVSQVRJT04gbG9va3VwRXhjZXB0aW9uSGFuZGxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTYwNjgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsNyBAQCB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDSUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBJ
ZGVudGlmaWVyKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX0VDQ0ljZikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiwg
SW5saW5lQ2FsbEZyYW1lKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VD
UFNQUykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgdm9pZCosIHNpemVfdCwgdm9pZCosIHNpemVfdCk7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDWikoRXhlY1N0
YXRlKiwgSlNDZWxsKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VJZEpaKShFeGVjU3RhdGUqLCBJ
ZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwpAQCAtMjc3LDYgKzI3OCwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlCiBFbmNvZGVkSlNWYWx1
ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEZyb21TY29wZShFeGVjU3RhdGUqLCBJbnN0cnVj
dGlvbiogYnl0ZWNvZGVQQykgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dFRvU2NvcGUoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qIGJ5dGVjb2RlUEMpIFdURl9J
TlRFUk5BTDsKIAordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bldyaXRlQmFycmllcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25VbmNvbmRpdGlvbmFsV3JpdGVCYXJyaWVyKEV4ZWNTdGF0ZSosIEpT
Q2VsbCopOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9TUldyaXRlQmFycmllcihFeGVj
U3RhdGUqLCBKU0NlbGwqKTsKKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkluaXRHbG9i
YWxDb25zdChFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOworCiB9IC8vIGV4dGVybiAiQyIKIAog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJl
dmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkRhdGVJbnN0YW5jZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgorI2luY2x1ZGUgIkdQUklu
Zm8uaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCiAjaW5jbHVk
ZSAiSklUVGh1bmtzLmgiCkBAIC0zODcsNiArMzg4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNvbnN0IENsYXNzSW5mbyogY29uc3QganNBcnJheUNsYXNzSW5mbzsKICAgICAgICAgY29u
c3QgQ2xhc3NJbmZvKiBjb25zdCBqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvOwogCisgICAgICAgIHZv
aWQqIHdyaXRlQmFycmllclJlZ2lzdGVyQnVmZmVyW0dQUkluZm86Om51bWJlck9mUmVnaXN0ZXJz
XTsKKwogICAgICAgICBSZXR1cm5BZGRyZXNzUHRyIGV4Y2VwdGlvbkxvY2F0aW9uOwogICAgICAg
ICBKU1ZhbHVlIGhvc3RDYWxsUmV0dXJuVmFsdWU7CiAgICAgICAgIEV4ZWNTdGF0ZSogbmV3Q2Fs
bEZyYW1lUmV0dXJuVmFsdWU7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNzg0KQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMiBAQAorMjAxMy0xMi0xOCAg
TWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgorCisgICAgICAgIERGRyBz
aG91bGQgaGF2ZSBhIHNlcGFyYXRlIFN0b3JlQmFycmllciBub2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjU1MzAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGRlZCBh
biAjZGVmaW5lIGZvciBFTkFCTEUoR0dDKSB3aGljaCB3aWxsIGJlIHVzZWQgZm9yIGxhbmRpbmcg
dGhpbmdzIHJlbGF0ZWQgdG8gR2VuR0MuCisKIDIwMTMtMTItMTYgIERhbmllbCBCYXRlcyAgPGRh
YmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFVwc3RyZWFtIFdlYkNvcmUvaHRtbCBj
aGFuZ2VzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE2MDY4MikKKysrIFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4NCw2ICs3ODQsMTEgQEAKICNkZWZp
bmUgRU5BQkxFX1ZFUkJPU0VfVkFMVUVfUFJPRklMRSAwCiAjZW5kaWYKIAorLyogR2VuZXJhdGlv
bmFsIGNvbGxlY3RvciBmb3IgSlNDICovCisjaWYgIWRlZmluZWQoRU5BQkxFX0dHQykKKyNkZWZp
bmUgRU5BQkxFX0dHQyAwCisjZW5kaWYKKwogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmll
cnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwogICAgc2V0IEVOQUJM
RV9TQU1QTElOR19DT1VOVEVSUyB0byAxLiAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9XUklURV9C
QVJSSUVSX1BST0ZJTElORykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219585</attachid>
            <date>2013-12-18 16:35:58 -0800</date>
            <delta_ts>2013-12-18 16:36:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125530-20131218163549.patch</filename>
            <type>text/plain</type>
            <size>3979</size>
            <attacher name="Mark Hahnenberg">mhahnenberg</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwODA2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBA
CisyMDEzLTEyLTE4ICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgRGVsYXllZFJlbGVhc2VTY29wZSBpcyBpbiB0aGUgd3JvbmcgcGxhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTg3NgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBEZWxheWVkUmVs
ZWFzZVNjb3BlIG5lZWRzIHRvIGJlIGFyb3VuZCB0aGUgZnJlZSBsaXN0IHN3ZWVwaW5nIGluIE1h
cmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGVIZWxwZXIuIAorICAgICAgICBUaGlzIGxvY2F0aW9u
IGdpdmVzIHVzIGEgZ29vZCBzYWZlIHBvaW50IGJldHdlZW4gZ2V0dGluZyByZWFkeSB0byBhbGxv
Y2F0ZSAgKGkuZS4gaWRlbnRpZnlpbmcgYSBub24tZW1wdHkgCisgICAgICAgIGZyZWUgbGlzdCkg
YW5kIGRvaW5nIHRoZSBhY3R1YWwgYWxsb2NhdGlvbiAocG9wcGluZyB0aGUgZnJlZSBsaXN0KS4K
KworICAgICAgICAqIGhlYXAvTWFya2VkQWxsb2NhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TWFy
a2VkQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZUhlbHBlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEFs
bG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEFsbG9jYXRv
cjo6YWRkQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNDZWxsSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjphbGxvY2F0ZUNlbGwpOgorCiAyMDEzLTEyLTE4ICBCZW5qYW1pbiBQb3VsYWluICA8
YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgYSBzaW1wbGUgc3RhY2sgYWJzdHJh
Y3Rpb24gZm9yIHg4Nl82NApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2Vk
QWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxNjA3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCwxMSBAQCBib29sIE1hcmtlZEFsbG9jYXRvcjo6aXNQYWdlZE91dChkb3VibGUgCiAKIGlubGlu
ZSB2b2lkKiBNYXJrZWRBbGxvY2F0b3I6OnRyeUFsbG9jYXRlSGVscGVyKHNpemVfdCBieXRlcykK
IHsKLSAgICBpZiAoIW1fZnJlZUxpc3QuaGVhZCkgeworICAgIC8vIFdlIG5lZWQgYSB3aGlsZSBs
b29wIHRvIGNoZWNrIHRoZSBmcmVlIGxpc3QgYmVjYXVzZSB0aGUgRGVsYXllZFJlbGVhc2VTY29w
ZSAKKyAgICAvLyBjb3VsZCBjYXVzZSBhcmJpdHJhcnkgY29kZSB0byBleGVjdXRlIGFuZCBleGhh
dXN0IHRoZSBmcmVlIGxpc3QgdGhhdCB3ZSAKKyAgICAvLyB0aG91Z2h0IGhhZCBlbGVtZW50cyBp
biBpdC4KKyAgICB3aGlsZSAoIW1fZnJlZUxpc3QuaGVhZCkgeworICAgICAgICBEZWxheWVkUmVs
ZWFzZVNjb3BlIGRlbGF5ZWRSZWxlYXNlU2NvcGUoKm1fbWFya2VkU3BhY2UpOwogICAgICAgICBp
ZiAobV9jdXJyZW50QmxvY2spIHsKICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jayA9
PSBtX2Jsb2Nrc1RvU3dlZXApOwogICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZENvbnN1
bWVGcmVlTGlzdCgpOwpAQCAtNTksNyArNjMsOCBAQCBpbmxpbmUgdm9pZCogTWFya2VkQWxsb2Nh
dG9yOjp0cnlBbGxvY2F0CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0K
LSAgICAKKworICAgIEFTU0VSVChtX2ZyZWVMaXN0LmhlYWQpOwogICAgIE1hcmtlZEJsb2NrOjpG
cmVlQ2VsbCogaGVhZCA9IG1fZnJlZUxpc3QuaGVhZDsKICAgICBtX2ZyZWVMaXN0LmhlYWQgPSBo
ZWFkLT5uZXh0OwogICAgIEFTU0VSVChoZWFkKTsKQEAgLTc4LDcgKzgzLDYgQEAgaW5saW5lIHZv
aWQqIE1hcmtlZEFsbG9jYXRvcjo6dHJ5QWxsb2NhdAogdm9pZCogTWFya2VkQWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlKHNpemVfdCBieXRlcykKIHsKICAgICBBU1NFUlQobV9oZWFwLT52bSgp
LT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKLSAgICBEZWxheWVkUmVsZWFzZVNj
b3BlIGRlbGF5ZWRSZWxlYXNlU2NvcGUoKm1fbWFya2VkU3BhY2UpOwogI2lmIENPTExFQ1RfT05f
RVZFUllfQUxMT0NBVElPTgogICAgIGlmICghbV9oZWFwLT5pc0RlZmVycmVkKCkpCiAgICAgICAg
IG1faGVhcC0+Y29sbGVjdEFsbEdhcmJhZ2UoKTsKQEAgLTEyNiw2ICsxMzAsOCBAQCBNYXJrZWRC
bG9jayogTWFya2VkQWxsb2NhdG9yOjphbGxvY2F0ZUJsCiAKIHZvaWQgTWFya2VkQWxsb2NhdG9y
OjphZGRCbG9jayhNYXJrZWRCbG9jayogYmxvY2spCiB7CisgICAgLy8gU2F0aXNmeSB0aGUgQVNT
RVJUIGluIE1hcmtlZEJsb2NrOjpzd2VlcC4KKyAgICBEZWxheWVkUmVsZWFzZVNjb3BlIGRlbGF5
ZWRSZWxlYXNlU2NvcGUoKm1fbWFya2VkU3BhY2UpOwogICAgIEFTU0VSVCghbV9jdXJyZW50Qmxv
Y2spOwogICAgIEFTU0VSVCghbV9mcmVlTGlzdC5oZWFkKTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGxJbmxpbmVzLmgJKHJldmlzaW9uIDE2MDc5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtODgsMTAgKzg4LDYgQEAgdm9pZCogYWxsb2NhdGVDZWxsKEhlYXAmIGhl
YXAsIHNpemVfdCBzaQogewogICAgIEFTU0VSVCghRGlzYWxsb3dHQzo6aXNHQ0Rpc2FsbG93ZWRP
bkN1cnJlbnRUaHJlYWQoKSk7CiAgICAgQVNTRVJUKHNpemUgPj0gc2l6ZW9mKFQpKTsKLSNpZiBF
TkFCTEUoR0NfVkFMSURBVElPTikKLSAgICBBU1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFsaXpp
bmdPYmplY3QoKSk7Ci0gICAgaGVhcC52bSgpLT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhU
OjppbmZvKCkpOwotI2VuZGlmCiAgICAgSlNDZWxsKiByZXN1bHQgPSAwOwogICAgIGlmIChUOjpu
ZWVkc0Rlc3RydWN0aW9uICYmIFQ6Omhhc0ltbW9ydGFsU3RydWN0dXJlKQogICAgICAgICByZXN1
bHQgPSBzdGF0aWNfY2FzdDxKU0NlbGwqPihoZWFwLmFsbG9jYXRlV2l0aEltbW9ydGFsU3RydWN0
dXJlRGVzdHJ1Y3RvcihzaXplKSk7CkBAIC05OSw2ICs5NSwxMCBAQCB2b2lkKiBhbGxvY2F0ZUNl
bGwoSGVhcCYgaGVhcCwgc2l6ZV90IHNpCiAgICAgICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PEpT
Q2VsbCo+KGhlYXAuYWxsb2NhdGVXaXRoTm9ybWFsRGVzdHJ1Y3RvcihzaXplKSk7CiAgICAgZWxz
ZSAKICAgICAgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SlNDZWxsKj4oaGVhcC5hbGxvY2F0ZVdp
dGhvdXREZXN0cnVjdG9yKHNpemUpKTsKKyNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikKKyAgICBB
U1NFUlQoIWhlYXAudm0oKS0+aXNJbml0aWFsaXppbmdPYmplY3QoKSk7CisgICAgaGVhcC52bSgp
LT5zZXRJbml0aWFsaXppbmdPYmplY3RDbGFzcyhUOjppbmZvKCkpOworI2VuZGlmCiAgICAgcmVz
dWx0LT5jbGVhclN0cnVjdHVyZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>