<?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>154847</bug_id>
          
          <creation_ts>2016-03-01 00:00:32 -0800</creation_ts>
          <short_desc>Add ability to generate a Heap Snapshot</short_desc>
          <delta_ts>2016-03-03 15:01:59 -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>WebKit 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>10930</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169382</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-01 00:00:32 -0800</bug_when>
    <thetext>* SUMMARY
Add ability to generate a Heap Snapshot.

Requirements / desired characteristics of the snapshot:
  - serializable as JSON (useful for the Inspector protocol)
  - unique identification of JSCell instances across multiple snapshots
  - nodes and edges to be able to construct a graph of which nodes reference/retain which other nodes
  - cell information - identifier, type (className), size
  - edge information - from cell, to cell, type / data (to come in a future patch)

* NOTES
This patch adds the functionality to `jsc` for testing. However the same snapshot generation and json serialization will be used by Web Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169389</commentid>
    <comment_count>1</comment_count>
      <attachid>272553</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-01 00:49:37 -0800</bug_when>
    <thetext>Created attachment 272553
[PATCH] Proposed Fix

The costs to normal GC are all in SlotVisitor:
  - two assignments per visit to a cell (setting/clearing m_currentCell)
  - a branch when marking a node (if builder -&gt; addNode)
  - a branch when appending a new address to a cell (if builder -&gt; addEdge)

Since this happens in parallel I would expect the performance cost to be negligible, but I want to measure performance anyways. A later patch will add a few more branches in various visitChildren methods to record extra data about edges (such as property names or property index).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169390</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-01 00:50:26 -0800</bug_when>
    <thetext>Attachment 272553 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:73:  The parameter name &quot;profiler&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:83:  The parameter name &quot;cell&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:148:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:151:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:165:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:197:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 11 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169392</commentid>
    <comment_count>3</comment_count>
      <attachid>272553</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-01 00:54:21 -0800</bug_when>
    <thetext>Comment on attachment 272553
[PATCH] Proposed Fix

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

&gt; Source/JavaScriptCore/tests/heapProfiler/driver/driver.js:52
&gt; +// NOTE: This creates a lot of objects that make it easy to walk a node graph.
&gt; +// However when a test creates multiple snapshots with snapshots in scope
&gt; +// this can quickly explode into a snapshot with a massive number of nodes/edges.

This is rather unfortunate and isn&apos;t an issue with the snapshot itself but just how I chose to interact with it. This doesn&apos;t happen when inspecting a page, because all of the heap snapshot nodes/edges aren&apos;t created in the JS Context of the page being inspected, however it hints that snapshotting a page with a large complex / pointer entangled structure can create a large snapshot (# of nodes and edge). I will look into moving away from this approach of creating an object per-Node/Edge and instead used a compact data structure with indexes into it or lazily created objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169661</commentid>
    <comment_count>4</comment_count>
      <attachid>272615</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-01 17:13:52 -0800</bug_when>
    <thetext>Created attachment 272615
[PATCH] Proposed Fix

Version 2. Adds a cheaper snapshot representation for JavaScriptCore/tests/heapProfiler used by the existing basic tests. The next patch, which names edges will make use of the other type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169663</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-01 17:15:55 -0800</bug_when>
    <thetext>Attachment 272615 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:147:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:150:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:164:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:196:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 9 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169665</commentid>
    <comment_count>6</comment_count>
      <attachid>272616</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-01 17:26:16 -0800</bug_when>
    <thetext>Created attachment 272616
[PATCH] Add Edge Data - Snapshot Property Names / Indexes / Variable Names

I plan on putting this on a different bug, but because it is highly related to the existing patch they may be useful to view together.

I need to performance test this. It adds another assignment and a few branches to JSObject/JSFinalObject::visitChildren and Scope types, but otherwise normal GC is unaffected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169853</commentid>
    <comment_count>7</comment_count>
      <attachid>272615</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-02 10:32:00 -0800</bug_when>
    <thetext>Comment on attachment 272615
[PATCH] Proposed Fix

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

I&apos;m still the looking over the code, but thought I&apos;d post these comments first for your consideration.

&gt; Source/JavaScriptCore/ChangeLog:30
&gt; +        time a we give the cell a unique identifier and add it to the the

typo: &quot;time a we&quot; ==&gt; &quot;time, we&quot;

&gt; Source/JavaScriptCore/ChangeLog:46
&gt; +        * CMakeLists.txt:
&gt; +        * JavaScriptCore.xcodeproj/project.pbxproj:
&gt; +        Add new files to the build.

You also need to update the VC++ project files.

&gt; Source/JavaScriptCore/ChangeLog:84
&gt; +        (JSC::HeapSnapshot::sweepCell):
&gt; +        (JSC::HeapSnapshot::shrinkToFit):
&gt; +        Collect a list of cells for sweeping and then remove them all at once
&gt; +        in shrinkToFit. This is done to avoid thrashing of individual removes
&gt; +        that could cause many overlapping moves within the Vector.

You don&apos;t need to do this.  Here&apos;s a way that you can keep the &quot;swept&quot; status without allocating extra memory (and is faster too):

1. When sweeping cells in the snapshot, set its low bit to 1.  Since cell pointers always have 0 as low bits, this will distinguish the swept ones from the unswept ones while preserving sort order for binary searches.
2. In shrinkToFit, compact the snapshot by purging the cells with the low bit set.

&gt; Source/JavaScriptCore/ChangeLog:89
&gt; +        Sort the list, and also cache the bounding start/stop identifiers.
&gt; +        No other snapshot can contain an identifier in this range, so it will
&gt; +        improve lookup of a node from an identifier.

Why do you have to cache the start and stop identifiers?  If the list is sorted, can&apos;t you just peek at the first and last nodes every time for their IDs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169870</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 11:14:41 -0800</bug_when>
    <thetext>&gt; You don&apos;t need to do this.  Here&apos;s a way that you can keep the &quot;swept&quot;
&gt; status without allocating extra memory (and is faster too):
&gt; 
&gt; 1. When sweeping cells in the snapshot, set its low bit to 1.  Since cell
&gt; pointers always have 0 as low bits, this will distinguish the swept ones
&gt; from the unswept ones while preserving sort order for binary searches.
&gt; 2. In shrinkToFit, compact the snapshot by purging the cells with the low
&gt; bit set.

I&apos;ll give it a shot!


&gt; &gt; Source/JavaScriptCore/ChangeLog:89
&gt; &gt; +        Sort the list, and also cache the bounding start/stop identifiers.
&gt; &gt; +        No other snapshot can contain an identifier in this range, so it will
&gt; &gt; +        improve lookup of a node from an identifier.
&gt; 
&gt; Why do you have to cache the start and stop identifiers?  If the list is
&gt; sorted, can&apos;t you just peek at the first and last nodes every time for their
&gt; IDs?

The list is sorted by cell address, which do not align with identifiers. That means the first and last identifiers may be attached to a node somewhere in the middle of the list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169872</commentid>
    <comment_count>9</comment_count>
      <attachid>272615</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-02 11:16:37 -0800</bug_when>
    <thetext>Comment on attachment 272615
[PATCH] Proposed Fix

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

More comments for consideration.  And reminder: you might want to update the copyright year in the files you&apos;re modifying.

&gt; Source/JavaScriptCore/heap/Heap.cpp:766
&gt; +    if (HeapProfiler* heapProfiler = m_vm-&gt;heapProfiler())
&gt; +        return !!heapProfiler-&gt;activeSnapshotBuilder();

nit: use UNLIKELY() around the heapProfiler condition.  And the &quot;!!&quot; is not necessary.

&gt; Source/JavaScriptCore/heap/Heap.cpp:788
&gt; +    if (HeapProfiler* heapProfiler = m_vm-&gt;heapProfiler()) {

nit: maybe remove this condition in favor of checking at the call site (see below)?

&gt; Source/JavaScriptCore/heap/Heap.cpp:1164
&gt; +    removeDeadHeapSnapshotNodes();

nit: Since the normal configuration is not to use the HeapProfiler, why not do the check for the profiler here?

    if (UNLIKELY(HeapProfiler* heapProfiler = m_vm-&gt;heapProfiler()))
        removeDeadHeapSnapshotNodes(heapProfiler);

&gt; Source/JavaScriptCore/heap/HeapSnapshot.h:55
&gt; +    Vector&lt;HeapSnapshotNode&gt; m_nodes;

I see that HeapSnapshotNode is a struct with a cell pointer and an unsigned id.  The current approach consumes 16 bytes per node, and hence, you&apos;ll end up consuming 16 bytes per live object in the heap.  Have you considered using 2 parallel vectors instead: 1 for the cell pointer and 1 for the ids.  Or do you have a use for the extra 4 bytes later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169912</commentid>
    <comment_count>10</comment_count>
      <attachid>272615</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-03-02 13:15:18 -0800</bug_when>
    <thetext>Comment on attachment 272615
[PATCH] Proposed Fix

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

LGTM though I think the snapshot node sweeping implementation can be more optimized.

&gt; Source/JavaScriptCore/heap/HeapSnapshot.cpp:99
&gt; +    if (!isEmpty()) {
&gt; +        m_firstObjectIdentifier = m_nodes.first().identifier;
&gt; +        m_lastObjectIdentifier = m_nodes.last().identifier;
&gt; +    }

Maybe add a comment here that nodes are always appended during snapshot capture in identifier order, and that finalize() is only called while the entries are still sorted in identifier order.

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:71
&gt; +    bool hasExistingNode = hasExistingNodeForCell(cell);
&gt; +    if (hasExistingNode)

No need to cache the hasExistingNode bool here since it is used only once.

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:88
&gt; +    std::lock_guard&lt;Lock&gt; lock(m_appendingMutex);

You can use a different mutex for the edges since there is never any conflict between the edges and the snapshot.  That will allow for less potential contention, and WTF locks are cheap.

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:122
&gt; +//   - eliminate duplicate edge extra data strings, have an index into a de-duplicated like edgeTypes / nodeClassNames.

Looks like you&apos;re already applying this above (with the use of nodeClassNameIndex and edgeTypeIndex).  Hence, this comment is not needed.

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:55
&gt; +    // FIXME: Add &quot;Weak&quot; edges.

Do we have weak edges that survives GCs?  If not, do we need this?  Else, include a bug url here?

&gt; Source/JavaScriptCore/jsc.cpp:491
&gt; +    void finishCreation(VM&amp; vm)
&gt; +    {
&gt; +        Base::finishCreation(vm);
&gt; +    }

You don&apos;t need this.  Not having implies that we use the base&apos;s finishCreation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169983</commentid>
    <comment_count>11</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 15:42:15 -0800</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:122
&gt; &gt; +//   - eliminate duplicate edge extra data strings, have an index into a de-duplicated like edgeTypes / nodeClassNames.
&gt; 
&gt; Looks like you&apos;re already applying this above (with the use of
&gt; nodeClassNameIndex and edgeTypeIndex).  Hence, this comment is not needed.

This is for edge data, which isn&apos;t yet implemented.


&gt; &gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:55
&gt; &gt; +    // FIXME: Add &quot;Weak&quot; edges.
&gt; 
&gt; Do we have weak edges that survives GCs?  If not, do we need this?  Else,
&gt; include a bug url here?

I&apos;ll include a bug here. A Weak edge would be useful to show that a WeakSet/WeakMap references another cell, but not strongly. This could be useful in a visualization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169999</commentid>
    <comment_count>12</comment_count>
      <attachid>272701</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 16:13:12 -0800</bug_when>
    <thetext>Created attachment 272701
[PATCH] For Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170080</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 20:28:53 -0800</bug_when>
    <thetext>Attachment 272701 did not pass style-queue:


ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:146:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:149:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:163:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:195:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:51:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:52:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:53:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:54:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/JavaScriptCore/heap/HeapSnapshotBuilder.h:89:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 9 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170095</commentid>
    <comment_count>14</comment_count>
      <attachid>272701</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 21:15:50 -0800</bug_when>
    <thetext>Comment on attachment 272701
[PATCH] For Landing

Clearing flags on attachment: 272701

Committed r197489: &lt;http://trac.webkit.org/changeset/197489&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170096</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-02 21:15:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170179</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-03 03:43:12 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 272701 [details]
&gt; [PATCH] For Landing
&gt; 
&gt; Clearing flags on attachment: 272701
&gt; 
&gt; Committed r197489: &lt;http://trac.webkit.org/changeset/197489&gt;

Just to document, Windows buildfix landed in
http://trac.webkit.org/changeset/197500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170332</commentid>
    <comment_count>17</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-03 15:01:59 -0800</bug_when>
    <thetext>&gt; Just to document, Windows buildfix landed in
&gt; http://trac.webkit.org/changeset/197500

Doh, thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272553</attachid>
            <date>2016-03-01 00:49:37 -0800</date>
            <delta_ts>2016-03-01 17:13:52 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>snapshot-1.patch</filename>
            <type>text/plain</type>
            <size>74359</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmRmODM0Li4zZjcwZDYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC00NDMsNiArNDQzLDkgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhl
YXAvSGVhcC5jcHAKICAgICBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAorICAgIGhlYXAvSGVhcFBy
b2ZpbGVyLmNwcAorICAgIGhlYXAvSGVhcFNuYXBzaG90LmNwcAorICAgIGhlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKICAgICBoZWFwL0hlYXBTdGF0aXN0aWNzLmNwcAogICAgIGhlYXAvSGVh
cFRpbWVyLmNwcAogICAgIGhlYXAvSGVhcFZlcmlmaWVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKaW5kZXggNzhhY2Q2My4uMjc3YzEwOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTc1IEBACisyMDE2LTAzLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBIZWFwIFNuYXBzaG90
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ4NDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFk
ZHMgSGVhcFNuYXBzaG90LCBIZWFwU25hcHNob3RCdWlsZGVyLCBhbmQgSGVhcFByb2ZpbGVyLgor
CisgICAgICAgIEhlYXBQcm9maWxlciBoYW5ncyBvZmYgb2YgdGhlIFZNIGFuZCBob2xkcyB0aGUg
bGlzdCBvZiBzbmFwc2hvdHMuCisgICAgICAgIEkgZXhwZWN0IHRvIGFkZCBvdGhlciBIZWFwUHJv
ZmlsaW5nIGZlYXR1cmVzLCBzdWNoIGFzIGFsbG9jYXRpb24KKyAgICAgICAgdHJhY2tpbmcsIHRv
IHRoZSBwcm9maWxlci4KKworICAgICAgICBIZWFwU25hcHNob3QgY29udGFpbnMgYSBjb2xsZWN0
aW9uIG9mIGxpdmUgY2VsbHMgYW5kIHRoZWlyIGlkZW50aWZpZXJzLgorICAgICAgICBJdCBjYW4g
cG9pbnQgdG8gYSBwcmV2aW91cyBIZWFwU25hcHNob3QsIHRvIGVuc3VyZSB0aGF0IGEgY2VsbCB0
aGF0CisgICAgICAgIGFscmVhZHkgcmVjZWl2ZWQgYW4gaWRlbnRpZmllciBtYWludGFpbnMgdGhl
IHNhbWUgaWRlbnRpZmllciBhY3Jvc3MKKyAgICAgICAgbXVsdGlwbGUgc25hcHNob3RzLiBXaGVu
IGEgc25hcHNob3R0ZWQgY2VsbCBnZXRzIGdhcmJhZ2UgY29sbGVjdGVkLAorICAgICAgICB0aGUg
Y2VsbCB3aWxsIGJlIHN3ZXB0IGZyb20gdGhlIEhlYXBTbmFwc2hvdCBhdCB0aGUgZW5kIG9mIGNv
bGxlY3Rpb24KKyAgICAgICAgdG8gZW5zdXJlIHRoZSBsaXN0IGNvbnRhaW5zIG9ubHkgbGl2ZSBj
ZWxscy4gVGhlIGxpc3Qgb2Ygbm9kZXMgaW4KKyAgICAgICAgdGhlIHNuYXBzaG90IGFyZSBzb3J0
ZWQgYnkgSlNDZWxsKiBhZGRyZXNzIHRvIGFsbG93IGZvciBxdWljayBsb29rdXAKKyAgICAgICAg
b2YgYSBKU0NlbGwqLgorCisgICAgICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgaXMgd2hlcmUgc25h
cHNob3R0aW5nIGJlZ2lucy4gVGhlIGJ1aWxkZXIKKyAgICAgICAgd2lsbCBpbml0aWF0ZSBhIHNw
ZWNpYWxpemVkIGhlYXAgc25hcHNob3R0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAgICAg
RHVyaW5nIHRoaXMgY29sbGVjdGlvbiB0aGUgYnVpbGRlciB3aWxsIGJlIG5vdGlmaWVkIG9mIGFs
bCBtYXJrZWQKKyAgICAgICAgKGxpdmUpIGNlbGxzLCBhbmQgY29ubmVjdGlvbnMgYmV0d2VlbiBj
ZWxscywgYXMgc2VlbiBieSBTbG90VmlzaXRvcnMuCisgICAgICAgIFRoZSBidWlsZGVyIGNhbiBy
ZWZlcmVuY2UgdGhlIHByZXZpb3VzLCByZWFkb25seSwgSGVhcFNuYXBzaG90cyB0bworICAgICAg
ICBhdm9pZCBjcmVhdGluZyBuZXcgbm9kZXMgZm9yIGNlbGxzIHRoYXQgaGF2ZSBhbHJlYWR5IGJl
ZW4gc25hcHNob3R0ZWQuCisgICAgICAgIFdoZW4gaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHdlIGFy
ZSB2aXNpdGluZyBhIGxpdmUgY2VsbCBmb3IgdGhlIGZpcnN0CisgICAgICAgIHRpbWUgYSB3ZSBn
aXZlIHRoZSBjZWxsIGEgdW5pcXVlIGlkZW50aWZpZXIgYW5kIGFkZCBpdCB0byB0aGUgdGhlCisg
ICAgICAgIHNuYXBzaG90IHdlIGFyZSBidWlsZGluZy4KKworICAgICAgICBTaW5jZSBlZGdlIGRh
dGEgaXMgY29zdGx5LCBhbmQgb2YgbGl0dGxlIGxvbmcgdGVybSB1dGlsaXR5LCB0aGlzCisgICAg
ICAgIGRhdGEgaXMgb25seSBoZWxkIGJ5IHRoZSBidWlsZGVyIGZvciBzZXJpYWxpemF0aW9uLCBh
bmQgbm90IHN0b3JlZAorICAgICAgICBsb25nIHRlcm0gd2l0aCB0aGUgSGVhcFNuYXBzaG90IG5v
ZGUgZGF0YS4KKworICAgICAgICBUaGUgZ29hbHMgb2YgSGVhcFNuYXBzaG90dGluZyBhdCB0aGlz
IHRpbWUgYXJlOgorICAgICAgICAtIG1pbmltYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIHdoZW4g
bm90IHByb2ZpbGluZyB0aGUgaGVhcAorICAgICAgICAtIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBj
ZWxscywgc28gdGhleSBtYXkgYmUgaWRlbnRpZmllZCBhY3Jvc3MgbXVsdGlwbGUgc25hcHNob3Rz
CisgICAgICAgIC0gbm9kZXMgYW5kIGVkZ2VzIHRvIGJlIGFibGUgdG8gY29uc3RydWN0IGEgZ3Jh
cGggb2Ygd2hpY2ggbm9kZXMgcmVmZXJlbmNlL3JldGFpbiB3aGljaCBvdGhlciBub2RlcworICAg
ICAgICAtIG5vZGUgZGF0YSAtIGlkZW50aWZpZXIsIHR5cGUgKGNsYXNzIG5hbWUpLCBzaXplCisg
ICAgICAgIC0gZWRnZSBkYXRhIC0gZnJvbSBjZWxsLCB0byBjZWxsLCB0eXBlIC8gZGF0YSAodG8g
Y29tZSBpbiBhIGZvbGxvdy11cCBwYXRjaCkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNIZWFwU25hcHNob3R0aW5nKToKKyAgICAgICAgKEpT
Qzo6UmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzOjpSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9k
ZXMpOgorICAgICAgICAoSlNDOjpSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SW1wbCk6CisgICAgICAgIEFmdGVyIGV2ZXJ5IGNv
bGxlY3Rpb24sIHN3ZWVwIGRlYWQgY2VsbHMgZnJvbSBpbiBtZW1vcnkgc25hcHNob3RzLgorCisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVIZWFwUHJv
ZmlsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmhlYXBQ
cm9maWxlcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwUHJv
ZmlsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGVhcFByb2ZpbGVyOjpIZWFwUHJvZmls
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwUHJvZmlsZXI6On5IZWFwUHJvZmlsZXIpOgorICAgICAg
ICAoSlNDOjpIZWFwUHJvZmlsZXI6Om1vc3RSZWNlbnRTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkhlYXBQcm9maWxlcjo6YXBwZW5kU25hcHNob3QpOgorICAgICAgICAoSlNDOjpIZWFwUHJvZmls
ZXI6OmNsZWFyU25hcHNob3RzKToKKyAgICAgICAgKEpTQzo6SGVhcFByb2ZpbGVyOjpzZXRBY3Rp
dmVTbmFwc2hvdEJ1aWxkZXIpOgorICAgICAgICAqIGhlYXAvSGVhcFByb2ZpbGVyLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpIZWFwUHJvZmlsZXI6OnZtKToKKyAgICAgICAgKEpTQzo6SGVhcFBy
b2ZpbGVyOjphY3RpdmVTbmFwc2hvdEJ1aWxkZXIpOgorICAgICAgICBWTSBhbmQgSGVhcCBjYW4g
bG9vayBhdCB0aGUgcHJvZmlsZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBidWlsZGluZyBhCisg
ICAgICAgIHNuYXBzaG90LCBvciB0aGUgImhlYWQiIHNuYXBzaG90IHRvIHVzZSBmb3Igc3dlZXBp
bmcuCisKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpIZWFwU25hcHNob3Q6OkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6OkhlYXBTbmFw
c2hvdDo6fkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdDo6YXBwZW5k
Tm9kZSk6CisgICAgICAgIEFkZCBhIG5vZGUgdG8gdGhlIHVuZmluYWxpemVkIGxpc3Qgb2YgbmV3
IGNlbGxzLgorCisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdDo6c3dlZXBDZWxsKToKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90OjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIENvbGxlY3QgYSBs
aXN0IG9mIGNlbGxzIGZvciBzd2VlcGluZyBhbmQgdGhlbiByZW1vdmUgdGhlbSBhbGwgYXQgb25j
ZQorICAgICAgICBpbiBzaHJpbmtUb0ZpdC4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIHRocmFzaGlu
ZyBvZiBpbmRpdmlkdWFsIHJlbW92ZXMKKyAgICAgICAgdGhhdCBjb3VsZCBjYXVzZSBtYW55IG92
ZXJsYXBwaW5nIG1vdmVzIHdpdGhpbiB0aGUgVmVjdG9yLgorCisgICAgICAgIChKU0M6OkhlYXBT
bmFwc2hvdDo6ZmluYWxpemUpOgorICAgICAgICBTb3J0IHRoZSBsaXN0LCBhbmQgYWxzbyBjYWNo
ZSB0aGUgYm91bmRpbmcgc3RhcnQvc3RvcCBpZGVudGlmaWVycy4KKyAgICAgICAgTm8gb3RoZXIg
c25hcHNob3QgY2FuIGNvbnRhaW4gYW4gaWRlbnRpZmllciBpbiB0aGlzIHJhbmdlLCBzbyBpdCB3
aWxsCisgICAgICAgIGltcHJvdmUgbG9va3VwIG9mIGEgbm9kZSBmcm9tIGFuIGlkZW50aWZpZXIu
CisKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Ojpub2RlRm9yQ2VsbCk6CisgICAgICAgIChK
U0M6OkhlYXBTbmFwc2hvdDo6bm9kZUZvck9iamVjdElkZW50aWZpZXIpOgorICAgICAgICBTZWFy
Y2ggaGVscGVycy4KKworICAgICAgICAqIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Tm9kZTo6SGVhcFNuYXBzaG90Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEVkZ2U6OkhlYXBTbmFwc2hvdEVkZ2UpOgorICAgICAg
ICBOb2RlIGFuZCBFZGdlIHN0cnVjdCB0eXBlcyB0aGUgYnVpbGRlciBjcmVhdGVzLgorCisgICAg
ICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmdldE5leHRPYmplY3RJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6SGVhcFNuYXBzaG90QnVpbGRlcik6CisgICAgICAg
IChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6On5IZWFwU25hcHNob3RCdWlsZGVyKToKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCk6CisgICAgICAgIChK
U0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUpOgorICAgICAgICAoSlNDOjpIZWFw
U25hcHNob3RCdWlsZGVyOjphcHBlbmRFZGdlKToKKyAgICAgICAgV2hlbiBidWlsZGluZyB0aGUg
c25hcHNob3QsIGdlbmVyYXRpbmcgdGhlIG5leHQgaWRlbnRpZmllciwgYW5kCisgICAgICAgIGFw
cGVuZGluZyB0byBhbnkgb2YgdGhlIGxpc3RzIG11c3QgYmUgZ3VhcmRlZCBieSBhIGxvY2sgYmVj
YXVzZQorICAgICAgICBTbG90VmlzaXRvcnMgcnVubmluZyBpbiBwYXJhbGxlbCBtYXkgYmUgYWNj
ZXNzaW5nIHRoZSBidWlsZGVyLgorCisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6
Omhhc0V4aXN0aW5nTm9kZUZvckNlbGwpOgorICAgICAgICBMb29raW5nIHVwIGlmIGEgbm9kZSBh
bHJlYWR5IGV4aXN0cyBpbiBhIHByZXZpb3VzIHNuYXBzaG90IGNhbiBiZQorICAgICAgICBkb25l
IHdpdGhvdXQgYSBsb2NrIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB0aGUgZGF0YSBpcyByZWFkb25s
eS4KKworICAgICAgICAoSlNDOjplZGdlVHlwZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6ZWRn
ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24p
OgorICAgICAgICBKU09OIHNlcmlhbGl6YXRpb24gb2YgYSBoZWFwIHNuYXBzaG90IGNvbnRhaW5z
IG5vZGUgYW5kIGVkZ2UgZGF0YS4KKworICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAg
ICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmRpZFN0YXJ0TWFya2luZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6Cisg
ICAgICAgIFNldC9jbGVhciB0aGUgYWN0aXZlIHNuYXBzaG90IGJ1aWxkZXIgdG8ga25vdyBpZiB0
aGlzIHdpbGwgYmUgYQorICAgICAgICBzbmFwc2hvdHRpbmcgR0Mgb3Igbm90LgorCisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICBJbmZvcm0gdGhlIGJ1aWxk
ZXIgb2YgYSBuZXcgbm9kZSBvciBlZGdlLgorCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgUmVtZW1iZXIgdGhlIGN1cnJlbnQgY2VsbCB3ZSBhcmUg
dmlzaXRpbmcgc28gdGhhdCBpZiB3ZSBuZWVkIHRvCisgICAgICAgIGluZm9ybSB0aGUgYnVpbGRl
ciBvZiBlZGdlcyB3ZSBrbm93IHRoZSAiZnJvbSIgY2VsbC4KKworICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChTaW1wbGVPYmplY3Q6OlNpbXBsZU9iamVjdCk6CisgICAgICAgIChTaW1wbGVP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChTaW1wbGVP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChTaW1wbGVPYmplY3Q6OmhpZGRlblZh
bHVlKToKKyAgICAgICAgKFNpbXBsZU9iamVjdDo6c2V0SGlkZGVuVmFsdWUpOgorICAgICAgICBD
cmVhdGUgYSBuZXcgY2xhc3MgIlNpbXBsZU9iamVjdCIgdGhhdCBjYW4gYmUgdXNlZCBieSBoZWFw
IHNuYXBzaG90dGluZworICAgICAgICB0ZXN0cy4gSXQgaXMgZWFzeSB0byBmaWx0ZXIgZm9yIHRo
aXMgbmV3IGNsYXNzIG5hbWUgYW5kIHRlc3QgaW50ZXJuYWwKKyAgICAgICAgZWRnZSByZWxhdGlv
bnNoaXBzIGNyZWF0ZWQgYnkgZ2FyYmFnZSBjb2xsZWN0aW9uIHZpc2l0aW5nIHRoZSBjZWxsLgor
CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdCk6CisgICAgICAgIChmdW5jdGlv
bkdldEhpZGRlblZhbHVlKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUpOgorICAg
ICAgICBFeHBvc2UgbWV0aG9kcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGggYSBTaW1wbGVP
YmplY3QuCisKKyAgICAgICAgKGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QpOgorICAgICAg
ICBFeHBvc2UgbWV0aG9kcyB0byBjcmVhdGUgYSBoZWFwIHNuYXBzaG90LiBUaGlzIGN1cnJlbnRs
eSBhdXRvbWF0aWNhbGx5CisgICAgICAgIHR1cm5zIHRoZSBzZXJpYWxpemVkIHN0cmluZyBpbnRv
IGEgSlNPTiBvYmplY3QuIFRoYXQgbWF5IGNoYW5nZS4KKworICAgICAgICAqIHRlc3RzL2hlYXBQ
cm9maWxlci55YW1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMu
anM6IEFkZGVkLgorICAgICAgICAoaGFzRGlmZmVyZW50U2l6ZU5vZGVzKToKKyAgICAgICAgKGhh
c0FsbEludGVybmFsTm9kZXMpOgorICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIv
ZHJpdmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChIZWFwU25hcHNo
b3ROb2RlKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdEVkZ2UpOgorICAgICAgICAoSGVhcFNuYXBz
aG90KToKKyAgICAgICAgKEhlYXBTbmFwc2hvdC5wcm90b3R5cGUubm9kZXNXaXRoQ2xhc3NOYW1l
KToKKyAgICAgICAgKGNyZWF0ZUhlYXBTbmFwc2hvdCk6CisgICAgICAgICogdGVzdHMvaGVhcFBy
b2ZpbGVyL2hpZGRlbi1lZGdlLmpzOiBBZGRlZC4KKyAgICAgICAgKHNvcnRlZCk6CisgICAgICAg
ICogdGVzdHMvaGVhcFByb2ZpbGVyL2luc3RhbmNlcy5qczogQWRkZWQuCisgICAgICAgIChzb3J0
ZWQpOgorICAgICAgICBBZGQgdGVzdHMgZm9yIGJhc2ljIG5vZGUgYW5kIGVkZ2UgZGF0YS4KKwog
MjAxNi0wMi0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBuZXcgTWV0aG9kVGFibGUgbWV0aG9kIHRvIGdldCBhbiBlc3RpbWF0ZWQgc2l6ZSBm
b3IgYSBjZWxsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDMwN2U1MmUuLmUxOGQ1
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNTQ4LDYgKzE1NDgsOCBAQAog
CQlBNTEzRTVDQjE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTEzRTVDOTE4NUY5
NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NC
IC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTE0QjJDMDE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCAqLzsgfTsKIAkJQTUxNEIyQzMxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVk
U2NyaXB0QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUxNEIyQzExODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUE1MzExQzM2MUM3
N0NFQzUwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMxMUMzNTFDNzdDRUFDMDBFNkIxQjYgLyog
SGVhcFNuYXBzaG90QnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCUE1MzExQzM3MUM3N0NFQ0EwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RC
dWlsZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1MzExQzM0MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLzsg
fTsKIAkJQTUzMjQzODcxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTMyNDM4MTE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNw
cCAqLzsgfTsKIAkJQTUzMjQzODgxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUzMjQzODIxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1
MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzgz
MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCAqLzsg
fTsKQEAgLTE1NTgsNiArMTU2MCw4IEBACiAJCUE1MzM5RUM2MUJCMzk5QTYwMDU0RjAwNSAvKiBJ
bnNwZWN0b3JIZWFwQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1MzM5RUM1MUJCMzk5OTAwMDU0RjAwNSAvKiBJbnNwZWN0b3JIZWFwQWdlbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTMz
OUVDNzFCQjM5OUE5MDA1NEYwMDUgLyogSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzM5RUM0MUJCMzk5OTAwMDU0
RjAwNSAvKiBJbnNwZWN0b3JIZWFwQWdlbnQuY3BwICovOyB9OwogCQlBNTMzOUVDOTFCQjRCNDYw
MDA1NEYwMDUgLyogSGVhcE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTMzOUVDODFCQjRCNDUxMDA1NEYwMDUgLyogSGVhcE9ic2VydmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTUz
OThGQUIxQzc1MERBNDAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzOThGQUExQzc1MEQ5NTAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5oICovOyB9OworCQlBNTM5OEZBQzFDNzUwREE2MDA2MEE5NjMgLyogSGVh
cFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1Mzk4RkE5MUM3NTBEOTUwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwICovOyB9Owog
CQlBNTNDRTA4NTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTNDRTA4MTE4QkMxQTU2
MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgKi87IH07CiAJCUE1M0NFMDg2MThCQzFB
NTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTNDRTA4MjE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29s
ZVByb3RvdHlwZS5oICovOyB9OwogCQlBNTNDRTA4NzE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25z
b2xlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
M0NFMDgzMThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwICovOyB9OwpAQCAtMTU2Niw2
ICsxNTcwLDggQEAKIAkJQTUzRjFBQzAxOEM5MEY4RjAwNzJFQjZEIC8qIGZyYW1ld29yay5zYiBp
biBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzRjFBQkUx
OEM5MEVDNzAwNzJFQjZEIC8qIGZyYW1ld29yay5zYiAqLzsgfTsKIAkJQTU0OTgyMDMxODkxRDBC
MDAwODFFNUI4IC8qIEV2ZW50TG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTQ5ODIwMTE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmNw
cCAqLzsgfTsKIAkJQTU0OTgyMDQxODkxRDBCMDAwODFFNUI4IC8qIEV2ZW50TG9vcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0OTgyMDIxODkxRDBC
MDAwODFFNUI4IC8qIEV2ZW50TG9vcC5oICovOyB9OworCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThE
NzggLyogSGVhcFNuYXBzaG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1NEMyQUFFMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3Bw
ICovOyB9OworCQlBNTRDMkFCMTFDNjU0NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRDMkFBRjFDNjU0
NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlw
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1NENGMkYyMTg0RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5jcHAgKi87IH07CiAJCUE1
NENGMkY2MTg0RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0Q0YyRjMxODRFQUIyNDAwMjM3RjE5IC8q
IFNjcmlwdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTU0Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRDRjJGNzE4NEVB
RURBMDAyMzdGMTkgLyogU2NyaXB0T2JqZWN0LmNwcCAqLzsgfTsKQEAgLTM3NDIsNiArMzc0OCw4
IEBACiAJCUE1MTNFNUM5MTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MTRCMkMwMTg1QTY4NDQwMEYzQzdD
QiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTUxNEIyQzExODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmplY3RlZFNjcmlwdEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUzMTFDMzQxQzc3Q0VBQzAwRTZCMUI2IC8qIEhl
YXBTbmFwc2hvdEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSGVhcFNuYXBzaG90QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE1MzExQzM1MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBTbmFwc2hvdEJ1aWxkZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzODExODU2ODMxNzAwMkVENjkyIC8qIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMy
NDM4MjE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNTMyNDM4MzE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJv
bnRlbmREaXNwYXRjaGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NTQsNiAr
Mzc2Miw4IEBACiAJCUE1MzM5RUM0MUJCMzk5OTAwMDU0RjAwNSAvKiBJbnNwZWN0b3JIZWFwQWdl
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySGVh
cEFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMzlFQzUxQkIzOTk5
MDAwNTRGMDA1IC8qIEluc3BlY3RvckhlYXBBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JIZWFwQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTUzMzlFQzgxQkI0QjQ1MTAwNTRGMDA1IC8qIEhlYXBPYnNlcnZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwT2JzZXJ2ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQTUzOThGQTkxQzc1MEQ5NTAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwUHJvZmlsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTM5OEZBQTFDNzUwRDk1MDA2MEE5NjMg
LyogSGVhcFByb2ZpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBQ
cm9maWxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTNDRTA4MTE4QkMxQTU2
MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb25zb2xlUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTUzQ0UwODIxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc29sZVByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTNDRTA4MzE4QkMxQTU2MDBCRURGNzYgLyogSlND
b25zb2xlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29uc29s
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzYyLDYgKzM3NzIsOCBAQAog
CQlBNTNGMUFCRTE4QzkwRUM3MDA3MkVCNkQgLyogZnJhbWV3b3JrLnNiICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IGZyYW1ld29y
ay5zYjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0OTgyMDExODkxRDBCMDAwODFF
NUI4IC8qIEV2ZW50TG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFdmVudExvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTQ5ODIwMjE4
OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV2ZW50TG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTRDMkFB
RTFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBTbmFwc2hvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUE1NEMyQUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFNuYXBzaG90Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1NENGMkYyMTg0RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTY3JpcHRWYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NENGMkYzMTg0RUFCMjQwMDIzN0Yx
OSAvKiBTY3JpcHRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3Jp
cHRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRDRjJGNzE4NEVBRURB
MDAyMzdGMTkgLyogU2NyaXB0T2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNjcmlwdE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC01MDkwLDcgKzUxMDIsMTMgQEAKIAkJCQkyQUQ4OTMyOTE3RTM4NjhGMDA2NjgyNzYgLyogSGVh
cEl0ZXJhdGlvblNjb3BlLmggKi8sCiAJCQkJQTUzMzlFQzgxQkI0QjQ1MTAwNTRGMDA1IC8qIEhl
YXBPYnNlcnZlci5oICovLAogCQkJCTJBNkY0NjI1MTdFOTU5Q0UwMEM0NUM5OCAvKiBIZWFwT3Bl
cmF0aW9uLmggKi8sCisJCQkJQTUzOThGQTkxQzc1MEQ5NTAwNjBBOTYzIC8qIEhlYXBQcm9maWxl
ci5jcHAgKi8sCisJCQkJQTUzOThGQUExQzc1MEQ5NTAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5o
ICovLAogCQkJCTE0Rjk3NDQ2MTM4Qzg1M0UwMERBMUM2NyAvKiBIZWFwUm9vdFZpc2l0b3IuaCAq
LywKKwkJCQlBNTRDMkFBRTFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCAqLywK
KwkJCQlBNTRDMkFBRjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggKi8sCisJCQkJ
QTUzMTFDMzQxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwICovLAor
CQkJCUE1MzExQzM1MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi8s
CiAJCQkJQzI0RDMxRTAxNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmNwcCAqLywK
IAkJCQlDMjREMzFFMTE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3MuaCAqLywKIAkJ
CQlDMkU1MjZCQjE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmNwcCAqLywKQEAgLTY5MTUs
NiArNjkzMyw3IEBACiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE3MUJEQTA2N0YwMDMzMUI4NCAvKiBB
cnJheUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTUxNUVEOEU0
NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1MzEx
QzM2MUM3N0NFQzUwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0JEQUVDOTE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMTgxQkRBMDY4MDAwMzMxQjg0IC8qIEFycmF5
SXRlcmF0b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3
MDU3MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTcwODcsNiAr
NzEwNiw3IEBACiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUlu
c3RhbmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEExNTYzMjEwOTY2MzY1MDA2RkEyNjAgLyog
RGF0ZUluc3RhbmNlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1NEMyQUIxMUM2NTQ0RjIw
MEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRDMEUx
NzEzNUUwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Qy
MDNFODBFMTcxOEY0MDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDM0ZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBEZWJ1Z2dlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NDk5LDYgKzc1MTksNyBAQAogCQkJCUZFMTg3QTBGMUMwMzBENkMwMDM4QkJDQSAv
KiBTbmlwcGV0T3BlcmFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzAxQjREQzE0MTAw
RDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTU4N0Q3NTFCNERDMUM2MDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3Ry
dWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5NjMg
LyogSGVhcFByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MjFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTU4N0Q3NjFCNERDMUM2MDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0UHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFENzkyRkQxQjQzODY0QjAwNDUxNkY1IC8qIElu
dGxOdW1iZXJGb3JtYXQuaCBpbiBIZWFkZXJzICovLApAQCAtODgxOSw2ICs4ODQwLDcgQEAKIAkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjYzOTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFEQjBGMDA4MkM1RTgg
LyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTM5OEZBQzFD
NzUwREE2MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzRCMTQ5MTZENDIwMTAwMDFDREE1QSAvKiBERkdVc2VLaW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCREM0RjE1MjI4QkYzMDBDRDg5MTAgLyogREZHVmFsdWVTb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04OTkxLDYgKzkwMTMsNyBAQAogCQkJCTBGMkI2NkU0MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQjY2RTYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjY2RTgxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1MzExQzM3MUM3N0NFQ0EwMEU2
QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QkRB
RUNBMTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBp
biBTb3VyY2VzICovLApAQCAtOTI0Myw2ICs5MjY2LDcgQEAKIAkJCQlCQ0RFM0I0MzBFNkM4MzJE
MDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdFNEVFNzBGMEVC
QjdBNUIwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
QUY3MzgyQzE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQlBNTRDMkFCMDFDNjU0NEVFMDBBMThENzggLyogSGVhcFNuYXBzaG90LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0MxOSAvKiBTdHJ1Y3R1cmVS
YXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI0MzhBMzE5MjcwQjFEMDBFMUZCQzkg
LyogU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDM4MTVBRTRBMUMw
MDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCAxMGVhYTAyLi5iZDI3YjM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtMzMsNyArMzMsOSBAQAogI2lu
Y2x1ZGUgIkdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIkhlYXBI
ZWxwZXJQb29sLmgiCiAjaW5jbHVkZSAiSGVhcEl0ZXJhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAi
SGVhcFByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSGVhcFJvb3RWaXNpdG9yLmgiCisjaW5jbHVkZSAi
SGVhcFNuYXBzaG90LmgiCiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJI
ZWFwVmVyaWZpZXIuaCIKICNpbmNsdWRlICJJbmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTc1OCw2
ICs3NjAsNDEgQEAgdm9pZCBIZWFwOjpyZW1vdmVEZWFkQ29tcGlsZXJXb3JrbGlzdEVudHJpZXMo
KQogI2VuZGlmCiB9CiAKK2Jvb2wgSGVhcDo6aXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3QKK3sK
KyAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5oZWFwUHJvZmlsZXIo
KSkKKyAgICAgICAgcmV0dXJuICEhaGVhcFByb2ZpbGVyLT5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0cnVjdCBSZW1vdmVEZWFkSGVhcFNuYXBzaG90
Tm9kZXMgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKKyAgICBSZW1vdmVEZWFkSGVhcFNu
YXBzaG90Tm9kZXMoSGVhcFNuYXBzaG90JiBzbmFwc2hvdCkKKyAgICAgICAgOiBtX3NuYXBzaG90
KHNuYXBzaG90KQorICAgIHsKKyAgICB9CisKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3Io
KShKU0NlbGwqIGNlbGwpCisgICAgeworICAgICAgICBtX3NuYXBzaG90LnN3ZWVwQ2VsbChjZWxs
KTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7CisgICAgfQorCisg
ICAgSGVhcFNuYXBzaG90JiBtX3NuYXBzaG90OworfTsKKwordm9pZCBIZWFwOjpyZW1vdmVEZWFk
SGVhcFNuYXBzaG90Tm9kZXMoKQoreworICAgIEdDUEhBU0UoUmVtb3ZlRGVhZEhlYXBTbmFwc2hv
dE5vZGVzKTsKKyAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5oZWFw
UHJvZmlsZXIoKSkgeworICAgICAgICBpZiAoSGVhcFNuYXBzaG90KiBzbmFwc2hvdCA9IGhlYXBQ
cm9maWxlci0+bW9zdFJlY2VudFNuYXBzaG90KCkpIHsKKyAgICAgICAgICAgIEhlYXBJdGVyYXRp
b25TY29wZSBoZWFwSXRlcmF0aW9uU2NvcGUoKnRoaXMpOworICAgICAgICAgICAgUmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzIGZ1bmN0b3IoKnNuYXBzaG90KTsKKyAgICAgICAgICAgIG1fb2Jq
ZWN0U3BhY2UuZm9yRWFjaERlYWRDZWxsKGhlYXBJdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7Cisg
ICAgICAgICAgICBzbmFwc2hvdC0+c2hyaW5rVG9GaXQoKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwogdm9pZCBIZWFwOjp2aXNpdFByb3RlY3RlZE9iamVjdHMoSGVhcFJvb3RWaXNpdG9yJiBoZWFw
Um9vdFZpc2l0b3IpCiB7CiAgICAgR0NQSEFTRShWaXNpdFByb3RlY3RlZE9iamVjdHMpOwpAQCAt
MTEyNCw2ICsxMTYxLDcgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6Y29sbGVjdEltcGwoSGVh
cE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSwgdm9pZCogc3RhY2tPcmkKICAgICByZW1vdmVEZWFk
Q29tcGlsZXJXb3JrbGlzdEVudHJpZXMoKTsKICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29k
ZSgpOwogICAgIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7CisgICAgcmVtb3ZlRGVhZEhl
YXBTbmFwc2hvdE5vZGVzKCk7CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAg
d3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcygpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKaW5kZXggYmVlZTg2NS4uMTEwYWMyNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaApAQCAtMTYzLDYgKzE2Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIG5vdGlmeUlz
U2FmZVRvQ29sbGVjdCgpIHsgbV9pc1NhZmVUb0NvbGxlY3QgPSB0cnVlOyB9CiAgICAgYm9vbCBp
c1NhZmVUb0NvbGxlY3QoKSBjb25zdCB7IHJldHVybiBtX2lzU2FmZVRvQ29sbGVjdDsgfQogCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0hlYXBTbmFwc2hvdHRpbmcoKSBjb25zdDsKKwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2VJZk5vdERvbmVSZWNl
bnRseSgpOwogICAgIHZvaWQgY29sbGVjdEFsbEdhcmJhZ2UoKSB7IGNvbGxlY3RBbmRTd2VlcChG
dWxsQ29sbGVjdGlvbik7IH0KICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RBbmRT
d2VlcChIZWFwT3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlID0gQW55Q29sbGVjdGlvbik7CkBAIC0z
MjcsNiArMzI5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN3ZWVwQXJyYXlCdWZmZXJzKCk7CiAg
ICAgdm9pZCBzbmFwc2hvdE1hcmtlZFNwYWNlKCk7CiAgICAgdm9pZCBkZWxldGVTb3VyY2VQcm92
aWRlckNhY2hlcygpOworICAgIHZvaWQgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKCk7CiAg
ICAgdm9pZCBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKICAgICB2b2lkIHdyaXRlQmFycmll
ckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoKTsKICAgICB2b2lkIHJlc2V0QWxsb2NhdG9y
cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ODFiNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5jcHAKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcFByb2ZpbGVyLmgiCisKKyNpbmNsdWRlICJI
ZWFwU25hcHNob3QuaCIKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSGVh
cFByb2ZpbGVyOjpIZWFwUHJvZmlsZXIoVk0mIHZtKQorICAgIDogbV92bSh2bSkKK3sKK30KKwor
SGVhcFByb2ZpbGVyOjp+SGVhcFByb2ZpbGVyKCkKK3sKK30KKworSGVhcFNuYXBzaG90KiBIZWFw
UHJvZmlsZXI6Om1vc3RSZWNlbnRTbmFwc2hvdCgpCit7CisgICAgaWYgKG1fc25hcHNob3RzLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fc25hcHNob3Rz
Lmxhc3QoKS5nZXQoKTsKK30KKwordm9pZCBIZWFwUHJvZmlsZXI6OmFwcGVuZFNuYXBzaG90KHN0
ZDo6dW5pcXVlX3B0cjxIZWFwU25hcHNob3Q+IHNuYXBzaG90KQoreworICAgIG1fc25hcHNob3Rz
LmFwcGVuZChXVEZNb3ZlKHNuYXBzaG90KSk7Cit9CisKK3ZvaWQgSGVhcFByb2ZpbGVyOjpjbGVh
clNuYXBzaG90cygpCit7CisgICAgbV9zbmFwc2hvdHMuY2xlYXIoKTsKK30KKwordm9pZCBIZWFw
UHJvZmlsZXI6OnNldEFjdGl2ZVNuYXBzaG90QnVpbGRlcihIZWFwU25hcHNob3RCdWlsZGVyKiBi
dWlsZGVyKQoreworICAgIEFTU0VSVCghIW1fYWN0aXZlQnVpbGRlciAhPSAhIWJ1aWxkZXIpOwor
ICAgIG1fYWN0aXZlQnVpbGRlciA9IGJ1aWxkZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMmE3ZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEhlYXBQcm9m
aWxlcl9oCisjZGVmaW5lIEhlYXBQcm9maWxlcl9oCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBIZWFwU25hcHNob3Q7CitjbGFzcyBIZWFwU25h
cHNob3RCdWlsZGVyOworY2xhc3MgVk07CisKK2NsYXNzIEhlYXBQcm9maWxlciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSGVhcFByb2ZpbGVyKFZNJik7Cisg
ICAgfkhlYXBQcm9maWxlcigpOworCisgICAgVk0mIHZtKCkgY29uc3QgeyByZXR1cm4gbV92bTsg
fQorCisgICAgSGVhcFNuYXBzaG90KiBtb3N0UmVjZW50U25hcHNob3QoKTsKKyAgICB2b2lkIGFw
cGVuZFNuYXBzaG90KHN0ZDo6dW5pcXVlX3B0cjxIZWFwU25hcHNob3Q+KTsKKyAgICB2b2lkIGNs
ZWFyU25hcHNob3RzKCk7CisKKyAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBhY3RpdmVTbmFwc2hv
dEJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZUJ1aWxkZXI7IH0KKyAgICB2b2lkIHNl
dEFjdGl2ZVNuYXBzaG90QnVpbGRlcihIZWFwU25hcHNob3RCdWlsZGVyKik7CisKK3ByaXZhdGU6
CisgICAgVk0mIG1fdm07CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxIZWFwU25hcHNob3Q+
PiBtX3NuYXBzaG90czsKKyAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2FjdGl2ZUJ1aWxkZXIg
eyBudWxscHRyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEhlYXBQ
cm9maWxlcl9oIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNu
YXBzaG90LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4ZTU4YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5jcHAKQEAgLTAs
MCArMSwxNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBTbmFwc2hvdC5oIgorCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSGVhcFNuYXBzaG90OjpI
ZWFwU25hcHNob3QoSGVhcFNuYXBzaG90KiBwcmV2aW91c1NuYXBzaG90KQorICAgIDogbV9wcmV2
aW91cyhwcmV2aW91c1NuYXBzaG90KQoreworfQorCitIZWFwU25hcHNob3Q6On5IZWFwU25hcHNo
b3QoKQoreworfQorCit2b2lkIEhlYXBTbmFwc2hvdDo6YXBwZW5kTm9kZShjb25zdCBIZWFwU25h
cHNob3ROb2RlJiBub2RlKQoreworICAgIEFTU0VSVCghbV9maW5hbGl6ZWQpOworICAgIEFTU0VS
VCghbV9wcmV2aW91cyB8fCAhbV9wcmV2aW91cy0+bm9kZUZvckNlbGwobm9kZS5jZWxsKSk7CisK
KyAgICBtX25vZGVzLmFwcGVuZChub2RlKTsKK30KKwordm9pZCBIZWFwU25hcHNob3Q6OnN3ZWVw
Q2VsbChKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUKGNlbGwpOworCisgICAgaWYgKG1fZmlu
YWxpemVkICYmICFpc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnQgPSAwOworICAg
ICAgICB1bnNpZ25lZCBlbmQgPSBtX25vZGVzLnNpemUoKTsKKyAgICAgICAgd2hpbGUgKHN0YXJ0
ICE9IGVuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gc3RhcnQgKyAoKGVuZCAt
IHN0YXJ0KSAvIDIpOworICAgICAgICAgICAgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSA9IG1fbm9k
ZXNbbWlkZGxlXTsKKyAgICAgICAgICAgIGlmIChjZWxsID09IG5vZGUuY2VsbCkgeworICAgICAg
ICAgICAgICAgIG1fY2VsbHNUb1N3ZWVwLmFkZChjZWxsKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2VsbCA8IG5vZGUuY2VsbCkKKyAg
ICAgICAgICAgICAgICBlbmQgPSBtaWRkbGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgc3RhcnQgPSBtaWRkbGUgKyAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1f
cHJldmlvdXMpCisgICAgICAgIG1fcHJldmlvdXMtPnN3ZWVwQ2VsbChjZWxsKTsKK30KKwordm9p
ZCBIZWFwU25hcHNob3Q6OnNocmlua1RvRml0KCkKK3sKKyAgICBpZiAobV9maW5hbGl6ZWQpIHsK
KyAgICAgICAgaWYgKCFtX2NlbGxzVG9Td2VlcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
bm9kZXMucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChjb25zdCBIZWFw
U25hcHNob3ROb2RlJiBub2RlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY2VsbHNUb1N3ZWVwLmNvbnRhaW5zKG5vZGUuY2VsbCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBtX25vZGVzLnNocmlua1RvRml0KCk7CisgICAgICAgICAgICBtX2NlbGxz
VG9Td2VlcC5jbGVhcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcHJldmlvdXMp
CisgICAgICAgIG1fcHJldmlvdXMtPnNocmlua1RvRml0KCk7Cit9CisKK3ZvaWQgSGVhcFNuYXBz
aG90OjpmaW5hbGl6ZSgpCit7CisgICAgbV9maW5hbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFp
c0VtcHR5KCkpIHsKKyAgICAgICAgbV9maXJzdE9iamVjdElkZW50aWZpZXIgPSBtX25vZGVzLmZp
cnN0KCkuaWRlbnRpZmllcjsKKyAgICAgICAgbV9sYXN0T2JqZWN0SWRlbnRpZmllciA9IG1fbm9k
ZXMubGFzdCgpLmlkZW50aWZpZXI7CisgICAgfQorCisgICAgc3RkOjpzb3J0KG1fbm9kZXMuYmVn
aW4oKSwgbV9ub2Rlcy5lbmQoKSwgW10gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIGEsIGNvbnN0
IEhlYXBTbmFwc2hvdE5vZGUmIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuY2VsbCA8IGIuY2VsbDsK
KyAgICB9KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBBc3NlcnQgdGhlcmUgYXJlIG5vIGR1
cGxpY2F0ZXMgb3IgbnVsbHB0ciBjZWxscy4KKyAgICBKU0NlbGwqIHByZXZpb3VzQ2VsbCA9IG51
bGxwdHI7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9ub2RlcykgeworICAgICAgICBBU1NFUlQo
bm9kZS5jZWxsKTsKKyAgICAgICAgaWYgKHByZXZpb3VzQ2VsbCkKKyAgICAgICAgICAgIEFTU0VS
VChub2RlLmNlbGwgIT0gcHJldmlvdXNDZWxsKTsKKyAgICAgICAgcHJldmlvdXNDZWxsID0gbm9k
ZS5jZWxsOworICAgIH0KKyNlbmRpZgorfQorCitPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBI
ZWFwU25hcHNob3Q6Om5vZGVGb3JDZWxsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQobV9m
aW5hbGl6ZWQpOworCisgICAgaWYgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAgdW5zaWduZWQgc3Rh
cnQgPSAwOworICAgICAgICB1bnNpZ25lZCBlbmQgPSBtX25vZGVzLnNpemUoKTsKKyAgICAgICAg
d2hpbGUgKHN0YXJ0ICE9IGVuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgbWlkZGxlID0gc3Rh
cnQgKyAoKGVuZCAtIHN0YXJ0KSAvIDIpOworICAgICAgICAgICAgSGVhcFNuYXBzaG90Tm9kZSYg
bm9kZSA9IG1fbm9kZXNbbWlkZGxlXTsKKyAgICAgICAgICAgIGlmIChjZWxsID09IG5vZGUuY2Vs
bCkKKyAgICAgICAgICAgICAgICByZXR1cm4gT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4obm9k
ZSk7CisgICAgICAgICAgICBpZiAoY2VsbCA8IG5vZGUuY2VsbCkKKyAgICAgICAgICAgICAgICBl
bmQgPSBtaWRkbGU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhcnQgPSBt
aWRkbGUgKyAxOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fcHJldmlvdXMpCisgICAg
ICAgIHJldHVybiBtX3ByZXZpb3VzLT5ub2RlRm9yQ2VsbChjZWxsKTsKKworICAgIHJldHVybiBO
dWxsb3B0OworfQorCitPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBIZWFwU25hcHNob3Q6Om5v
ZGVGb3JPYmplY3RJZGVudGlmaWVyKHVuc2lnbmVkIG9iamVjdElkZW50aWZpZXIpCit7CisgICAg
aWYgKGlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9wcmV2aW91cykKKyAgICAgICAgICAgIHJl
dHVybiBtX3ByZXZpb3VzLT5ub2RlRm9yT2JqZWN0SWRlbnRpZmllcihvYmplY3RJZGVudGlmaWVy
KTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKG9iamVjdElkZW50
aWZpZXIgPiBtX2xhc3RPYmplY3RJZGVudGlmaWVyKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KworICAgIGlmIChvYmplY3RJZGVudGlmaWVyIDwgbV9maXJzdE9iamVjdElkZW50aWZpZXIpIHsK
KyAgICAgICAgaWYgKG1fcHJldmlvdXMpCisgICAgICAgICAgICByZXR1cm4gbV9wcmV2aW91cy0+
bm9kZUZvck9iamVjdElkZW50aWZpZXIob2JqZWN0SWRlbnRpZmllcik7CisgICAgICAgIHJldHVy
biBOdWxsb3B0OworICAgIH0KKworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fbm9kZXMpIHsKKyAg
ICAgICAgaWYgKG5vZGUuaWRlbnRpZmllciA9PSBvYmplY3RJZGVudGlmaWVyKQorICAgICAgICAg
ICAgcmV0dXJuIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+KG5vZGUpOworICAgIH0KKworICAg
IHJldHVybiBOdWxsb3B0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZmMwN2I3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBTbmFwc2hvdC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBIZWFwU25hcHNob3RfaAorI2RlZmlu
ZSBIZWFwU25hcHNob3RfaAorCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBIZWFwU25hcHNob3QgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIEhlYXBTbmFwc2hvdChIZWFwU25hcHNob3QqKTsKKyAgICB+
SGVhcFNuYXBzaG90KCk7CisKKyAgICBIZWFwU25hcHNob3QqIHByZXZpb3VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmV2aW91czsgfQorCisgICAgdm9pZCBhcHBlbmROb2RlKGNvbnN0IEhlYXBTbmFw
c2hvdE5vZGUmKTsKKyAgICB2b2lkIHN3ZWVwQ2VsbChKU0NlbGwqKTsKKyAgICB2b2lkIHNocmlu
a1RvRml0KCk7CisgICAgdm9pZCBmaW5hbGl6ZSgpOworCisgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9ub2Rlcy5pc0VtcHR5KCk7IH0KKyAgICBPcHRpb25hbDxIZWFwU25hcHNo
b3ROb2RlPiBub2RlRm9yQ2VsbChKU0NlbGwqKTsKKyAgICBPcHRpb25hbDxIZWFwU25hcHNob3RO
b2RlPiBub2RlRm9yT2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCBvYmplY3RJZGVudGlmaWVyKTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKKworICAg
IFZlY3RvcjxIZWFwU25hcHNob3ROb2RlPiBtX25vZGVzOworICAgIEhhc2hTZXQ8SlNDZWxsKj4g
bV9jZWxsc1RvU3dlZXA7CisgICAgSGVhcFNuYXBzaG90KiBtX3ByZXZpb3VzIHsgbnVsbHB0ciB9
OworICAgIHVuc2lnbmVkIG1fZmlyc3RPYmplY3RJZGVudGlmaWVyIHsgMCB9OworICAgIHVuc2ln
bmVkIG1fbGFzdE9iamVjdElkZW50aWZpZXIgeyAwIH07CisgICAgYm9vbCBtX2ZpbmFsaXplZCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEhlYXBTbmFw
c2hvdF9oIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmVlZWYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90
QnVpbGRlci5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBT
bmFwc2hvdEJ1aWxkZXIuaCIKKworI2luY2x1ZGUgIkRlZmVyR0MuaCIKKyNpbmNsdWRlICJIZWFw
LmgiCisjaW5jbHVkZSAiSGVhcFByb2ZpbGVyLmgiCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90Lmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUg
IlZNLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKyAgICAKK3Vuc2lnbmVkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Om5leHRBdmFpbGFibGVP
YmplY3RJZGVudGlmaWVyID0gMTsKK3Vuc2lnbmVkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmdldE5l
eHRPYmplY3RJZGVudGlmaWVyKCkgeyByZXR1cm4gbmV4dEF2YWlsYWJsZU9iamVjdElkZW50aWZp
ZXIrKzsgfQorCitIZWFwU25hcHNob3RCdWlsZGVyOjpIZWFwU25hcHNob3RCdWlsZGVyKEhlYXBQ
cm9maWxlciYgcHJvZmlsZXIpCisgICAgOiBtX3Byb2ZpbGVyKHByb2ZpbGVyKQoreworfQorCitI
ZWFwU25hcHNob3RCdWlsZGVyOjp+SGVhcFNuYXBzaG90QnVpbGRlcigpCit7Cit9CisKK3ZvaWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCgpCit7CisgICAgbV9zbmFwc2hvdCA9
IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFNuYXBzaG90PihtX3Byb2ZpbGVyLm1vc3RSZWNlbnRTbmFw
c2hvdCgpKTsKKyAgICB7CisgICAgICAgIG1fcHJvZmlsZXIuc2V0QWN0aXZlU25hcHNob3RCdWls
ZGVyKHRoaXMpOworICAgICAgICBtX3Byb2ZpbGVyLnZtKCkuaGVhcC5jb2xsZWN0QWxsR2FyYmFn
ZSgpOworICAgICAgICBtX3Byb2ZpbGVyLnNldEFjdGl2ZVNuYXBzaG90QnVpbGRlcihudWxscHRy
KTsKKyAgICB9CisgICAgbV9zbmFwc2hvdC0+ZmluYWxpemUoKTsKKworICAgIG1fcHJvZmlsZXIu
YXBwZW5kU25hcHNob3QoV1RGTW92ZShtX3NuYXBzaG90KSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBz
aG90QnVpbGRlcjo6YXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJUKG1fcHJv
ZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKEhlYXA6
OmlzTWFya2VkKGNlbGwpKTsKKworICAgIGJvb2wgaGFzRXhpc3RpbmdOb2RlID0gaGFzRXhpc3Rp
bmdOb2RlRm9yQ2VsbChjZWxsKTsKKyAgICBpZiAoaGFzRXhpc3RpbmdOb2RlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2FwcGVuZGluZ011dGV4
KTsKKworICAgIG1fc25hcHNob3QtPmFwcGVuZE5vZGUoSGVhcFNuYXBzaG90Tm9kZShjZWxsLCBn
ZXROZXh0T2JqZWN0SWRlbnRpZmllcigpKSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRl
cjo6YXBwZW5kRWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCit7CisgICAgQVNTRVJUKG1f
cHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRv
KTsKKworICAgIC8vIEF2b2lkIHRyaXZpYWwgZWRnZXMuCisgICAgaWYgKGZyb20gPT0gdG8pCisg
ICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5k
aW5nTXV0ZXgpOworCisgICAgbV9lZGdlcy5hcHBlbmQoSGVhcFNuYXBzaG90RWRnZShmcm9tLCB0
bykpOworfQorCitib29sIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Omhhc0V4aXN0aW5nTm9kZUZvckNl
bGwoSlNDZWxsKiBjZWxsKQoreworICAgIGlmICghbV9zbmFwc2hvdC0+cHJldmlvdXMoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuICEhbV9zbmFwc2hvdC0+cHJldmlvdXMo
KS0+bm9kZUZvckNlbGwoY2VsbCk7Cit9CisKKworLy8gSGVhcCBTbmFwc2hvdCBKU09OIEZvcm1h
dDoKKy8vCisvLyAgIHsKKy8vICAgICAgInZlcnNpb24iOiAxLjAsCisvLyAgICAgICJub2RlcyI6
IFsKKy8vICAgICAgICAgIFs8bm9kZUlkPiwgPHNpemVJbkJ5dGVzPiwgPG5vZGVDbGFzc05hbWVJ
bmRleD4sIDxvcHRpb25hbEludGVybmFsQm9vbGVhbj5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAg
ICAgIm5vZGVDbGFzc05hbWVzIjogWworLy8gICAgICAgICAgInN0cmluZyIsICJTdHJ1Y3R1cmUi
LCAiT2JqZWN0IiwgLi4uCisvLyAgICAgIF0sCisvLyAgICAgICJlZGdlcyI6IFsKKy8vICAgICAg
ICAgIFs8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlvbmFs
RWRnZUV4dHJhRGF0YT5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAgICAgImVkZ2VUeXBlcyI6IFsK
Ky8vICAgICAgICAgICJJbnRlcm5hbCIsICJQcm9wZXJ0eSIsICJJbmRleCIsICJWYXJpYWJsZSIK
Ky8vICAgICAgXQorLy8gICB9CisvLworLy8gRklYTUU6IFBvc3NpYmxlIGNvbXBhY3Rpb24gaW1w
cm92ZW1lbnRzOgorLy8gICAtIGVsaW1pbmF0ZSBpbm5lciBhcnJheSBncm91cHMgYW5kIGp1c3Qg
aGF2ZSBhIHNpbmdsZSBsaXN0IHdpdGggZml4ZWQgZ3JvdXAgc2l6ZXMgKG1ldGEgZGF0YSBzZWN0
aW9uKS4KKy8vICAgLSBlbGltaW5hdGUgZHVwbGljYXRlIGVkZ2UgZXh0cmEgZGF0YSBzdHJpbmdz
LCBoYXZlIGFuIGluZGV4IGludG8gYSBkZS1kdXBsaWNhdGVkIGxpa2UgZWRnZVR5cGVzIC8gbm9k
ZUNsYXNzTmFtZXMuCisvLyAgIC0gY29udmVydCBib29sZWFuICJ0cnVlIiB0byBudW1iZXIgIjEi
IGFuZCBzYXZlIGEgZmV3IGJ5dGVzIHBlci1pbnRlcm5hbCBvYmplY3QuCisKK3N0YXRpYyB1aW50
OF90IGVkZ2VUeXBlVG9OdW1iZXIoRWRnZVR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDhfdD4odHlwZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBlZGdlVHlwZVRv
U3RyaW5nKEVkZ2VUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBF
ZGdlVHlwZTo6SW50ZXJuYWw6CisgICAgICAgIHJldHVybiAiSW50ZXJuYWwiOworICAgIGNhc2Ug
RWRnZVR5cGU6OlByb3BlcnR5OgorICAgICAgICByZXR1cm4gIlByb3BlcnR5IjsKKyAgICBjYXNl
IEVkZ2VUeXBlOjpJbmRleDoKKyAgICAgICAgcmV0dXJuICJJbmRleCI7CisgICAgY2FzZSBFZGdl
VHlwZTo6VmFyaWFibGU6CisgICAgICAgIHJldHVybiAiVmFyaWFibGUiOworICAgIH0KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIkludGVybmFsIjsKK30KKworU3RyaW5n
IEhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24oKQoreworICAgIHJldHVybiBqc29uKFtdIChjb25z
dCBIZWFwU25hcHNob3ROb2RlJikgeyByZXR1cm4gdHJ1ZTsgfSk7Cit9CisKK1N0cmluZyBIZWFw
U25hcHNob3RCdWlsZGVyOjpqc29uKHN0ZDo6ZnVuY3Rpb248Ym9vbCAoY29uc3QgSGVhcFNuYXBz
aG90Tm9kZSYpPiBhbGxvd05vZGVDYWxsYmFjaykKK3sKKyAgICBWTSYgdm0gPSBtX3Byb2ZpbGVy
LnZtKCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworCisgICAgLy8g
QnVpbGQgYSBub2RlIHRvIGlkZW50aWZpZXIgbWFwIG9mIGFsbG93ZWQgbm9kZXMgdG8gdXNlIHdo
ZW4gc2VyaWFsaXppbmcgZWRnZXMuCisgICAgSGFzaE1hcDxKU0NlbGwqLCB1bnNpZ25lZD4gYWxs
b3dlZE5vZGVJZGVudGlmaWVyczsKKworICAgIC8vIEJ1aWxkIGEgbGlzdCBvZiB1c2VkIGNsYXNz
IG5hbWVzLgorICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIHVuc2lnbmVkPiBjbGFzc05hbWVJbmRl
eGVzOworICAgIHVuc2lnbmVkIG5leHRDbGFzc05hbWVJbmRleCA9IDA7CisKKyAgICBTdHJpbmdC
dWlsZGVyIGpzb247CisKKyAgICBhdXRvIGFwcGVuZE5vZGVKU09OID0gWyZdIChjb25zdCBIZWFw
U25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgICAgIC8vIExldCB0aGUgY2xpZW50IGRlY2lkZSBp
ZiB0aGV5IHdhbnQgdG8gYWxsb3cgb3IgZGlzYWxsb3cgY2VydGFpbiBub2Rlcy4KKyAgICAgICAg
aWYgKCFhbGxvd05vZGVDYWxsYmFjayhub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLnNldChub2RlLmNlbGwsIG5vZGUuaWRlbnRpZmll
cik7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBjbGFzc05hbWVJbmRleGVzLmFkZChub2RlLmNl
bGwtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsIG5leHRDbGFzc05hbWVJbmRleCk7CisgICAgICAg
IGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIG5leHRDbGFzc05hbWVJbmRleCsr
OworICAgICAgICB1bnNpZ25lZCBjbGFzc05hbWVJbmRleCA9IHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7CisKKyAgICAgICAgYm9vbCBpc0ludGVybmFsID0gZmFsc2U7CisgICAgICAgIGlmICghbm9k
ZS5jZWxsLT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG5vZGUuY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIGlzSW50ZXJuYWwgPSAhc3Ry
dWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gWzxub2RlSWQ+LCA8c2l6ZUluQnl0ZXM+LCA8Y2xhc3NOYW1lPiwgPG9wdGlvbmFsSW50
ZXJuYWxCb29sZWFuPl0KKyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNvbi5h
cHBlbmQoJ1snKTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIobm9kZS5pZGVudGlmaWVyKTsK
KyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIobm9k
ZS5jZWxsLT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpKTsKKyAgICAgICAganNvbi5hcHBlbmQoJywn
KTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIoY2xhc3NOYW1lSW5kZXgpOworICAgICAgICBp
ZiAoaXNJbnRlcm5hbCkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kTGl0ZXJhbCgiLHRydWUiKTsK
KyAgICAgICAganNvbi5hcHBlbmQoJ10nKTsKKyAgICB9OworCisgICAgYm9vbCBmaXJzdEVkZ2Ug
PSB0cnVlOworICAgIGF1dG8gYXBwZW5kRWRnZUpTT04gPSBbJl0gKGNvbnN0IEhlYXBTbmFwc2hv
dEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZyb20gY2VsbCBpcyBudWxsLCB0aGlz
IG1lYW5zIGEgcm9vdCBlZGdlLgorICAgICAgICB1bnNpZ25lZCBmcm9tSWRlbnRpZmllciA9IDA7
CisgICAgICAgIGlmIChlZGdlLmZyb20pIHsKKyAgICAgICAgICAgIGF1dG8gZnJvbUxvb2t1cCA9
IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZmluZChlZGdlLmZyb20pOworICAgICAgICAgICAgaWYg
KGZyb21Mb29rdXAgPT0gYWxsb3dlZE5vZGVJZGVudGlmaWVycy5lbmQoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICBmcm9tSWRlbnRpZmllciA9IGZyb21Mb29rdXAtPnZh
bHVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdG9JZGVudGlmaWVyID0gMDsKKyAg
ICAgICAgaWYgKGVkZ2UudG8pIHsKKyAgICAgICAgICAgIGF1dG8gdG9Mb29rdXAgPSBhbGxvd2Vk
Tm9kZUlkZW50aWZpZXJzLmZpbmQoZWRnZS50byk7CisgICAgICAgICAgICBpZiAodG9Mb29rdXAg
PT0gYWxsb3dlZE5vZGVJZGVudGlmaWVycy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB0b0lkZW50aWZpZXIgPSB0b0xvb2t1cC0+dmFsdWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoIWZpcnN0RWRnZSkKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCcsJyk7
CisgICAgICAgIGZpcnN0RWRnZSA9IGZhbHNlOworCisgICAgICAgIC8vIFs8ZnJvbU5vZGVJZD4s
IDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlvbmFsRWRnZUV4dHJhRGF0YT5dLAor
ICAgICAgICBqc29uLmFwcGVuZCgnWycpOworICAgICAgICBqc29uLmFwcGVuZE51bWJlcihmcm9t
SWRlbnRpZmllcik7CisgICAgICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAgICAgIGpzb24uYXBw
ZW5kTnVtYmVyKHRvSWRlbnRpZmllcik7CisgICAgICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAg
ICAgIGpzb24uYXBwZW5kTnVtYmVyKGVkZ2VUeXBlVG9OdW1iZXIoZWRnZS50eXBlKSk7CisgICAg
ICAgIGpzb24uYXBwZW5kKCddJyk7CisgICAgfTsKKworICAgIGpzb24uYXBwZW5kKCd7Jyk7CisK
KyAgICAvLyB2ZXJzaW9uCisgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcInZlcnNpb25cIjoxIik7
CisKKyAgICAvLyBub2RlcworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5hcHBlbmRM
aXRlcmFsKCJcIm5vZGVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICBqc29uLmFw
cGVuZExpdGVyYWwoIlswLDAsXCI8cm9vdD5cIl0iKTsKKyAgICBmb3IgKEhlYXBTbmFwc2hvdCog
c25hcHNob3QgPSBtX3Byb2ZpbGVyLm1vc3RSZWNlbnRTbmFwc2hvdCgpOyBzbmFwc2hvdDsgc25h
cHNob3QgPSBzbmFwc2hvdC0+cHJldmlvdXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG5vZGUg
OiBzbmFwc2hvdC0+bV9ub2RlcykKKyAgICAgICAgICAgIGFwcGVuZE5vZGVKU09OKG5vZGUpOwor
ICAgIH0KKyAgICBqc29uLmFwcGVuZCgnXScpOworCisgICAgLy8gbm9kZSBjbGFzcyBuYW1lcwor
ICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcIm5vZGVDbGFz
c05hbWVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICBWZWN0b3I8Y29uc3QgY2hh
ciAqPiBvcmRlcmVkQ2xhc3NOYW1lcyhjbGFzc05hbWVJbmRleGVzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGNsYXNzTmFtZUluZGV4ZXMpCisgICAgICAgIG9yZGVyZWRDbGFzc05h
bWVzW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleTsKKyAgICBib29sIGZpcnN0Q2xhc3NOYW1lID0g
dHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGNsYXNzTmFtZSA6IG9yZGVyZWRDbGFzc05hbWVzKSB7Cisg
ICAgICAgIGlmICghZmlyc3RDbGFzc05hbWUpCisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcp
OworICAgICAgICBmaXJzdENsYXNzTmFtZSA9IGZhbHNlOworICAgICAgICBqc29uLmFwcGVuZFF1
b3RlZEpTT05TdHJpbmcoY2xhc3NOYW1lKTsKKyAgICB9CisgICAganNvbi5hcHBlbmQoJ10nKTsK
KworICAgIC8vIGVkZ2VzCisgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICBqc29uLmFwcGVuZExp
dGVyYWwoIlwiZWRnZXNcIjoiKTsKKyAgICBqc29uLmFwcGVuZCgnWycpOworICAgIGZvciAoYXV0
byYgZWRnZSA6IG1fZWRnZXMpCisgICAgICAgIGFwcGVuZEVkZ2VKU09OKGVkZ2UpOworICAgIGpz
b24uYXBwZW5kKCddJyk7CisKKyAgICAvLyBlZGdlIHR5cGVzCisgICAganNvbi5hcHBlbmQoJywn
KTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiZWRnZVR5cGVzXCI6Iik7CisgICAganNvbi5h
cHBlbmQoJ1snKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoZWRnZVR5cGVUb1N0
cmluZyhFZGdlVHlwZTo6SW50ZXJuYWwpKTsKKyAgICBqc29uLmFwcGVuZCgnLCcpOworICAgIGpz
b24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhlZGdlVHlwZVRvU3RyaW5nKEVkZ2VUeXBlOjpQcm9w
ZXJ0eSkpOworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5hcHBlbmRRdW90ZWRKU09O
U3RyaW5nKGVkZ2VUeXBlVG9TdHJpbmcoRWRnZVR5cGU6OkluZGV4KSk7CisgICAganNvbi5hcHBl
bmQoJywnKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoZWRnZVR5cGVUb1N0cmlu
ZyhFZGdlVHlwZTo6VmFyaWFibGUpKTsKKyAgICBqc29uLmFwcGVuZCgnXScpOworCisgICAganNv
bi5hcHBlbmQoJ30nKTsKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjI4YmI5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90
QnVpbGRlci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFNuYXBzaG90QnVpbGRlcl9oCisjZGVmaW5l
IEhlYXBTbmFwc2hvdEJ1aWxkZXJfaAorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEhlYXBQcm9maWxlcjsK
K2NsYXNzIEhlYXBTbmFwc2hvdDsKK2NsYXNzIEpTQ2VsbDsKKworc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGUgeworICAgIEhlYXBTbmFwc2hvdE5vZGUoSlNDZWxsKiBjZWxsLCB1bnNpZ25lZCBpZGVu
dGlmaWVyKQorICAgICAgICA6IGNlbGwoY2VsbCkKKyAgICAgICAgLCBpZGVudGlmaWVyKGlkZW50
aWZpZXIpCisgICAgeyB9CisKKyAgICBKU0NlbGwqIGNlbGw7CisgICAgdW5zaWduZWQgaWRlbnRp
ZmllcjsKK307CisKK2VudW0gY2xhc3MgRWRnZVR5cGUgOiB1aW50OF90IHsKKyAgICBJbnRlcm5h
bCwgICAgIC8vIE5vcm1hbCBzdHJvbmcgcmVmZXJlbmNlLiBObyBuYW1lLgorICAgIFByb3BlcnR5
LCAgICAgLy8gTmFtZWQgcHJvcGVydHkuIEluIGBvYmplY3QucHJvcGVydHlgIHRoZSBuYW1lIGlz
ICJwcm9wZXJ0eSIKKyAgICBJbmRleCwgICAgICAgIC8vIEluZGV4ZWQgcHJvcGVydHkuIEluIGBh
cnJheVswXWAgbmFtZSBpcyBpbmRleCAiMCIuCisgICAgVmFyaWFibGUsICAgICAvLyBWYXJpYWJs
ZSBoZWxkIGJ5IGEgc2NvcGUuIEluIGBsZXQgeCwgZj0oKSA9PiB4KytgIG5hbWUgaXMgIngiIGlu
IGYncyBjYXB0dXJlZCBzY29wZS4KKyAgICAvLyBGSVhNRTogQWRkICJXZWFrIiBlZGdlcy4KK307
CisKK3N0cnVjdCBIZWFwU25hcHNob3RFZGdlIHsKKyAgICBIZWFwU25hcHNob3RFZGdlKEpTQ2Vs
bCogZnJvbSwgSlNDZWxsKiB0bykKKyAgICAgICAgOiBmcm9tKGZyb20pCisgICAgICAgICwgdG8o
dG8pCisgICAgICAgICwgdHlwZShFZGdlVHlwZTo6SW50ZXJuYWwpCisgICAgeyB9CisKKyAgICBK
U0NlbGwqIGZyb207CisgICAgSlNDZWxsKiB0bzsKKyAgICBFZGdlVHlwZSB0eXBlOworfTsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFNuYXBzaG90QnVpbGRlciB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSGVhcFNuYXBzaG90QnVpbGRlcihIZWFw
UHJvZmlsZXImIHByb2ZpbGVyKTsKKyAgICB+SGVhcFNuYXBzaG90QnVpbGRlcigpOworCisgICAg
c3RhdGljIHVuc2lnbmVkIG5leHRBdmFpbGFibGVPYmplY3RJZGVudGlmaWVyOworICAgIHN0YXRp
YyB1bnNpZ25lZCBnZXROZXh0T2JqZWN0SWRlbnRpZmllcigpOyAgICAKKworICAgIC8vIFBlcmZv
cm1zIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHRoYXQgYnVpbGRzIGEgc25hcHNob3Qgb2YgYWxsIGxp
dmUgY2VsbHMuCisgICAgdm9pZCBidWlsZFNuYXBzaG90KCk7CisKKyAgICAvLyBBIG1hcmtlZCBj
ZWxsLgorICAgIHZvaWQgYXBwZW5kTm9kZShKU0NlbGwqIGNlbGwpOworCisgICAgLy8gQSByZWZl
cmVuY2UgZnJvbSBvbmUgY2VsbCB0byBhbm90aGVyLgorICAgIHZvaWQgYXBwZW5kRWRnZShKU0Nl
bGwqIGZyb20sIEpTQ2VsbCogdG8pOworCisgICAgU3RyaW5nIGpzb24oKTsKKyAgICBTdHJpbmcg
anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmKT4gYWxsb3dO
b2RlQ2FsbGJhY2spOworCitwcml2YXRlOgorICAgIC8vIEZpbmFsaXplZCBzbmFwc2hvdHMgYXJl
IG5vdCBtb2RpZmllZCBkdXJpbmcgYnVpbGRpbmcuIFNvIHNlYXJjaGluZyB0aGVtCisgICAgLy8g
Zm9yIGFuIGV4aXN0aW5nIG5vZGUgY2FuIGJlIGRvbmUgY29uY3VycmVudGx5IHdpdGhvdXQgYSBs
b2NrLgorICAgIGJvb2wgaGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChKU0NlbGwqKTsKKworICAgIEhl
YXBQcm9maWxlciYgbV9wcm9maWxlcjsKKyAgICBMb2NrIG1fYXBwZW5kaW5nTXV0ZXg7IC8vIFNs
b3RWaXNpdG9ycyBydW4gaW4gcGFyYWxsZWwuCisgICAgc3RkOjp1bmlxdWVfcHRyPEhlYXBTbmFw
c2hvdD4gbV9zbmFwc2hvdDsKKyAgICBWZWN0b3I8SGVhcFNuYXBzaG90RWRnZT4gbV9lZGdlczsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcFNuYXBzaG90QnVpbGRl
cl9oIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3Iu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCmluZGV4IGJi
MjBhYWUuLjY0MWU1OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Ns
b3RWaXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRv
ci5jcHAKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIK
ICNpbmNsdWRlICJDb3BpZWRTcGFjZS5oIgogI2luY2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5o
IgorI2luY2x1ZGUgIkhlYXBQcm9maWxlci5oIgorI2luY2x1ZGUgIkhlYXBTbmFwc2hvdEJ1aWxk
ZXIuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmpl
Y3QuaCIKICNpbmNsdWRlICJWTS5oIgpAQCAtOTQsNiArOTYsOSBAQCB2b2lkIFNsb3RWaXNpdG9y
OjpkaWRTdGFydE1hcmtpbmcoKQogewogICAgIGlmIChoZWFwKCktPm9wZXJhdGlvbkluUHJvZ3Jl
c3MoKSA9PSBGdWxsQ29sbGVjdGlvbikKICAgICAgICAgQVNTRVJUKG1fb3BhcXVlUm9vdHMuaXNF
bXB0eSgpKTsgLy8gU2hvdWxkIGhhdmUgbWVyZ2VkIGJ5IG5vdy4KKworICAgIGlmIChIZWFwUHJv
ZmlsZXIqIGhlYXBQcm9maWxlciA9IHZtKCkuaGVhcFByb2ZpbGVyKCkpCisgICAgICAgIG1faGVh
cFNuYXBzaG90QnVpbGRlciA9IGhlYXBQcm9maWxlci0+YWN0aXZlU25hcHNob3RCdWlsZGVyKCk7
CiB9CiAKIHZvaWQgU2xvdFZpc2l0b3I6OnJlc2V0KCkKQEAgLTEwMSw2ICsxMDYsOCBAQCB2b2lk
IFNsb3RWaXNpdG9yOjpyZXNldCgpCiAgICAgbV9ieXRlc1Zpc2l0ZWQgPSAwOwogICAgIG1fYnl0
ZXNDb3BpZWQgPSAwOwogICAgIG1fdmlzaXRDb3VudCA9IDA7CisgICAgbV9oZWFwU25hcHNob3RC
dWlsZGVyID0gbnVsbHB0cjsKKyAgICBBU1NFUlQoIW1fY3VycmVudENlbGwpOwogICAgIEFTU0VS
VChtX3N0YWNrLmlzRW1wdHkoKSk7CiB9CiAKQEAgLTEyMSw2ICsxMjgsMTAgQEAgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kKEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCF2YWx1ZSB8fCAhdmFs
dWUuaXNDZWxsKCkpCiAgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2hlYXBTbmFwc2hvdEJ1
aWxkZXIpCisgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kRWRnZShtX2N1cnJl
bnRDZWxsLCB2YWx1ZS5hc0NlbGwoKSk7CisKICAgICBzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtT
dGFjayh2YWx1ZS5hc0NlbGwoKSk7CiB9CiAKQEAgLTE1NSwxMiArMTY2LDM3IEBAIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZFRvTWFya1N0YWNrKEpTQ2VsbCogY2VsbCkKICAgICBtX3Zpc2l0Q291
bnQrKzsKICAgICBtX2J5dGVzVmlzaXRlZCArPSBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY2VsbCkt
PmNlbGxTaXplKCk7CiAgICAgbV9zdGFjay5hcHBlbmQoY2VsbCk7CisKKyAgICBpZiAobV9oZWFw
U25hcHNob3RCdWlsZGVyKQorICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZE5v
ZGUoY2VsbCk7CiB9CiAKK2NsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGUgeworcHVibGljOgorICAg
IFNldEN1cnJlbnRDZWxsU2NvcGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIGNvbnN0IEpTQ2VsbCog
Y2VsbCkKKyAgICAgICAgOiBtX3Zpc2l0b3IodmlzaXRvcikKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV92aXNpdG9yLm1fY3VycmVudENlbGwpOworICAgICAgICBtX3Zpc2l0b3IubV9jdXJyZW50
Q2VsbCA9IGNvbnN0X2Nhc3Q8SlNDZWxsKj4oY2VsbCk7CisgICAgfQorCisgICAgflNldEN1cnJl
bnRDZWxsU2NvcGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmlzaXRvci5tX2N1cnJlbnRD
ZWxsKTsKKyAgICAgICAgbV92aXNpdG9yLm1fY3VycmVudENlbGwgPSBudWxscHRyOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTbG90VmlzaXRvciYgbV92aXNpdG9yOworfTsKKworCiBBTFdBWVNf
SU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4oY29uc3QgSlNDZWxsKiBjZWxs
KQogewogICAgIEFTU0VSVChIZWFwOjppc01hcmtlZChjZWxsKSk7CiAKKyAgICBTZXRDdXJyZW50
Q2VsbFNjb3BlIGN1cnJlbnRDZWxsU2NvcGUoKnRoaXMsIGNlbGwpOworCiAgICAgbV9jdXJyZW50
T2JqZWN0Q2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcgPSBjZWxsLT5jZWxsU3RhdGUoKTsKICAgICBj
ZWxsLT5zZXRDZWxsU3RhdGUoQ2VsbFN0YXRlOjpPbGRCbGFjayk7CiAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCBhZGQyOTY1Li4yNmI2MTVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKQEAgLTM3LDYgKzM3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBDb25zZXJ2YXRpdmVSb290czsKIGNsYXNzIEdDVGhyZWFk
U2hhcmVkRGF0YTsKIGNsYXNzIEhlYXA7CitjbGFzcyBIZWFwU25hcHNob3RCdWlsZGVyOwogdGVt
cGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgSklUV3JpdGVCYXJyaWVyOwogY2xhc3MgVW5jb25kaXRp
b25hbEZpbmFsaXplcjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWs7CkBAIC00Nyw2
ICs0OCw3IEBAIGNsYXNzIFNsb3RWaXNpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
bG90VmlzaXRvcik7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKKyAgICBmcmllbmQg
Y2xhc3MgU2V0Q3VycmVudENlbGxTY29wZTsKICAgICBmcmllbmQgY2xhc3MgSGVhcFJvb3RWaXNp
dG9yOyAvLyBBbGxvd2VkIHRvIG1hcmsgYSBKU1ZhbHVlKiBvciBKU0NlbGwqKiBkaXJlY3RseS4K
ICAgICBmcmllbmQgY2xhc3MgSGVhcDsKIApAQCAtMTExLDYgKzExMyw4IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgYm9vbCBpc0J1aWxkaW5n
SGVhcFNuYXBzaG90KCkgY29uc3QgeyByZXR1cm4gISFtX2hlYXBTbmFwc2hvdEJ1aWxkZXI7IH0K
KwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxNb2RlRW5hYmxlcjsKICAgICAK
QEAgLTEzNyw2ICsxNDEsOSBAQCBwcml2YXRlOgogICAgIAogICAgIEhlYXAmIG1faGVhcDsKIAor
ICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIqIG1faGVhcFNuYXBzaG90QnVpbGRlciB7IG51bGxwdHIg
fTsKKyAgICBKU0NlbGwqIG1fY3VycmVudENlbGwgeyBudWxscHRyIH07CisKICAgICBDZWxsU3Rh
dGUgbV9jdXJyZW50T2JqZWN0Q2VsbFN0YXRlQmVmb3JlVmlzaXRpbmcgeyBDZWxsU3RhdGU6Ok5l
d1doaXRlIH07CiAKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKaW5kZXggMzAwMDkzOS4uZTE0
ZjY4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJE
aXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNpbmNsdWRlICJFeGNlcHRp
b25IZWxwZXJzLmgiCisjaW5jbHVkZSAiSGVhcFByb2ZpbGVyLmgiCisjaW5jbHVkZSAiSGVhcFNu
YXBzaG90QnVpbGRlci5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVkZSAi
SW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC00NjUs
MTIgKzQ2Nyw2NyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxpbnQ+IG1fdmVjdG9yOwogfTsKIAor
Y2xhc3MgU2ltcGxlT2JqZWN0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworcHVibGljOgor
ICAgIFNpbXBsZU9iamVjdChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9
IGZhbHNlOworCisgICAgc3RhdGljIFNpbXBsZU9iamVjdCogY3JlYXRlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gY3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAg
ICAgU2ltcGxlT2JqZWN0KiBzaW1wbGVPYmplY3QgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxTaW1wbGVPYmplY3Q+KHZtLmhlYXAsIHNpemVvZihTaW1wbGVPYmplY3QpKSkgU2ltcGxlT2Jq
ZWN0KHZtLCBzdHJ1Y3R1cmUpOworICAgICAgICBzaW1wbGVPYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIHNpbXBsZU9iamVjdDsKKyAgICB9CisKKyAgICB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCisgICAgeworICAgICAgICBTaW1wbGVPYmplY3QqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oY2VsbCk7CisgICAgICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1faGlkZGVuVmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIEpTVmFsdWUgaGlkZGVuVmFsdWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGlkZGVuVmFsdWUuZ2V0KCk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRIaWRkZW5WYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQodmFsdWUuaXNDZWxsKCkpOworICAgICAgICBtX2hpZGRlblZhbHVlLnNldCh2
bSwgdGhpcywgdmFsdWUpOworICAgIH0KKworICAgIERFQ0xBUkVfSU5GTzsKKworcHJpdmF0ZToK
KyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9oaWRkZW5WYWx1ZTsKK307CisKKwogY29uc3Qg
Q2xhc3NJbmZvIEVsZW1lbnQ6OnNfaW5mbyA9IHsgIkVsZW1lbnQiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEVsZW1lbnQpIH07CiBjb25zdCBDbGFzc0luZm8gTWFzcXVl
cmFkZXI6OnNfaW5mbyA9IHsgIk1hc3F1ZXJhZGVyIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShNYXNxdWVyYWRlcikgfTsKIGNvbnN0IENsYXNzSW5mbyBSb290OjpzX2lu
Zm8gPSB7ICJSb290IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSb290
KSB9OwogY29uc3QgQ2xhc3NJbmZvIEltcHVyZUdldHRlcjo6c19pbmZvID0geyAiSW1wdXJlR2V0
dGVyIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbXB1cmVHZXR0ZXIp
IH07CiBjb25zdCBDbGFzc0luZm8gQ3VzdG9tR2V0dGVyOjpzX2luZm8gPSB7ICJDdXN0b21HZXR0
ZXIiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEN1c3RvbUdldHRlcikg
fTsKIGNvbnN0IENsYXNzSW5mbyBSdW50aW1lQXJyYXk6OnNfaW5mbyA9IHsgIlJ1bnRpbWVBcnJh
eSIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUnVudGltZUFycmF5KSB9
OworY29uc3QgQ2xhc3NJbmZvIFNpbXBsZU9iamVjdDo6c19pbmZvID0geyAiU2ltcGxlT2JqZWN0
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShTaW1wbGVPYmplY3QpIH07
CiAKIEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewpAQCAtNTAx
LDYgKzU1OCw5IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
U2V0RWxlbWVudFJvb3QoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVJvb3QoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZUVsZW1lbnQoRXhlY1N0YXRlKik7CiBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEVsZW1lbnQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNy
ZWF0ZVNpbXBsZU9iamVjdChFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QcmludChF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
RGVidWcoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRlc2NyaWJlKEV4ZWNTdGF0ZSopOwpAQCAtNTU1LDYgKzYxNSw3IEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTG9hZFdlYkFzc2VtYmx5KEV4ZWNT
dGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Mb2Fk
TW9kdWxlKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DaGVja01vZHVsZVN5bnRheChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmls
ZXIoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5j
dGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSopOwogI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
U3RhcnRTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMoRXhlY1N0
YXRlKik7CkBAIC03MDgsNiArNzY5LDEwIEBAIHByb3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJnZXRFbGVtZW50IiwgZnVuY3Rpb25HZXRFbGVtZW50LCAxKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJzZXRFbGVtZW50Um9vdCIsIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QsIDIp
OwogICAgICAgICAKKyAgICAgICAgYWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKHZtLCAiU2ltcGxl
T2JqZWN0IiwgZnVuY3Rpb25DcmVhdGVTaW1wbGVPYmplY3QsIDApOworICAgICAgICBhZGRGdW5j
dGlvbih2bSwgImdldEhpZGRlblZhbHVlIiwgZnVuY3Rpb25HZXRIaWRkZW5WYWx1ZSwgMSk7Cisg
ICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0SGlkZGVuVmFsdWUiLCBmdW5jdGlvblNldEhpZGRl
blZhbHVlLCAyKTsKKyAgICAgICAgCiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZt
LCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgIkRGR1RydWUiKSwgMCwgZnVuY3Rp
b25GYWxzZTEsIERGR1RydWVJbnRyaW5zaWMsIERvbnRFbnVtKTsKICAgICAgICAgcHV0RGlyZWN0
TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiT1NS
RXhpdCIpLCAwLCBmdW5jdGlvblVuZGVmaW5lZDEsIE9TUkV4aXRJbnRyaW5zaWMsIERvbnRFbnVt
KTsKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCAiaXNGaW5hbFRpZXIiKSwgMCwgZnVuY3Rpb25GYWxzZTIsIElzRmlu
YWxUaWVySW50cmluc2ljLCBEb250RW51bSk7CkBAIC03NDcsNiArODEyLDcgQEAgcHJvdGVjdGVk
OgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImNoZWNrTW9kdWxlU3ludGF4IiwgZnVuY3Rpb25D
aGVja01vZHVsZVN5bnRheCwgMSk7CiAKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJwbGF0Zm9y
bVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlciIsIGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1NhbXBs
aW5nUHJvZmlsZXIsIDApOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgImdlbmVyYXRlSGVhcFNu
YXBzaG90IiwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdCwgMCk7CiAjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInN0YXJ0U2FtcGxpbmdQ
cm9maWxlciIsIGZ1bmN0aW9uU3RhcnRTYW1wbGluZ1Byb2ZpbGVyLCAwKTsKICAgICAgICAgYWRk
RnVuY3Rpb24odm0sICJzYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMiLCBmdW5jdGlvblNhbXBs
aW5nUHJvZmlsZXJTdGFja1RyYWNlcywgMCk7CkBAIC0xMTMzLDYgKzExOTksMjggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEVsZW1lbnRSb290KEV4ZWNTdGF0ZSog
ZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCitF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KEV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKFNpbXBsZU9iamVjdDo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTTG9j
a0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFNpbXBsZU9iamVjdCogc2ltcGxlT2JqZWN0ID0ganND
YXN0PFNpbXBsZU9iamVjdCo+KGV4ZWMtPmFyZ3VtZW50KDApLmFzQ2VsbCgpKTsKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHNpbXBsZU9iamVjdC0+aGlkZGVuVmFsdWUoKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRIaWRkZW5WYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisgICAgU2ltcGxlT2Jq
ZWN0KiBzaW1wbGVPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0Kj4oZXhlYy0+YXJndW1lbnQo
MCkuYXNDZWxsKCkpOworICAgIEpTVmFsdWUgdmFsdWUgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAg
ICBzaW1wbGVPYmplY3QtPnNldEhpZGRlblZhbHVlKGV4ZWMtPnZtKCksIHZhbHVlKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlUHJveHkoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwpAQCAtMTY0Niw2ICsxNzM0LDE5IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQ
cm9maWxlcihFeGVjU3RhdGUqCiAjZW5kaWYKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBmdW5jdGlvbkdlbmVyYXRlSGVhcFNuYXBzaG90KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKworICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgc25h
cHNob3RCdWlsZGVyKGV4ZWMtPnZtKCkuZW5zdXJlSGVhcFByb2ZpbGVyKCkpOworICAgIHNuYXBz
aG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CisKKyAgICBTdHJpbmcganNvblN0cmluZyA9IHNu
YXBzaG90QnVpbGRlci5qc29uKCk7CisgICAgRW5jb2RlZEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1
ZTo6ZW5jb2RlKEpTT05QYXJzZShleGVjLCBqc29uU3RyaW5nKSk7CisgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAjaWYg
RU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqIGV4ZWMpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXggZGU5NmNhMC4uZTBlNjdhOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkdl
dHRlclNldHRlci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9u
U2NvcGUuaCIKKyNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJl
dHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkluY3JlbWVu
dGFsU3dlZXBlci5oIgpAQCAtNDQzLDYgKzQ0NCwxMyBAQCBXYXRjaGRvZyYgVk06OmVuc3VyZVdh
dGNoZG9nKCkKICAgICByZXR1cm4gKm1fd2F0Y2hkb2c7CiB9CiAKK0hlYXBQcm9maWxlciYgVk06
OmVuc3VyZUhlYXBQcm9maWxlcigpCit7CisgICAgaWYgKCFtX2hlYXBQcm9maWxlcikKKyAgICAg
ICAgbV9oZWFwUHJvZmlsZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBQcm9maWxlcj4oKnRoaXMp
OworICAgIHJldHVybiAqbV9oZWFwUHJvZmlsZXI7Cit9CisKICNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiB2b2lkIFZNOjplbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZlB0cjxTdG9wd2F0
Y2g+JiYgc3RvcHdhdGNoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKaW5kZXggNzU5
YmJkOS4uNjA4MDkzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCkBAIC04Nyw2ICs4
Nyw3IEBAIGNsYXNzIEV4Y2VwdGlvbjsKIGNsYXNzIEhhbmRsZVN0YWNrOwogY2xhc3MgVHlwZVBy
b2ZpbGVyOwogY2xhc3MgVHlwZVByb2ZpbGVyTG9nOworY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xh
c3MgSWRlbnRpZmllcjsKIGNsYXNzIEludGVycHJldGVyOwogY2xhc3MgSlNCb3VuZFNsb3RCYXNl
RnVuY3Rpb247CkBAIC0yNDksNiArMjUwLDkgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklW
QVRFIFdhdGNoZG9nJiBlbnN1cmVXYXRjaGRvZygpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIFdh
dGNoZG9nKiB3YXRjaGRvZygpIHsgcmV0dXJuIG1fd2F0Y2hkb2cuZ2V0KCk7IH0KIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyKCkgY29uc3QgeyByZXR1
cm4gbV9oZWFwUHJvZmlsZXIuZ2V0KCk7IH0KKyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwUHJv
ZmlsZXImIGVuc3VyZUhlYXBQcm9maWxlcigpOworCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJ
TEVSKQogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNhbXBsaW5nUHJvZmlsZXIqIHNhbXBsaW5nUHJv
ZmlsZXIoKSB7IHJldHVybiBtX3NhbXBsaW5nUHJvZmlsZXIuZ2V0KCk7IH0KICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmUHRyPFN0b3B3YXRjaD4m
Jik7CkBAIC02NzIsNiArNjc2LDcgQEAgcHJpdmF0ZToKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9w
dHI8UXVldWVkVGFzaz4+IG1fbWljcm90YXNrUXVldWU7CiAgICAgTWFsbG9jUHRyPEVuY29kZWRK
U1ZhbHVlPiBtX2V4Y2VwdGlvbkZ1enpCdWZmZXI7CiAgICAgUmVmUHRyPFdhdGNoZG9nPiBtX3dh
dGNoZG9nOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwUHJvZmlsZXI+IG1faGVhcFByb2ZpbGVy
OwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICBSZWZQdHI8U2FtcGxpbmdQcm9m
aWxlcj4gbV9zYW1wbGluZ1Byb2ZpbGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyLnlhbWwgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvaGVhcFByb2ZpbGVyLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTBkM2JjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9oZWFwUHJvZmlsZXIueWFtbApAQCAtMCwwICsxLDI1IEBACisjIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisj
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworLSBwYXRoOiBoZWFwUHJvZmlsZXIKKyAgY21kOiBkZWZhdWx0UnVu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Jh
c2ljLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9iYXNpYy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVhZWNjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9iYXNpYy5q
cwpAQCAtMCwwICsxLDMyIEBACitsb2FkKCIuL2RyaXZlci9kcml2ZXIuanMiKTsKKworZnVuY3Rp
b24gaGFzRGlmZmVyZW50U2l6ZU5vZGVzKG5vZGVzKSB7CisgICAgbGV0IHNlZW5TaXplID0gbm9k
ZXNbMF0uc2l6ZTsKKyAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7CisgICAgICAgIGlmIChu
b2RlLnNpemUgIT09IHNlZW5TaXplKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gaGFzQWxsSW50ZXJuYWxOb2Rlcyhub2Rl
cykgeworICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHsKKyAgICAgICAgaWYgKCFub2RlLmlu
dGVybmFsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworbGV0IHNuYXBzaG90ID0gY3JlYXRlSGVhcFNuYXBzaG90KCk7Cithc3NlcnQoc25h
cHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJnbG9iYWwiKS5sZW5ndGggPT09IDEsICJTbmFwc2hv
dCBzaG91bGQgY29udGFpbiBhIHNpbmdsZSAnZ2xvYmFsJyBub2RlIik7Cithc3NlcnQoc25hcHNo
b3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTdHJ1Y3R1cmUiKS5sZW5ndGggPiAwLCAiU25hcHNob3Qg
c2hvdWxkIGNvbnRhaW4gJ1N0cnVjdHVyZScgbm9kZXMiKTsKK2Fzc2VydChzbmFwc2hvdC5ub2Rl
c1dpdGhDbGFzc05hbWUoIlRoaXNDbGFzc05hbWVEb2VzTm90RXhpc3QiKS5sZW5ndGggPT09IDAs
ICJTbmFwc2hvdCBzaG91bGQgbm90IGNvbnRhaW4gJ1RoaXNDbGFzc05hbWVEb2VzTm90RXhpc3Qn
IG5vZGVzIik7CisKK2xldCBzdHJpbmdzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJz
dHJpbmciKTsKK2Fzc2VydChzdHJpbmdzLmxlbmd0aCA+IDAsICJTbmFwc2hvdCBzaG91bGQgY29u
dGFpbiAnc3RyaW5nJyBub2RlcyIpOworYXNzZXJ0KGhhc0RpZmZlcmVudFNpemVOb2RlcyhzdHJp
bmdzKSwgIidzdHJpbmcnIG5vZGVzIHNob3VsZCBoYXZlIGRpZmZlcmVudCBzaXplcyIpOworCits
ZXQgbmF0aXZlRXhlY3V0YWJsZXMgPSBzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIk5hdGl2
ZUV4ZWN1dGFibGUiKTsKK2Fzc2VydChuYXRpdmVFeGVjdXRhYmxlcy5sZW5ndGggPiAwLCAiU25h
cHNob3Qgc2hvdWxkIGNvbnRhaW4gJ05hdGl2ZUV4ZWN1dGFibGUnIG5vZGVzIik7Cithc3NlcnQo
IWhhc0RpZmZlcmVudFNpemVOb2RlcyhuYXRpdmVFeGVjdXRhYmxlcyksICInTmF0aXZlRXhlY3V0
YWJsZScgbm9kZXMgc2hvdWxkIGFsbCBiZSB0aGUgc2FtZSBzaXplIik7Cithc3NlcnQoaGFzQWxs
SW50ZXJuYWxOb2RlcyhuYXRpdmVFeGVjdXRhYmxlcyksICInTmF0aXZlRXhlY3V0YWJsZScgbm9k
ZXMgc2hvdWxkIGFsbCBiZSBpbnRlcm5hbCIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTk5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanMKQEAg
LTAsMCArMSw5MCBAQAorZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgcmVhc29uKSB7CisgICAg
aWYgKCFjb25kaXRpb24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcihyZWFzb24pOworfQorCitI
ZWFwU25hcHNob3ROb2RlID0gY2xhc3MgSGVhcFNuYXBzaG90Tm9kZQoreworICAgIGNvbnN0cnVj
dG9yKGlkLCBjbGFzc05hbWUsIHNpemUsIGludGVybmFsKQorICAgIHsKKyAgICAgICAgdGhpcy5p
ZCA9IGlkOworICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgICAgICAgdGhp
cy5zaXplID0gc2l6ZTsgCisgICAgICAgIHRoaXMuaW50ZXJuYWwgPSBpbnRlcm5hbDsKKworICAg
ICAgICB0aGlzLmluY29taW5nRWRnZXMgPSBbXTsKKyAgICAgICAgdGhpcy5vdXRnb2luZ0VkZ2Vz
ID0gW107CisgICAgfQorfQorCitIZWFwU25hcHNob3RFZGdlID0gY2xhc3MgSGVhcFNuYXBzaG90
RWRnZQoreworICAgIGNvbnN0cnVjdG9yKGZyb20sIHRvLCB0eXBlLCBkYXRhKQorICAgIHsKKyAg
ICAgICAgdGhpcy5mcm9tID0gZnJvbTsKKyAgICAgICAgdGhpcy50byA9IHRvOworICAgICAgICB0
aGlzLnR5cGUgPSB0eXBlOworICAgICAgICB0aGlzLmRhdGEgPSBkYXRhOworICAgIH0KK30KKwor
SGVhcFNuYXBzaG90ID0gY2xhc3MgSGVhcFNuYXBzaG90Cit7CisgICAgY29uc3RydWN0b3Iobm9k
ZXMsIHJvb3ROb2RlKQorICAgIHsKKyAgICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzOworICAgICAg
ICB0aGlzLnJvb3ROb2RlID0gcm9vdE5vZGU7CisgICAgfQorCisgICAgbm9kZXNXaXRoQ2xhc3NO
YW1lKGNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIGxldCByZXN1bHQgPSBbXTsKKyAgICAgICAg
Zm9yIChsZXQgbm9kZSBvZiB0aGlzLm5vZGVzKSB7CisgICAgICAgICAgICBpZiAobm9kZS5jbGFz
c05hbWUgPT09IGNsYXNzTmFtZSkKKyAgICAgICAgICAgICAgICByZXN1bHQucHVzaChub2RlKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworLy8gTk9URTog
VGhpcyBjcmVhdGVzIGEgbG90IG9mIG9iamVjdHMgdGhhdCBtYWtlIGl0IGVhc3kgdG8gd2FsayBh
IG5vZGUgZ3JhcGguCisvLyBIb3dldmVyIHdoZW4gYSB0ZXN0IGNyZWF0ZXMgbXVsdGlwbGUgc25h
cHNob3RzIHdpdGggc25hcHNob3RzIGluIHNjb3BlCisvLyB0aGlzIGNhbiBxdWlja2x5IGV4cGxv
ZGUgaW50byBhIHNuYXBzaG90IHdpdGggYSBtYXNzaXZlIG51bWJlciBvZiBub2Rlcy9lZGdlcy4K
KworZnVuY3Rpb24gY3JlYXRlSGVhcFNuYXBzaG90KCkgeworICAgIGxldCBqc29uID0gZ2VuZXJh
dGVIZWFwU25hcHNob3QoKTsKKworICAgIGxldCB7dmVyc2lvbiwgbm9kZXMsIG5vZGVDbGFzc05h
bWVzLCBlZGdlcywgZWRnZVR5cGVzfSA9IGpzb247CisgICAgYXNzZXJ0KHZlcnNpb24gPT09IDEs
ICJIZWFwIFNuYXBzaG90IHBheWxvYWQgc2hvdWxkIGJlIHZlcnNpb24gMSIpOworICAgIGFzc2Vy
dChub2Rlcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNob3VsZCBoYXZlIG5vZGVzIik7CisgICAg
YXNzZXJ0KG5vZGVDbGFzc05hbWVzLmxlbmd0aCwgIkhlYXAgU25hcHNob3Qgc2hvdWxkIGhhdmUg
bm9kZUNsYXNzTmFtZXMiKTsKKyAgICBhc3NlcnQoZWRnZXMubGVuZ3RoLCAiSGVhcCBTbmFwc2hv
dCBzaG91bGQgaGF2ZSBlZGdlcyIpOworICAgIGFzc2VydChlZGdlVHlwZXMubGVuZ3RoLCAiSGVh
cCBTbmFwc2hvdCBzaG91bGQgaGF2ZSBlZGdlVHlwZXMiKTsKKworICAgIGxldCBub2RlTWFwID0g
bmV3IE1hcDsKKworICAgIG5vZGVzID0gbm9kZXMubWFwKChub2RlUGF5bG9hZCkgPT4geworICAg
ICAgICBsZXQgW2lkLCBzaXplLCBjbGFzc05hbWVJbmRleCwgaW50ZXJuYWxdID0gbm9kZVBheWxv
YWQ7CisgICAgICAgIGxldCBub2RlID0gbmV3IEhlYXBTbmFwc2hvdE5vZGUoaWQsIG5vZGVDbGFz
c05hbWVzW2NsYXNzTmFtZUluZGV4XSwgc2l6ZSwgaW50ZXJuYWwpOworICAgICAgICBub2RlTWFw
LnNldChpZCwgbm9kZSk7CisgICAgICAgIHJldHVybiBub2RlOworICAgIH0pOworCisgICAgZWRn
ZXMubWFwKChlZGdlUGF5bG9hZCkgPT4geworICAgICAgICBsZXQgW2Zyb21JZGVudGlmaWVyLCB0
b0lkZW50aWZpZXIsIGVkZ2VUeXBlSW5kZXgsIGRhdGFdID0gZWRnZVBheWxvYWQ7CisgICAgICAg
IGxldCBmcm9tID0gbm9kZU1hcC5nZXQoZnJvbUlkZW50aWZpZXIpOworICAgICAgICBsZXQgdG8g
PSBub2RlTWFwLmdldCh0b0lkZW50aWZpZXIpOworICAgICAgICBhc3NlcnQoZnJvbSwgIk1pc3Np
bmcgbm9kZSBmb3IgYGZyb21gIHBhcnQgb2YgZWRnZSIpOworICAgICAgICBhc3NlcnQodG8sICJN
aXNzaW5nIG5vZGUgZm9yIGB0b2AgcGFydCBvZiBlZGdlIik7CisgICAgICAgIGxldCBlZGdlID0g
bmV3IEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIGVkZ2VUeXBlc1tlZGdlVHlwZUluZGV4XSwg
ZGF0YSk7CisgICAgICAgIGZyb20ub3V0Z29pbmdFZGdlcy5wdXNoKGVkZ2UpOworICAgICAgICB0
by5pbmNvbWluZ0VkZ2VzLnB1c2goZWRnZSk7CisgICAgfSk7CisKKyAgICBsZXQgcm9vdE5vZGUg
PSBub2RlTWFwLmdldCgwKTsKKyAgICBhc3NlcnQocm9vdE5vZGUsICJNaXNzaW5nIDxyb290PiBu
b2RlIHdpdGggaWRlbnRpZmllciAwIik7CisgICAgYXNzZXJ0KHJvb3ROb2RlLm91dGdvaW5nRWRn
ZXMubGVuZ3RoID4gMCwgIjxyb290PiBzaG91bGQgaGF2ZSBjaGlsZHJlbiIpOworICAgIGFzc2Vy
dChyb290Tm9kZS5pbmNvbWluZ0VkZ2VzLmxlbmd0aCA9PT0gMCwgIjxyb290PiBzaG91bGQgbm90
IGhhdmUgYmFjayByZWZlcmVuY2VzIik7CisKKyAgICByZXR1cm4gbmV3IEhlYXBTbmFwc2hvdChu
b2Rlcywgcm9vdE5vZGUpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL2hlYXBQcm9maWxlci9oaWRkZW4tZWRnZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9oZWFwUHJvZmlsZXIvaGlkZGVuLWVkZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMTIwNDIyZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvaGlkZGVuLWVkZ2UuanMKQEAgLTAsMCArMSw1NiBAQAor
bG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIHNvcnRlZChub2Rlcykgewor
ICAgIHJldHVybiBub2Rlcy5zb3J0KChhLCBiKSA9PiBhLmlkIC0gYi5pZCk7Cit9CisKK2Z1bmN0
aW9uIGV4Y2x1ZGVTdHJ1Y3R1cmUoZWRnZXMpIHsKKyAgICByZXR1cm4gZWRnZXMuZmlsdGVyKCh4
KSA9PiB4LnRvLmNsYXNzTmFtZSAhPT0gIlN0cnVjdHVyZSIpOworfQorCitsZXQgc2ltcGxlT2Jq
ZWN0MU5vZGVJZDsKK2xldCBzaW1wbGVPYmplY3QyTm9kZUlkOworCitsZXQgc2ltcGxlT2JqZWN0
MSA9IG5ldyBTaW1wbGVPYmplY3Q7CitsZXQgc2ltcGxlT2JqZWN0MiA9IG5ldyBTaW1wbGVPYmpl
Y3Q7CitzZXRIaWRkZW5WYWx1ZShzaW1wbGVPYmplY3QxLCBzaW1wbGVPYmplY3QyKTsKKworKGZ1
bmN0aW9uKCkgeworICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUhlYXBTbmFwc2hvdCgpOworICAg
IGxldCBub2RlcyA9IHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxlT2JqZWN0Iik7
CisgICAgYXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMiwgIlNuYXBzaG90IHNob3VsZCBjb250YWlu
IDIgJ1NpbXBsZU9iamVjdCcgaW5zdGFuY2VzIik7CisgICAgbGV0IHNpbXBsZU9iamVjdDFOb2Rl
ID0gbm9kZXNbMF0ub3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDIgPyBub2Rlc1swXSA6IG5vZGVz
WzFdOworICAgIGxldCBzaW1wbGVPYmplY3QyTm9kZSA9IG5vZGVzWzBdLm91dGdvaW5nRWRnZXMu
bGVuZ3RoID09PSAxID8gbm9kZXNbMF0gOiBub2Rlc1sxXTsKKyAgICBhc3NlcnQoc2ltcGxlT2Jq
ZWN0MU5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDIsICInc2ltcGxlT2JqZWN0MScgc2hv
dWxkIHJlZmVyZW5jZSBpdHMgc3RydWN0dXJlIGFuZCBoaWRkZW4gdmFsdWUiKTsKKyAgICBhc3Nl
cnQoc2ltcGxlT2JqZWN0Mk5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxl
T2JqZWN0Micgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IGl0cyBzdHJ1Y3R1cmUiKTsKKyAgICBhc3Nl
cnQoZXhjbHVkZVN0cnVjdHVyZShzaW1wbGVPYmplY3QxTm9kZS5vdXRnb2luZ0VkZ2VzKVswXS50
byA9PT0gc2ltcGxlT2JqZWN0Mk5vZGUsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIHJlZmVyZW5j
ZSAnc2ltcGxlT2JqZWN0MiciKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5vZGUuaW5jb21p
bmdFZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIGJlIHJlZmVyZW5j
ZWQgb25seSBieSBhIGdsb2JhbCB2YXJpYWJsZSIpOworICAgIGFzc2VydChzaW1wbGVPYmplY3Qy
Tm9kZS5pbmNvbWluZ0VkZ2VzLmxlbmd0aCA9PT0gMiwgIidzaW1wbGVPYmplY3QyJyBzaG91bGQg
YmUgcmVmZXJlbmNlZCBieSBhIGdsb2JhbCB2YXJpYWJsZSBhbmQgJ3NpbXBsZU9iamVjdDEnIik7
CisgICAgc2ltcGxlT2JqZWN0MU5vZGVJZCA9IHNpbXBsZU9iamVjdDFOb2RlLmlkOworICAgIHNp
bXBsZU9iamVjdDJOb2RlSWQgPSBzaW1wbGVPYmplY3QyTm9kZS5pZDsKK30pKCk7CisKK3NpbXBs
ZU9iamVjdDIgPSBudWxsOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3Jl
YXRlSGVhcFNuYXBzaG90KCk7CisgICAgbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xh
c3NOYW1lKCJTaW1wbGVPYmplY3QiKTsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAyLCAi
U25hcHNob3Qgc2hvdWxkIGNvbnRhaW4gMiAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZXMiKTsKKyAg
ICBsZXQgc2ltcGxlT2JqZWN0MU5vZGUgPSBub2Rlc1swXS5pZCA9PT0gc2ltcGxlT2JqZWN0MU5v
ZGVJZCA/IG5vZGVzWzBdIDogbm9kZXNbMV07CisgICAgbGV0IHNpbXBsZU9iamVjdDJOb2RlID0g
bm9kZXNbMF0uaWQgPT09IHNpbXBsZU9iamVjdDJOb2RlSWQgPyBub2Rlc1swXSA6IG5vZGVzWzFd
OworICAgIGFzc2VydChzaW1wbGVPYmplY3QxTm9kZS5pZCA9PT0gc2ltcGxlT2JqZWN0MU5vZGVJ
ZCAmJiBzaW1wbGVPYmplY3QyTm9kZS5pZCA9PT0gc2ltcGxlT2JqZWN0Mk5vZGVJZCwgIm5vZGUg
aWRlbnRpZmllcnMgd2VyZSBtYWludGFpbmVkIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFO
b2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAyLCAiJ3NpbXBsZU9iamVjdDEnIHNob3VsZCBy
ZWZlcmVuY2UgaXRzIHN0cnVjdHVyZSBhbmQgaGlkZGVuIHZhbHVlIik7CisgICAgYXNzZXJ0KHNp
bXBsZU9iamVjdDJOb2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAxLCAiJ3NpbXBsZU9iamVj
dDInIHNob3VsZCByZWZlcmVuY2Ugb25seSBpdHMgc3RydWN0dXJlIik7CisgICAgYXNzZXJ0KGV4
Y2x1ZGVTdHJ1Y3R1cmUoc2ltcGxlT2JqZWN0MU5vZGUub3V0Z29pbmdFZGdlcylbMF0udG8uaWQg
PT09IHNpbXBsZU9iamVjdDJOb2RlSWQsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIHJlZmVyZW5j
ZSAnc2ltcGxlT2JqZWN0MiciKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5vZGUuaW5jb21p
bmdFZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIGJlIHJlZmVyZW5j
ZWQgb25seSBieSBhIGdsb2JhbCB2YXJpYWJsZSIpOworICAgIGFzc2VydChzaW1wbGVPYmplY3Qy
Tm9kZS5pbmNvbWluZ0VkZ2VzWzBdLmZyb20gPT09IHNpbXBsZU9iamVjdDFOb2RlLCAiJ3NpbXBs
ZU9iamVjdDInIHNob3VsZCBiZSByZWZlcmVuY2VkIGJ5ICdzaW1wbGVPYmplY3QxJyIpOworICAg
IGFzc2VydChzaW1wbGVPYmplY3QyTm9kZS5pbmNvbWluZ0VkZ2VzLmxlbmd0aCA9PT0gMSwgIidz
aW1wbGVPYmplY3QyJyBzaG91bGQgYmUgcmVmZXJlbmNlZCBieSBvbmx5ICdzaW1wbGVPYmplY3Qx
JyIpOworfSkoKTsKKworc2ltcGxlT2JqZWN0MSA9IG51bGw7CisKKyhmdW5jdGlvbigpIHsKKyAg
ICBsZXQgc25hcHNob3QgPSBjcmVhdGVIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBz
b3J0ZWQoc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3QiKSk7CisgICAg
YXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMCwgIlNuYXBzaG90IHNob3VsZCBub3QgY29udGFpbiBh
ICdTaW1wbGVPYmplY3QnIGluc3RhbmNlIik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9pbnN0YW5jZXMuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2luc3RhbmNlcy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDJiNWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9pbnN0YW5jZXMuanMKQEAgLTAsMCAr
MSw0NCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIHNvcnRlZChu
b2RlcykgeworICAgIHJldHVybiBub2Rlcy5zb3J0KChhLCBiKSA9PiBhLmlkIC0gYi5pZCk7Cit9
CisKK2xldCBzaW1wbGVPYmplY3QxTm9kZUlkOworbGV0IHNpbXBsZU9iamVjdDJOb2RlSWQ7CisK
K2xldCBzaW1wbGVPYmplY3QxID0gbmV3IFNpbXBsZU9iamVjdDsKKworKGZ1bmN0aW9uKCkgewor
ICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUhlYXBTbmFwc2hvdCgpOworICAgIGxldCBub2RlcyA9
IHNvcnRlZChzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIlNpbXBsZU9iamVjdCIpKTsKKyAg
ICBsZXQgW3NpbXBsZU9iamVjdDFOb2RlXSA9IG5vZGVzOworICAgIHNpbXBsZU9iamVjdDFOb2Rl
SWQgPSBub2Rlc1swXS5pZDsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAxLCAiU25hcHNo
b3Qgc2hvdWxkIGNvbnRhaW4gMSAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZSIpOworICAgIGFzc2Vy
dChzaW1wbGVPYmplY3QxTm9kZS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMSwgIidzaW1wbGVP
YmplY3QxJyBzaG91bGQgb25seSByZWZlcmVuY2UgaXRzIHN0cnVjdHVyZSIpOworICAgIGFzc2Vy
dChzaW1wbGVPYmplY3QxTm9kZS5pbmNvbWluZ0VkZ2VzLmxlbmd0aCA9PT0gMSwgIidzaW1wbGVP
YmplY3QxJyBzaG91bGQgYmUgcmVmZXJlbmNlZCBieSBhIGdsb2JhbCB2YXJpYWJsZSBhbmQgbm90
aGluZyBlbHNlIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXNb
MF0udG8uY2xhc3NOYW1lID09PSAiU3RydWN0dXJlIiwgIidzaW1wbGVPYmplY3QxJyBzaG91bGQg
cmVmZXJlbmNlIGEgU3RydWN0dXJlIik7Cit9KSgpOworCitsZXQgc2ltcGxlT2JqZWN0TGlzdCA9
IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxMjM0OyArK2kpCisgICAgc2ltcGxlT2JqZWN0TGlz
dC5wdXNoKG5ldyBTaW1wbGVPYmplY3QpOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBz
aG90ID0gY3JlYXRlSGVhcFNuYXBzaG90KCk7CisgICAgbGV0IG5vZGVzID0gc29ydGVkKHNuYXBz
aG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxlT2JqZWN0IikpOworICAgIHNpbXBsZU9iamVj
dDFOb2RlSWQgPSBub2Rlc1swXS5pZDsKKyAgICBzaW1wbGVPYmplY3QyTm9kZUlkID0gbm9kZXNb
MV0uaWQ7CisgICAgYXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMTIzNSwgIlNuYXBzaG90IHNob3Vs
ZCBjb250YWluIDEyMzUgJ1NpbXBsZU9iamVjdCcgaW5zdGFuY2VzIik7CisgICAgYXNzZXJ0KG5v
ZGVzWzBdLmlkID09PSBzaW1wbGVPYmplY3QxTm9kZUlkLCAiJ3NpbXBsZU9iamVjdDEnIHNob3Vs
ZCBtYWludGFpbiB0aGUgc2FtZSBpZGVudGlmaWVyIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVj
dDFOb2RlSWQgPCBzaW1wbGVPYmplY3QyTm9kZUlkLCAibm9kZSBpZGVudGlmaWVycyBzaG91bGQg
YWx3YXlzIGluY3JlYXNlIGFjcm9zcyBzbmFwc2hvdHMiKTsKK30pKCk7CisKK3NpbXBsZU9iamVj
dDEgPSBudWxsOworc2ltcGxlT2JqZWN0TGlzdC5maWxsKG51bGwpOworCisoZnVuY3Rpb24oKSB7
CisgICAgbGV0IHNuYXBzaG90ID0gY3JlYXRlSGVhcFNuYXBzaG90KCk7CisgICAgbGV0IG5vZGVz
ID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3QiKTsKKyAgICBhc3Nl
cnQobm9kZXMubGVuZ3RoID09PSAwLCAiU25hcHNob3Qgc2hvdWxkIG5vdCBjb250YWluIGEgJ1Np
bXBsZU9iamVjdCcgaW5zdGFuY2UiKTsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272615</attachid>
            <date>2016-03-01 17:13:52 -0800</date>
            <delta_ts>2016-03-02 16:13:12 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>snapshot-2.patch</filename>
            <type>text/plain</type>
            <size>80505</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmRmODM0Li4zZjcwZDYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC00NDMsNiArNDQzLDkgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNwcAogICAgIGhl
YXAvSGVhcC5jcHAKICAgICBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAorICAgIGhlYXAvSGVhcFBy
b2ZpbGVyLmNwcAorICAgIGhlYXAvSGVhcFNuYXBzaG90LmNwcAorICAgIGhlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKICAgICBoZWFwL0hlYXBTdGF0aXN0aWNzLmNwcAogICAgIGhlYXAvSGVh
cFRpbWVyLmNwcAogICAgIGhlYXAvSGVhcFZlcmlmaWVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cKaW5kZXggNzhhY2Q2My4uMzdiMmFhYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkxIEBACisyMDE2LTAzLTAxICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBIZWFwIFNuYXBzaG90
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ4NDcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGFk
ZHMgSGVhcFNuYXBzaG90LCBIZWFwU25hcHNob3RCdWlsZGVyLCBhbmQgSGVhcFByb2ZpbGVyLgor
CisgICAgICAgIEhlYXBQcm9maWxlciBoYW5ncyBvZmYgb2YgdGhlIFZNIGFuZCBob2xkcyB0aGUg
bGlzdCBvZiBzbmFwc2hvdHMuCisgICAgICAgIEkgZXhwZWN0IHRvIGFkZCBvdGhlciBIZWFwUHJv
ZmlsaW5nIGZlYXR1cmVzLCBzdWNoIGFzIGFsbG9jYXRpb24KKyAgICAgICAgdHJhY2tpbmcsIHRv
IHRoZSBwcm9maWxlci4KKworICAgICAgICBIZWFwU25hcHNob3QgY29udGFpbnMgYSBjb2xsZWN0
aW9uIG9mIGxpdmUgY2VsbHMgYW5kIHRoZWlyIGlkZW50aWZpZXJzLgorICAgICAgICBJdCBjYW4g
cG9pbnQgdG8gYSBwcmV2aW91cyBIZWFwU25hcHNob3QsIHRvIGVuc3VyZSB0aGF0IGEgY2VsbCB0
aGF0CisgICAgICAgIGFscmVhZHkgcmVjZWl2ZWQgYW4gaWRlbnRpZmllciBtYWludGFpbnMgdGhl
IHNhbWUgaWRlbnRpZmllciBhY3Jvc3MKKyAgICAgICAgbXVsdGlwbGUgc25hcHNob3RzLiBXaGVu
IGEgc25hcHNob3R0ZWQgY2VsbCBnZXRzIGdhcmJhZ2UgY29sbGVjdGVkLAorICAgICAgICB0aGUg
Y2VsbCB3aWxsIGJlIHN3ZXB0IGZyb20gdGhlIEhlYXBTbmFwc2hvdCBhdCB0aGUgZW5kIG9mIGNv
bGxlY3Rpb24KKyAgICAgICAgdG8gZW5zdXJlIHRoZSBsaXN0IGNvbnRhaW5zIG9ubHkgbGl2ZSBj
ZWxscy4gVGhlIGxpc3Qgb2Ygbm9kZXMgaW4KKyAgICAgICAgdGhlIHNuYXBzaG90IGFyZSBzb3J0
ZWQgYnkgSlNDZWxsKiBhZGRyZXNzIHRvIGFsbG93IGZvciBxdWljayBsb29rdXAKKyAgICAgICAg
b2YgYSBKU0NlbGwqLgorCisgICAgICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgaXMgd2hlcmUgc25h
cHNob3R0aW5nIGJlZ2lucy4gVGhlIGJ1aWxkZXIKKyAgICAgICAgd2lsbCBpbml0aWF0ZSBhIHNw
ZWNpYWxpemVkIGhlYXAgc25hcHNob3R0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbi4KKyAgICAgICAg
RHVyaW5nIHRoaXMgY29sbGVjdGlvbiB0aGUgYnVpbGRlciB3aWxsIGJlIG5vdGlmaWVkIG9mIGFs
bCBtYXJrZWQKKyAgICAgICAgKGxpdmUpIGNlbGxzLCBhbmQgY29ubmVjdGlvbnMgYmV0d2VlbiBj
ZWxscywgYXMgc2VlbiBieSBTbG90VmlzaXRvcnMuCisgICAgICAgIFRoZSBidWlsZGVyIGNhbiBy
ZWZlcmVuY2UgdGhlIHByZXZpb3VzLCByZWFkb25seSwgSGVhcFNuYXBzaG90cyB0bworICAgICAg
ICBhdm9pZCBjcmVhdGluZyBuZXcgbm9kZXMgZm9yIGNlbGxzIHRoYXQgaGF2ZSBhbHJlYWR5IGJl
ZW4gc25hcHNob3R0ZWQuCisgICAgICAgIFdoZW4gaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHdlIGFy
ZSB2aXNpdGluZyBhIGxpdmUgY2VsbCBmb3IgdGhlIGZpcnN0CisgICAgICAgIHRpbWUgYSB3ZSBn
aXZlIHRoZSBjZWxsIGEgdW5pcXVlIGlkZW50aWZpZXIgYW5kIGFkZCBpdCB0byB0aGUgdGhlCisg
ICAgICAgIHNuYXBzaG90IHdlIGFyZSBidWlsZGluZy4KKworICAgICAgICBTaW5jZSBlZGdlIGRh
dGEgaXMgY29zdGx5LCBhbmQgb2YgbGl0dGxlIGxvbmcgdGVybSB1dGlsaXR5LCB0aGlzCisgICAg
ICAgIGRhdGEgaXMgb25seSBoZWxkIGJ5IHRoZSBidWlsZGVyIGZvciBzZXJpYWxpemF0aW9uLCBh
bmQgbm90IHN0b3JlZAorICAgICAgICBsb25nIHRlcm0gd2l0aCB0aGUgSGVhcFNuYXBzaG90IG5v
ZGUgZGF0YS4KKworICAgICAgICBUaGUgZ29hbHMgb2YgSGVhcFNuYXBzaG90dGluZyBhdCB0aGlz
IHRpbWUgYXJlOgorICAgICAgICAtIG1pbmltYWwgaW1wYWN0IG9uIHBlcmZvcm1hbmNlIHdoZW4g
bm90IHByb2ZpbGluZyB0aGUgaGVhcAorICAgICAgICAtIHVuaXF1ZSBpZGVudGlmaWVyIGZvciBj
ZWxscywgc28gdGhleSBtYXkgYmUgaWRlbnRpZmllZCBhY3Jvc3MgbXVsdGlwbGUgc25hcHNob3Rz
CisgICAgICAgIC0gbm9kZXMgYW5kIGVkZ2VzIHRvIGJlIGFibGUgdG8gY29uc3RydWN0IGEgZ3Jh
cGggb2Ygd2hpY2ggbm9kZXMgcmVmZXJlbmNlL3JldGFpbiB3aGljaCBvdGhlciBub2RlcworICAg
ICAgICAtIG5vZGUgZGF0YSAtIGlkZW50aWZpZXIsIHR5cGUgKGNsYXNzIG5hbWUpLCBzaXplCisg
ICAgICAgIC0gZWRnZSBkYXRhIC0gZnJvbSBjZWxsLCB0byBjZWxsLCB0eXBlIC8gZGF0YSAodG8g
Y29tZSBpbiBhIGZvbGxvdy11cCBwYXRjaCkKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgIEFkZCBuZXcgZmlsZXMgdG8gdGhlIGJ1aWxkLgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNIZWFwU25hcHNob3R0aW5nKToKKyAgICAgICAgKEpT
Qzo6UmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzOjpSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9k
ZXMpOgorICAgICAgICAoSlNDOjpSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXM6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMpOgor
ICAgICAgICAoSlNDOjpIZWFwOjpjb2xsZWN0SW1wbCk6CisgICAgICAgIEFmdGVyIGV2ZXJ5IGNv
bGxlY3Rpb24sIHN3ZWVwIGRlYWQgY2VsbHMgZnJvbSBpbiBtZW1vcnkgc25hcHNob3RzLgorCisg
ICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjplbnN1cmVIZWFwUHJv
ZmlsZXIpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKyAgICAgICAgKEpTQzo6Vk06OmhlYXBQ
cm9maWxlcik6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAgICogaGVhcC9IZWFwUHJv
ZmlsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGVhcFByb2ZpbGVyOjpIZWFwUHJvZmls
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwUHJvZmlsZXI6On5IZWFwUHJvZmlsZXIpOgorICAgICAg
ICAoSlNDOjpIZWFwUHJvZmlsZXI6Om1vc3RSZWNlbnRTbmFwc2hvdCk6CisgICAgICAgIChKU0M6
OkhlYXBQcm9maWxlcjo6YXBwZW5kU25hcHNob3QpOgorICAgICAgICAoSlNDOjpIZWFwUHJvZmls
ZXI6OmNsZWFyU25hcHNob3RzKToKKyAgICAgICAgKEpTQzo6SGVhcFByb2ZpbGVyOjpzZXRBY3Rp
dmVTbmFwc2hvdEJ1aWxkZXIpOgorICAgICAgICAqIGhlYXAvSGVhcFByb2ZpbGVyLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpIZWFwUHJvZmlsZXI6OnZtKToKKyAgICAgICAgKEpTQzo6SGVhcFBy
b2ZpbGVyOjphY3RpdmVTbmFwc2hvdEJ1aWxkZXIpOgorICAgICAgICBWTSBhbmQgSGVhcCBjYW4g
bG9vayBhdCB0aGUgcHJvZmlsZXIgdG8gZGV0ZXJtaW5lIGlmIHdlIGFyZSBidWlsZGluZyBhCisg
ICAgICAgIHNuYXBzaG90LCBvciB0aGUgImhlYWQiIHNuYXBzaG90IHRvIHVzZSBmb3Igc3dlZXBp
bmcuCisKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpIZWFwU25hcHNob3Q6OkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6OkhlYXBTbmFw
c2hvdDo6fkhlYXBTbmFwc2hvdCk6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdDo6YXBwZW5k
Tm9kZSk6CisgICAgICAgIEFkZCBhIG5vZGUgdG8gdGhlIHVuZmluYWxpemVkIGxpc3Qgb2YgbmV3
IGNlbGxzLgorCisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdDo6c3dlZXBDZWxsKToKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90OjpzaHJpbmtUb0ZpdCk6CisgICAgICAgIENvbGxlY3QgYSBs
aXN0IG9mIGNlbGxzIGZvciBzd2VlcGluZyBhbmQgdGhlbiByZW1vdmUgdGhlbSBhbGwgYXQgb25j
ZQorICAgICAgICBpbiBzaHJpbmtUb0ZpdC4gVGhpcyBpcyBkb25lIHRvIGF2b2lkIHRocmFzaGlu
ZyBvZiBpbmRpdmlkdWFsIHJlbW92ZXMKKyAgICAgICAgdGhhdCBjb3VsZCBjYXVzZSBtYW55IG92
ZXJsYXBwaW5nIG1vdmVzIHdpdGhpbiB0aGUgVmVjdG9yLgorCisgICAgICAgIChKU0M6OkhlYXBT
bmFwc2hvdDo6ZmluYWxpemUpOgorICAgICAgICBTb3J0IHRoZSBsaXN0LCBhbmQgYWxzbyBjYWNo
ZSB0aGUgYm91bmRpbmcgc3RhcnQvc3RvcCBpZGVudGlmaWVycy4KKyAgICAgICAgTm8gb3RoZXIg
c25hcHNob3QgY2FuIGNvbnRhaW4gYW4gaWRlbnRpZmllciBpbiB0aGlzIHJhbmdlLCBzbyBpdCB3
aWxsCisgICAgICAgIGltcHJvdmUgbG9va3VwIG9mIGEgbm9kZSBmcm9tIGFuIGlkZW50aWZpZXIu
CisKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Ojpub2RlRm9yQ2VsbCk6CisgICAgICAgIChK
U0M6OkhlYXBTbmFwc2hvdDo6bm9kZUZvck9iamVjdElkZW50aWZpZXIpOgorICAgICAgICBTZWFy
Y2ggaGVscGVycy4KKworICAgICAgICAqIGhlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Tm9kZTo6SGVhcFNuYXBzaG90Tm9kZSk6Cisg
ICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEVkZ2U6OkhlYXBTbmFwc2hvdEVkZ2UpOgorICAgICAg
ICBOb2RlIGFuZCBFZGdlIHN0cnVjdCB0eXBlcyB0aGUgYnVpbGRlciBjcmVhdGVzLgorCisgICAg
ICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmdldE5leHRPYmplY3RJZGVudGlmaWVyKToKKyAgICAgICAg
KEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6SGVhcFNuYXBzaG90QnVpbGRlcik6CisgICAgICAg
IChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6On5IZWFwU25hcHNob3RCdWlsZGVyKToKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YnVpbGRTbmFwc2hvdCk6CisgICAgICAgIChK
U0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUpOgorICAgICAgICAoSlNDOjpIZWFw
U25hcHNob3RCdWlsZGVyOjphcHBlbmRFZGdlKToKKyAgICAgICAgV2hlbiBidWlsZGluZyB0aGUg
c25hcHNob3QsIGdlbmVyYXRpbmcgdGhlIG5leHQgaWRlbnRpZmllciwgYW5kCisgICAgICAgIGFw
cGVuZGluZyB0byBhbnkgb2YgdGhlIGxpc3RzIG11c3QgYmUgZ3VhcmRlZCBieSBhIGxvY2sgYmVj
YXVzZQorICAgICAgICBTbG90VmlzaXRvcnMgcnVubmluZyBpbiBwYXJhbGxlbCBtYXkgYmUgYWNj
ZXNzaW5nIHRoZSBidWlsZGVyLgorCisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6
Omhhc0V4aXN0aW5nTm9kZUZvckNlbGwpOgorICAgICAgICBMb29raW5nIHVwIGlmIGEgbm9kZSBh
bHJlYWR5IGV4aXN0cyBpbiBhIHByZXZpb3VzIHNuYXBzaG90IGNhbiBiZQorICAgICAgICBkb25l
IHdpdGhvdXQgYSBsb2NrIGJlY2F1c2UgYXQgdGhpcyBwb2ludCB0aGUgZGF0YSBpcyByZWFkb25s
eS4KKworICAgICAgICAoSlNDOjplZGdlVHlwZVRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6ZWRn
ZVR5cGVUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24p
OgorICAgICAgICBKU09OIHNlcmlhbGl6YXRpb24gb2YgYSBoZWFwIHNuYXBzaG90IGNvbnRhaW5z
IG5vZGUgYW5kIGVkZ2UgZGF0YS4KKworICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAg
ICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmRpZFN0YXJ0TWFya2luZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpyZXNldCk6Cisg
ICAgICAgIFNldC9jbGVhciB0aGUgYWN0aXZlIHNuYXBzaG90IGJ1aWxkZXIgdG8ga25vdyBpZiB0
aGlzIHdpbGwgYmUgYQorICAgICAgICBzbmFwc2hvdHRpbmcgR0Mgb3Igbm90LgorCisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6
c2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2spOgorICAgICAgICBJbmZvcm0gdGhlIGJ1aWxk
ZXIgb2YgYSBuZXcgbm9kZSBvciBlZGdlLgorCisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgUmVtZW1iZXIgdGhlIGN1cnJlbnQgY2VsbCB3ZSBhcmUg
dmlzaXRpbmcgc28gdGhhdCBpZiB3ZSBuZWVkIHRvCisgICAgICAgIGluZm9ybSB0aGUgYnVpbGRl
ciBvZiBlZGdlcyB3ZSBrbm93IHRoZSAiZnJvbSIgY2VsbC4KKworICAgICAgICAqIGpzYy5jcHA6
CisgICAgICAgIChTaW1wbGVPYmplY3Q6OlNpbXBsZU9iamVjdCk6CisgICAgICAgIChTaW1wbGVP
YmplY3Q6OmNyZWF0ZSk6CisgICAgICAgIChTaW1wbGVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKFNpbXBsZU9iamVjdDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChTaW1wbGVP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChTaW1wbGVPYmplY3Q6OmhpZGRlblZh
bHVlKToKKyAgICAgICAgKFNpbXBsZU9iamVjdDo6c2V0SGlkZGVuVmFsdWUpOgorICAgICAgICBD
cmVhdGUgYSBuZXcgY2xhc3MgIlNpbXBsZU9iamVjdCIgdGhhdCBjYW4gYmUgdXNlZCBieSBoZWFw
IHNuYXBzaG90dGluZworICAgICAgICB0ZXN0cy4gSXQgaXMgZWFzeSB0byBmaWx0ZXIgZm9yIHRo
aXMgbmV3IGNsYXNzIG5hbWUgYW5kIHRlc3QgaW50ZXJuYWwKKyAgICAgICAgZWRnZSByZWxhdGlv
bnNoaXBzIGNyZWF0ZWQgYnkgZ2FyYmFnZSBjb2xsZWN0aW9uIHZpc2l0aW5nIHRoZSBjZWxsLgor
CisgICAgICAgIChmdW5jdGlvbkNyZWF0ZVNpbXBsZU9iamVjdCk6CisgICAgICAgIChmdW5jdGlv
bkdldEhpZGRlblZhbHVlKToKKyAgICAgICAgKGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUpOgorICAg
ICAgICBFeHBvc2UgbWV0aG9kcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGggYSBTaW1wbGVP
YmplY3QuCisKKyAgICAgICAgKGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QpOgorICAgICAg
ICBFeHBvc2UgbWV0aG9kcyB0byBjcmVhdGUgYSBoZWFwIHNuYXBzaG90LiBUaGlzIGN1cnJlbnRs
eSBhdXRvbWF0aWNhbGx5CisgICAgICAgIHR1cm5zIHRoZSBzZXJpYWxpemVkIHN0cmluZyBpbnRv
IGEgSlNPTiBvYmplY3QuIFRoYXQgbWF5IGNoYW5nZS4KKworICAgICAgICAqIHRlc3RzL2hlYXBQ
cm9maWxlci55YW1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMt
ZWRnZXMuanM6IEFkZGVkLgorICAgICAgICAoZXhjbHVkZVN0cnVjdHVyZSk6CisgICAgICAgICog
dGVzdHMvaGVhcFByb2ZpbGVyL2Jhc2ljLW5vZGVzLmpzOiBBZGRlZC4KKyAgICAgICAgKGhhc0Rp
ZmZlcmVudFNpemVOb2Rlcyk6CisgICAgICAgIChoYXNBbGxJbnRlcm5hbE5vZGVzKToKKyAgICAg
ICAgQWRkIHRlc3RzIGZvciBiYXNpYyBub2RlIGFuZCBlZGdlIGRhdGEuCisKKyAgICAgICAgKiB0
ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qczogQWRkZWQuCisgICAgICAgIChhc3Nl
cnQpOgorICAgICAgICAoQ2hlYXBIZWFwU25hcHNob3ROb2RlKToKKyAgICAgICAgKENoZWFwSGVh
cFNuYXBzaG90RWRnZSk6CisgICAgICAgIChDaGVhcEhlYXBTbmFwc2hvdEVkZ2UucHJvdG90eXBl
LmdldCBmcm9tKToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90RWRnZS5wcm90b3R5cGUuZ2V0
IHRvKToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90KToKKyAgICAgICAgKENoZWFwSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5nZXQgbm9kZXMpOgorICAgICAgICAoQ2hlYXBIZWFwU25hcHNob3Qu
cHJvdG90eXBlLmdldCBlZGdlcyk6CisgICAgICAgIChDaGVhcEhlYXBTbmFwc2hvdC5wcm90b3R5
cGUubm9kZVdpdGhJZGVudGlmaWVyKToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90LnByb3Rv
dHlwZS5ub2Rlc1dpdGhDbGFzc05hbWUpOgorICAgICAgICAoQ2hlYXBIZWFwU25hcHNob3QucHJv
dG90eXBlLmNsYXNzTmFtZUZyb21UYWJsZUluZGV4KToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBz
aG90LnByb3RvdHlwZS5lZGdlVHlwZUZyb21UYWJsZUluZGV4KToKKyAgICAgICAgKGNyZWF0ZUNo
ZWFwSGVhcFNuYXBzaG90KToKKyAgICAgICAgKEhlYXBTbmFwc2hvdE5vZGUpOgorICAgICAgICAo
SGVhcFNuYXBzaG90RWRnZSk6CisgICAgICAgIChIZWFwU25hcHNob3QpOgorICAgICAgICAoSGVh
cFNuYXBzaG90LnByb3RvdHlwZS5ub2Rlc1dpdGhDbGFzc05hbWUpOgorICAgICAgICAoY3JlYXRl
SGVhcFNuYXBzaG90KToKKyAgICAgICAgQWRkIHR3byBIZWFwU25hcHNob3QgcmVwcmVzZW50YXRp
b25zLgorICAgICAgICBDaGVhcEhlYXBTbmFwc2hvdCBjcmVhdGVzIHR3byBsaXN0cyBvZiBub2Rl
IGFuZCBlZGdlIGRhdGEgdGhhdAorICAgICAgICBsYXppbHkgY3JlYXRlcyBvYmplY3RzIGFzIG5l
ZWRlZC4KKyAgICAgICAgSGVhcFNuYXBzaG90IGNyZWF0ZXMgYW4gb2JqZWN0IGZvciBlYWNoIG5v
ZGUgYW5kIGVkZ2UuIFRoaXMKKyAgICAgICAgaXMgd2FzdGVmdWwgYnV0IGVhc2llciB0byB1c2Uu
CisKIDIwMTYtMDItMjkgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgbmV3IE1ldGhvZFRhYmxlIG1ldGhvZCB0byBnZXQgYW4gZXN0aW1hdGVkIHNp
emUgZm9yIGEgY2VsbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzMDdlNTJlLi5l
MThkNWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTU0OCw2ICsxNTQ4LDgg
QEAKIAkJQTUxM0U1Q0IxODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUxM0U1Qzkx
ODVGOTYyNDAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0TWFuYWdlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MTRCMkMyMTg1QTY4NDQwMEYz
QzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUxNEIyQzAxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVk
U2NyaXB0QmFzZS5jcHAgKi87IH07CiAJCUE1MTRCMkMzMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmpl
Y3RlZFNjcmlwdEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1MTRCMkMxMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBNTMxMUMz
NjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMTFDMzUxQzc3Q0VBQzAwRTZCMUI2
IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBNTMxMUMzNzFDNzdDRUNBMDBFNkIxQjYgLyogSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTMxMUMzNDFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAg
Ki87IH07CiAJCUE1MzI0Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTUzMjQzODExODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
cy5jcHAgKi87IH07CiAJCUE1MzI0Mzg4MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1MzI0MzgyMTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMy
NDM4MzE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5jcHAg
Ki87IH07CkBAIC0xNTU4LDYgKzE1NjAsOCBAQAogCQlBNTMzOUVDNjFCQjM5OUE2MDA1NEYwMDUg
LyogSW5zcGVjdG9ySGVhcEFnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNTMzOUVDNTFCQjM5OTkwMDA1NEYwMDUgLyogSW5zcGVjdG9ySGVhcEFn
ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTUzMzlFQzcxQkIzOTlBOTAwNTRGMDA1IC8qIEluc3BlY3RvckhlYXBBZ2VudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMzOUVDNDFCQjM5OTkw
MDA1NEYwMDUgLyogSW5zcGVjdG9ySGVhcEFnZW50LmNwcCAqLzsgfTsKIAkJQTUzMzlFQzkxQkI0
QjQ2MDAwNTRGMDA1IC8qIEhlYXBPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMzlFQzgxQkI0QjQ1MTAwNTRGMDA1IC8qIEhlYXBPYnNl
cnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUE1Mzk4RkFCMUM3NTBEQTQwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1Mzk4RkFBMUM3NTBEOTUwMDYwQTk2
MyAvKiBIZWFwUHJvZmlsZXIuaCAqLzsgfTsKKwkJQTUzOThGQUMxQzc1MERBNjAwNjBBOTYzIC8q
IEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNTM5OEZBOTFDNzUwRDk1MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCAqLzsg
fTsKIAkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzQ0UwODExOEJD
MUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwICovOyB9OwogCQlBNTNDRTA4NjE4
QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzQ0UwODIxOEJDMUE1NjAwQkVERjc2IC8qIENv
bnNvbGVQcm90b3R5cGUuaCAqLzsgfTsKIAkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpT
Q29uc29sZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTNDRTA4MzE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmNwcCAqLzsgfTsKQEAgLTE1
NjYsNiArMTU3MCw4IEBACiAJCUE1M0YxQUMwMThDOTBGOEYwMDcyRUI2RCAvKiBmcmFtZXdvcmsu
c2IgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0Yx
QUJFMThDOTBFQzcwMDcyRUI2RCAvKiBmcmFtZXdvcmsuc2IgKi87IH07CiAJCUE1NDk4MjAzMTg5
MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0OTgyMDExODkxRDBCMDAwODFFNUI4IC8qIEV2ZW50TG9v
cC5jcHAgKi87IH07CiAJCUE1NDk4MjA0MTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NDk4MjAyMTg5
MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuaCAqLzsgfTsKKwkJQTU0QzJBQjAxQzY1NDRFRTAw
QTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTRDMkFBRTFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90
LmNwcCAqLzsgfTsKKwkJQTU0QzJBQjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0QzJBQUYx
QzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1NENGMkY1MTg0RUFCMjQwMDIzN0YxOSAvKiBT
Y3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTRDRjJGMjE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwICovOyB9Owog
CQlBNTRDRjJGNjE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NENGMkYzMTg0RUFCMjQwMDIzN0Yx
OSAvKiBTY3JpcHRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0Q0YyRjcx
ODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgKi87IH07CkBAIC0zNzQyLDYgKzM3
NDgsOCBAQAogCQlBNTEzRTVDOTE4NUY5NjI0MDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVjdGVkU2NyaXB0TWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE0QjJDMDE4NUE2ODQ0MDBG
M0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEluamVjdGVkU2NyaXB0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1MTRCMkMxMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5qZWN0ZWRTY3JpcHRCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1MzExQzM0MUM3N0NFQUMwMEU2QjFCNiAv
KiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlBNTMxMUMzNTFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwU25hcHNob3RCdWlsZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0MzgxMTg1NjgzMTcwMDJFRDY5MiAvKiBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTUzMjQzODIxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzODMxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3Rv
ckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yRnJv
bnRlbmREaXNwYXRjaGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzU0
LDYgKzM3NjIsOCBAQAogCQlBNTMzOUVDNDFCQjM5OTkwMDA1NEYwMDUgLyogSW5zcGVjdG9ySGVh
cEFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
ckhlYXBBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzM5RUM1MUJC
Mzk5OTAwMDU0RjAwNSAvKiBJbnNwZWN0b3JIZWFwQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySGVhcEFnZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1MzM5RUM4MUJCNEI0NTEwMDU0RjAwNSAvKiBIZWFwT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcE9ic2VydmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE1Mzk4RkE5MUM3NTBEOTUwMDYwQTk2MyAvKiBIZWFwUHJvZmls
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFByb2ZpbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUzOThGQUExQzc1MEQ5NTAwNjBB
OTYzIC8qIEhlYXBQcm9maWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
ZWFwUHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzQ0UwODExOEJD
MUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29uc29sZVByb3RvdHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE1M0NFMDgyMThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnNvbGVQcm90b3R5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzQ0UwODMxOEJDMUE1NjAwQkVERjc2IC8q
IEpTQ29uc29sZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nv
bnNvbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc2Miw2ICszNzcyLDgg
QEAKIAkJQTUzRjFBQkUxOEM5MEVDNzAwNzJFQjZEIC8qIGZyYW1ld29yay5zYiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBmcmFt
ZXdvcmsuc2I7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1NDk4MjAxMTg5MUQwQjAw
MDgxRTVCOCAvKiBFdmVudExvb3AuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gRXZlbnRMb29wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0OTgy
MDIxODkxRDBCMDAwODFFNUI4IC8qIEV2ZW50TG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0
QzJBQUUxQzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU25hcHNob3QuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlBNTRDMkFBRjFDNjU0NEQxMDBBMThENzggLyogSGVhcFNuYXBzaG90Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBTbmFwc2hvdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRDRjJGMjE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTRDRjJGMzE4NEVBQjI0MDAy
MzdGMTkgLyogU2NyaXB0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U2NyaXB0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0Q0YyRjcxODRF
QUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTY3JpcHRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNTA5MCw3ICs1MTAyLDEzIEBACiAJCQkJMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8q
IEhlYXBJdGVyYXRpb25TY29wZS5oICovLAogCQkJCUE1MzM5RUM4MUJCNEI0NTEwMDU0RjAwNSAv
KiBIZWFwT2JzZXJ2ZXIuaCAqLywKIAkJCQkyQTZGNDYyNTE3RTk1OUNFMDBDNDVDOTggLyogSGVh
cE9wZXJhdGlvbi5oICovLAorCQkJCUE1Mzk4RkE5MUM3NTBEOTUwMDYwQTk2MyAvKiBIZWFwUHJv
ZmlsZXIuY3BwICovLAorCQkJCUE1Mzk4RkFBMUM3NTBEOTUwMDYwQTk2MyAvKiBIZWFwUHJvZmls
ZXIuaCAqLywKIAkJCQkxNEY5NzQ0NjEzOEM4NTNFMDBEQTFDNjcgLyogSGVhcFJvb3RWaXNpdG9y
LmggKi8sCisJCQkJQTU0QzJBQUUxQzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5jcHAg
Ki8sCisJCQkJQTU0QzJBQUYxQzY1NDREMTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oICovLAor
CQkJCUE1MzExQzM0MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmNwcCAq
LywKKwkJCQlBNTMxMUMzNTFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5o
ICovLAogCQkJCUMyNEQzMUUwMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFwU3RhdGlzdGljcy5jcHAg
Ki8sCiAJCQkJQzI0RDMxRTExNjFDRDY5NTAwMkFBNERCIC8qIEhlYXBTdGF0aXN0aWNzLmggKi8s
CiAJCQkJQzJFNTI2QkIxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5jcHAgKi8sCkBAIC02
OTE1LDYgKzY5MzMsNyBAQAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxNzFCREEwNjdGMDAzMzFCODQg
LyogQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVF
RDhFNDYwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQlB
NTMxMUMzNjFDNzdDRUM1MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdCREFFQzkxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2ODAwMDMzMUI4NCAvKiBB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NTUx
NUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDg3
LDYgKzcxMDYsNyBAQAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVy
c2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2MDIwRTE5OTdCNDAwODA2NkREIC8qIERh
dGVJbnN0YW5jZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBMTU2MzIxMDk2NjM2NTAwNkZBMjYw
IC8qIERhdGVJbnN0YW5jZUNhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTRDMkFCMTFDNjU0
NEYyMDBBMThENzggLyogSGVhcFNuYXBzaG90LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0
QzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNEMjAzRTgwRTE3MThGNDAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUubHV0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGQTBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzQ5OSw2ICs3NTE5LDcgQEAKIAkJCQlGRTE4N0EwRjFDMDMwRDZDMDAzOEJC
Q0EgLyogU25pcHBldE9wZXJhbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTE1ODdENzUxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENv
bnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTUzOThGQUIxQzc1MERBNDAwNjBB
OTYzIC8qIEhlYXBQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzIxQjREQzE0
MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE1ODdENzYxQjREQzFDNjAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdFByb3Rv
dHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRDc5MkZEMUI0Mzg2NEIwMDQ1MTZGNSAv
KiBJbnRsTnVtYmVyRm9ybWF0LmggaW4gSGVhZGVycyAqLywKQEAgLTg4MTksNiArODg0MCw3IEBA
CiAJCQkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2Mzk0NDAxNUM3NUYxRDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzYxNkMxREIwRjAwODJD
NUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTUzOThG
QUMxQzc1MERBNjAwNjBBOTYzIC8qIEhlYXBQcm9maWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjM0QjE0OTE2RDQyMDEwMDAxQ0RBNUEgLyogREZHVXNlS2luZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjNCM0EyQjE1NDc1MDAwMDAzRUQwRkYgLyogREZHVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQkRDNEYxNTIyOEJGMzAwQ0Q4OTEwIC8qIERGR1ZhbHVlU291cmNl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODk5MSw2ICs5MDEzLDcgQEAKIAkJCQkwRjJCNjZFNDE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkI2NkU2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI2NkU4MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0FycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBNTMxMUMzNzFDNzdDRUNB
MDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0JEQUVDQTE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0MjEzNTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTkyNDMsNiArOTI2Niw3IEBACiAJCQkJQkNERTNCNDMwRTZD
ODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3RTRFRTcw
RjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJQTU0QzJBQjAxQzY1NDRFRTAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0
dXJlUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNDM4QTMxOTI3MEIxRDAwRTFG
QkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0
QTFDMDA4RjM2M0UgLyogU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKaW5kZXggMTBlYWEwMi4uYmQy
N2IzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKQEAgLTMzLDcgKzMzLDkgQEAK
ICNpbmNsdWRlICJHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCIKICNpbmNsdWRlICJI
ZWFwSGVscGVyUG9vbC5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkhlYXBQcm9maWxlci5oIgogI2luY2x1ZGUgIkhlYXBSb290VmlzaXRvci5oIgorI2luY2x1
ZGUgIkhlYXBTbmFwc2hvdC5oIgogI2luY2x1ZGUgIkhlYXBTdGF0aXN0aWNzLmgiCiAjaW5jbHVk
ZSAiSGVhcFZlcmlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCkBAIC03
NTgsNiArNzYwLDQxIEBAIHZvaWQgSGVhcDo6cmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRy
aWVzKCkKICNlbmRpZgogfQogCitib29sIEhlYXA6OmlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0
Cit7CisgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+aGVhcFByb2Zp
bGVyKCkpCisgICAgICAgIHJldHVybiAhIWhlYXBQcm9maWxlci0+YWN0aXZlU25hcHNob3RCdWls
ZGVyKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdHJ1Y3QgUmVtb3ZlRGVhZEhlYXBTbmFw
c2hvdE5vZGVzIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgUmVtb3ZlRGVhZEhl
YXBTbmFwc2hvdE5vZGVzKEhlYXBTbmFwc2hvdCYgc25hcHNob3QpCisgICAgICAgIDogbV9zbmFw
c2hvdChzbmFwc2hvdCkKKyAgICB7CisgICAgfQorCisgICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJh
dG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgbV9zbmFwc2hvdC5zd2VlcENlbGwo
Y2VsbCk7CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgIH0K
KworICAgIEhlYXBTbmFwc2hvdCYgbV9zbmFwc2hvdDsKK307CisKK3ZvaWQgSGVhcDo6cmVtb3Zl
RGVhZEhlYXBTbmFwc2hvdE5vZGVzKCkKK3sKKyAgICBHQ1BIQVNFKFJlbW92ZURlYWRIZWFwU25h
cHNob3ROb2Rlcyk7CisgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+
aGVhcFByb2ZpbGVyKCkpIHsKKyAgICAgICAgaWYgKEhlYXBTbmFwc2hvdCogc25hcHNob3QgPSBo
ZWFwUHJvZmlsZXItPm1vc3RSZWNlbnRTbmFwc2hvdCgpKSB7CisgICAgICAgICAgICBIZWFwSXRl
cmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNjb3BlKCp0aGlzKTsKKyAgICAgICAgICAgIFJlbW92
ZURlYWRIZWFwU25hcHNob3ROb2RlcyBmdW5jdG9yKCpzbmFwc2hvdCk7CisgICAgICAgICAgICBt
X29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbChoZWFwSXRlcmF0aW9uU2NvcGUsIGZ1bmN0b3Ip
OworICAgICAgICAgICAgc25hcHNob3QtPnNocmlua1RvRml0KCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKIHZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhlYXBSb290VmlzaXRvciYg
aGVhcFJvb3RWaXNpdG9yKQogewogICAgIEdDUEhBU0UoVmlzaXRQcm90ZWN0ZWRPYmplY3RzKTsK
QEAgLTExMjQsNiArMTE2MSw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhlYXA6OmNvbGxlY3RJbXBs
KEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUsIHZvaWQqIHN0YWNrT3JpCiAgICAgcmVtb3Zl
RGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgZGVsZXRlVW5tYXJrZWRDb21waWxl
ZENvZGUoKTsKICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygpOworICAgIHJlbW92ZURl
YWRIZWFwU25hcHNob3ROb2RlcygpOwogICAgIG5vdGlmeUluY3JlbWVudGFsU3dlZXBlcigpOwog
ICAgIHdyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9ja3MoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGJlZWU4NjUuLjExMGFjMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmgKQEAgLTE2Myw2ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBub3Rp
ZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0gdHJ1ZTsgfQogICAgIGJv
b2wgaXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1NhZmVUb0NvbGxlY3Q7IH0K
IAorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3Q7
CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RBbGxHYXJiYWdlSWZOb3REb25l
UmVjZW50bHkoKTsKICAgICB2b2lkIGNvbGxlY3RBbGxHYXJiYWdlKCkgeyBjb2xsZWN0QW5kU3dl
ZXAoRnVsbENvbGxlY3Rpb24pOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb2xsZWN0
QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFueUNvbGxlY3Rpb24pOwpA
QCAtMzI3LDYgKzMyOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygp
OwogICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOwogICAgIHZvaWQgZGVsZXRlU291cmNl
UHJvdmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2Rlcygp
OwogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCB3cml0ZUJh
cnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CiAgICAgdm9pZCByZXNldEFsbG9j
YXRvcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9m
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjgxYjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmlsZXIuY3BwCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBQcm9maWxlci5oIgorCisjaW5jbHVk
ZSAiSGVhcFNuYXBzaG90LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K0hlYXBQcm9maWxlcjo6SGVhcFByb2ZpbGVyKFZNJiB2bSkKKyAgICA6IG1fdm0odm0pCit7Cit9
CisKK0hlYXBQcm9maWxlcjo6fkhlYXBQcm9maWxlcigpCit7Cit9CisKK0hlYXBTbmFwc2hvdCog
SGVhcFByb2ZpbGVyOjptb3N0UmVjZW50U25hcHNob3QoKQoreworICAgIGlmIChtX3NuYXBzaG90
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX3NuYXBz
aG90cy5sYXN0KCkuZ2V0KCk7Cit9CisKK3ZvaWQgSGVhcFByb2ZpbGVyOjphcHBlbmRTbmFwc2hv
dChzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBzaG90PiBzbmFwc2hvdCkKK3sKKyAgICBtX3NuYXBz
aG90cy5hcHBlbmQoV1RGTW92ZShzbmFwc2hvdCkpOworfQorCit2b2lkIEhlYXBQcm9maWxlcjo6
Y2xlYXJTbmFwc2hvdHMoKQoreworICAgIG1fc25hcHNob3RzLmNsZWFyKCk7Cit9CisKK3ZvaWQg
SGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIoSGVhcFNuYXBzaG90QnVpbGRl
ciogYnVpbGRlcikKK3sKKyAgICBBU1NFUlQoISFtX2FjdGl2ZUJ1aWxkZXIgIT0gISFidWlsZGVy
KTsKKyAgICBtX2FjdGl2ZUJ1aWxkZXIgPSBidWlsZGVyOworfQorCit9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhN2QzNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBIZWFw
UHJvZmlsZXJfaAorI2RlZmluZSBIZWFwUHJvZmlsZXJfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFNuYXBzaG90OworY2xhc3MgSGVh
cFNuYXBzaG90QnVpbGRlcjsKK2NsYXNzIFZNOworCitjbGFzcyBIZWFwUHJvZmlsZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEhlYXBQcm9maWxlcihWTSYp
OworICAgIH5IZWFwUHJvZmlsZXIoKTsKKworICAgIFZNJiB2bSgpIGNvbnN0IHsgcmV0dXJuIG1f
dm07IH0KKworICAgIEhlYXBTbmFwc2hvdCogbW9zdFJlY2VudFNuYXBzaG90KCk7CisgICAgdm9p
ZCBhcHBlbmRTbmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBzaG90Pik7CisgICAgdm9p
ZCBjbGVhclNuYXBzaG90cygpOworCisgICAgSGVhcFNuYXBzaG90QnVpbGRlciogYWN0aXZlU25h
cHNob3RCdWlsZGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVCdWlsZGVyOyB9CisgICAgdm9p
ZCBzZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIoSGVhcFNuYXBzaG90QnVpbGRlciopOworCitwcml2
YXRlOgorICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBz
aG90Pj4gbV9zbmFwc2hvdHM7CisgICAgSGVhcFNuYXBzaG90QnVpbGRlciogbV9hY3RpdmVCdWls
ZGVyIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBI
ZWFwUHJvZmlsZXJfaCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBTbmFwc2hvdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OGU1OGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3QuY3BwCkBA
IC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZWFwU25hcHNob3QuaCIKKwor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0hlYXBTbmFwc2hv
dDo6SGVhcFNuYXBzaG90KEhlYXBTbmFwc2hvdCogcHJldmlvdXNTbmFwc2hvdCkKKyAgICA6IG1f
cHJldmlvdXMocHJldmlvdXNTbmFwc2hvdCkKK3sKK30KKworSGVhcFNuYXBzaG90Ojp+SGVhcFNu
YXBzaG90KCkKK3sKK30KKwordm9pZCBIZWFwU25hcHNob3Q6OmFwcGVuZE5vZGUoY29uc3QgSGVh
cFNuYXBzaG90Tm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIW1fZmluYWxpemVkKTsKKyAgICBB
U1NFUlQoIW1fcHJldmlvdXMgfHwgIW1fcHJldmlvdXMtPm5vZGVGb3JDZWxsKG5vZGUuY2VsbCkp
OworCisgICAgbV9ub2Rlcy5hcHBlbmQobm9kZSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBzaG90Ojpz
d2VlcENlbGwoSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVChjZWxsKTsKKworICAgIGlmICht
X2ZpbmFsaXplZCAmJiAhaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsK
KyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9ub2Rlcy5zaXplKCk7CisgICAgICAgIHdoaWxlIChz
dGFydCAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1pZGRsZSA9IHN0YXJ0ICsgKChl
bmQgLSBzdGFydCkgLyAyKTsKKyAgICAgICAgICAgIEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUgPSBt
X25vZGVzW21pZGRsZV07CisgICAgICAgICAgICBpZiAoY2VsbCA9PSBub2RlLmNlbGwpIHsKKyAg
ICAgICAgICAgICAgICBtX2NlbGxzVG9Td2VlcC5hZGQoY2VsbCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNlbGwgPCBub2RlLmNlbGwp
CisgICAgICAgICAgICAgICAgZW5kID0gbWlkZGxlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gbWlkZGxlICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtX3ByZXZpb3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5zd2VlcENlbGwoY2VsbCk7Cit9CisK
K3ZvaWQgSGVhcFNuYXBzaG90OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgaWYgKG1fZmluYWxpemVk
KSB7CisgICAgICAgIGlmICghbV9jZWxsc1RvU3dlZXAuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBtX25vZGVzLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3Qg
SGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NlbGxzVG9Td2VlcC5jb250YWlucyhub2RlLmNlbGwpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgbV9ub2Rlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICAgICAgbV9j
ZWxsc1RvU3dlZXAuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3ByZXZp
b3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5zaHJpbmtUb0ZpdCgpOworfQorCit2b2lkIEhlYXBT
bmFwc2hvdDo6ZmluYWxpemUoKQoreworICAgIG1fZmluYWxpemVkID0gdHJ1ZTsKKworICAgIGlm
ICghaXNFbXB0eSgpKSB7CisgICAgICAgIG1fZmlyc3RPYmplY3RJZGVudGlmaWVyID0gbV9ub2Rl
cy5maXJzdCgpLmlkZW50aWZpZXI7CisgICAgICAgIG1fbGFzdE9iamVjdElkZW50aWZpZXIgPSBt
X25vZGVzLmxhc3QoKS5pZGVudGlmaWVyOworICAgIH0KKworICAgIHN0ZDo6c29ydChtX25vZGVz
LmJlZ2luKCksIG1fbm9kZXMuZW5kKCksIFtdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBhLCBj
b25zdCBIZWFwU25hcHNob3ROb2RlJiBiKSB7CisgICAgICAgIHJldHVybiBhLmNlbGwgPCBiLmNl
bGw7CisgICAgfSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gQXNzZXJ0IHRoZXJlIGFyZSBu
byBkdXBsaWNhdGVzIG9yIG51bGxwdHIgY2VsbHMuCisgICAgSlNDZWxsKiBwcmV2aW91c0NlbGwg
PSBudWxscHRyOworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fbm9kZXMpIHsKKyAgICAgICAgQVNT
RVJUKG5vZGUuY2VsbCk7CisgICAgICAgIGlmIChwcmV2aW91c0NlbGwpCisgICAgICAgICAgICBB
U1NFUlQobm9kZS5jZWxsICE9IHByZXZpb3VzQ2VsbCk7CisgICAgICAgIHByZXZpb3VzQ2VsbCA9
IG5vZGUuY2VsbDsKKyAgICB9CisjZW5kaWYKK30KKworT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gSGVhcFNuYXBzaG90Ojpub2RlRm9yQ2VsbChKU0NlbGwqIGNlbGwpCit7CisgICAgQVNTRVJU
KG1fZmluYWxpemVkKTsKKworICAgIGlmICghaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9ub2Rlcy5zaXplKCk7CisgICAg
ICAgIHdoaWxlIChzdGFydCAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1pZGRsZSA9
IHN0YXJ0ICsgKChlbmQgLSBzdGFydCkgLyAyKTsKKyAgICAgICAgICAgIEhlYXBTbmFwc2hvdE5v
ZGUmIG5vZGUgPSBtX25vZGVzW21pZGRsZV07CisgICAgICAgICAgICBpZiAoY2VsbCA9PSBub2Rl
LmNlbGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+
KG5vZGUpOworICAgICAgICAgICAgaWYgKGNlbGwgPCBub2RlLmNlbGwpCisgICAgICAgICAgICAg
ICAgZW5kID0gbWlkZGxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXJ0
ID0gbWlkZGxlICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3ByZXZpb3VzKQor
ICAgICAgICByZXR1cm4gbV9wcmV2aW91cy0+bm9kZUZvckNlbGwoY2VsbCk7CisKKyAgICByZXR1
cm4gTnVsbG9wdDsKK30KKworT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSGVhcFNuYXBzaG90
Ojpub2RlRm9yT2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCBvYmplY3RJZGVudGlmaWVyKQorewor
ICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fcHJldmlvdXMpCisgICAgICAgICAg
ICByZXR1cm4gbV9wcmV2aW91cy0+bm9kZUZvck9iamVjdElkZW50aWZpZXIob2JqZWN0SWRlbnRp
Zmllcik7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKworICAgIGlmIChvYmplY3RJ
ZGVudGlmaWVyID4gbV9sYXN0T2JqZWN0SWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CisKKyAgICBpZiAob2JqZWN0SWRlbnRpZmllciA8IG1fZmlyc3RPYmplY3RJZGVudGlmaWVy
KSB7CisgICAgICAgIGlmIChtX3ByZXZpb3VzKQorICAgICAgICAgICAgcmV0dXJuIG1fcHJldmlv
dXMtPm5vZGVGb3JPYmplY3RJZGVudGlmaWVyKG9iamVjdElkZW50aWZpZXIpOworICAgICAgICBy
ZXR1cm4gTnVsbG9wdDsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX25vZGVzKSB7
CisgICAgICAgIGlmIChub2RlLmlkZW50aWZpZXIgPT0gb2JqZWN0SWRlbnRpZmllcikKKyAgICAg
ICAgICAgIHJldHVybiBPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPihub2RlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gTnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3QuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmZjMDdiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwU25hcHNob3QuaApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFNuYXBzaG90X2gKKyNk
ZWZpbmUgSGVhcFNuYXBzaG90X2gKKworI2luY2x1ZGUgIkhlYXBTbmFwc2hvdEJ1aWxkZXIuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFNuYXBzaG90IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBIZWFwU25hcHNob3QoSGVhcFNuYXBzaG90Kik7Cisg
ICAgfkhlYXBTbmFwc2hvdCgpOworCisgICAgSGVhcFNuYXBzaG90KiBwcmV2aW91cygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJldmlvdXM7IH0KKworICAgIHZvaWQgYXBwZW5kTm9kZShjb25zdCBIZWFw
U25hcHNob3ROb2RlJik7CisgICAgdm9pZCBzd2VlcENlbGwoSlNDZWxsKik7CisgICAgdm9pZCBz
aHJpbmtUb0ZpdCgpOworICAgIHZvaWQgZmluYWxpemUoKTsKKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZXMuaXNFbXB0eSgpOyB9CisgICAgT3B0aW9uYWw8SGVhcFNu
YXBzaG90Tm9kZT4gbm9kZUZvckNlbGwoSlNDZWxsKik7CisgICAgT3B0aW9uYWw8SGVhcFNuYXBz
aG90Tm9kZT4gbm9kZUZvck9iamVjdElkZW50aWZpZXIodW5zaWduZWQgb2JqZWN0SWRlbnRpZmll
cik7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CisK
KyAgICBWZWN0b3I8SGVhcFNuYXBzaG90Tm9kZT4gbV9ub2RlczsKKyAgICBIYXNoU2V0PEpTQ2Vs
bCo+IG1fY2VsbHNUb1N3ZWVwOworICAgIEhlYXBTbmFwc2hvdCogbV9wcmV2aW91cyB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBtX2ZpcnN0T2JqZWN0SWRlbnRpZmllciB7IDAgfTsKKyAgICB1
bnNpZ25lZCBtX2xhc3RPYmplY3RJZGVudGlmaWVyIHsgMCB9OworICAgIGJvb2wgbV9maW5hbGl6
ZWQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBIZWFw
U25hcHNob3RfaCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA4YTFh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFw
c2hvdEJ1aWxkZXIuY3BwCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJI
ZWFwU25hcHNob3RCdWlsZGVyLmgiCisKKyNpbmNsdWRlICJEZWZlckdDLmgiCisjaW5jbHVkZSAi
SGVhcC5oIgorI2luY2x1ZGUgIkhlYXBQcm9maWxlci5oIgorI2luY2x1ZGUgIkhlYXBTbmFwc2hv
dC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNs
dWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIEpTQyB7CisgICAgCit1bnNpZ25lZCBIZWFwU25hcHNob3RCdWlsZGVyOjpuZXh0QXZhaWxh
YmxlT2JqZWN0SWRlbnRpZmllciA9IDE7Cit1bnNpZ25lZCBIZWFwU25hcHNob3RCdWlsZGVyOjpn
ZXROZXh0T2JqZWN0SWRlbnRpZmllcigpIHsgcmV0dXJuIG5leHRBdmFpbGFibGVPYmplY3RJZGVu
dGlmaWVyKys7IH0KKworSGVhcFNuYXBzaG90QnVpbGRlcjo6SGVhcFNuYXBzaG90QnVpbGRlcihI
ZWFwUHJvZmlsZXImIHByb2ZpbGVyKQorICAgIDogbV9wcm9maWxlcihwcm9maWxlcikKK3sKK30K
KworSGVhcFNuYXBzaG90QnVpbGRlcjo6fkhlYXBTbmFwc2hvdEJ1aWxkZXIoKQoreworfQorCit2
b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmJ1aWxkU25hcHNob3QoKQoreworICAgIG1fc25hcHNo
b3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEhlYXBTbmFwc2hvdD4obV9wcm9maWxlci5tb3N0UmVjZW50
U25hcHNob3QoKSk7CisgICAgeworICAgICAgICBtX3Byb2ZpbGVyLnNldEFjdGl2ZVNuYXBzaG90
QnVpbGRlcih0aGlzKTsKKyAgICAgICAgbV9wcm9maWxlci52bSgpLmhlYXAuY29sbGVjdEFsbEdh
cmJhZ2UoKTsKKyAgICAgICAgbV9wcm9maWxlci5zZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIobnVs
bHB0cik7CisgICAgfQorICAgIG1fc25hcHNob3QtPmZpbmFsaXplKCk7CisKKyAgICBtX3Byb2Zp
bGVyLmFwcGVuZFNuYXBzaG90KFdURk1vdmUobV9zbmFwc2hvdCkpOworfQorCit2b2lkIEhlYXBT
bmFwc2hvdEJ1aWxkZXI6OmFwcGVuZE5vZGUoSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVCht
X3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOworICAgIEFTU0VSVChI
ZWFwOjppc01hcmtlZChjZWxsKSk7CisKKyAgICBib29sIGhhc0V4aXN0aW5nTm9kZSA9IGhhc0V4
aXN0aW5nTm9kZUZvckNlbGwoY2VsbCk7CisgICAgaWYgKGhhc0V4aXN0aW5nTm9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9hcHBlbmRpbmdN
dXRleCk7CisKKyAgICBtX3NuYXBzaG90LT5hcHBlbmROb2RlKEhlYXBTbmFwc2hvdE5vZGUoY2Vs
bCwgZ2V0TmV4dE9iamVjdElkZW50aWZpZXIoKSkpOworfQorCit2b2lkIEhlYXBTbmFwc2hvdEJ1
aWxkZXI6OmFwcGVuZEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQoreworICAgIEFTU0VS
VChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOworICAgIEFTU0VS
VCh0byk7CisKKyAgICAvLyBBdm9pZCB0cml2aWFsIGVkZ2VzLgorICAgIGlmIChmcm9tID09IHRv
KQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2Fw
cGVuZGluZ011dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2UoZnJv
bSwgdG8pKTsKK30KKworYm9vbCBIZWFwU25hcHNob3RCdWlsZGVyOjpoYXNFeGlzdGluZ05vZGVG
b3JDZWxsKEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIW1fc25hcHNob3QtPnByZXZpb3VzKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhIW1fc25hcHNob3QtPnByZXZp
b3VzKCktPm5vZGVGb3JDZWxsKGNlbGwpOworfQorCisKKy8vIEhlYXAgU25hcHNob3QgSlNPTiBG
b3JtYXQ6CisvLworLy8gICB7CisvLyAgICAgICJ2ZXJzaW9uIjogMS4wLAorLy8gICAgICAibm9k
ZXMiOiBbCisvLyAgICAgICAgICBbPG5vZGVJZD4sIDxzaXplSW5CeXRlcz4sIDxub2RlQ2xhc3NO
YW1lSW5kZXg+LCA8b3B0aW9uYWxJbnRlcm5hbD5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAgICAg
Im5vZGVDbGFzc05hbWVzIjogWworLy8gICAgICAgICAgInN0cmluZyIsICJTdHJ1Y3R1cmUiLCAi
T2JqZWN0IiwgLi4uCisvLyAgICAgIF0sCisvLyAgICAgICJlZGdlcyI6IFsKKy8vICAgICAgICAg
IFs8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlvbmFsRWRn
ZUV4dHJhRGF0YT5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAgICAgImVkZ2VUeXBlcyI6IFsKKy8v
ICAgICAgICAgICJJbnRlcm5hbCIsICJQcm9wZXJ0eSIsICJJbmRleCIsICJWYXJpYWJsZSIKKy8v
ICAgICAgXQorLy8gICB9CisvLworLy8gRklYTUU6IFBvc3NpYmxlIGNvbXBhY3Rpb24gaW1wcm92
ZW1lbnRzOgorLy8gICAtIGVsaW1pbmF0ZSBpbm5lciBhcnJheSBncm91cHMgYW5kIGp1c3QgaGF2
ZSBhIHNpbmdsZSBsaXN0IHdpdGggZml4ZWQgZ3JvdXAgc2l6ZXMgKG1ldGEgZGF0YSBzZWN0aW9u
KS4KKy8vICAgLSBlbGltaW5hdGUgZHVwbGljYXRlIGVkZ2UgZXh0cmEgZGF0YSBzdHJpbmdzLCBo
YXZlIGFuIGluZGV4IGludG8gYSBkZS1kdXBsaWNhdGVkIGxpa2UgZWRnZVR5cGVzIC8gbm9kZUNs
YXNzTmFtZXMuCisKK3N0YXRpYyB1aW50OF90IGVkZ2VUeXBlVG9OdW1iZXIoRWRnZVR5cGUgdHlw
ZSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSk7Cit9CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBlZGdlVHlwZVRvU3RyaW5nKEVkZ2VUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBFZGdlVHlwZTo6SW50ZXJuYWw6CisgICAgICAgIHJldHVy
biAiSW50ZXJuYWwiOworICAgIGNhc2UgRWRnZVR5cGU6OlByb3BlcnR5OgorICAgICAgICByZXR1
cm4gIlByb3BlcnR5IjsKKyAgICBjYXNlIEVkZ2VUeXBlOjpJbmRleDoKKyAgICAgICAgcmV0dXJu
ICJJbmRleCI7CisgICAgY2FzZSBFZGdlVHlwZTo6VmFyaWFibGU6CisgICAgICAgIHJldHVybiAi
VmFyaWFibGUiOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
IkludGVybmFsIjsKK30KKworU3RyaW5nIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24oKQorewor
ICAgIHJldHVybiBqc29uKFtdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJikgeyByZXR1cm4gdHJ1
ZTsgfSk7Cit9CisKK1N0cmluZyBIZWFwU25hcHNob3RCdWlsZGVyOjpqc29uKHN0ZDo6ZnVuY3Rp
b248Ym9vbCAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYpPiBhbGxvd05vZGVDYWxsYmFjaykKK3sK
KyAgICBWTSYgdm0gPSBtX3Byb2ZpbGVyLnZtKCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZl
ckdDKHZtLmhlYXApOworCisgICAgLy8gQnVpbGQgYSBub2RlIHRvIGlkZW50aWZpZXIgbWFwIG9m
IGFsbG93ZWQgbm9kZXMgdG8gdXNlIHdoZW4gc2VyaWFsaXppbmcgZWRnZXMuCisgICAgSGFzaE1h
cDxKU0NlbGwqLCB1bnNpZ25lZD4gYWxsb3dlZE5vZGVJZGVudGlmaWVyczsKKworICAgIC8vIEJ1
aWxkIGEgbGlzdCBvZiB1c2VkIGNsYXNzIG5hbWVzLgorICAgIEhhc2hNYXA8Y29uc3QgY2hhcios
IHVuc2lnbmVkPiBjbGFzc05hbWVJbmRleGVzOworICAgIHVuc2lnbmVkIG5leHRDbGFzc05hbWVJ
bmRleCA9IDA7CisKKyAgICBTdHJpbmdCdWlsZGVyIGpzb247CisKKyAgICBhdXRvIGFwcGVuZE5v
ZGVKU09OID0gWyZdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgICAgIC8v
IExldCB0aGUgY2xpZW50IGRlY2lkZSBpZiB0aGV5IHdhbnQgdG8gYWxsb3cgb3IgZGlzYWxsb3cg
Y2VydGFpbiBub2Rlcy4KKyAgICAgICAgaWYgKCFhbGxvd05vZGVDYWxsYmFjayhub2RlKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLnNldChu
b2RlLmNlbGwsIG5vZGUuaWRlbnRpZmllcik7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBjbGFz
c05hbWVJbmRleGVzLmFkZChub2RlLmNlbGwtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsIG5leHRD
bGFzc05hbWVJbmRleCk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
ICAgIG5leHRDbGFzc05hbWVJbmRleCsrOworICAgICAgICB1bnNpZ25lZCBjbGFzc05hbWVJbmRl
eCA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgYm9vbCBpc0ludGVybmFsID0g
ZmFsc2U7CisgICAgICAgIGlmICghbm9kZS5jZWxsLT5pc1N0cmluZygpKSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUuY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAg
ICAgICAgIGlzSW50ZXJuYWwgPSAhc3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmdsb2JhbE9iamVj
dCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gWzxub2RlSWQ+LCA8c2l6ZUluQnl0ZXM+LCA8
Y2xhc3NOYW1lPiwgPG9wdGlvbmFsSW50ZXJuYWxCb29sZWFuPl0KKyAgICAgICAganNvbi5hcHBl
bmQoJywnKTsKKyAgICAgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICAgICAganNvbi5hcHBlbmRO
dW1iZXIobm9kZS5pZGVudGlmaWVyKTsKKyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAg
ICAganNvbi5hcHBlbmROdW1iZXIobm9kZS5jZWxsLT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpKTsK
KyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIoY2xh
c3NOYW1lSW5kZXgpOworICAgICAgICBpZiAoaXNJbnRlcm5hbCkKKyAgICAgICAgICAgIGpzb24u
YXBwZW5kTGl0ZXJhbCgiLDEiKTsKKyAgICAgICAganNvbi5hcHBlbmQoJ10nKTsKKyAgICB9Owor
CisgICAgYm9vbCBmaXJzdEVkZ2UgPSB0cnVlOworICAgIGF1dG8gYXBwZW5kRWRnZUpTT04gPSBb
Jl0gKGNvbnN0IEhlYXBTbmFwc2hvdEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZy
b20gY2VsbCBpcyBudWxsLCB0aGlzIG1lYW5zIGEgcm9vdCBlZGdlLgorICAgICAgICB1bnNpZ25l
ZCBmcm9tSWRlbnRpZmllciA9IDA7CisgICAgICAgIGlmIChlZGdlLmZyb20pIHsKKyAgICAgICAg
ICAgIGF1dG8gZnJvbUxvb2t1cCA9IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZmluZChlZGdlLmZy
b20pOworICAgICAgICAgICAgaWYgKGZyb21Mb29rdXAgPT0gYWxsb3dlZE5vZGVJZGVudGlmaWVy
cy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmcm9tSWRlbnRp
ZmllciA9IGZyb21Mb29rdXAtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQg
dG9JZGVudGlmaWVyID0gMDsKKyAgICAgICAgaWYgKGVkZ2UudG8pIHsKKyAgICAgICAgICAgIGF1
dG8gdG9Mb29rdXAgPSBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLmZpbmQoZWRnZS50byk7CisgICAg
ICAgICAgICBpZiAodG9Mb29rdXAgPT0gYWxsb3dlZE5vZGVJZGVudGlmaWVycy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0b0lkZW50aWZpZXIgPSB0b0xvb2t1
cC0+dmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZpcnN0RWRnZSkKKyAgICAgICAg
ICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAgICAgIGZpcnN0RWRnZSA9IGZhbHNlOworCisgICAg
ICAgIC8vIFs8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlv
bmFsRWRnZUV4dHJhRGF0YT5dLAorICAgICAgICBqc29uLmFwcGVuZCgnWycpOworICAgICAgICBq
c29uLmFwcGVuZE51bWJlcihmcm9tSWRlbnRpZmllcik7CisgICAgICAgIGpzb24uYXBwZW5kKCcs
Jyk7CisgICAgICAgIGpzb24uYXBwZW5kTnVtYmVyKHRvSWRlbnRpZmllcik7CisgICAgICAgIGpz
b24uYXBwZW5kKCcsJyk7CisgICAgICAgIGpzb24uYXBwZW5kTnVtYmVyKGVkZ2VUeXBlVG9OdW1i
ZXIoZWRnZS50eXBlKSk7CisgICAgICAgIGpzb24uYXBwZW5kKCddJyk7CisgICAgfTsKKworICAg
IGpzb24uYXBwZW5kKCd7Jyk7CisKKyAgICAvLyB2ZXJzaW9uCisgICAganNvbi5hcHBlbmRMaXRl
cmFsKCJcInZlcnNpb25cIjoxIik7CisKKyAgICAvLyBub2RlcworICAgIGpzb24uYXBwZW5kKCcs
Jyk7CisgICAganNvbi5hcHBlbmRMaXRlcmFsKCJcIm5vZGVzXCI6Iik7CisgICAganNvbi5hcHBl
bmQoJ1snKTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlswLDAsXCI8cm9vdD5cIl0iKTsKKyAg
ICBmb3IgKEhlYXBTbmFwc2hvdCogc25hcHNob3QgPSBtX3Byb2ZpbGVyLm1vc3RSZWNlbnRTbmFw
c2hvdCgpOyBzbmFwc2hvdDsgc25hcHNob3QgPSBzbmFwc2hvdC0+cHJldmlvdXMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8mIG5vZGUgOiBzbmFwc2hvdC0+bV9ub2RlcykKKyAgICAgICAgICAgIGFw
cGVuZE5vZGVKU09OKG5vZGUpOworICAgIH0KKyAgICBqc29uLmFwcGVuZCgnXScpOworCisgICAg
Ly8gbm9kZSBjbGFzcyBuYW1lcworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5hcHBl
bmRMaXRlcmFsKCJcIm5vZGVDbGFzc05hbWVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsK
KyAgICBWZWN0b3I8Y29uc3QgY2hhciAqPiBvcmRlcmVkQ2xhc3NOYW1lcyhjbGFzc05hbWVJbmRl
eGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNsYXNzTmFtZUluZGV4ZXMpCisg
ICAgICAgIG9yZGVyZWRDbGFzc05hbWVzW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleTsKKyAgICBi
b29sIGZpcnN0Q2xhc3NOYW1lID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGNsYXNzTmFtZSA6IG9y
ZGVyZWRDbGFzc05hbWVzKSB7CisgICAgICAgIGlmICghZmlyc3RDbGFzc05hbWUpCisgICAgICAg
ICAgICBqc29uLmFwcGVuZCgnLCcpOworICAgICAgICBmaXJzdENsYXNzTmFtZSA9IGZhbHNlOwor
ICAgICAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY2xhc3NOYW1lKTsKKyAgICB9Cisg
ICAganNvbi5hcHBlbmQoJ10nKTsKKworICAgIC8vIGVkZ2VzCisgICAganNvbi5hcHBlbmQoJywn
KTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiZWRnZXNcIjoiKTsKKyAgICBqc29uLmFwcGVu
ZCgnWycpOworICAgIGZvciAoYXV0byYgZWRnZSA6IG1fZWRnZXMpCisgICAgICAgIGFwcGVuZEVk
Z2VKU09OKGVkZ2UpOworICAgIGpzb24uYXBwZW5kKCddJyk7CisKKyAgICAvLyBlZGdlIHR5cGVz
CisgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiZWRnZVR5
cGVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpT
T05TdHJpbmcoZWRnZVR5cGVUb1N0cmluZyhFZGdlVHlwZTo6SW50ZXJuYWwpKTsKKyAgICBqc29u
LmFwcGVuZCgnLCcpOworICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhlZGdlVHlwZVRv
U3RyaW5nKEVkZ2VUeXBlOjpQcm9wZXJ0eSkpOworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAg
anNvbi5hcHBlbmRRdW90ZWRKU09OU3RyaW5nKGVkZ2VUeXBlVG9TdHJpbmcoRWRnZVR5cGU6Oklu
ZGV4KSk7CisgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05T
dHJpbmcoZWRnZVR5cGVUb1N0cmluZyhFZGdlVHlwZTo6VmFyaWFibGUpKTsKKyAgICBqc29uLmFw
cGVuZCgnXScpOworCisgICAganNvbi5hcHBlbmQoJ30nKTsKKyAgICByZXR1cm4ganNvbi50b1N0
cmluZygpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40ZmFlNmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFNuYXBz
aG90QnVpbGRlcl9oCisjZGVmaW5lIEhlYXBTbmFwc2hvdEJ1aWxkZXJfaAorCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEhlYXBQcm9maWxlcjsKK2NsYXNzIEhlYXBTbmFwc2hvdDsKK2NsYXNzIEpTQ2VsbDsK
Kworc3RydWN0IEhlYXBTbmFwc2hvdE5vZGUgeworICAgIEhlYXBTbmFwc2hvdE5vZGUoSlNDZWxs
KiBjZWxsLCB1bnNpZ25lZCBpZGVudGlmaWVyKQorICAgICAgICA6IGNlbGwoY2VsbCkKKyAgICAg
ICAgLCBpZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgeyB9CisKKyAgICBKU0NlbGwqIGNlbGw7
CisgICAgdW5zaWduZWQgaWRlbnRpZmllcjsKK307CisKK2VudW0gY2xhc3MgRWRnZVR5cGUgOiB1
aW50OF90IHsKKyAgICBJbnRlcm5hbCwgICAgIC8vIE5vcm1hbCBzdHJvbmcgcmVmZXJlbmNlLiBO
byBuYW1lLgorICAgIFByb3BlcnR5LCAgICAgLy8gTmFtZWQgcHJvcGVydHkuIEluIGBvYmplY3Qu
cHJvcGVydHlgIHRoZSBuYW1lIGlzICJwcm9wZXJ0eSIKKyAgICBJbmRleCwgICAgICAgIC8vIElu
ZGV4ZWQgcHJvcGVydHkuIEluIGBhcnJheVswXWAgbmFtZSBpcyBpbmRleCAiMCIuCisgICAgVmFy
aWFibGUsICAgICAvLyBWYXJpYWJsZSBoZWxkIGJ5IGEgc2NvcGUuIEluIGBsZXQgeCwgZj0oKSA9
PiB4KytgIG5hbWUgaXMgIngiIGluIGYncyBjYXB0dXJlZCBzY29wZS4KKyAgICAvLyBGSVhNRTog
QWRkICJXZWFrIiBlZGdlcy4KK307CisKK3N0cnVjdCBIZWFwU25hcHNob3RFZGdlIHsKKyAgICBI
ZWFwU25hcHNob3RFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKKyAgICAgICAgOiBmcm9t
KGZyb20pCisgICAgICAgICwgdG8odG8pCisgICAgICAgICwgdHlwZShFZGdlVHlwZTo6SW50ZXJu
YWwpCisgICAgeyB9CisKKyAgICBKU0NlbGwqIGZyb207CisgICAgSlNDZWxsKiB0bzsKKyAgICBF
ZGdlVHlwZSB0eXBlOworfTsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFNuYXBzaG90
QnVpbGRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSGVh
cFNuYXBzaG90QnVpbGRlcihIZWFwUHJvZmlsZXImKTsKKyAgICB+SGVhcFNuYXBzaG90QnVpbGRl
cigpOworCisgICAgc3RhdGljIHVuc2lnbmVkIG5leHRBdmFpbGFibGVPYmplY3RJZGVudGlmaWVy
OworICAgIHN0YXRpYyB1bnNpZ25lZCBnZXROZXh0T2JqZWN0SWRlbnRpZmllcigpOyAgICAKKwor
ICAgIC8vIFBlcmZvcm1zIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHRoYXQgYnVpbGRzIGEgc25hcHNo
b3Qgb2YgYWxsIGxpdmUgY2VsbHMuCisgICAgdm9pZCBidWlsZFNuYXBzaG90KCk7CisKKyAgICAv
LyBBIG1hcmtlZCBjZWxsLgorICAgIHZvaWQgYXBwZW5kTm9kZShKU0NlbGwqKTsKKworICAgIC8v
IEEgcmVmZXJlbmNlIGZyb20gb25lIGNlbGwgdG8gYW5vdGhlci4KKyAgICB2b2lkIGFwcGVuZEVk
Z2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKTsKKworICAgIFN0cmluZyBqc29uKCk7CisgICAg
U3RyaW5nIGpzb24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+
IGFsbG93Tm9kZUNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICAvLyBGaW5hbGl6ZWQgc25hcHNo
b3RzIGFyZSBub3QgbW9kaWZpZWQgZHVyaW5nIGJ1aWxkaW5nLiBTbyBzZWFyY2hpbmcgdGhlbQor
ICAgIC8vIGZvciBhbiBleGlzdGluZyBub2RlIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRo
b3V0IGEgbG9jay4KKyAgICBib29sIGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoSlNDZWxsKik7CisK
KyAgICBIZWFwUHJvZmlsZXImIG1fcHJvZmlsZXI7CisgICAgTG9jayBtX2FwcGVuZGluZ011dGV4
OyAvLyBTbG90VmlzaXRvcnMgcnVuIGluIHBhcmFsbGVsLgorICAgIHN0ZDo6dW5pcXVlX3B0cjxI
ZWFwU25hcHNob3Q+IG1fc25hcHNob3Q7CisgICAgVmVjdG9yPEhlYXBTbmFwc2hvdEVkZ2U+IG1f
ZWRnZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEhlYXBTbmFwc2hv
dEJ1aWxkZXJfaCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApp
bmRleCBiYjIwYWFlLi42NDFlNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3IuY3BwCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2UuaCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJIZWFwU25hcHNo
b3RCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiVk0uaCIKQEAgLTk0LDYgKzk2LDkgQEAgdm9pZCBTbG90
VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKCkKIHsKICAgICBpZiAoaGVhcCgpLT5vcGVyYXRpb25J
blByb2dyZXNzKCkgPT0gRnVsbENvbGxlY3Rpb24pCiAgICAgICAgIEFTU0VSVChtX29wYXF1ZVJv
b3RzLmlzRW1wdHkoKSk7IC8vIFNob3VsZCBoYXZlIG1lcmdlZCBieSBub3cuCisKKyAgICBpZiAo
SGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSB2bSgpLmhlYXBQcm9maWxlcigpKQorICAgICAg
ICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBoZWFwUHJvZmlsZXItPmFjdGl2ZVNuYXBzaG90QnVp
bGRlcigpOwogfQogCiB2b2lkIFNsb3RWaXNpdG9yOjpyZXNldCgpCkBAIC0xMDEsNiArMTA2LDgg
QEAgdm9pZCBTbG90VmlzaXRvcjo6cmVzZXQoKQogICAgIG1fYnl0ZXNWaXNpdGVkID0gMDsKICAg
ICBtX2J5dGVzQ29waWVkID0gMDsKICAgICBtX3Zpc2l0Q291bnQgPSAwOworICAgIG1faGVhcFNu
YXBzaG90QnVpbGRlciA9IG51bGxwdHI7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRDZWxsKTsKICAg
ICBBU1NFUlQobV9zdGFjay5pc0VtcHR5KCkpOwogfQogCkBAIC0xMjEsNiArMTI4LDEwIEBAIHZv
aWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghdmFsdWUg
fHwgIXZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9oZWFwU25h
cHNob3RCdWlsZGVyKQorICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZEVkZ2Uo
bV9jdXJyZW50Q2VsbCwgdmFsdWUuYXNDZWxsKCkpOworCiAgICAgc2V0TWFya2VkQW5kQXBwZW5k
VG9NYXJrU3RhY2sodmFsdWUuYXNDZWxsKCkpOwogfQogCkBAIC0xNTUsMTIgKzE2NiwzNyBAQCB2
b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCiAgICAgbV92
aXNpdENvdW50Kys7CiAgICAgbV9ieXRlc1Zpc2l0ZWQgKz0gTWFya2VkQmxvY2s6OmJsb2NrRm9y
KGNlbGwpLT5jZWxsU2l6ZSgpOwogICAgIG1fc3RhY2suYXBwZW5kKGNlbGwpOworCisgICAgaWYg
KG1faGVhcFNuYXBzaG90QnVpbGRlcikKKyAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5h
cHBlbmROb2RlKGNlbGwpOwogfQogCitjbGFzcyBTZXRDdXJyZW50Q2VsbFNjb3BlIHsKK3B1Ymxp
YzoKKyAgICBTZXRDdXJyZW50Q2VsbFNjb3BlKFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBK
U0NlbGwqIGNlbGwpCisgICAgICAgIDogbV92aXNpdG9yKHZpc2l0b3IpCisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fdmlzaXRvci5tX2N1cnJlbnRDZWxsKTsKKyAgICAgICAgbV92aXNpdG9yLm1f
Y3VycmVudENlbGwgPSBjb25zdF9jYXN0PEpTQ2VsbCo+KGNlbGwpOworICAgIH0KKworICAgIH5T
ZXRDdXJyZW50Q2VsbFNjb3BlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Zpc2l0b3IubV9j
dXJyZW50Q2VsbCk7CisgICAgICAgIG1fdmlzaXRvci5tX2N1cnJlbnRDZWxsID0gbnVsbHB0cjsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgU2xvdFZpc2l0b3ImIG1fdmlzaXRvcjsKK307CisKKwog
QUxXQVlTX0lOTElORSB2b2lkIFNsb3RWaXNpdG9yOjp2aXNpdENoaWxkcmVuKGNvbnN0IEpTQ2Vs
bCogY2VsbCkKIHsKICAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOwogCisgICAgU2V0
Q3VycmVudENlbGxTY29wZSBjdXJyZW50Q2VsbFNjb3BlKCp0aGlzLCBjZWxsKTsKKwogICAgIG1f
Y3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nID0gY2VsbC0+Y2VsbFN0YXRlKCk7
CiAgICAgY2VsbC0+c2V0Q2VsbFN0YXRlKENlbGxTdGF0ZTo6T2xkQmxhY2spOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKaW5kZXggYWRkMjk2NS4uMjZiNjE1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCkBAIC0zNyw2ICsz
Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQ29uc2VydmF0aXZlUm9vdHM7CiBjbGFzcyBH
Q1RocmVhZFNoYXJlZERhdGE7CiBjbGFzcyBIZWFwOworY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRl
cjsKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIEpJVFdyaXRlQmFycmllcjsKIGNsYXNzIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrOwpA
QCAtNDcsNiArNDgsNyBAQCBjbGFzcyBTbG90VmlzaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2xvdFZpc2l0b3IpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCisgICAg
ZnJpZW5kIGNsYXNzIFNldEN1cnJlbnRDZWxsU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIEhlYXBS
b290VmlzaXRvcjsgLy8gQWxsb3dlZCB0byBtYXJrIGEgSlNWYWx1ZSogb3IgSlNDZWxsKiogZGly
ZWN0bHkuCiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7CiAKQEAgLTExMSw2ICsxMTMsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGJvb2wgaXNC
dWlsZGluZ0hlYXBTbmFwc2hvdCgpIGNvbnN0IHsgcmV0dXJuICEhbV9oZWFwU25hcHNob3RCdWls
ZGVyOyB9CisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsTW9kZUVuYWJsZXI7
CiAgICAgCkBAIC0xMzcsNiArMTQxLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBIZWFwJiBtX2hl
YXA7CiAKKyAgICBIZWFwU25hcHNob3RCdWlsZGVyKiBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgeyBu
dWxscHRyIH07CisgICAgSlNDZWxsKiBtX2N1cnJlbnRDZWxsIHsgbnVsbHB0ciB9OworCiAgICAg
Q2VsbFN0YXRlIG1fY3VycmVudE9iamVjdENlbGxTdGF0ZUJlZm9yZVZpc2l0aW5nIHsgQ2VsbFN0
YXRlOjpOZXdXaGl0ZSB9OwogCiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IDMwMDA5
MzkuLmUxNGY2OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCkBAIC0zMiw2ICszMiw4IEBACiAjaW5j
bHVkZSAiRGlzYXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAi
RXhjZXB0aW9uSGVscGVycy5oIgorI2luY2x1ZGUgIkhlYXBQcm9maWxlci5oIgorI2luY2x1ZGUg
IkhlYXBTbmFwc2hvdEJ1aWxkZXIuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlzdGljcy5oIgogI2lu
Y2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgpA
QCAtNDY1LDEyICs0NjcsNjcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8aW50PiBtX3ZlY3RvcjsK
IH07CiAKK2NsYXNzIFNpbXBsZU9iamVjdCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1
YmxpYzoKKyAgICBTaW1wbGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOworICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSBmYWxzZTsKKworICAgIHN0YXRpYyBTaW1wbGVPYmplY3QqIGNyZWF0ZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGNyZWF0ZVN0cnVjdHVyZSh2bSwgZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7
CisgICAgICAgIFNpbXBsZU9iamVjdCogc2ltcGxlT2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8U2ltcGxlT2JqZWN0Pih2bS5oZWFwLCBzaXplb2YoU2ltcGxlT2JqZWN0KSkpIFNp
bXBsZU9iamVjdCh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgc2ltcGxlT2JqZWN0LT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBzaW1wbGVPYmplY3Q7CisgICAgfQorCisgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorICAgIHsKKyAgICAgICAgU2ltcGxlT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGNlbGwpOworICAgICAgICBB
U1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hpZGRlblZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBKU1ZhbHVlIGhpZGRl
blZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2hpZGRlblZhbHVlLmdldCgpOworICAg
IH0KKworICAgIHZvaWQgc2V0SGlkZGVuVmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLmlzQ2VsbCgpKTsKKyAgICAgICAgbV9oaWRkZW5WYWx1
ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKK3By
aXZhdGU6CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faGlkZGVuVmFsdWU7Cit9OworCisK
IGNvbnN0IENsYXNzSW5mbyBFbGVtZW50OjpzX2luZm8gPSB7ICJFbGVtZW50IiwgJkJhc2U6OnNf
aW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFbGVtZW50KSB9OwogY29uc3QgQ2xhc3NJbmZv
IE1hc3F1ZXJhZGVyOjpzX2luZm8gPSB7ICJNYXNxdWVyYWRlciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoTWFzcXVlcmFkZXIpIH07CiBjb25zdCBDbGFzc0luZm8gUm9v
dDo6c19pbmZvID0geyAiUm9vdCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoUm9vdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBJbXB1cmVHZXR0ZXI6OnNfaW5mbyA9IHsgIklt
cHVyZUdldHRlciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW1wdXJl
R2V0dGVyKSB9OwogY29uc3QgQ2xhc3NJbmZvIEN1c3RvbUdldHRlcjo6c19pbmZvID0geyAiQ3Vz
dG9tR2V0dGVyIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShDdXN0b21H
ZXR0ZXIpIH07CiBjb25zdCBDbGFzc0luZm8gUnVudGltZUFycmF5OjpzX2luZm8gPSB7ICJSdW50
aW1lQXJyYXkiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJ1bnRpbWVB
cnJheSkgfTsKK2NvbnN0IENsYXNzSW5mbyBTaW1wbGVPYmplY3Q6OnNfaW5mbyA9IHsgIlNpbXBs
ZU9iamVjdCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoU2ltcGxlT2Jq
ZWN0KSB9OwogCiBFbGVtZW50SGFuZGxlT3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsK
QEAgLTUwMSw2ICs1NTgsOSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblNldEVsZW1lbnRSb290KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVSb290KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVFbGVtZW50KEV4ZWNTdGF0
ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRFbGVt
ZW50KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25DcmVhdGVTaW1wbGVPYmplY3QoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSopOworc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRIaWRkZW5WYWx1ZShF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
UHJpbnQoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvbkRlYnVnKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25EZXNjcmliZShFeGVjU3RhdGUqKTsKQEAgLTU1NSw2ICs2MTUsNyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRXZWJBc3NlbWJs
eShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0
aW9uTG9hZE1vZHVsZShFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGlu
Z1Byb2ZpbGVyKEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqKTsKICNpZiBFTkFCTEUo
U0FNUExJTkdfUFJPRklMRVIpCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2Vz
KEV4ZWNTdGF0ZSopOwpAQCAtNzA4LDYgKzc2OSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFk
ZEZ1bmN0aW9uKHZtLCAiZ2V0RWxlbWVudCIsIGZ1bmN0aW9uR2V0RWxlbWVudCwgMSk7CiAgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0RWxlbWVudFJvb3QiLCBmdW5jdGlvblNldEVsZW1lbnRS
b290LCAyKTsKICAgICAgICAgCisgICAgICAgIGFkZENvbnN0cnVjdGFibGVGdW5jdGlvbih2bSwg
IlNpbXBsZU9iamVjdCIsIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0LCAwKTsKKyAgICAgICAg
YWRkRnVuY3Rpb24odm0sICJnZXRIaWRkZW5WYWx1ZSIsIGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUs
IDEpOworICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNldEhpZGRlblZhbHVlIiwgZnVuY3Rpb25T
ZXRIaWRkZW5WYWx1ZSwgMik7CisgICAgICAgIAogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5j
dGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJERkdUcnVlIiksIDAs
IGZ1bmN0aW9uRmFsc2UxLCBERkdUcnVlSW50cmluc2ljLCBEb250RW51bSk7CiAgICAgICAgIHB1
dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2
bSwgIk9TUkV4aXQiKSwgMCwgZnVuY3Rpb25VbmRlZmluZWQxLCBPU1JFeGl0SW50cmluc2ljLCBE
b250RW51bSk7CiAgICAgICAgIHB1dERpcmVjdE5hdGl2ZUZ1bmN0aW9uKHZtLCB0aGlzLCBJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImlzRmluYWxUaWVyIiksIDAsIGZ1bmN0aW9uRmFsc2Uy
LCBJc0ZpbmFsVGllckludHJpbnNpYywgRG9udEVudW0pOwpAQCAtNzQ3LDYgKzgxMiw3IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJjaGVja01vZHVsZVN5bnRheCIsIGZ1
bmN0aW9uQ2hlY2tNb2R1bGVTeW50YXgsIDEpOwogCiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAi
cGxhdGZvcm1TdXBwb3J0c1NhbXBsaW5nUHJvZmlsZXIiLCBmdW5jdGlvblBsYXRmb3JtU3VwcG9y
dHNTYW1wbGluZ1Byb2ZpbGVyLCAwKTsKKyAgICAgICAgYWRkRnVuY3Rpb24odm0sICJnZW5lcmF0
ZUhlYXBTbmFwc2hvdCIsIGZ1bmN0aW9uR2VuZXJhdGVIZWFwU25hcHNob3QsIDApOwogI2lmIEVO
QUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgYWRkRnVuY3Rpb24odm0sICJzdGFydFNh
bXBsaW5nUHJvZmlsZXIiLCBmdW5jdGlvblN0YXJ0U2FtcGxpbmdQcm9maWxlciwgMCk7CiAgICAg
ICAgIGFkZEZ1bmN0aW9uKHZtLCAic2FtcGxpbmdQcm9maWxlclN0YWNrVHJhY2VzIiwgZnVuY3Rp
b25TYW1wbGluZ1Byb2ZpbGVyU3RhY2tUcmFjZXMsIDApOwpAQCAtMTEzMyw2ICsxMTk5LDI4IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVNpbXBsZU9i
amVjdChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShTaW1wbGVPYmplY3Q6OmNyZWF0ZShleGVjLT52bSgp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvbkdldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBTaW1wbGVPYmplY3QqIHNpbXBsZU9iamVj
dCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKS5hc0NlbGwoKSk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzaW1wbGVPYmplY3QtPmhpZGRlblZhbHVlKCkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIFNp
bXBsZU9iamVjdCogc2ltcGxlT2JqZWN0ID0ganNDYXN0PFNpbXBsZU9iamVjdCo+KGV4ZWMtPmFy
Z3VtZW50KDApLmFzQ2VsbCgpKTsKKyAgICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+YXJndW1lbnQo
MSk7CisgICAgc2ltcGxlT2JqZWN0LT5zZXRIaWRkZW5WYWx1ZShleGVjLT52bSgpLCB2YWx1ZSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVByb3h5KEV4ZWNTdGF0ZSogZXhl
YykKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKQEAgLTE2NDYsNiArMTczNCwxOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uUGxhdGZvcm1TdXBwb3J0c1Nh
bXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKgogI2VuZGlmCiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFwc2hvdChFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7CisKKyAgICBIZWFwU25hcHNob3RCdWls
ZGVyIHNuYXBzaG90QnVpbGRlcihleGVjLT52bSgpLmVuc3VyZUhlYXBQcm9maWxlcigpKTsKKyAg
ICBzbmFwc2hvdEJ1aWxkZXIuYnVpbGRTbmFwc2hvdCgpOworCisgICAgU3RyaW5nIGpzb25TdHJp
bmcgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbigpOworICAgIEVuY29kZWRKU1ZhbHVlIHJlc3VsdCA9
IEpTVmFsdWU6OmVuY29kZShKU09OUGFyc2UoZXhlYywganNvblN0cmluZykpOworICAgIFJFTEVB
U0VfQVNTRVJUKCFleGVjLT5oYWRFeGNlcHRpb24oKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJvZmlsZXIoRXhlY1N0YXRlKiBleGVjKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGRlOTZjYTAuLmUwZTY3YTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiSGVhcEl0
ZXJhdGlvblNjb3BlLmgiCisjaW5jbHVkZSAiSGVhcFByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSG9z
dENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCIKQEAgLTQ0Myw2ICs0NDQsMTMgQEAgV2F0Y2hkb2cmIFZNOjpl
bnN1cmVXYXRjaGRvZygpCiAgICAgcmV0dXJuICptX3dhdGNoZG9nOwogfQogCitIZWFwUHJvZmls
ZXImIFZNOjplbnN1cmVIZWFwUHJvZmlsZXIoKQoreworICAgIGlmICghbV9oZWFwUHJvZmlsZXIp
CisgICAgICAgIG1faGVhcFByb2ZpbGVyID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFwUHJvZmlsZXI+
KCp0aGlzKTsKKyAgICByZXR1cm4gKm1faGVhcFByb2ZpbGVyOworfQorCiAjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQogdm9pZCBWTTo6ZW5zdXJlU2FtcGxpbmdQcm9maWxlcihSZWZQdHI8
U3RvcHdhdGNoPiYmIHN0b3B3YXRjaCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmlu
ZGV4IDc1OWJiZDkuLjYwODA5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAt
ODcsNiArODcsNyBAQCBjbGFzcyBFeGNlcHRpb247CiBjbGFzcyBIYW5kbGVTdGFjazsKIGNsYXNz
IFR5cGVQcm9maWxlcjsKIGNsYXNzIFR5cGVQcm9maWxlckxvZzsKK2NsYXNzIEhlYXBQcm9maWxl
cjsKIGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBJbnRlcnByZXRlcjsKIGNsYXNzIEpTQm91bmRT
bG90QmFzZUZ1bmN0aW9uOwpAQCAtMjQ5LDYgKzI1MCw5IEBAIHB1YmxpYzoKICAgICBKU19FWFBP
UlRfUFJJVkFURSBXYXRjaGRvZyYgZW5zdXJlV2F0Y2hkb2coKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBXYXRjaGRvZyogd2F0Y2hkb2coKSB7IHJldHVybiBtX3dhdGNoZG9nLmdldCgpOyB9CiAK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlcigpIGNvbnN0
IHsgcmV0dXJuIG1faGVhcFByb2ZpbGVyLmdldCgpOyB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SGVhcFByb2ZpbGVyJiBlbnN1cmVIZWFwUHJvZmlsZXIoKTsKKwogI2lmIEVOQUJMRShTQU1QTElO
R19QUk9GSUxFUikKICAgICBKU19FWFBPUlRfUFJJVkFURSBTYW1wbGluZ1Byb2ZpbGVyKiBzYW1w
bGluZ1Byb2ZpbGVyKCkgeyByZXR1cm4gbV9zYW1wbGluZ1Byb2ZpbGVyLmdldCgpOyB9CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBlbnN1cmVTYW1wbGluZ1Byb2ZpbGVyKFJlZlB0cjxTdG9w
d2F0Y2g+JiYpOwpAQCAtNjcyLDYgKzY3Niw3IEBAIHByaXZhdGU6CiAgICAgRGVxdWU8c3RkOjp1
bmlxdWVfcHRyPFF1ZXVlZFRhc2s+PiBtX21pY3JvdGFza1F1ZXVlOwogICAgIE1hbGxvY1B0cjxF
bmNvZGVkSlNWYWx1ZT4gbV9leGNlcHRpb25GdXp6QnVmZmVyOwogICAgIFJlZlB0cjxXYXRjaGRv
Zz4gbV93YXRjaGRvZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcFByb2ZpbGVyPiBtX2hlYXBQ
cm9maWxlcjsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgUmVmUHRyPFNhbXBs
aW5nUHJvZmlsZXI+IG1fc2FtcGxpbmdQcm9maWxlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci55YW1sIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci55YW1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjUwZDNiY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyLnlhbWwKQEAgLTAsMCArMSwyNSBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0gcGF0aDogaGVhcFByb2ZpbGVyCisgIGNtZDogZGVm
YXVsdFJ1bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9m
aWxlci9iYXNpYy1lZGdlcy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJv
ZmlsZXIvYmFzaWMtZWRnZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OTg1YjdhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9o
ZWFwUHJvZmlsZXIvYmFzaWMtZWRnZXMuanMKQEAgLTAsMCArMSw1OCBAQAorbG9hZCgiLi9kcml2
ZXIvZHJpdmVyLmpzIik7CisKK2Z1bmN0aW9uIGV4Y2x1ZGVTdHJ1Y3R1cmUoZWRnZXMpIHsKKyAg
ICByZXR1cm4gZWRnZXMuZmlsdGVyKCh4KSA9PiB4LnRvLmNsYXNzTmFtZSAhPT0gIlN0cnVjdHVy
ZSIpOworfQorCitsZXQgc2ltcGxlT2JqZWN0MU5vZGVJZDsKK2xldCBzaW1wbGVPYmplY3QyTm9k
ZUlkOworCitsZXQgc2ltcGxlT2JqZWN0MSA9IG5ldyBTaW1wbGVPYmplY3Q7CitsZXQgc2ltcGxl
T2JqZWN0MiA9IG5ldyBTaW1wbGVPYmplY3Q7CisKKyhmdW5jdGlvbigpIHsKKyAgICBsZXQgc25h
cHNob3QgPSBjcmVhdGVDaGVhcEhlYXBTbmFwc2hvdCgpOworICAgIGxldCBub2RlcyA9IHNuYXBz
aG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxlT2JqZWN0Iik7CisgICAgYXNzZXJ0KG5vZGVz
Lmxlbmd0aCA9PT0gMiwgIlNuYXBzaG90IHNob3VsZCBjb250YWluIDIgJ1NpbXBsZU9iamVjdCcg
aW5zdGFuY2VzIik7CisgICAgbGV0IHNpbXBsZU9iamVjdDFOb2RlID0gbm9kZXNbMF0ub3V0Z29p
bmdFZGdlcy5sZW5ndGggPT09IDIgPyBub2Rlc1swXSA6IG5vZGVzWzFdOworICAgIGxldCBzaW1w
bGVPYmplY3QyTm9kZSA9IG5vZGVzWzBdLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAxID8gbm9k
ZXNbMF0gOiBub2Rlc1sxXTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5vZGUub3V0Z29pbmdF
ZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIHJlZmVyZW5jZSBvbmx5
IGl0cyBzdHJ1Y3R1cmUiKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0Mk5vZGUub3V0Z29pbmdF
ZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2JqZWN0Micgc2hvdWxkIHJlZmVyZW5jZSBvbmx5
IGl0cyBzdHJ1Y3R1cmUiKTsKK30pKCk7CisKK3NldEhpZGRlblZhbHVlKHNpbXBsZU9iamVjdDEs
IHNpbXBsZU9iamVjdDIpOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3Jl
YXRlQ2hlYXBIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBzbmFwc2hvdC5ub2Rlc1dp
dGhDbGFzc05hbWUoIlNpbXBsZU9iamVjdCIpOworICAgIGFzc2VydChub2Rlcy5sZW5ndGggPT09
IDIsICJTbmFwc2hvdCBzaG91bGQgY29udGFpbiAyICdTaW1wbGVPYmplY3QnIGluc3RhbmNlcyIp
OworICAgIGxldCBzaW1wbGVPYmplY3QxTm9kZSA9IG5vZGVzWzBdLm91dGdvaW5nRWRnZXMubGVu
Z3RoID09PSAyID8gbm9kZXNbMF0gOiBub2Rlc1sxXTsKKyAgICBsZXQgc2ltcGxlT2JqZWN0Mk5v
ZGUgPSBub2Rlc1swXS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMSA/IG5vZGVzWzBdIDogbm9k
ZXNbMV07CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXMubGVuZ3Ro
ID09PSAyLCAiJ3NpbXBsZU9iamVjdDEnIHNob3VsZCByZWZlcmVuY2UgaXRzIHN0cnVjdHVyZSBh
bmQgaGlkZGVuIHZhbHVlIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDJOb2RlLm91dGdvaW5n
RWRnZXMubGVuZ3RoID09PSAxLCAiJ3NpbXBsZU9iamVjdDInIHNob3VsZCByZWZlcmVuY2Ugb25s
eSBpdHMgc3RydWN0dXJlIik7CisgICAgYXNzZXJ0KGV4Y2x1ZGVTdHJ1Y3R1cmUoc2ltcGxlT2Jq
ZWN0MU5vZGUub3V0Z29pbmdFZGdlcylbMF0udG8uaWQgPT09IHNpbXBsZU9iamVjdDJOb2RlLmlk
LCAiJ3NpbXBsZU9iamVjdDEnIHNob3VsZCByZWZlcmVuY2UgJ3NpbXBsZU9iamVjdDInIik7Cisg
ICAgc2ltcGxlT2JqZWN0MU5vZGVJZCA9IHNpbXBsZU9iamVjdDFOb2RlLmlkOworICAgIHNpbXBs
ZU9iamVjdDJOb2RlSWQgPSBzaW1wbGVPYmplY3QyTm9kZS5pZDsKK30pKCk7CisKK3NpbXBsZU9i
amVjdDIgPSBudWxsOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3JlYXRl
Q2hlYXBIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBzbmFwc2hvdC5ub2Rlc1dpdGhD
bGFzc05hbWUoIlNpbXBsZU9iamVjdCIpOworICAgIGFzc2VydChub2Rlcy5sZW5ndGggPT09IDIs
ICJTbmFwc2hvdCBzaG91bGQgY29udGFpbiAyICdTaW1wbGVPYmplY3QnIGluc3RhbmNlcyIpOwor
ICAgIGxldCBzaW1wbGVPYmplY3QxTm9kZSA9IG5vZGVzWzBdLmlkID09PSBzaW1wbGVPYmplY3Qx
Tm9kZUlkID8gbm9kZXNbMF0gOiBub2Rlc1sxXTsKKyAgICBsZXQgc2ltcGxlT2JqZWN0Mk5vZGUg
PSBub2Rlc1swXS5pZCA9PT0gc2ltcGxlT2JqZWN0Mk5vZGVJZCA/IG5vZGVzWzBdIDogbm9kZXNb
MV07CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLmlkID09PSBzaW1wbGVPYmplY3QxTm9k
ZUlkICYmIHNpbXBsZU9iamVjdDJOb2RlLmlkID09PSBzaW1wbGVPYmplY3QyTm9kZUlkLCAibm9k
ZSBpZGVudGlmaWVycyB3ZXJlIG1haW50YWluZWQiKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0
MU5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDIsICInc2ltcGxlT2JqZWN0MScgc2hvdWxk
IHJlZmVyZW5jZSBpdHMgc3RydWN0dXJlIGFuZCBoaWRkZW4gdmFsdWUiKTsKKyAgICBhc3NlcnQo
c2ltcGxlT2JqZWN0Mk5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2Jq
ZWN0Micgc2hvdWxkIHJlZmVyZW5jZSBvbmx5IGl0cyBzdHJ1Y3R1cmUiKTsKKyAgICBhc3NlcnQo
ZXhjbHVkZVN0cnVjdHVyZShzaW1wbGVPYmplY3QxTm9kZS5vdXRnb2luZ0VkZ2VzKVswXS50by5p
ZCA9PT0gc2ltcGxlT2JqZWN0Mk5vZGVJZCwgIidzaW1wbGVPYmplY3QxJyBzaG91bGQgcmVmZXJl
bmNlICdzaW1wbGVPYmplY3QyJyIpOworfSkoKTsKKworc2ltcGxlT2JqZWN0MSA9IG51bGw7CisK
KyhmdW5jdGlvbigpIHsKKyAgICBsZXQgc25hcHNob3QgPSBjcmVhdGVDaGVhcEhlYXBTbmFwc2hv
dCgpOworICAgIGxldCBub2RlcyA9IHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxl
T2JqZWN0Iik7CisgICAgYXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMCwgIlNuYXBzaG90IHNob3Vs
ZCBub3QgY29udGFpbiBhICdTaW1wbGVPYmplY3QnIGluc3RhbmNlIik7Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9iYXNpYy1ub2Rl
cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMtbm9k
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzMzkzNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvYmFz
aWMtbm9kZXMuanMKQEAgLTAsMCArMSw3OCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7
CisKK2Z1bmN0aW9uIGhhc0RpZmZlcmVudFNpemVOb2Rlcyhub2RlcykgeworICAgIGxldCBzZWVu
U2l6ZSA9IG5vZGVzWzBdLnNpemU7CisgICAgZm9yIChsZXQgbm9kZSBvZiBub2RlcykgeworICAg
ICAgICBpZiAobm9kZS5zaXplICE9PSBzZWVuU2l6ZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGhhc0FsbEludGVybmFs
Tm9kZXMobm9kZXMpIHsKKyAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7CisgICAgICAgIGlm
ICghbm9kZS5pbnRlcm5hbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHNvcnRlZChub2RlcykgeworICAgIHJldHVybiBu
b2Rlcy5zb3J0KChhLCBiKSA9PiBhLmlkIC0gYi5pZCk7Cit9CisKK2xldCBzaW1wbGVPYmplY3Qx
Tm9kZUlkOworbGV0IHNpbXBsZU9iamVjdDJOb2RlSWQ7CisKKyhmdW5jdGlvbigpIHsKKyAgICBs
ZXQgc25hcHNob3QgPSBjcmVhdGVDaGVhcEhlYXBTbmFwc2hvdCgpOworICAgIGFzc2VydChzbmFw
c2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoImdsb2JhbCIpLmxlbmd0aCA9PT0gMSwgIlNuYXBzaG90
IHNob3VsZCBjb250YWluIGEgc2luZ2xlICdnbG9iYWwnIG5vZGUiKTsKKyAgICBhc3NlcnQoc25h
cHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTdHJ1Y3R1cmUiKS5sZW5ndGggPiAwLCAiU25hcHNo
b3Qgc2hvdWxkIGNvbnRhaW4gJ1N0cnVjdHVyZScgbm9kZXMiKTsKKyAgICBhc3NlcnQoc25hcHNo
b3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJUaGlzQ2xhc3NOYW1lRG9lc05vdEV4aXN0IikubGVuZ3Ro
ID09PSAwLCAiU25hcHNob3Qgc2hvdWxkIG5vdCBjb250YWluICdUaGlzQ2xhc3NOYW1lRG9lc05v
dEV4aXN0JyBub2RlcyIpOworCisgICAgbGV0IHN0cmluZ3MgPSBzbmFwc2hvdC5ub2Rlc1dpdGhD
bGFzc05hbWUoInN0cmluZyIpOworICAgIGFzc2VydChzdHJpbmdzLmxlbmd0aCA+IDAsICJTbmFw
c2hvdCBzaG91bGQgY29udGFpbiAnc3RyaW5nJyBub2RlcyIpOworICAgIGFzc2VydChoYXNEaWZm
ZXJlbnRTaXplTm9kZXMoc3RyaW5ncyksICInc3RyaW5nJyBub2RlcyBzaG91bGQgaGF2ZSBkaWZm
ZXJlbnQgc2l6ZXMiKTsKKworICAgIGxldCBuYXRpdmVFeGVjdXRhYmxlcyA9IHNuYXBzaG90Lm5v
ZGVzV2l0aENsYXNzTmFtZSgiTmF0aXZlRXhlY3V0YWJsZSIpOworICAgIGFzc2VydChuYXRpdmVF
eGVjdXRhYmxlcy5sZW5ndGggPiAwLCAiU25hcHNob3Qgc2hvdWxkIGNvbnRhaW4gJ05hdGl2ZUV4
ZWN1dGFibGUnIG5vZGVzIik7CisgICAgYXNzZXJ0KCFoYXNEaWZmZXJlbnRTaXplTm9kZXMobmF0
aXZlRXhlY3V0YWJsZXMpLCAiJ05hdGl2ZUV4ZWN1dGFibGUnIG5vZGVzIHNob3VsZCBhbGwgYmUg
dGhlIHNhbWUgc2l6ZSIpOworICAgIGFzc2VydChoYXNBbGxJbnRlcm5hbE5vZGVzKG5hdGl2ZUV4
ZWN1dGFibGVzKSwgIidOYXRpdmVFeGVjdXRhYmxlJyBub2RlcyBzaG91bGQgYWxsIGJlIGludGVy
bmFsIik7CisKKyAgICBhc3NlcnQoc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVP
YmplY3QiKS5sZW5ndGggPT09IDAsICJTbmFwc2hvdCBzaG91bGQgbm90IGNvbnRhaW4gYSAnU2lt
cGxlT2JqZWN0JyBpbnN0YW5jZSIpOworfSkoKTsKKworbGV0IHNpbXBsZU9iamVjdDEgPSBuZXcg
U2ltcGxlT2JqZWN0OworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3JlYXRl
Q2hlYXBIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBzb3J0ZWQoc25hcHNob3Qubm9k
ZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3QiKSk7CisgICAgbGV0IFtzaW1wbGVPYmplY3Qx
Tm9kZV0gPSBub2RlczsKKyAgICBzaW1wbGVPYmplY3QxTm9kZUlkID0gbm9kZXNbMF0uaWQ7Cisg
ICAgYXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMSwgIlNuYXBzaG90IHNob3VsZCBjb250YWluIDEg
J1NpbXBsZU9iamVjdCcgaW5zdGFuY2UiKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5vZGUu
b3V0Z29pbmdFZGdlcy5sZW5ndGggPT09IDEsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIG9ubHkg
cmVmZXJlbmNlIGl0cyBzdHJ1Y3R1cmUiKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5vZGUu
b3V0Z29pbmdFZGdlc1swXS50by5jbGFzc05hbWUgPT09ICJTdHJ1Y3R1cmUiLCAiJ3NpbXBsZU9i
amVjdDEnIHNob3VsZCByZWZlcmVuY2UgYSBTdHJ1Y3R1cmUiKTsKK30pKCk7CisKK2xldCBzaW1w
bGVPYmplY3RMaXN0ID0gW107Citmb3IgKGxldCBpID0gMDsgaSA8IDEyMzQ7ICsraSkKKyAgICBz
aW1wbGVPYmplY3RMaXN0LnB1c2gobmV3IFNpbXBsZU9iamVjdCk7CisKKyhmdW5jdGlvbigpIHsK
KyAgICBsZXQgc25hcHNob3QgPSBjcmVhdGVDaGVhcEhlYXBTbmFwc2hvdCgpOworICAgIGxldCBu
b2RlcyA9IHNvcnRlZChzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIlNpbXBsZU9iamVjdCIp
KTsKKyAgICBzaW1wbGVPYmplY3QxTm9kZUlkID0gbm9kZXNbMF0uaWQ7CisgICAgc2ltcGxlT2Jq
ZWN0Mk5vZGVJZCA9IG5vZGVzWzFdLmlkOworICAgIGFzc2VydChub2Rlcy5sZW5ndGggPT09IDEy
MzUsICJTbmFwc2hvdCBzaG91bGQgY29udGFpbiAxMjM1ICdTaW1wbGVPYmplY3QnIGluc3RhbmNl
cyIpOworICAgIGFzc2VydChub2Rlc1swXS5pZCA9PT0gc2ltcGxlT2JqZWN0MU5vZGVJZCwgIidz
aW1wbGVPYmplY3QxJyBzaG91bGQgbWFpbnRhaW4gdGhlIHNhbWUgaWRlbnRpZmllciIpOworICAg
IGFzc2VydChzaW1wbGVPYmplY3QxTm9kZUlkIDwgc2ltcGxlT2JqZWN0Mk5vZGVJZCwgIm5vZGUg
aWRlbnRpZmllcnMgc2hvdWxkIGFsd2F5cyBpbmNyZWFzZSBhY3Jvc3Mgc25hcHNob3RzIik7Cit9
KSgpOworCitzaW1wbGVPYmplY3QxID0gbnVsbDsKK3NpbXBsZU9iamVjdExpc3QuZmlsbChudWxs
KTsKKworKGZ1bmN0aW9uKCkgeworICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUNoZWFwSGVhcFNu
YXBzaG90KCk7CisgICAgbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJT
aW1wbGVPYmplY3QiKTsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAwLCAiU25hcHNob3Qg
c2hvdWxkIG5vdCBjb250YWluIGEgJ1NpbXBsZU9iamVjdCcgaW5zdGFuY2UiKTsKK30pKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2RyaXZl
ci9kcml2ZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2Y2E4
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJv
ZmlsZXIvZHJpdmVyL2RyaXZlci5qcwpAQCAtMCwwICsxLDI0MiBAQAorZnVuY3Rpb24gYXNzZXJ0
KGNvbmRpdGlvbiwgcmVhc29uKSB7CisgICAgaWYgKCFjb25kaXRpb24pCisgICAgICAgIHRocm93
IG5ldyBFcnJvcihyZWFzb24pOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLQorLy8gQ2hlYXBI
ZWFwU25hcHNob3QKKy8vCisvLyBDb250YWlucyB0d28gbGFyZ2UgbGlzdHMgb2YgYWxsIG5vZGUg
ZGF0YSBhbmQgYWxsIGVkZ2UgZGF0YS4KKy8vIExhemlseSBjcmVhdGVzIG5vZGUgYW5kIGVkZ2Ug
b2JqZWN0cyBvZmYgb2YgaW5kZXhlcyBpbnRvIHRoZXNlIGxpc3RzLgorCisvLyBbPDA6aWQ+LCA8
MTpzaXplPiwgPDI6Y2xhc3NOYW1lVGFibGVJbmRleD4sIDwzOmludGVybmFsPiwgPDQ6Zmlyc3RF
ZGdlSW5kZXg+XTsKK2NvbnN0IG5vZGVGaWVsZENvdW50ID0gNTsKK2NvbnN0IG5vZGVJZE9mZnNl
dCA9IDA7Citjb25zdCBub2RlU2l6ZU9mZnNldCA9IDE7Citjb25zdCBub2RlQ2xhc3NOYW1lT2Zm
c2V0ID0gMjsKK2NvbnN0IG5vZGVJbnRlcm5hbE9mZnNldCA9IDM7Citjb25zdCBub2RlRmlyc3RF
ZGdlT2Zmc2V0ID0gNDsKK2NvbnN0IG5vZGVOb0VkZ2VWYWx1ZSA9IDB4ZmZmZmZmZmY7IC8vIFVJ
TlRfTUFYCisKKy8vIFs8MDpmcm9tLWlkPiwgPDE6dG8taWQ+LCA8Mjp0eXBlVGFibGVJbmRleD4s
IDwzOmRhdGE+XQorY29uc3QgZWRnZUZpZWxkQ291bnQgPSA0OworY29uc3QgZWRnZUZyb21JZE9m
ZnNldCA9IDA7Citjb25zdCBlZGdlVG9JZE9mZnNldCA9IDE7Citjb25zdCBlZGdlVHlwZU9mZnNl
dCA9IDI7Citjb25zdCBlZGdlRGF0YU9mZnNldCA9IDM7CisKK0NoZWFwSGVhcFNuYXBzaG90Tm9k
ZSA9IGNsYXNzIENoZWFwSGVhcFNuYXBzaG90Tm9kZQoreworICAgIGNvbnN0cnVjdG9yKHNuYXBz
aG90LCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBhc3NlcnQoKG5vZGVJbmRleCAlIG5vZGVG
aWVsZENvdW50KSA9PT0gMCwgIkJhZCBOb2RlIEluZGV4OiAiICsgbm9kZUluZGV4KTsKKworICAg
ICAgICBsZXQgbm9kZXMgPSBzbmFwc2hvdC5ub2RlczsKKyAgICAgICAgdGhpcy5pZCA9IG5vZGVz
W25vZGVJbmRleCArIG5vZGVJZE9mZnNldF07CisgICAgICAgIHRoaXMuc2l6ZSA9IG5vZGVzW25v
ZGVJbmRleCArIG5vZGVTaXplT2Zmc2V0XTsKKyAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBzbmFw
c2hvdC5jbGFzc05hbWVGcm9tVGFibGVJbmRleChub2Rlc1tub2RlSW5kZXggKyBub2RlQ2xhc3NO
YW1lT2Zmc2V0XSk7CisgICAgICAgIHRoaXMuaW50ZXJuYWwgPSBub2Rlc1tub2RlSW5kZXggKyBu
b2RlSW50ZXJuYWxPZmZzZXRdID8gdHJ1ZSA6IGZhbHNlOworCisgICAgICAgIHRoaXMub3V0Z29p
bmdFZGdlcyA9IFtdOworICAgICAgICBsZXQgZmlyc3RFZGdlSW5kZXggPSBub2Rlc1tub2RlSW5k
ZXggKyBub2RlRmlyc3RFZGdlT2Zmc2V0XTsKKyAgICAgICAgaWYgKGZpcnN0RWRnZUluZGV4ICE9
PSBub2RlTm9FZGdlVmFsdWUpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSBmaXJzdEVkZ2VJ
bmRleDsgaSA8IHNuYXBzaG90LmVkZ2VzLmxlbmd0aDsgaSArPSBlZGdlRmllbGRDb3VudCkgewor
ICAgICAgICAgICAgICAgIGlmIChzbmFwc2hvdC5lZGdlc1tpICsgZWRnZUZyb21JZE9mZnNldF0g
IT09IHRoaXMuaWQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IHRoaXMub3V0Z29pbmdFZGdlcy5wdXNoKG5ldyBDaGVhcEhlYXBTbmFwc2hvdEVkZ2Uoc25hcHNo
b3QsIGkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworQ2hlYXBIZWFw
U25hcHNob3RFZGdlID0gY2xhc3MgQ2hlYXBIZWFwU25hcHNob3RFZGdlCit7CisgICAgY29uc3Ry
dWN0b3Ioc25hcHNob3QsIGVkZ2VJbmRleCkKKyAgICB7CisgICAgICAgIGFzc2VydCgoZWRnZUlu
ZGV4ICUgZWRnZUZpZWxkQ291bnQpID09PSAwLCAiQmFkIEVkZ2UgSW5kZXg6ICIgKyBlZGdlSW5k
ZXgpOworICAgICAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7CisKKyAgICAgICAgbGV0IGVk
Z2VzID0gc25hcHNob3QuZWRnZXM7CisgICAgICAgIHRoaXMuZnJvbUlkID0gZWRnZXNbZWRnZUlu
ZGV4ICsgZWRnZUZyb21JZE9mZnNldF07CisgICAgICAgIHRoaXMudG9JZCA9IGVkZ2VzW2VkZ2VJ
bmRleCArIGVkZ2VUb0lkT2Zmc2V0XTsKKyAgICAgICAgdGhpcy50eXBlID0gc25hcHNob3QuZWRn
ZVR5cGVGcm9tVGFibGVJbmRleChlZGdlc1tlZGdlSW5kZXggKyBlZGdlVHlwZU9mZnNldF0pOwor
ICAgICAgICB0aGlzLmRhdGEgPSBlZGdlc1tlZGdlSW5kZXggKyBlZGdlRGF0YU9mZnNldF07Cisg
ICAgfQorCisgICAgZ2V0IGZyb20oKSB7IHJldHVybiB0aGlzLnNuYXBzaG90Lm5vZGVXaXRoSWRl
bnRpZmllcih0aGlzLmZyb21JZCk7IH0KKyAgICBnZXQgdG8oKSB7IHJldHVybiB0aGlzLnNuYXBz
aG90Lm5vZGVXaXRoSWRlbnRpZmllcih0aGlzLnRvSWQpOyB9Cit9CisKK0NoZWFwSGVhcFNuYXBz
aG90ID0gY2xhc3MgQ2hlYXBIZWFwU25hcHNob3QKK3sKKyAgICBjb25zdHJ1Y3Rvcihqc29uKQor
ICAgIHsKKyAgICAgICAgbGV0IHtub2Rlcywgbm9kZUNsYXNzTmFtZXMsIGVkZ2VzLCBlZGdlVHlw
ZXN9ID0ganNvbjsKKworICAgICAgICB0aGlzLl9ub2RlcyA9IG5ldyBVaW50MzJBcnJheShub2Rl
cy5sZW5ndGggKiBub2RlRmllbGRDb3VudCk7CisgICAgICAgIHRoaXMuX2VkZ2VzID0gbmV3IFVp
bnQzMkFycmF5KGVkZ2VzLmxlbmd0aCAqIGVkZ2VGaWVsZENvdW50KTsKKyAgICAgICAgdGhpcy5f
bm9kZUlkZW50aWZpZXJUb0luZGV4ID0gbmV3IE1hcDsgLy8gPGlkPiA9PiBpbmRleCBpbiBfbm9k
ZXMKKworICAgICAgICB0aGlzLl9lZGdlVHlwZXNUYWJsZSA9IGVkZ2VUeXBlczsKKyAgICAgICAg
dGhpcy5fbm9kZUNsYXNzTmFtZXNUYWJsZSA9IG5vZGVDbGFzc05hbWVzOworCisgICAgICAgIGxl
dCBuID0gMDsKKyAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZVBheWxvYWQpID0+IHsKKyAgICAg
ICAgICAgIGxldCBbaWQsIHNpemUsIGNsYXNzTmFtZVRhYmxlSW5kZXgsIGludGVybmFsXSA9IG5v
ZGVQYXlsb2FkOworICAgICAgICAgICAgdGhpcy5fbm9kZUlkZW50aWZpZXJUb0luZGV4LnNldChp
ZCwgbik7CisgICAgICAgICAgICB0aGlzLl9ub2Rlc1tuKytdID0gaWQ7CisgICAgICAgICAgICB0
aGlzLl9ub2Rlc1tuKytdID0gc2l6ZTsKKyAgICAgICAgICAgIHRoaXMuX25vZGVzW24rK10gPSBj
bGFzc05hbWVUYWJsZUluZGV4OworICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IGludGVy
bmFsOworICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IG5vZGVOb0VkZ2VWYWx1ZTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgbGV0IGUgPSAwOworICAgICAgICBsZXQgbGFzdE5vZGVJZGVu
dGlmaWVyID0gLTE7CisgICAgICAgIGVkZ2VzLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5m
b3JFYWNoKChlZGdlUGF5bG9hZCkgPT4geworICAgICAgICAgICAgbGV0IFtmcm9tSWRlbnRpZmll
ciwgdG9JZGVudGlmaWVyLCBlZGdlVHlwZVRhYmxlSW5kZXgsIGRhdGFdID0gZWRnZVBheWxvYWQ7
CisgICAgICAgICAgICBpZiAoZnJvbUlkZW50aWZpZXIgIT09IGxhc3ROb2RlSWRlbnRpZmllcikg
eworICAgICAgICAgICAgICAgIGxldCBub2RlSW5kZXggPSB0aGlzLl9ub2RlSWRlbnRpZmllclRv
SW5kZXguZ2V0KGZyb21JZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQodGhpcy5f
bm9kZXNbbm9kZUluZGV4ICsgbm9kZUlkT2Zmc2V0XSA9PT0gZnJvbUlkZW50aWZpZXIsICJOb2Rl
IGxvb2t1cCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9ub2Rlc1tub2RlSW5kZXgg
KyBub2RlRmlyc3RFZGdlT2Zmc2V0XSA9IGU7CisgICAgICAgICAgICAgICAgbGFzdE5vZGVJZGVu
dGlmaWVyID0gZnJvbUlkZW50aWZpZXI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlz
Ll9lZGdlc1tlKytdID0gZnJvbUlkZW50aWZpZXI7CisgICAgICAgICAgICB0aGlzLl9lZGdlc1tl
KytdID0gdG9JZGVudGlmaWVyOworICAgICAgICAgICAgdGhpcy5fZWRnZXNbZSsrXSA9IGVkZ2VU
eXBlVGFibGVJbmRleDsKKyAgICAgICAgICAgIHRoaXMuX2VkZ2VzW2UrK10gPSBkYXRhOworICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICBnZXQgbm9kZXMoKSB7IHJldHVybiB0aGlzLl9ub2Rlczsg
fQorICAgIGdldCBlZGdlcygpIHsgcmV0dXJuIHRoaXMuX2VkZ2VzOyB9CisKKyAgICBub2RlV2l0
aElkZW50aWZpZXIoaWQpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IENoZWFwSGVhcFNuYXBz
aG90Tm9kZSh0aGlzLCB0aGlzLl9ub2RlSWRlbnRpZmllclRvSW5kZXguZ2V0KGlkKSk7CisgICAg
fQorCisgICAgbm9kZXNXaXRoQ2xhc3NOYW1lKGNsYXNzTmFtZSkKKyAgICB7CisgICAgICAgIGxl
dCByZXN1bHQgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9ub2Rlcy5s
ZW5ndGg7IGkgKz0gbm9kZUZpZWxkQ291bnQpIHsKKyAgICAgICAgICAgIGxldCBjbGFzc05hbWVU
YWJsZUluZGV4ID0gdGhpcy5fbm9kZXNbaSArIG5vZGVDbGFzc05hbWVPZmZzZXRdOworICAgICAg
ICAgICAgaWYgKHRoaXMuY2xhc3NOYW1lRnJvbVRhYmxlSW5kZXgoY2xhc3NOYW1lVGFibGVJbmRl
eCkgPT09IGNsYXNzTmFtZSkKKyAgICAgICAgICAgICAgICByZXN1bHQucHVzaChuZXcgQ2hlYXBI
ZWFwU25hcHNob3ROb2RlKHRoaXMsIGkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGNsYXNzTmFtZUZyb21UYWJsZUluZGV4KHRhYmxlSW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbm9kZUNsYXNzTmFtZXNUYWJsZVt0YWJsZUluZGV4
XTsKKyAgICB9CisKKyAgICBlZGdlVHlwZUZyb21UYWJsZUluZGV4KHRhYmxlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fZWRnZVR5cGVzVGFibGVbdGFibGVJbmRleF07CisgICAg
fQorfQorCitmdW5jdGlvbiBjcmVhdGVDaGVhcEhlYXBTbmFwc2hvdCgpIHsKKyAgICBsZXQganNv
biA9IGdlbmVyYXRlSGVhcFNuYXBzaG90KCk7CisKKyAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBu
b2RlQ2xhc3NOYW1lcywgZWRnZXMsIGVkZ2VUeXBlc30gPSBqc29uOworICAgIGFzc2VydCh2ZXJz
aW9uID09PSAxLCAiSGVhcCBTbmFwc2hvdCBwYXlsb2FkIHNob3VsZCBiZSB2ZXJzaW9uIDEiKTsK
KyAgICBhc3NlcnQobm9kZXMubGVuZ3RoLCAiSGVhcCBTbmFwc2hvdCBzaG91bGQgaGF2ZSBub2Rl
cyIpOworICAgIGFzc2VydChub2RlQ2xhc3NOYW1lcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNo
b3VsZCBoYXZlIG5vZGVDbGFzc05hbWVzIik7CisgICAgYXNzZXJ0KGVkZ2VzLmxlbmd0aCwgIkhl
YXAgU25hcHNob3Qgc2hvdWxkIGhhdmUgZWRnZXMiKTsKKyAgICBhc3NlcnQoZWRnZVR5cGVzLmxl
bmd0aCwgIkhlYXAgU25hcHNob3Qgc2hvdWxkIGhhdmUgZWRnZVR5cGVzIik7CisKKyAgICByZXR1
cm4gbmV3IENoZWFwSGVhcFNuYXBzaG90KGpzb24pOworfQorCisKKy8vIC0tLS0tLS0tLS0tLQor
Ly8gSGVhcFNuYXBzaG90CisvLworLy8gVGhpcyBjcmVhdGVzIGEgbG90IG9mIG9iamVjdHMgdGhh
dCBtYWtlIGl0IGVhc3kgdG8gd2FsayB0aGUgZW50aXJlIG5vZGUgZ3JhcGgKKy8vIChpbmNvbWlu
ZyBhbmQgb3V0Z29pbmcgZWRnZXMpLiBIb3dldmVyIHdoZW4gYSB0ZXN0IGNyZWF0ZXMgbXVsdGlw
bGUgc25hcHNob3RzCisvLyB3aXRoIHNuYXBzaG90cyBpbiBzY29wZSB0aGlzIGNhbiBxdWlja2x5
IGV4cGxvZGUgaW50byBhIHNuYXBzaG90IHdpdGggYSBtYXNzaXZlCisvLyBudW1iZXIgb2Ygbm9k
ZXMvZWRnZXMuIEZvciBzdWNoIGNhc2VzIGNyZWF0ZSBDaGVhcEhlYXBTbmFwc2hvdHMsIHdoaWNo
IGNyZWF0ZQorLy8gYSB2ZXJ5IHNtYWxsIG51bWJlciBvZiBvYmplY3RzIHBlciBIZWFwIFNuYXBz
aG90LgorCitIZWFwU25hcHNob3ROb2RlID0gY2xhc3MgSGVhcFNuYXBzaG90Tm9kZQoreworICAg
IGNvbnN0cnVjdG9yKGlkLCBjbGFzc05hbWUsIHNpemUsIGludGVybmFsKQorICAgIHsKKyAgICAg
ICAgdGhpcy5pZCA9IGlkOworICAgICAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAg
ICAgICAgdGhpcy5zaXplID0gc2l6ZTsgCisgICAgICAgIHRoaXMuaW50ZXJuYWwgPSBpbnRlcm5h
bDsKKyAgICAgICAgdGhpcy5pbmNvbWluZ0VkZ2VzID0gW107CisgICAgICAgIHRoaXMub3V0Z29p
bmdFZGdlcyA9IFtdOworICAgIH0KK30KKworSGVhcFNuYXBzaG90RWRnZSA9IGNsYXNzIEhlYXBT
bmFwc2hvdEVkZ2UKK3sKKyAgICBjb25zdHJ1Y3Rvcihmcm9tLCB0bywgdHlwZSwgZGF0YSkKKyAg
ICB7CisgICAgICAgIHRoaXMuZnJvbSA9IGZyb207CisgICAgICAgIHRoaXMudG8gPSB0bzsKKyAg
ICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICAgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICB9
Cit9CisKK0hlYXBTbmFwc2hvdCA9IGNsYXNzIEhlYXBTbmFwc2hvdAoreworICAgIGNvbnN0cnVj
dG9yKGpzb24pCisgICAgeyAgICAgICAgCisgICAgICAgIGxldCB7dmVyc2lvbiwgbm9kZXMsIG5v
ZGVDbGFzc05hbWVzLCBlZGdlcywgZWRnZVR5cGVzfSA9IGpzb247CisKKyAgICAgICAgdGhpcy5u
b2RlTWFwID0gbmV3IE1hcDsKKworICAgICAgICB0aGlzLm5vZGVzID0gbm9kZXMubWFwKChub2Rl
UGF5bG9hZCkgPT4geworICAgICAgICAgICAgbGV0IFtpZCwgc2l6ZSwgY2xhc3NOYW1lSW5kZXgs
IGludGVybmFsXSA9IG5vZGVQYXlsb2FkOworICAgICAgICAgICAgbGV0IG5vZGUgPSBuZXcgSGVh
cFNuYXBzaG90Tm9kZShpZCwgbm9kZUNsYXNzTmFtZXNbY2xhc3NOYW1lSW5kZXhdLCBzaXplLCBp
bnRlcm5hbCk7CisgICAgICAgICAgICB0aGlzLm5vZGVNYXAuc2V0KGlkLCBub2RlKTsKKyAgICAg
ICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9KTsKKworICAgICAgICBlZGdlcy5tYXAoKGVk
Z2VQYXlsb2FkKSA9PiB7CisgICAgICAgICAgICBsZXQgW2Zyb21JZGVudGlmaWVyLCB0b0lkZW50
aWZpZXIsIGVkZ2VUeXBlSW5kZXgsIGRhdGFdID0gZWRnZVBheWxvYWQ7CisgICAgICAgICAgICBs
ZXQgZnJvbSA9IHRoaXMubm9kZU1hcC5nZXQoZnJvbUlkZW50aWZpZXIpOworICAgICAgICAgICAg
bGV0IHRvID0gdGhpcy5ub2RlTWFwLmdldCh0b0lkZW50aWZpZXIpOworICAgICAgICAgICAgYXNz
ZXJ0KGZyb20sICJNaXNzaW5nIG5vZGUgZm9yIGBmcm9tYCBwYXJ0IG9mIGVkZ2UiKTsKKyAgICAg
ICAgICAgIGFzc2VydCh0bywgIk1pc3Npbmcgbm9kZSBmb3IgYHRvYCBwYXJ0IG9mIGVkZ2UiKTsK
KyAgICAgICAgICAgIGxldCBlZGdlID0gbmV3IEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIGVk
Z2VUeXBlc1tlZGdlVHlwZUluZGV4XSwgZGF0YSk7CisgICAgICAgICAgICBmcm9tLm91dGdvaW5n
RWRnZXMucHVzaChlZGdlKTsKKyAgICAgICAgICAgIHRvLmluY29taW5nRWRnZXMucHVzaChlZGdl
KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdGhpcy5yb290Tm9kZSA9IHRoaXMubm9kZU1hcC5n
ZXQoMCk7CisgICAgICAgIGFzc2VydCh0aGlzLnJvb3ROb2RlLCAiTWlzc2luZyA8cm9vdD4gbm9k
ZSB3aXRoIGlkZW50aWZpZXIgMCIpOworICAgICAgICBhc3NlcnQodGhpcy5yb290Tm9kZS5vdXRn
b2luZ0VkZ2VzLmxlbmd0aCA+IDAsICI8cm9vdD4gc2hvdWxkIGhhdmUgY2hpbGRyZW4iKTsKKyAg
ICAgICAgYXNzZXJ0KHRoaXMucm9vdE5vZGUuaW5jb21pbmdFZGdlcy5sZW5ndGggPT09IDAsICI8
cm9vdD4gc2hvdWxkIG5vdCBoYXZlIGJhY2sgcmVmZXJlbmNlcyIpOworICAgIH0KKworICAgIG5v
ZGVzV2l0aENsYXNzTmFtZShjbGFzc05hbWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0g
W107CisgICAgICAgIGZvciAobGV0IG5vZGUgb2YgdGhpcy5ub2RlcykgeworICAgICAgICAgICAg
aWYgKG5vZGUuY2xhc3NOYW1lID09PSBjbGFzc05hbWUpCisgICAgICAgICAgICAgICAgcmVzdWx0
LnB1c2gobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIGNyZWF0ZUhlYXBTbmFwc2hvdCgpIHsKKyAgICBsZXQganNvbiA9IGdlbmVy
YXRlSGVhcFNuYXBzaG90KCk7CisKKyAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBub2RlQ2xhc3NO
YW1lcywgZWRnZXMsIGVkZ2VUeXBlc30gPSBqc29uOworICAgIGFzc2VydCh2ZXJzaW9uID09PSAx
LCAiSGVhcCBTbmFwc2hvdCBwYXlsb2FkIHNob3VsZCBiZSB2ZXJzaW9uIDEiKTsKKyAgICBhc3Nl
cnQobm9kZXMubGVuZ3RoLCAiSGVhcCBTbmFwc2hvdCBzaG91bGQgaGF2ZSBub2RlcyIpOworICAg
IGFzc2VydChub2RlQ2xhc3NOYW1lcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNob3VsZCBoYXZl
IG5vZGVDbGFzc05hbWVzIik7CisgICAgYXNzZXJ0KGVkZ2VzLmxlbmd0aCwgIkhlYXAgU25hcHNo
b3Qgc2hvdWxkIGhhdmUgZWRnZXMiKTsKKyAgICBhc3NlcnQoZWRnZVR5cGVzLmxlbmd0aCwgIkhl
YXAgU25hcHNob3Qgc2hvdWxkIGhhdmUgZWRnZVR5cGVzIik7CisKKyAgICByZXR1cm4gbmV3IEhl
YXBTbmFwc2hvdChqc29uKTsKK30K
</data>
<flag name="review"
          id="297383"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="297384"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272616</attachid>
            <date>2016-03-01 17:26:16 -0800</date>
            <delta_ts>2016-03-02 16:08:06 -0800</delta_ts>
            <desc>[PATCH] Add Edge Data - Snapshot Property Names / Indexes / Variable Names</desc>
            <filename>snapshot-properties-1.patch</filename>
            <type>text/plain</type>
            <size>28727</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDM3YjJhYWMuLmIxMzYxZWFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKQEAgLTUsNiArNSw2NCBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogCisgICAgICAgICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6YXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpT
bG90VmlzaXRvcjo6YXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVydGllcyk6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjpzbmFwc2hvdFByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpzbmFwc2hvdFZhcmlhYmxlTmFtZSk6CisgICAgICAgICogaGVhcC9TbG90
VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRIaWRkZW4pOgorICAgICAgICAoSlNDOjpTbG90Vmlz
aXRvcjo6YXBwZW5kVmFsdWVzSGlkZGVuKToKKyAgICAgICAgQWRkIG5ldyB2aXNpdCBtZXRob2Rz
IHRvIGJlIHVzZWQgZHVyaW5nIGhlYXAgc25hcHNob3R0aW5nIHRvCisgICAgICAgIGNhcHR1cmUg
ZXh0cmEgZGF0YSB3aGVuIHZpc2l0aW5nIGEgcmVmZXJlbmNlLgorCisgICAgICAgICogaGVhcC9I
ZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRl
cjo6YXBwZW5kUHJvcGVydHlOYW1lRWRnZSk6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1
aWxkZXI6OmFwcGVuZFZhcmlhYmxlTmFtZUVkZ2UpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNo
b3RCdWlsZGVyOjphcHBlbmRJbmRleEVkZ2UpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RC
dWlsZGVyOjpqc29uKToKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaDoKKyAg
ICAgICAgKEpTQzo6SGVhcFNuYXBzaG90RWRnZTo6SGVhcFNuYXBzaG90RWRnZSk6CisgICAgICAg
IENvbnN0cnVjdCBlZGdlcyB3aXRoIGV4dHJhIGRhdGEuCisKKyAgICAgICAgKiBydW50aW1lL0pT
RW52aXJvbm1lbnRSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU0Vudmlyb25tZW50UmVjb3Jk
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgQ2FwdHVyZSBzY29wZSB2YXJpYWJsZSBuYW1lcyB3aGVuIGhl
YXAgc25hcHNob3R0aW5nLgorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNGaW5hbE9iamVjdDo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICBDYXB0dXJl
IG9iamVjdCBwcm9wZXJ0eSBuYW1lcyBhbmQgaW5kZXggbmFtZXMgd2hlbiBoZWFwIHNuYXBzaG90
dGluZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUpOgorICAgICAgICBXaGVuIHBlcmZvcm1pbmcgYSBoZWFw
IHNuYXBzaG90dGluZyBjb2xsZWN0aW9uLCBkb24ndCBjbGVhciB0aGUKKyAgICAgICAgcHJvcGVy
dHkgdGFibGUsIHNvIHRoYXQgYWNjZXNzaW5nIHRoZSB0YWJsZSBkdXJpbmcgdGhpcyBHQyBpcyBv
a2F5LgorICAgICAgICBXaGVuIHNuYXBzaG90dGluZywgd2Ugd291bGQgcHJlZmVyIGl0ZXJhdGlu
ZyB0aGUgcHJvcGVydHkgdGFibGUKKyAgICAgICAgZm9yIHByb3BlcnR5IG5hbWVzLCBpbnN0ZWFk
IG9mIGFsd2F5cyB3YWxraW5nIHRoZSBzdHJ1Y3R1cmUgY2hhaW4uCisKKyAgICAgICAgKiB0ZXN0
cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qczoKKyAgICAgICAgKGZvbGxvd1BhdGgpOgor
ICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5cGVzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUtZWRnZS10eXBlcy5qczog
QWRkZWQuCisgICAgICAgIFRlc3RzIGNvdmVyaW5nIGFsbCBvZiB0aGUgZGlmZmVyZW50IGVkZ2Ug
dHlwZXMgYW5kIGRhdGEgd2UgY2FwdHVyZS4KKworMjAxNi0wMy0wMSAgSm9zZXBoIFBlY29yYXJv
ICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhYmlsaXR5IHRvIGdlbmVyYXRl
IGEgSGVhcCBTbmFwc2hvdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU0ODQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
ICAgICAgICAgVGhpcyBhZGRzIEhlYXBTbmFwc2hvdCwgSGVhcFNuYXBzaG90QnVpbGRlciwgYW5k
IEhlYXBQcm9maWxlci4KIAogICAgICAgICBIZWFwUHJvZmlsZXIgaGFuZ3Mgb2ZmIG9mIHRoZSBW
TSBhbmQgaG9sZHMgdGhlIGxpc3Qgb2Ygc25hcHNob3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAppbmRleCBlMDhhMWExLi5hMzI0
ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmNwcApAQCAtOTAsNiArOTAsMzYgQEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjph
cHBlbmRFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKICAgICBtX2VkZ2VzLmFwcGVuZChI
ZWFwU25hcHNob3RFZGdlKGZyb20sIHRvKSk7CiB9CiAKK3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRl
cjo6YXBwZW5kUHJvcGVydHlOYW1lRWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIFVuaXF1
ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0
aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRvKTsKKworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5kaW5nTXV0ZXgpOworCisgICAgbV9lZGdl
cy5hcHBlbmQoSGVhcFNuYXBzaG90RWRnZShmcm9tLCB0bywgRWRnZVR5cGU6OlByb3BlcnR5LCBw
cm9wZXJ0eU5hbWUpKTsKK30KKwordm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRWYXJp
YWJsZU5hbWVFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bywgVW5pcXVlZFN0cmluZ0ltcGwq
IHZhcmlhYmxlTmFtZSkKK3sKKyAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1
aWxkZXIoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQodG8pOworCisgICAgc3RkOjpsb2NrX2d1YXJk
PExvY2s+IGxvY2sobV9hcHBlbmRpbmdNdXRleCk7CisKKyAgICBtX2VkZ2VzLmFwcGVuZChIZWFw
U25hcHNob3RFZGdlKGZyb20sIHRvLCBFZGdlVHlwZTo6VmFyaWFibGUsIHZhcmlhYmxlTmFtZSkp
OworfQorCit2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZEluZGV4RWRnZShKU0NlbGwq
IGZyb20sIEpTQ2VsbCogdG8sIHVpbnQzMl90IGluZGV4KQoreworICAgIEFTU0VSVChtX3Byb2Zp
bGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOworICAgIEFTU0VSVCh0byk7CisK
KyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2FwcGVuZGluZ011dGV4KTsKKworICAg
IG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIGluZGV4KSk7Cit9CisK
IGJvb2wgSGVhcFNuYXBzaG90QnVpbGRlcjo6aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChKU0NlbGwq
IGNlbGwpCiB7CiAgICAgaWYgKCFtX3NuYXBzaG90LT5wcmV2aW91cygpKQpAQCAtMjIyLDYgKzI1
MiwyMCBAQCBTdHJpbmcgSGVhcFNuYXBzaG90QnVpbGRlcjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJv
b2wgKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmKT4gYQogICAgICAgICBqc29uLmFwcGVuZE51bWJl
cih0b0lkZW50aWZpZXIpOwogICAgICAgICBqc29uLmFwcGVuZCgnLCcpOwogICAgICAgICBqc29u
LmFwcGVuZE51bWJlcihlZGdlVHlwZVRvTnVtYmVyKGVkZ2UudHlwZSkpOworICAgICAgICBzd2l0
Y2ggKGVkZ2UudHlwZSkgeworICAgICAgICBjYXNlIEVkZ2VUeXBlOjpQcm9wZXJ0eToKKyAgICAg
ICAgY2FzZSBFZGdlVHlwZTo6VmFyaWFibGU6CisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcp
OworICAgICAgICAgICAganNvbi5hcHBlbmRRdW90ZWRKU09OU3RyaW5nKGVkZ2UudS5uYW1lKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVkZ2VUeXBlOjpJbmRleDoKKyAgICAg
ICAgICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAgICAgICAgICBqc29uLmFwcGVuZE51bWJlcihl
ZGdlLnUuaW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAvLyBObyBkYXRhIGZvciB0aGlzIGVkZ2UgdHlwZS4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CiAgICAgICAgIGpzb24uYXBwZW5kKCddJyk7CiAgICAgfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCmluZGV4IDRm
YWU2Y2IuLjFmOGE5MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXBTbmFwc2hvdEJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
U25hcHNob3RCdWlsZGVyLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtNjIsOSArNjMsMzAgQEAgc3RydWN0IEhl
YXBTbmFwc2hvdEVkZ2UgewogICAgICAgICAsIHR5cGUoRWRnZVR5cGU6OkludGVybmFsKQogICAg
IHsgfQogCisgICAgSGVhcFNuYXBzaG90RWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIEVk
Z2VUeXBlIHR5cGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lKQorICAgICAgICA6IGZyb20oZnJv
bSkKKyAgICAgICAgLCB0byh0bykKKyAgICAgICAgLCB0eXBlKHR5cGUpCisgICAgeworICAgICAg
ICBBU1NFUlQodHlwZSA9PSBFZGdlVHlwZTo6UHJvcGVydHkgfHwgdHlwZSA9PSBFZGdlVHlwZTo6
VmFyaWFibGUpOworICAgICAgICB1Lm5hbWUgPSBuYW1lOworICAgIH0KKworICAgIEhlYXBTbmFw
c2hvdEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCB1aW50MzJfdCBpbmRleCkKKyAgICAg
ICAgOiBmcm9tKGZyb20pCisgICAgICAgICwgdG8odG8pCisgICAgICAgICwgdHlwZShFZGdlVHlw
ZTo6SW5kZXgpCisgICAgeworICAgICAgICB1LmluZGV4ID0gaW5kZXg7CisgICAgfQorCiAgICAg
SlNDZWxsKiBmcm9tOwogICAgIEpTQ2VsbCogdG87CiAgICAgRWRnZVR5cGUgdHlwZTsKKyAgICB1
bmlvbiB7CisgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBuYW1lOworICAgICAgICB1aW50MzJf
dCBpbmRleDsKKyAgICB9IHU7CiB9OwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBIZWFwU25h
cHNob3RCdWlsZGVyIHsKQEAgLTg0LDYgKzEwNiw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEEgcmVm
ZXJlbmNlIGZyb20gb25lIGNlbGwgdG8gYW5vdGhlci4KICAgICB2b2lkIGFwcGVuZEVkZ2UoSlND
ZWxsKiBmcm9tLCBKU0NlbGwqIHRvKTsKKyAgICB2b2lkIGFwcGVuZFByb3BlcnR5TmFtZUVkZ2Uo
SlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1l
KTsKKyAgICB2b2lkIGFwcGVuZFZhcmlhYmxlTmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwq
IHRvLCBVbmlxdWVkU3RyaW5nSW1wbCogdmFyaWFibGVOYW1lKTsKKyAgICB2b2lkIGFwcGVuZElu
ZGV4RWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIHVpbnQzMl90IGluZGV4KTsKIAogICAg
IFN0cmluZyBqc29uKCk7CiAgICAgU3RyaW5nIGpzb24oc3RkOjpmdW5jdGlvbjxib29sIChjb25z
dCBIZWFwU25hcHNob3ROb2RlJik+IGFsbG93Tm9kZUNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAppbmRleCA2NDFlNTkwLi43MzkxY2ZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0xMzUsNiArMTM1
LDUyIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVlKQogICAgIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAordm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8
fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE1hcmtlZEFuZEFw
cGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6
YXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVydHkoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3du
Piogc2xvdCwgdWludDMyX3QgaW5kZXgpCit7CisgICAgQVNTRVJUKG1faGVhcFNuYXBzaG90QnVp
bGRlcik7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IHNsb3QtPmdldCgpOworICAgIGlmICghdmFsdWUg
fHwgIXZhbHVlLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hlYXBTbmFwc2hv
dEJ1aWxkZXItPmFwcGVuZEluZGV4RWRnZShtX2N1cnJlbnRDZWxsLCB2YWx1ZS5hc0NlbGwoKSwg
aW5kZXgpOworICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgp
KTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVy
dGllcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgdWludDMyX3QgY291bnQp
Cit7CisgICAgQVNTRVJUKG1faGVhcFNuYXBzaG90QnVpbGRlcik7CisgICAgZm9yICh1aW50MzJf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZEFuZFNuYXBzaG90SW5kZXhl
ZFByb3BlcnR5KCZiYXJyaWVyc1tpXSwgaSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OnNuYXBz
aG90UHJvcGVydHlOYW1lKEpTVmFsdWUgdmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0
eU5hbWUpCit7CisgICAgQVNTRVJUKG1faGVhcFNuYXBzaG90QnVpbGRlcik7CisgICAgaWYgKCF2
YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGVhcFNu
YXBzaG90QnVpbGRlci0+YXBwZW5kUHJvcGVydHlOYW1lRWRnZShtX2N1cnJlbnRDZWxsLCB2YWx1
ZS5hc0NlbGwoKSwgcHJvcGVydHlOYW1lKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQodmFs
dWUuYXNDZWxsKCkpKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6c25hcHNob3RWYXJpYWJsZU5h
bWUoSlNWYWx1ZSB2YWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHZhcmlhYmxlTmFtZSkKK3sKKyAg
ICBBU1NFUlQobV9oZWFwU25hcHNob3RCdWlsZGVyKTsKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1
ZS5pc0NlbGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9oZWFwU25hcHNob3RCdWlsZGVy
LT5hcHBlbmRWYXJpYWJsZU5hbWVFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgpLCB2
YXJpYWJsZU5hbWUpOworICAgIEFTU0VSVChIZWFwOjppc01hcmtlZCh2YWx1ZS5hc0NlbGwoKSkp
OworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhK
U0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCAy
NmI2MTVlLi4xZmJiZjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUg
Ik1hcmtTdGFjay5oIgogI2luY2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjcsOSAr
NjgsMTYgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBw
ZW5kKEpJVFdyaXRlQmFycmllcjxUPiopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQg
YXBwZW5kKFdyaXRlQmFycmllckJhc2U8VD4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIGFwcGVuZEhpZGRlbihXcml0ZUJhcnJpZXJCYXNlPFQ+Kik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5k
KTsKICAgICB2b2lkIGFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kiwgc2l6
ZV90IGNvdW50KTsKLSAgICAKKyAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+Kiwgc2l6ZV90IGNvdW50KTsKKworICAgIHZvaWQgYXBwZW5kQW5kU25h
cHNob3RJbmRleGVkUHJvcGVydHkoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiosIHVpbnQzMl90
IGluZGV4KTsKKyAgICB2b2lkIGFwcGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnRpZXMoV3Jp
dGVCYXJyaWVyQmFzZTxVbmtub3duPiosIHVpbnQzMl90IGNvdW50KTsKKyAgICB2b2lkIHNuYXBz
aG90UHJvcGVydHlOYW1lKEpTVmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUp
OworICAgIHZvaWQgc25hcHNob3RWYXJpYWJsZU5hbWUoSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0lt
cGwqIHZhcmlhYmxlTmFtZSk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWRQb2ludGVyKFQqKik7CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJl
ZFZhbHVlKEpTVmFsdWUqKTsKQEAgLTExOSw2ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHByaXZhdGUgdG8gZW5jb3VyYWdlIGNs
aWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2b2lkIGFwcGVuZEhpZGRlbihKU1Zh
bHVlKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9N
YXJrU3RhY2soSlNDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKaW5k
ZXggMDMzODcyYy4uYTM3OTIzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKQEAgLTY5LDYgKzY5LDEyIEBAIGlubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKICAgICBhcHBlbmQoc2xv
dC0+Z2V0KCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZEhpZGRlbihXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQoreworICAgIGFw
cGVuZEhpZGRlbihzbG90LT5nZXQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PgogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0
b3IgZW5kKQogewpAQCAtODIsNiArODgsMTIgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFw
cGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV8KICAg
ICAgICAgYXBwZW5kKCZiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9y
OjphcHBlbmRWYWx1ZXNIaWRkZW4oV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMs
IHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
CisgICAgICAgIGFwcGVuZEhpZGRlbigmYmFycmllcnNbaV0pOworfQorCiBpbmxpbmUgdm9pZCBT
bG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVz
dGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVu
Y2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3Jk
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQu
Y3BwCmluZGV4IGYxZDc2OTUuLjlhY2E1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCkBAIC00MCw3ICs0MCwyMSBA
QCB2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTRW52aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2Jq
ZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkp
OworCisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVz
KCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKKworICAgIGlmICh2
aXNpdG9yLmlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSkgeworICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAg
ICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5lbmQobG9ja2VyKTsKKyAgICAgICAgZm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRv
ciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVu
ZDsgKytpdCkgeworICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0
LT52YWx1ZTsKKyAgICAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOworICAgICAgICAg
ICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAg
IGlmICghdGhpc09iamVjdC0+aXNWYWxpZFNjb3BlT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB2aXNpdG9yLnNuYXBzaG90VmFyaWFibGVOYW1l
KHRoaXNPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKSwgaXQtPmtleS5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IDc1ZGM2ZDcuLjJlZDM2OGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTE1NywxMiArMTU3
LDEyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6Y29weUJ1dHRlcmZseShDb3B5Vmlz
aXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0CiAgICAgfSAKIH0KIAotQUxXQVlTX0lOTElO
RSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0
dGVyZmx5KiBidXR0ZXJmbHksIHNpemVfdCBzdG9yYWdlU2l6ZSkKK3RlbXBsYXRlPEpTT2JqZWN0
OjpWaXNpdENoaWxkcmVuTW9kZSBtb2RlPgorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2
aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHks
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwotICAgIAot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7
Ci0gICAgCisKKyAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNp
emUoKTsKICAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKICAgICBzaXplX3QgcHJlQ2FwYWNpdHk7CiAgICAgc2l6ZV90IGluZGV4aW5n
UGF5bG9hZFNpemVJbkJ5dGVzOwpAQCAtMTc3LDcgKzE3Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZs
eSogYnV0CiAgICAgc2l6ZV90IGNhcGFjaXR5SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXpl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCiAgICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KLSAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3Rv
cmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihi
dXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsK
ICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAgICAgICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2Vu
LAogICAgICAgICBidXR0ZXJmbHktPmJhc2UocHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkp
LCBjYXBhY2l0eUluQnl0ZXMpOwpAQCAtMTg1LDEwICsxODUsMTYgQEAgQUxXQVlTX0lOTElORSB2
b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVy
Zmx5KiBidXQKICAgICAvLyBNYXJrIHRoZSBhcnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0
Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRF
WElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250
aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gVmlzaXRDaGlsZHJlbk1vZGVOb3JtYWwpCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFZhbHVlcyhidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCksIGJ1dHRlcmZseS0+cHVi
bGljTGVuZ3RoKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZEFu
ZFNuYXBzaG90SW5kZXhlZFByb3BlcnRpZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgp
LCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBB
TExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRW
YWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJy
YXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gVmlzaXRD
aGlsZHJlbk1vZGVOb3JtYWwpCisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0
ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciwgYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+dmVjdG9yTGVuZ3RoKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnRpZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
ICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQogICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3Bh
cnNlTWFwKTsKICAgICAgICAgYnJlYWs7CkBAIC0yMTUsOSArMjIxLDE5IEBAIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAg
ICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAKKyAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9yLnZt
KCkpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHku
Z2V0V2l0aG91dEJhcnJpZXIoKTsKLSAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2Jq
ZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVj
dHVyZSh2aXNpdG9yLnZtKCkpLT5vdXRPZkxpbmVTaXplKCkpOworICAgIGlmIChidXR0ZXJmbHkp
IHsKKyAgICAgICAgaWYgKCF2aXNpdG9yLmlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSkKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5PFZpc2l0Q2hpbGRyZW5Nb2RlTm9ybWFs
Pih2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5PFZpc2l0Q2hpbGRyZW5Nb2RlSGVhcFNuYXBz
aG90Pih2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorCisgICAgaWYgKHZp
c2l0b3IuaXNCdWlsZGluZ0hlYXBTbmFwc2hvdCgpKSB7CisgICAgICAgIGZvciAoYXV0byYgZW50
cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkKKyAgICAgICAgICAg
IHZpc2l0b3Iuc25hcHNob3RQcm9wZXJ0eU5hbWUodGhpc09iamVjdC0+Z2V0RGlyZWN0KGVudHJ5
Lm9mZnNldCksIGVudHJ5LmtleSk7CisgICAgfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAg
IHZpc2l0b3IubV9pc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2lu
Z0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uOwpAQCAtMjQ4LDEzICsyNjQsMjIgQEAgdm9pZCBKU0Zp
bmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCiAgICAgCiAgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2aXNpdG9y
LnZtKCkpOwogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+YnV0dGVyZmx5
KCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJm
bHkodmlzaXRvciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKSk7CisgICAg
aWYgKGJ1dHRlcmZseSkgeworICAgICAgICBpZiAoIXZpc2l0b3IuaXNCdWlsZGluZ0hlYXBTbmFw
c2hvdCgpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHk8VmlzaXRDaGls
ZHJlbk1vZGVOb3JtYWw+KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHk8VmlzaXRDaGlsZHJl
bk1vZGVIZWFwU25hcHNob3Q+KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlKTsKKyAgICB9
CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUtPmlubGluZVNpemUoKTsKLSAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3Jh
Z2VTaXplKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbih0aGlzT2JqZWN0LT5pbmxp
bmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKKworICAgIGlmICh2aXNpdG9yLmlzQnVpbGRpbmdI
ZWFwU25hcHNob3QoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3RydWN0dXJlLT5n
ZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpCisgICAgICAgICAgICB2aXNpdG9yLnNuYXBzaG90
UHJvcGVydHlOYW1lKHRoaXNPYmplY3QtPmdldERpcmVjdChlbnRyeS5vZmZzZXQpLCBlbnRyeS5r
ZXkpOworICAgIH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVj
a2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zp
b2xhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCmluZGV4IDA5
MjJjN2IuLjg2Y2U1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aApAQCAtOTIsNiArOTIsMTEgQEAgY2xhc3MgSlNPYmplY3QgOiBwdWJsaWMgSlNDZWxsIHsKICAg
ICAgICAgUHV0TW9kZURlZmluZU93blByb3BlcnR5LAogICAgIH07CiAKKyAgICBlbnVtIFZpc2l0
Q2hpbGRyZW5Nb2RlIHsKKyAgICAgICAgVmlzaXRDaGlsZHJlbk1vZGVOb3JtYWwsCisgICAgICAg
IFZpc2l0Q2hpbGRyZW5Nb2RlSGVhcFNuYXBzaG90LAorICAgIH07CisKIHB1YmxpYzoKICAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOwogCkBAIC03NDIsNyArNzQ3LDggQEAgcHJvdGVjdGVkOgogICAg
IC8vIFRvIGNyZWF0ZSBkZXJpdmVkIHR5cGVzIHlvdSBsaWtlbHkgd2FudCBKU05vbkZpbmFsT2Jq
ZWN0LCBiZWxvdy4KICAgICBKU09iamVjdChWTSYsIFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAw
KTsKICAgICAgICAgCi0gICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRl
cmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CisgICAgdGVtcGxhdGU8VmlzaXRDaGlsZHJlbk1v
ZGU+CisgICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0
cnVjdHVyZSopOwogICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZs
eSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cg
dGhhdCB0aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmpl
Y3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5jcHAKaW5kZXggMTVmMTlmNS4uZmFjMTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5j
cHAKQEAgLTY2LDcgKzY2LDIwIEBAIHZvaWQgSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiBzbG90VmlzCiAgICAgSlNTeW1i
b2xUYWJsZU9iamVjdDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCBzbG90VmlzaXRvcik7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gdGhpc09iamVjdC0+bV92YXJpYWJsZXMuc2l6ZSgp
OyBpLS07KQotICAgICAgICBzbG90VmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdmFyaWFi
bGVzW2ldKTsKKyAgICAgICAgc2xvdFZpc2l0b3IuYXBwZW5kSGlkZGVuKCZ0aGlzT2JqZWN0LT5t
X3ZhcmlhYmxlc1tpXSk7CisKKyAgICBpZiAoc2xvdFZpc2l0b3IuaXNCdWlsZGluZ0hlYXBTbmFw
c2hvdCgpKSB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3Qt
PnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgICAg
ICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9s
VGFibGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXQtPnZhbHVlOworICAgICAgICAgICAgQVNT
RVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBl
bnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlk
U2NvcGVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIHNsb3RWaXNpdG9yLnNuYXBzaG90VmFyaWFibGVOYW1lKHRoaXNPYmplY3QtPnZhcmlhYmxl
QXQob2Zmc2V0KS5nZXQoKSwgaXQtPmtleS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAKaW5kZXggNjJjNzUyYy4uY2MxNjE2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC0xMTE2LDcgKzExMTYsOSBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKICAgICAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7Ci0gICAgfSBlbHNl
IGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpCisgICAgfSBlbHNlIGlmICh2
aXNpdG9yLmlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CisgICAgZWxzZSBpZiAodGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKQogICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3Bl
cnR5VGFibGVVbnNhZmUuY2xlYXIoKTsKIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2luZmVycmVkVHlwZVRhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKaW5kZXggMzkyY2E5MS4uZTVlNTgxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTcxNiw2ICs3MTYsNyBAQCBwcml2YXRlOgogICAgIFN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAogICAgIC8vIFNob3Vs
ZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4gRHVyaW5nIEdDLCBpdCBtYXkg
YmUgc2V0IHRvIDAgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgLy8gRHVyaW5nIGEgSGVhcCBTbmFw
c2hvdCBHQyB3ZSBhdm9pZCBjbGVhcmluZyB0aGUgdGFibGUgc28gaXQgaXMgc2FmZSB0byB1c2Uu
CiAgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZVVuc2FmZTsK
IAogICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFR5cGVUYWJsZT4gbV9pbmZlcnJlZFR5cGVUYWJs
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAppbmRleCAyMWJjYWE1Li5hNWU0YmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBAIC0yNDIsNyArMjQyLDcgQEAgaW5saW5lIGJv
b2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQogCiBBTFdBWVNfSU5M
SU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxl
KCkKIHsKLSAgICBBU1NFUlQoIWdsb2JhbE9iamVjdCgpIHx8ICFnbG9iYWxPYmplY3QoKS0+dm0o
KS5oZWFwLmlzQ29sbGVjdGluZygpKTsKKyAgICBBU1NFUlQoIWdsb2JhbE9iamVjdCgpIHx8ICgh
Z2xvYmFsT2JqZWN0KCktPnZtKCkuaGVhcC5pc0NvbGxlY3RpbmcoKSB8fCBnbG9iYWxPYmplY3Qo
KS0+dm0oKS5oZWFwLmlzSGVhcFNuYXBzaG90dGluZygpKSk7CiAgICAgcmV0dXJuIG1fcHJvcGVy
dHlUYWJsZVVuc2FmZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCmluZGV4IGQwNmNhODIuLjgyZjgw
ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIv
ZHJpdmVyL2RyaXZlci5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFBy
b2ZpbGVyL2RyaXZlci9kcml2ZXIuanMKQEAgLTI0MCwzICsyNDAsMTcgQEAgZnVuY3Rpb24gY3Jl
YXRlSGVhcFNuYXBzaG90KCkgewogCiAgICAgcmV0dXJuIG5ldyBIZWFwU25hcHNob3QoanNvbik7
CiB9CisKK2Z1bmN0aW9uIGZvbGxvd1BhdGgobm9kZSwgcGF0aCkgeworICAgIGxldCBjdXJyZW50
ID0gbm9kZTsKKyAgICBmb3IgKGxldCBjb21wb25lbnQgb2YgcGF0aCkgeworICAgICAgICBsZXQg
ZWRnZXMgPSBudWxsOworICAgICAgICBpZiAoY29tcG9uZW50LmVkZ2UpCisgICAgICAgICAgICBl
ZGdlcyA9IGN1cnJlbnQub3V0Z29pbmdFZGdlcy5maWx0ZXIoKGUpID0+IGUuZGF0YSA9PT0gY29t
cG9uZW50LmVkZ2UpOworICAgICAgICBlbHNlIGlmIChjb21wb25lbnQubm9kZSkKKyAgICAgICAg
ICAgIGVkZ2VzID0gY3VycmVudC5vdXRnb2luZ0VkZ2VzLmZpbHRlcigoZSkgPT4gZS50by5jbGFz
c05hbWUgPT09IGNvbXBvbmVudC5ub2RlKTsKKyAgICAgICAgYXNzZXJ0KGVkZ2VzLmxlbmd0aCA9
PT0gMSwgIkFtYmlndW91cyBvciBiYWQgcGF0aCBjb21wb25lbnQ6ICIgKyBKU09OLnN0cmluZ2lm
eShjb21wb25lbnQpKTsKKyAgICAgICAgY3VycmVudCA9IGVkZ2VzWzBdLnRvOworICAgIH0KKyAg
ICByZXR1cm4gY3VycmVudDsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9oZWFwUHJvZmlsZXIvcHJvcGVydHktZWRnZS10eXBlcy5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvcHJvcGVydHktZWRnZS10eXBlcy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzY5YzA5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5
cGVzLmpzCkBAIC0wLDAgKzEsOTggQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZlci5qcyIpOworCits
ZXQgc2ltcGxlT2JqZWN0ID0gbmV3IFNpbXBsZU9iamVjdDsKK3NldEhpZGRlblZhbHVlKHNpbXBs
ZU9iamVjdCwgImhpZGRlblZhbHVlIik7IC8vIEludGVybmFsCitzaW1wbGVPYmplY3QucHJvcGVy
dHlOYW1lMSA9ICJwcm9wZXJ0eVZhbHVlMSI7IC8vIFByb3BlcnR5CitzaW1wbGVPYmplY3RbInBy
b3BlcnR5TmFtZTIiXSA9ICJwcm9wZXJ0eVZhbHVlMiI7IC8vIFByb3BlcnR5CitzaW1wbGVPYmpl
Y3RbMTAwXSA9ICJpbmRleGVkVmFsdWUiOyAvLyBJbmRleAorc2ltcGxlT2JqZWN0WzB4ZmZmZmZm
ZmYgKyAxMDBdID0gImxhcmdlSW5kZXhWYWx1ZUJlY29taW5nUHJvcGVydHkiOyAvLyBQcm9wZXJ0
eQorc2ltcGxlT2JqZWN0LnBvaW50ID0ge3g6IngxIiwgeToieTEifTsgLy8gUHJvcGVydHkgPT4g
b2JqZWN0IHdpdGggMiBpbmxpbmUgcHJvcGVydGllcy4KKworLy8gLS0tLS0tLS0tLQorCitmdW5j
dGlvbiBleGNsdWRlU3RydWN0dXJlKGVkZ2VzKSB7CisgICAgcmV0dXJuIGVkZ2VzLmZpbHRlcigo
eCkgPT4geC50by5jbGFzc05hbWUgIT09ICJTdHJ1Y3R1cmUiKTsKK30KKworbGV0IHNuYXBzaG90
ID0gY3JlYXRlSGVhcFNuYXBzaG90KCk7CisKKy8vIEludGVybmFsLCBQcm9wZXJ0eSwgYW5kIElu
ZGV4IGVkZ2VzIG9uIGFuIE9iamVjdC4KK2xldCBub2RlcyA9IHNuYXBzaG90Lm5vZGVzV2l0aENs
YXNzTmFtZSgiU2ltcGxlT2JqZWN0Iik7Cithc3NlcnQobm9kZXMubGVuZ3RoID09PSAxLCAiU25h
cHNob3Qgc2hvdWxkIGNvbnRhaW4gMSAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZSIpOworbGV0IHNp
bXBsZU9iamVjdE5vZGUgPSBub2Rlc1swXTsKK2xldCBlZGdlcyA9IGV4Y2x1ZGVTdHJ1Y3R1cmUo
c2ltcGxlT2JqZWN0Tm9kZS5vdXRnb2luZ0VkZ2VzKTsKK2xldCBwb2ludE5vZGUgPSBudWxsOwor
CitsZXQgc2VlbkhpZGRlblZhbHVlID0gZmFsc2U7CitsZXQgc2VlblByb3BlcnR5TmFtZTEgPSBm
YWxzZTsKK2xldCBzZWVuUHJvcGVydHlOYW1lMiA9IGZhbHNlOworbGV0IHNlZW5JbmRleDEwMCA9
IGZhbHNlOworbGV0IHNlZW5MYXJnZUluZGV4ID0gZmFsc2U7CitsZXQgc2Vlbk9iamVjdFdpdGhJ
bmxpbmVTdG9yYWdlID0gZmFsc2U7CitsZXQgbGFyZ2VJbmRleE5hbWUgPSAoMHhmZmZmZmZmZiAr
IDEwMCkudG9TdHJpbmcoKTsKKworZm9yIChsZXQgZWRnZSBvZiBlZGdlcykgeworICAgIHN3aXRj
aCAoZWRnZS50eXBlKSB7CisgICAgY2FzZSAiSW50ZXJuYWwiOgorICAgICAgICBhc3NlcnQoIXNl
ZW5IaWRkZW5WYWx1ZSk7CisgICAgICAgIHNlZW5IaWRkZW5WYWx1ZSA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgIlByb3BlcnR5IjoKKyAgICAgICAgaWYgKGVkZ2UuZGF0YSA9PT0g
InByb3BlcnR5TmFtZTEiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5TmFtZTEgPSB0cnVlOwor
ICAgICAgICBlbHNlIGlmIChlZGdlLmRhdGEgPT09ICJwcm9wZXJ0eU5hbWUyIikKKyAgICAgICAg
ICAgIHNlZW5Qcm9wZXJ0eU5hbWUyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoZWRnZS5kYXRh
ID09PSBsYXJnZUluZGV4TmFtZSkKKyAgICAgICAgICAgIHNlZW5MYXJnZUluZGV4ID0gdHJ1ZTsK
KyAgICAgICAgZWxzZSBpZiAoZWRnZS5kYXRhID09PSAicG9pbnQiKSB7CisgICAgICAgICAgICBz
ZWVuUG9pbnQgPSB0cnVlOworICAgICAgICAgICAgcG9pbnROb2RlID0gZWRnZS50bzsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIHByb3BlcnR5
IG5hbWUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiSW5kZXgiOgorICAgICAgICBpZiAo
ZWRnZS5kYXRhID09PSAxMDApCisgICAgICAgICAgICBzZWVuSW5kZXgxMDAgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlICJWYXJpYWJsZSI6CisgICAgICAgIGFzc2VydChmYWxzZSwg
IlNob3VsZCBub3Qgc2VlIGEgdmFyaWFibGUgZWRnZSBmb3IgU2ltcGxlT2JqZWN0IGluc3RhbmNl
Iik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydChmYWxzZSwg
IlVuZXhwZWN0ZWQgZWRnZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworYXNz
ZXJ0KHNlZW5IaWRkZW5WYWx1ZSwgIlNob3VsZCBzZWUgSW50ZXJuYWwgZWRnZSBmb3IgaGlkZGVu
IHZhbHVlIik7Cithc3NlcnQoc2VlblByb3BlcnR5TmFtZTEsICJTaG91bGQgc2VlIFByb3BlcnR5
IGVkZ2UgZm9yIHByb3BlcnR5TmFtZTEiKTsKK2Fzc2VydChzZWVuUHJvcGVydHlOYW1lMiwgIlNo
b3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgcHJvcGVydHlOYW1lMiIpOworYXNzZXJ0KHNlZW5J
bmRleDEwMCwgIlNob3VsZCBzZWUgSW5kZXggZWRnZSBmb3IgaW5kZXggMTAwIik7Cithc3NlcnQo
c2VlbkxhcmdlSW5kZXgsICJTaG91bGQgc2VlIFByb3BlcnR5IGVkZ2UgZm9yIGluZGV4ICIgKyBs
YXJnZUluZGV4TmFtZSk7CisKKworLy8gUHJvcGVydHkgb24gYW4gT2JqZWN0J3MgaW5saW5lIHN0
b3JhZ2UuCitsZXQgcG9pbnRFZGdlcyA9IGV4Y2x1ZGVTdHJ1Y3R1cmUocG9pbnROb2RlLm91dGdv
aW5nRWRnZXMpOworCitsZXQgc2VlblByb3BlcnR5WCA9IGZhbHNlOworbGV0IHNlZW5Qcm9wZXJ0
eVkgPSBmYWxzZTsKKworZm9yIChsZXQgZWRnZSBvZiBwb2ludEVkZ2VzKSB7CisgICAgc3dpdGNo
IChlZGdlLnR5cGUpIHsKKyAgICBjYXNlICJQcm9wZXJ0eSI6CisgICAgICAgIGlmIChlZGdlLmRh
dGEgPT09ICJ4IikKKyAgICAgICAgICAgIHNlZW5Qcm9wZXJ0eVggPSB0cnVlOworICAgICAgICBl
bHNlIGlmIChlZGdlLmRhdGEgPT09ICJ5IikKKyAgICAgICAgICAgIHNlZW5Qcm9wZXJ0eVkgPSB0
cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVk
IHByb3BlcnR5IG5hbWUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiSW5kZXgiOgorICAg
IGNhc2UgIlZhcmlhYmxlIjoKKyAgICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGFzc2VydChm
YWxzZSwgIlVuZXhwZWN0ZWQgZWRnZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworYXNzZXJ0KHNlZW5Qcm9wZXJ0eVgpOworYXNzZXJ0KHNlZW5Qcm9wZXJ0eVkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci92YXJpYWJsZS1l
ZGdlLXR5cGVzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci92
YXJpYWJsZS1lZGdlLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjkyYTY3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
aGVhcFByb2ZpbGVyL3ZhcmlhYmxlLWVkZ2UtdHlwZXMuanMKQEAgLTAsMCArMSw2OSBAQAorbG9h
ZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2xldCBnbG9iYWxTY29wZVZhcmlhYmxlID0gImds
b2JhbFNjb3BlVmFyaWFibGVWYWx1ZSI7CitsZXQgc2ltcGxlT2JqZWN0ID0gbmV3IFNpbXBsZU9i
amVjdDsKKworKGZ1bmN0aW9uKCkgeworICAgIGxldCBjbG9zdXJlVmFyaWFibGUgPSB7fTsKKyAg
ICBzaW1wbGVPYmplY3QuZiA9IGZ1bmN0aW9uKCkgeyBjbG9zdXJlVmFyaWFibGUueCA9IDA7IH0K
K30pKCk7CisKKy8vIC0tLS0tLS0tLS0KKworbGV0IHNuYXBzaG90ID0gY3JlYXRlSGVhcFNuYXBz
aG90KCk7CisKKy8vIEdsb2JhbCBTY29wZSA9PiAiZ2xvYmFsU2NvcGVWYXJpYWJsZSIKK2xldCBu
b2RlcyA9IHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQiKTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTaG91bGQgYmUgb25seSAxICdK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudCcgaW5zdGFuY2UiKTsKK2xldCBnbG9iYWxTY29wZU5v
ZGUgPSBub2Rlc1swXTsKKworbGV0IHNlZW5HbG9iYWxTY29wZVZhcmlhYmxlID0gZmFsc2U7Cits
ZXQgc2VlblNpbXBsZU9iamVjdFZhcmlhYmxlID0gZmFsc2U7CisKK2ZvciAobGV0IGVkZ2Ugb2Yg
Z2xvYmFsU2NvcGVOb2RlLm91dGdvaW5nRWRnZXMpIHsKKyAgICBzd2l0Y2ggKGVkZ2UudHlwZSkg
eworICAgIGNhc2UgIlZhcmlhYmxlIjoKKyAgICAgICAgaWYgKGVkZ2UuZGF0YSA9PT0gImdsb2Jh
bFNjb3BlVmFyaWFibGUiKQorICAgICAgICAgICAgc2Vlbkdsb2JhbFNjb3BlVmFyaWFibGUgPSB0
cnVlOworICAgICAgICBlbHNlIGlmIChlZGdlLmRhdGEgPT09ICJzaW1wbGVPYmplY3QiKQorICAg
ICAgICAgICAgc2VlblNpbXBsZU9iamVjdFZhcmlhYmxlID0gdHJ1ZTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCB2YXJpYWJsZSBuYW1lOiAiICsg
ZWRnZS5kYXRhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiSW5kZXgiOgorICAgIGNhc2Ug
IlByb3BlcnR5IjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBlZGdlIHR5cGUi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAiSW50ZXJuYWwiOgorICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK2Fzc2VydChzZWVuR2xvYmFsU2NvcGVWYXJpYWJsZSwgIlNob3VsZCBzZWUg
VmFyaWFibGUgZWRnZSBmb3IgdmFyaWFibGUgJ2dsb2JhbFNjb3BlVmFyaWFibGUnIik7Cithc3Nl
cnQoc2VlblNpbXBsZU9iamVjdFZhcmlhYmxlLCAiU2hvdWxkIHNlZSBWYXJpYWJsZSBlZGdlIGZv
ciB2YXJpYWJsZSAnc2ltcGxlT2JqZWN0JyIpOworCisvLyBGdW5jdGlvbiBTY29wZSA9PiAiY2xv
c3VyZVZhcmlhYmxlIgorbm9kZXMgPSBzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIlNpbXBs
ZU9iamVjdCIpOworYXNzZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMSwgIlNob3VsZCBiZSBvbmx5IDEg
J1NpbXBsZU9iamVjdCcgaW5zdGFuY2UiKTsKK2xldCBzY29wZU5vZGUgPSBmb2xsb3dQYXRoKG5v
ZGVzWzBdLCBbe2VkZ2U6ICJmIn0sIHtub2RlOiAiSlNMZXhpY2FsRW52aXJvbm1lbnQifV0pOwor
CitsZXQgc2VlbkNsb3N1cmVWYXJpYWJsZSA9IGZhbHNlOworCitmb3IgKGxldCBlZGdlIG9mIHNj
b3BlTm9kZS5vdXRnb2luZ0VkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAgICBj
YXNlICJWYXJpYWJsZSI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09ICJjbG9zdXJlVmFyaWFi
bGUiKQorICAgICAgICAgICAgc2VlbkNsb3N1cmVWYXJpYWJsZSA9IHRydWU7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZTog
IiArIGVkZ2UuZGF0YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkluZGV4IjoKKyAgICBj
YXNlICJQcm9wZXJ0eSI6CisgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgZWRnZSB0
eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCithc3NlcnQoc2VlbkNsb3N1cmVWYXJpYWJsZSwgIlNob3VsZCBzZWUg
VmFyaWFibGUgZWRnZSBmb3IgY2xvc3VyZSB2YXJpYWJsZSAnY2xvc3VyZVZhcmlhYmxlJyIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272701</attachid>
            <date>2016-03-02 16:13:12 -0800</date>
            <delta_ts>2016-03-02 21:15:50 -0800</delta_ts>
            <desc>[PATCH] For Landing</desc>
            <filename>for-landing-2.patch</filename>
            <type>text/plain</type>
            <size>84472</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">Y29tbWl0IGRjMWQ1ZmE2Mzc0NzQyNjJjNjRhNjBlN2ZjNjc2ZTI5OGExZGI0ODkKQXV0aG9yOiBK
b3NlcGggUGVjb3Jhcm8gPHBlY29yYXJvQGFwcGxlLmNvbT4KRGF0ZTogICBUdWUgTWFyIDEgMTc6
MTM6NTYgMjAxNiAtMDgwMAoKICAgIFBST0dSRVNTOiBIZWFwIFNuYXBzaG90IC0gTm9kZXMgYW5k
IEVkZ2VzCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDhhNTc0MGMuLmNh
YWY5MjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC00NDMsNiArNDQz
LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBoZWFwL0hhbmRsZVN0YWNrLmNw
cAogICAgIGhlYXAvSGVhcC5jcHAKICAgICBoZWFwL0hlYXBIZWxwZXJQb29sLmNwcAorICAgIGhl
YXAvSGVhcFByb2ZpbGVyLmNwcAorICAgIGhlYXAvSGVhcFNuYXBzaG90LmNwcAorICAgIGhlYXAv
SGVhcFNuYXBzaG90QnVpbGRlci5jcHAKICAgICBoZWFwL0hlYXBTdGF0aXN0aWNzLmNwcAogICAg
IGhlYXAvSGVhcFRpbWVyLmNwcAogICAgIGhlYXAvSGVhcFZlcmlmaWVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKaW5kZXggMWRiZDFjNi4uZjZhZTViYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTk2IEBACisyMDE2LTAzLTAyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBIZWFw
IFNuYXBzaG90CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQ4NDcKKworICAgICAgICBSZXZpZXdlZCBieSBNYXJrIExhbS4KKworICAgICAgICBUaGlz
IGFkZHMgSGVhcFNuYXBzaG90LCBIZWFwU25hcHNob3RCdWlsZGVyLCBhbmQgSGVhcFByb2ZpbGVy
LgorCisgICAgICAgIEhlYXBQcm9maWxlciBoYW5ncyBvZmYgb2YgdGhlIFZNIGFuZCBob2xkcyB0
aGUgbGlzdCBvZiBzbmFwc2hvdHMuCisgICAgICAgIEkgZXhwZWN0IHRvIGFkZCBvdGhlciBIZWFw
UHJvZmlsaW5nIGZlYXR1cmVzLCBzdWNoIGFzIGFsbG9jYXRpb24KKyAgICAgICAgdHJhY2tpbmcs
IHRvIHRoZSBwcm9maWxlci4KKworICAgICAgICBIZWFwU25hcHNob3QgY29udGFpbnMgYSBjb2xs
ZWN0aW9uIG9mIGxpdmUgY2VsbHMgYW5kIHRoZWlyIGlkZW50aWZpZXJzLgorICAgICAgICBJdCBj
YW4gcG9pbnQgdG8gYSBwcmV2aW91cyBIZWFwU25hcHNob3QsIHRvIGVuc3VyZSB0aGF0IGEgY2Vs
bCB0aGF0CisgICAgICAgIGFscmVhZHkgcmVjZWl2ZWQgYW4gaWRlbnRpZmllciBtYWludGFpbnMg
dGhlIHNhbWUgaWRlbnRpZmllciBhY3Jvc3MKKyAgICAgICAgbXVsdGlwbGUgc25hcHNob3RzLiBX
aGVuIGEgc25hcHNob3R0ZWQgY2VsbCBnZXRzIGdhcmJhZ2UgY29sbGVjdGVkLAorICAgICAgICB0
aGUgY2VsbCB3aWxsIGJlIHN3ZXB0IGZyb20gdGhlIEhlYXBTbmFwc2hvdCBhdCB0aGUgZW5kIG9m
IGNvbGxlY3Rpb24KKyAgICAgICAgdG8gZW5zdXJlIHRoZSBsaXN0IGNvbnRhaW5zIG9ubHkgbGl2
ZSBjZWxscy4KKworICAgICAgICBXaGVuIGJ1aWxkaW5nIGEgSGVhcFNuYXBzaG90IG5vZGVzIGFy
ZSBhZGRlZCBpbiBpbmNyZWFzaW5nIG5vZGUKKyAgICAgICAgaWRlbnRpZmllciBvcmRlci4gV2hl
biBkb25lIGJ1aWxkaW5nLCB0aGUgbGlzdCBvZiBub2RlcyBpcyBjb21wbGV0ZQorICAgICAgICBh
bmQgdGhlIHNuYXBzaG90IGlzIGZpbmFsaXplZC4gQXQgdGhpcyBwb2ludCB0aGUgbm9kZXMgYXJl
IHNvcnRlZAorICAgICAgICBieSBKU0NlbGwqIGFkZHJlc3MgdG8gYWxsb3cgZm9yIHF1aWNrIGxv
b2t1cCBvZiBhIEpTQ2VsbCouCisKKyAgICAgICAgSGVhcFNuYXBzaG90QnVpbGRlciBpcyB3aGVy
ZSBzbmFwc2hvdHRpbmcgYmVnaW5zLiBUaGUgYnVpbGRlcgorICAgICAgICB3aWxsIGluaXRpYXRl
IGEgc3BlY2lhbGl6ZWQgaGVhcCBzbmFwc2hvdHRpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uLgorICAg
ICAgICBEdXJpbmcgdGhpcyBjb2xsZWN0aW9uIHRoZSBidWlsZGVyIHdpbGwgYmUgbm90aWZpZWQg
b2YgYWxsIG1hcmtlZAorICAgICAgICAobGl2ZSkgY2VsbHMsIGFuZCBjb25uZWN0aW9ucyBiZXR3
ZWVuIGNlbGxzLCBhcyBzZWVuIGJ5IFNsb3RWaXNpdG9ycy4KKyAgICAgICAgVGhlIGJ1aWxkZXIg
Y2FuIHJlZmVyZW5jZSB0aGUgcHJldmlvdXMsIHJlYWRvbmx5LCBIZWFwU25hcHNob3RzIHRvCisg
ICAgICAgIGF2b2lkIGNyZWF0aW5nIG5ldyBub2RlcyBmb3IgY2VsbHMgdGhhdCBoYXZlIGFscmVh
ZHkgYmVlbiBzbmFwc2hvdHRlZC4KKyAgICAgICAgV2hlbiBpdCBpcyBkZXRlcm1pbmVkIHRoYXQg
d2UgYXJlIHZpc2l0aW5nIGEgbGl2ZSBjZWxsIGZvciB0aGUgZmlyc3QKKyAgICAgICAgdGltZSwg
d2UgZ2l2ZSB0aGUgY2VsbCBhIHVuaXF1ZSBpZGVudGlmaWVyIGFuZCBhZGQgaXQgdG8gdGhlIHRo
ZQorICAgICAgICBzbmFwc2hvdCB3ZSBhcmUgYnVpbGRpbmcuCisKKyAgICAgICAgU2luY2UgZWRn
ZSBkYXRhIGlzIGNvc3RseSwgYW5kIG9mIGxpdHRsZSBsb25nIHRlcm0gdXRpbGl0eSwgdGhpcwor
ICAgICAgICBkYXRhIGlzIG9ubHkgaGVsZCBieSB0aGUgYnVpbGRlciBmb3Igc2VyaWFsaXphdGlv
biwgYW5kIG5vdCBzdG9yZWQKKyAgICAgICAgbG9uZyB0ZXJtIHdpdGggdGhlIEhlYXBTbmFwc2hv
dCBub2RlIGRhdGEuCisKKyAgICAgICAgVGhlIGdvYWxzIG9mIEhlYXBTbmFwc2hvdHRpbmcgYXQg
dGhpcyB0aW1lIGFyZToKKyAgICAgICAgLSBtaW5pbWFsIGltcGFjdCBvbiBwZXJmb3JtYW5jZSB3
aGVuIG5vdCBwcm9maWxpbmcgdGhlIGhlYXAKKyAgICAgICAgLSB1bmlxdWUgaWRlbnRpZmllciBm
b3IgY2VsbHMsIHNvIHRoZXkgbWF5IGJlIGlkZW50aWZpZWQgYWNyb3NzIG11bHRpcGxlIHNuYXBz
aG90cworICAgICAgICAtIG5vZGVzIGFuZCBlZGdlcyB0byBiZSBhYmxlIHRvIGNvbnN0cnVjdCBh
IGdyYXBoIG9mIHdoaWNoIG5vZGVzIHJlZmVyZW5jZS9yZXRhaW4gd2hpY2ggb3RoZXIgbm9kZXMK
KyAgICAgICAgLSBub2RlIGRhdGEgLSBpZGVudGlmaWVyLCB0eXBlIChjbGFzcyBuYW1lKSwgc2l6
ZQorICAgICAgICAtIGVkZ2UgZGF0YSAtIGZyb20gY2VsbCwgdG8gY2VsbCwgdHlwZSAvIGRhdGEg
KHRvIGNvbWUgaW4gYSBmb2xsb3ctdXAgcGF0Y2gpCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ou
ZmlsdGVyczoKKyAgICAgICAgQWRkIG5ldyBmaWxlcyB0byB0aGUgYnVpbGQuCisKKyAgICAgICAg
KiBoZWFwL0hlYXAuY3BwOgorICAgICAgICAoSlNDOjpIZWFwOjppc0hlYXBTbmFwc2hvdHRpbmcp
OgorICAgICAgICAoSlNDOjpSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXM6OlJlbW92ZURlYWRI
ZWFwU25hcHNob3ROb2Rlcyk6CisgICAgICAgIChKU0M6OlJlbW92ZURlYWRIZWFwU25hcHNob3RO
b2Rlczo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkhlYXA6OnJlbW92ZURlYWRIZWFwU25h
cHNob3ROb2Rlcyk6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3RJbXBsKToKKyAgICAgICAg
QWZ0ZXIgZXZlcnkgY29sbGVjdGlvbiwgc3dlZXAgZGVhZCBjZWxscyBmcm9tIGluIG1lbW9yeSBz
bmFwc2hvdHMuCisKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06
OmVuc3VyZUhlYXBQcm9maWxlcik6CisgICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAo
SlNDOjpWTTo6aGVhcFByb2ZpbGVyKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAg
KiBoZWFwL0hlYXBQcm9maWxlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpIZWFwUHJvZmls
ZXI6OkhlYXBQcm9maWxlcik6CisgICAgICAgIChKU0M6OkhlYXBQcm9maWxlcjo6fkhlYXBQcm9m
aWxlcik6CisgICAgICAgIChKU0M6OkhlYXBQcm9maWxlcjo6bW9zdFJlY2VudFNuYXBzaG90KToK
KyAgICAgICAgKEpTQzo6SGVhcFByb2ZpbGVyOjphcHBlbmRTbmFwc2hvdCk6CisgICAgICAgIChK
U0M6OkhlYXBQcm9maWxlcjo6Y2xlYXJTbmFwc2hvdHMpOgorICAgICAgICAoSlNDOjpIZWFwUHJv
ZmlsZXI6OnNldEFjdGl2ZVNuYXBzaG90QnVpbGRlcik6CisgICAgICAgICogaGVhcC9IZWFwUHJv
ZmlsZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkhlYXBQcm9maWxlcjo6dm0pOgorICAgICAg
ICAoSlNDOjpIZWFwUHJvZmlsZXI6OmFjdGl2ZVNuYXBzaG90QnVpbGRlcik6CisgICAgICAgIFZN
IGFuZCBIZWFwIGNhbiBsb29rIGF0IHRoZSBwcm9maWxlciB0byBkZXRlcm1pbmUgaWYgd2UgYXJl
IGJ1aWxkaW5nIGEKKyAgICAgICAgc25hcHNob3QsIG9yIHRoZSAiaGVhZCIgc25hcHNob3QgdG8g
dXNlIGZvciBzd2VlcGluZy4KKworICAgICAgICAqIGhlYXAvSGVhcFNuYXBzaG90LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdDo6SGVhcFNuYXBzaG90KToKKyAgICAgICAg
KEpTQzo6SGVhcFNuYXBzaG90Ojp+SGVhcFNuYXBzaG90KToKKyAgICAgICAgKEpTQzo6SGVhcFNu
YXBzaG90OjphcHBlbmROb2RlKToKKyAgICAgICAgQWRkIGEgbm9kZSB0byB0aGUgdW5maW5hbGl6
ZWQgbGlzdCBvZiBuZXcgY2VsbHMuCisKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Ojpzd2Vl
cENlbGwpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3Q6OnNocmlua1RvRml0KToKKyAgICAg
ICAgQ29sbGVjdCBhIGxpc3Qgb2YgY2VsbHMgZm9yIHN3ZWVwaW5nIGFuZCB0aGVuIHJlbW92ZSB0
aGVtIGFsbCBhdCBvbmNlCisgICAgICAgIGluIHNocmlua1RvRml0LiBUaGlzIGlzIGRvbmUgdG8g
YXZvaWQgdGhyYXNoaW5nIG9mIGluZGl2aWR1YWwgcmVtb3ZlcworICAgICAgICB0aGF0IGNvdWxk
IGNhdXNlIG1hbnkgb3ZlcmxhcHBpbmcgbW92ZXMgd2l0aGluIHRoZSBWZWN0b3IuCisKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90OjpmaW5hbGl6ZSk6CisgICAgICAgIFNvcnQgdGhlIGxpc3Qs
IGFuZCBhbHNvIGNhY2hlIHRoZSBib3VuZGluZyBzdGFydC9zdG9wIGlkZW50aWZpZXJzLgorICAg
ICAgICBObyBvdGhlciBzbmFwc2hvdCBjYW4gY29udGFpbiBhbiBpZGVudGlmaWVyIGluIHRoaXMg
cmFuZ2UsIHNvIGl0IHdpbGwKKyAgICAgICAgaW1wcm92ZSBsb29rdXAgb2YgYSBub2RlIGZyb20g
YW4gaWRlbnRpZmllci4KKworICAgICAgICAoSlNDOjpIZWFwU25hcHNob3Q6Om5vZGVGb3JDZWxs
KToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90Ojpub2RlRm9yT2JqZWN0SWRlbnRpZmllcik6
CisgICAgICAgIFNlYXJjaCBoZWxwZXJzLgorCisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RC
dWlsZGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3ROb2RlOjpIZWFwU25h
cHNob3ROb2RlKToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90RWRnZTo6SGVhcFNuYXBzaG90
RWRnZSk6CisgICAgICAgIE5vZGUgYW5kIEVkZ2Ugc3RydWN0IHR5cGVzIHRoZSBidWlsZGVyIGNy
ZWF0ZXMuCisKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6Z2V0TmV4dE9iamVjdElkZW50aWZp
ZXIpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyOjpIZWFwU25hcHNob3RCdWls
ZGVyKToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6fkhlYXBTbmFwc2hvdEJ1
aWxkZXIpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyOjpidWlsZFNuYXBzaG90
KToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAg
ICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZEVkZ2UpOgorICAgICAgICBXaGVu
IGJ1aWxkaW5nIHRoZSBzbmFwc2hvdCwgZ2VuZXJhdGluZyB0aGUgbmV4dCBpZGVudGlmaWVyLCBh
bmQKKyAgICAgICAgYXBwZW5kaW5nIHRvIGFueSBvZiB0aGUgbGlzdHMgbXVzdCBiZSBndWFyZGVk
IGJ5IGEgbG9jayBiZWNhdXNlCisgICAgICAgIFNsb3RWaXNpdG9ycyBydW5uaW5nIGluIHBhcmFs
bGVsIG1heSBiZSBhY2Nlc3NpbmcgdGhlIGJ1aWxkZXIuCisKKyAgICAgICAgKEpTQzo6SGVhcFNu
YXBzaG90QnVpbGRlcjo6aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbCk6CisgICAgICAgIExvb2tpbmcg
dXAgaWYgYSBub2RlIGFscmVhZHkgZXhpc3RzIGluIGEgcHJldmlvdXMgc25hcHNob3QgY2FuIGJl
CisgICAgICAgIGRvbmUgd2l0aG91dCBhIGxvY2sgYmVjYXVzZSBhdCB0aGlzIHBvaW50IHRoZSBk
YXRhIGlzIHJlYWRvbmx5LgorCisgICAgICAgIChKU0M6OmVkZ2VUeXBlVG9OdW1iZXIpOgorICAg
ICAgICAoSlNDOjplZGdlVHlwZVRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90
QnVpbGRlcjo6anNvbik6CisgICAgICAgIEpTT04gc2VyaWFsaXphdGlvbiBvZiBhIGhlYXAgc25h
cHNob3QgY29udGFpbnMgbm9kZSBhbmQgZWRnZSBkYXRhLgorCisgICAgICAgICogaGVhcC9TbG90
VmlzaXRvci5oOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6ZGlkU3RhcnRNYXJraW5nKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0
b3I6OnJlc2V0KToKKyAgICAgICAgU2V0L2NsZWFyIHRoZSBhY3RpdmUgc25hcHNob3QgYnVpbGRl
ciB0byBrbm93IGlmIHRoaXMgd2lsbCBiZSBhCisgICAgICAgIHNuYXBzaG90dGluZyBHQyBvciBu
b3QuCisKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZCk6CisgICAgICAgIChKU0M6
OlNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayk6CisgICAgICAgIElu
Zm9ybSB0aGUgYnVpbGRlciBvZiBhIG5ldyBub2RlIG9yIGVkZ2UuCisKKyAgICAgICAgKEpTQzo6
U2xvdFZpc2l0b3I6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICBSZW1lbWJlciB0aGUgY3VycmVu
dCBjZWxsIHdlIGFyZSB2aXNpdGluZyBzbyB0aGF0IGlmIHdlIG5lZWQgdG8KKyAgICAgICAgaW5m
b3JtIHRoZSBidWlsZGVyIG9mIGVkZ2VzIHdlIGtub3cgdGhlICJmcm9tIiBjZWxsLgorCisgICAg
ICAgICoganNjLmNwcDoKKyAgICAgICAgKFNpbXBsZU9iamVjdDo6U2ltcGxlT2JqZWN0KToKKyAg
ICAgICAgKFNpbXBsZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFNpbXBsZU9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoU2ltcGxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAg
ICAgICAgKFNpbXBsZU9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKFNpbXBsZU9i
amVjdDo6aGlkZGVuVmFsdWUpOgorICAgICAgICAoU2ltcGxlT2JqZWN0OjpzZXRIaWRkZW5WYWx1
ZSk6CisgICAgICAgIENyZWF0ZSBhIG5ldyBjbGFzcyAiU2ltcGxlT2JqZWN0IiB0aGF0IGNhbiBi
ZSB1c2VkIGJ5IGhlYXAgc25hcHNob3R0aW5nCisgICAgICAgIHRlc3RzLiBJdCBpcyBlYXN5IHRv
IGZpbHRlciBmb3IgdGhpcyBuZXcgY2xhc3MgbmFtZSBhbmQgdGVzdCBpbnRlcm5hbAorICAgICAg
ICBlZGdlIHJlbGF0aW9uc2hpcHMgY3JlYXRlZCBieSBnYXJiYWdlIGNvbGxlY3Rpb24gdmlzaXRp
bmcgdGhlIGNlbGwuCisKKyAgICAgICAgKGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0KToKKyAg
ICAgICAgKGZ1bmN0aW9uR2V0SGlkZGVuVmFsdWUpOgorICAgICAgICAoZnVuY3Rpb25TZXRIaWRk
ZW5WYWx1ZSk6CisgICAgICAgIEV4cG9zZSBtZXRob2RzIHRvIGNyZWF0ZSBhbmQgaW50ZXJhY3Qg
d2l0aCBhIFNpbXBsZU9iamVjdC4KKworICAgICAgICAoZnVuY3Rpb25HZW5lcmF0ZUhlYXBTbmFw
c2hvdCk6CisgICAgICAgIEV4cG9zZSBtZXRob2RzIHRvIGNyZWF0ZSBhIGhlYXAgc25hcHNob3Qu
IFRoaXMgY3VycmVudGx5IGF1dG9tYXRpY2FsbHkKKyAgICAgICAgdHVybnMgdGhlIHNlcmlhbGl6
ZWQgc3RyaW5nIGludG8gYSBKU09OIG9iamVjdC4gVGhhdCBtYXkgY2hhbmdlLgorCisgICAgICAg
ICogdGVzdHMvaGVhcFByb2ZpbGVyLnlhbWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2hlYXBQ
cm9maWxlci9iYXNpYy1lZGdlcy5qczogQWRkZWQuCisgICAgICAgIChleGNsdWRlU3RydWN0dXJl
KToKKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMtbm9kZXMuanM6IEFkZGVkLgor
ICAgICAgICAoaGFzRGlmZmVyZW50U2l6ZU5vZGVzKToKKyAgICAgICAgKGhhc0FsbEludGVybmFs
Tm9kZXMpOgorICAgICAgICBBZGQgdGVzdHMgZm9yIGJhc2ljIG5vZGUgYW5kIGVkZ2UgZGF0YS4K
KworICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzOiBBZGRlZC4K
KyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChDaGVhcEhlYXBTbmFwc2hvdE5vZGUpOgorICAg
ICAgICAoQ2hlYXBIZWFwU25hcHNob3RFZGdlKToKKyAgICAgICAgKENoZWFwSGVhcFNuYXBzaG90
RWRnZS5wcm90b3R5cGUuZ2V0IGZyb20pOgorICAgICAgICAoQ2hlYXBIZWFwU25hcHNob3RFZGdl
LnByb3RvdHlwZS5nZXQgdG8pOgorICAgICAgICAoQ2hlYXBIZWFwU25hcHNob3QpOgorICAgICAg
ICAoQ2hlYXBIZWFwU25hcHNob3QucHJvdG90eXBlLmdldCBub2Rlcyk6CisgICAgICAgIChDaGVh
cEhlYXBTbmFwc2hvdC5wcm90b3R5cGUuZ2V0IGVkZ2VzKToKKyAgICAgICAgKENoZWFwSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5ub2RlV2l0aElkZW50aWZpZXIpOgorICAgICAgICAoQ2hlYXBIZWFw
U25hcHNob3QucHJvdG90eXBlLm5vZGVzV2l0aENsYXNzTmFtZSk6CisgICAgICAgIChDaGVhcEhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuY2xhc3NOYW1lRnJvbVRhYmxlSW5kZXgpOgorICAgICAgICAo
Q2hlYXBIZWFwU25hcHNob3QucHJvdG90eXBlLmVkZ2VUeXBlRnJvbVRhYmxlSW5kZXgpOgorICAg
ICAgICAoY3JlYXRlQ2hlYXBIZWFwU25hcHNob3QpOgorICAgICAgICAoSGVhcFNuYXBzaG90Tm9k
ZSk6CisgICAgICAgIChIZWFwU25hcHNob3RFZGdlKToKKyAgICAgICAgKEhlYXBTbmFwc2hvdCk6
CisgICAgICAgIChIZWFwU25hcHNob3QucHJvdG90eXBlLm5vZGVzV2l0aENsYXNzTmFtZSk6Cisg
ICAgICAgIChjcmVhdGVIZWFwU25hcHNob3QpOgorICAgICAgICBBZGQgdHdvIEhlYXBTbmFwc2hv
dCByZXByZXNlbnRhdGlvbnMuCisgICAgICAgIENoZWFwSGVhcFNuYXBzaG90IGNyZWF0ZXMgdHdv
IGxpc3RzIG9mIG5vZGUgYW5kIGVkZ2UgZGF0YSB0aGF0CisgICAgICAgIGxhemlseSBjcmVhdGVz
IG9iamVjdHMgYXMgbmVlZGVkLgorICAgICAgICBIZWFwU25hcHNob3QgY3JlYXRlcyBhbiBvYmpl
Y3QgZm9yIGVhY2ggbm9kZSBhbmQgZWRnZS4gVGhpcworICAgICAgICBpcyB3YXN0ZWZ1bCBidXQg
ZWFzaWVyIHRvIHVzZS4KKwogMjAxNi0wMy0wMiAgS29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxl
bkB5YW5kZXgucnU+CiAKICAgICAgICAgW2NtYWtlXSBNb3ZlZCBQUkUvUE9TVF9CVUlMRF9DT01N
QU5EIHRvIFdFQktJVF9GUkFNRVdPUksuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvagppbmRleCA2Y2Q0NDY2Li5kMDQzOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKQEAgLTU3NSw2ICs1NzUsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caGVhcFxIYW5kbGVTdGFjay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
ZWFwXEhlYXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwSGVs
cGVyUG9vbC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBQcm9m
aWxlci5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTbmFwc2hv
dC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTbmFwc2hvdEJ1
aWxkZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3RhdGlz
dGljcy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5jcHAi
IC8+CkBAIC0xMzg2LDYgKzEzODksOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxIZWFwSW5saW5lcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFw
T3BlcmF0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBSb290
VmlzaXRvci5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwUHJvZmls
ZXIuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFNuYXBzaG90Lmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTbmFwc2hvdEJ1aWxkZXIu
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0YXRpc3RpY3MuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFRpbWVyLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBWZXJpZmllci5oIiAvPgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGU1NGM3ODQu
LjQyZmMzY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
LmZpbHRlcnMKQEAgLTI5NCw2ICsyOTQsMTUgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcSGVhcEhlbHBlclBvb2wuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwUHJv
ZmlsZXIuY3BwIj4KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxl
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU25hcHNob3QuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU25hcHNob3RCdWlsZGVyLmNwcCI+CisgICAgICA8Rmls
dGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGhlYXBcSGVhcFN0YXRpc3RpY3MuY3BwIj4KICAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjM2OCw2ICsyMzc3LDE1IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBSb290VmlzaXRvci5oIj4KICAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxIZWFwUHJvZmlsZXIuaCI+CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAg
ICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFNuYXBz
aG90LmgiPgorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+Cisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTbmFwc2hvdEJ1aWxkZXIuaCI+Cisg
ICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0YXRpc3RpY3MuaCI+CiAgICAgICA8RmlsdGVyPmhl
YXA8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggZThhMzA1NC4uYzdmZGY3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE1NDgsNiArMTU0OCw4IEBACiAJCUE1MTNFNUNCMTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1MTNFNUM5MTg1Rjk2MjQwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdE1hbmFnZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTE0
QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MTRCMkMwMTg1QTY4NDQwMEYz
QzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwICovOyB9OwogCQlBNTE0QjJDMzE4NUE2ODQ0
MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTE0QjJDMTE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0
ZWRTY3JpcHRCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzExQzM1
MUM3N0NFQUMwMEU2QjFCNiAvKiBIZWFwU25hcHNob3RCdWlsZGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTUzMTFDMzcxQzc3Q0VDQTAwRTZC
MUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMTFDMzQxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFw
c2hvdEJ1aWxkZXIuY3BwICovOyB9OwogCQlBNTMyNDM4NzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0MzgxMTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwICovOyB9OwogCQlBNTMyNDM4ODE4NTY4MzM1MDAyRUQ2OTIg
LyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4MjE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUzMjQzODMxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwICovOyB9OwpAQCAtMTU1OCw2ICsxNTYwLDggQEAKIAkJQTUzMzlFQzYx
QkIzOTlBNjAwNTRGMDA1IC8qIEluc3BlY3RvckhlYXBBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMzlFQzUxQkIzOTk5MDAwNTRGMDA1IC8q
IEluc3BlY3RvckhlYXBBZ2VudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE1MzM5RUM3MUJCMzk5QTkwMDU0RjAwNSAvKiBJbnNwZWN0b3JIZWFw
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTUzMzlFQzQxQkIzOTk5MDAwNTRGMDA1IC8qIEluc3BlY3RvckhlYXBBZ2VudC5jcHAgKi87IH07
CiAJCUE1MzM5RUM5MUJCNEI0NjAwMDU0RjAwNSAvKiBIZWFwT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzM5RUM4MUJCNEI0NTEwMDU0
RjAwNSAvKiBIZWFwT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlBNTM5OEZBQjFDNzUwREE0MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTM5OEZB
QTFDNzUwRDk1MDA2MEE5NjMgLyogSGVhcFByb2ZpbGVyLmggKi87IH07CisJCUE1Mzk4RkFDMUM3
NTBEQTYwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzOThGQTkxQzc1MEQ5NTAwNjBBOTYzIC8qIEhlYXBQ
cm9maWxlci5jcHAgKi87IH07CiAJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xl
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEE1M0NFMDgxMThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCAqLzsg
fTsKIAkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0NFMDgyMThCQzFB
NTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggKi87IH07CiAJCUE1M0NFMDg3MThCQzFB
NTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTUzQ0UwODMxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5j
cHAgKi87IH07CkBAIC0xNTY2LDYgKzE1NzAsOCBAQAogCQlBNTNGMUFDMDE4QzkwRjhGMDA3MkVC
NkQgLyogZnJhbWV3b3JrLnNiIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTNGMUFCRTE4QzkwRUM3MDA3MkVCNkQgLyogZnJhbWV3b3JrLnNiICovOyB9
OwogCQlBNTQ5ODIwMzE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1NDk4MjAxMTg5MUQwQjAwMDgx
RTVCOCAvKiBFdmVudExvb3AuY3BwICovOyB9OwogCQlBNTQ5ODIwNDE4OTFEMEIwMDA4MUU1Qjgg
LyogRXZlbnRMb29wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTQ5ODIwMjE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmggKi87IH07CisJCUE1
NEMyQUIwMUM2NTQ0RUUwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0QzJBQUUxQzY1NDREMTAwQTE4RDc4
IC8qIEhlYXBTbmFwc2hvdC5jcHAgKi87IH07CisJCUE1NEMyQUIxMUM2NTQ0RjIwMEExOEQ3OCAv
KiBIZWFwU25hcHNob3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1NEMyQUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTRDRjJGNTE4NEVB
QjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTU0Q0YyRjIxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZh
bHVlLmNwcCAqLzsgfTsKIAkJQTU0Q0YyRjYxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTRDRjJG
MzE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTRDRjJGOTE4NEVBRURBMDAyMzdGMTkgLyog
U2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE1NENGMkY3MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3BwICovOyB9
OwpAQCAtMzc0Myw2ICszNzQ5LDggQEAKIAkJQTUxM0U1QzkxODVGOTYyNDAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0TWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUx
NEIyQzAxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmplY3RlZFNjcmlwdEJhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTE0QjJDMTE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5q
ZWN0ZWRTY3JpcHRCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluamVj
dGVkU2NyaXB0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTMxMUMzNDFD
NzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBzaG90QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIZWFwU25hcHNob3RCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTUzMTFDMzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBTbmFw
c2hvdEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGVhcFNuYXBz
aG90QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4MTE4NTY4
MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE1MzI0MzgyMTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0MzgzMTg1NjgzMTcwMDJF
RDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMzc1NSw2ICszNzYzLDggQEAKIAkJQTUzMzlFQzQxQkIzOTk5MDAwNTRGMDA1
IC8qIEluc3BlY3RvckhlYXBBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnNwZWN0b3JIZWFwQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNTMzOUVDNTFCQjM5OTkwMDA1NEYwMDUgLyogSW5zcGVjdG9ySGVhcEFnZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckhlYXBBZ2VudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMzOUVDODFCQjRCNDUxMDA1NEYwMDUgLyogSGVh
cE9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhlYXBPYnNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBNTM5OEZBOTFDNzUwRDk1MDA2MEE5
NjMgLyogSGVhcFByb2ZpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhlYXBQcm9maWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUE1Mzk4
RkFBMUM3NTBEOTUwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGVhcFByb2ZpbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE1M0NFMDgxMThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnNvbGVQcm90b3R5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTNDRTA4MjE4QkMxQTU2MDBCRURGNzYgLyog
Q29uc29sZVByb3RvdHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25z
b2xlUHJvdG90eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1M0NFMDgzMThC
QzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDb25zb2xlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTM3NjMsNiArMzc3Myw4IEBACiAJCUE1M0YxQUJFMThDOTBFQzcwMDcyRUI2RCAvKiBmcmFtZXdv
cmsuc2IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gZnJhbWV3b3JrLnNiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
NTQ5ODIwMTE4OTFEMEIwMDA4MUU1QjggLyogRXZlbnRMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50TG9vcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1NDk4MjAyMTg5MUQwQjAwMDgxRTVCOCAvKiBFdmVudExvb3AuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE1NEMyQUFFMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFwU25hcHNob3QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFNuYXBzaG90LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTU0QzJBQUYxQzY1NDREMTAwQTE4RDc4IC8q
IEhlYXBTbmFwc2hvdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIZWFwU25h
cHNob3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0Q0YyRjIxODRFQUIyNDAw
MjM3RjE5IC8qIFNjcmlwdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNjcmlwdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTU0
Q0YyRjMxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNjcmlwdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE1NENGMkY3MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0T2JqZWN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTMsNyArNTEwNSwxMyBAQAogCQkJCTJBRDg5MzI5MTdF
Mzg2OEYwMDY2ODI3NiAvKiBIZWFwSXRlcmF0aW9uU2NvcGUuaCAqLywKIAkJCQlBNTMzOUVDODFC
QjRCNDUxMDA1NEYwMDUgLyogSGVhcE9ic2VydmVyLmggKi8sCiAJCQkJMkE2RjQ2MjUxN0U5NTlD
RTAwQzQ1Qzk4IC8qIEhlYXBPcGVyYXRpb24uaCAqLywKKwkJCQlBNTM5OEZBOTFDNzUwRDk1MDA2
MEE5NjMgLyogSGVhcFByb2ZpbGVyLmNwcCAqLywKKwkJCQlBNTM5OEZBQTFDNzUwRDk1MDA2MEE5
NjMgLyogSGVhcFByb2ZpbGVyLmggKi8sCiAJCQkJMTRGOTc0NDYxMzhDODUzRTAwREExQzY3IC8q
IEhlYXBSb290VmlzaXRvci5oICovLAorCQkJCUE1NEMyQUFFMUM2NTQ0RDEwMEExOEQ3OCAvKiBI
ZWFwU25hcHNob3QuY3BwICovLAorCQkJCUE1NEMyQUFGMUM2NTQ0RDEwMEExOEQ3OCAvKiBIZWFw
U25hcHNob3QuaCAqLywKKwkJCQlBNTMxMUMzNDFDNzdDRUFDMDBFNkIxQjYgLyogSGVhcFNuYXBz
aG90QnVpbGRlci5jcHAgKi8sCisJCQkJQTUzMTFDMzUxQzc3Q0VBQzAwRTZCMUI2IC8qIEhlYXBT
bmFwc2hvdEJ1aWxkZXIuaCAqLywKIAkJCQlDMjREMzFFMDE2MUNENjk1MDAyQUE0REIgLyogSGVh
cFN0YXRpc3RpY3MuY3BwICovLAogCQkJCUMyNEQzMUUxMTYxQ0Q2OTUwMDJBQTREQiAvKiBIZWFw
U3RhdGlzdGljcy5oICovLAogCQkJCUMyRTUyNkJCMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGlt
ZXIuY3BwICovLApAQCAtNjkxOCw2ICs2OTM2LDcgQEAKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBC
MzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMTcx
QkRBMDY3RjAwMzMxQjg0IC8qIEFycmF5Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQTUzMTFDMzYxQzc3Q0VDNTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUM5MTdGNEVBMTQwMEY2MTQwQyAvKiBB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEw
NjgwMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjM5NDU1MTVEMDcwNTcwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzA5MCw2ICs3MTA5LDcgQEAKIAkJCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYx
ODAgLyogRGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMTE2NjAyMEUxOTk3
QjQwMDgwNjZERCAvKiBEYXRlSW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QTE1NjMy
MTA5NjYzNjUwMDZGQTI2MCAvKiBEYXRlSW5zdGFuY2VDYWNoZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQTU0QzJBQjExQzY1NDRGMjAwQTE4RDc4IC8qIEhlYXBTbmFwc2hvdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNEMjAzNEMwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwM0U4MEUxNzE4RjQwMDJDN0U4MiAvKiBEYXRlUHJvdG90eXBl
Lmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRkEwRTE2RjVDRDAwQjM0NDYwIC8qIERl
YnVnZ2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTc1MDIsNiArNzUyMiw3IEBACiAJCQkJRkUxODdB
MEYxQzAzMEQ2QzAwMzhCQkNBIC8qIFNuaXBwZXRPcGVyYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDc1MUI0REMxQzYwMEQ2OTg0OSAvKiBJbnRs
RGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1Mzk4
RkFCMUM3NTBEQTQwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExNTg3RDcyMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRQcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDc2MUI0REMxQzYwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUQ3OTJGRDFC
NDM4NjRCMDA0NTE2RjUgLyogSW50bE51bWJlckZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04
ODIyLDYgKzg4NDMsNyBAQAogCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFu
c2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAv
KiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUw
Rjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUE1Mzk4RkFDMUM3NTBEQTYwMDYwQTk2MyAvKiBIZWFwUHJvZmlsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzNEIxNDkxNkQ0MjAxMDAwMUNEQTVBIC8qIERGR1VzZUtpbmQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzRGMTUyMjhCRjMwMENEODkxMCAv
KiBERkdWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTg5OTUsNiArOTAxNyw3IEBA
CiAJCQkJMEYyQjY2RTQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNB
cnJheUJ1ZmZlclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZFODE3QjZC
NUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
QTUzMTFDMzcxQzc3Q0VDQTAwRTZCMUI2IC8qIEhlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdCREFFQ0ExN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDIxMzU5QjBBNjc3RjRGMDBBODE5NUUgLyogSlNC
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjQ3LDYgKzkyNzAsNyBAQAog
CQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJBRjczODJDMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJ
RFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUE1NEMyQUIwMUM2NTQ0RUUwMEExOEQ3OCAv
KiBIZWFwU25hcHNob3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJGMEYyRDExNkJBRUVFOTAw
MTg3QzE5IC8qIFN0cnVjdHVyZVJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjQz
OEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY3NjZEMzgxNUFFNEExQzAwOEYzNjNFIC8qIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmlu
ZGV4IDEwZWFhMDIuLmQzODhkNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBA
IC0zMyw3ICszMyw5IEBACiAjaW5jbHVkZSAiR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSGVhcEhlbHBlclBvb2wuaCIKICNpbmNsdWRlICJIZWFwSXRlcmF0aW9u
U2NvcGUuaCIKKyNpbmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKICNpbmNsdWRlICJIZWFwUm9vdFZp
c2l0b3IuaCIKKyNpbmNsdWRlICJIZWFwU25hcHNob3QuaCIKICNpbmNsdWRlICJIZWFwU3RhdGlz
dGljcy5oIgogI2luY2x1ZGUgIkhlYXBWZXJpZmllci5oIgogI2luY2x1ZGUgIkluY3JlbWVudGFs
U3dlZXBlci5oIgpAQCAtNzU4LDYgKzc2MCw0MyBAQCB2b2lkIEhlYXA6OnJlbW92ZURlYWRDb21w
aWxlcldvcmtsaXN0RW50cmllcygpCiAjZW5kaWYKIH0KIAorYm9vbCBIZWFwOjppc0hlYXBTbmFw
c2hvdHRpbmcoKSBjb25zdAoreworICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92
bS0+aGVhcFByb2ZpbGVyKCk7CisgICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpCisgICAg
ICAgIHJldHVybiBoZWFwUHJvZmlsZXItPmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RydWN0IFJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyA6IE1h
cmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgeworICAgIFJlbW92ZURlYWRIZWFwU25hcHNob3ROb2Rl
cyhIZWFwU25hcHNob3QmIHNuYXBzaG90KQorICAgICAgICA6IG1fc25hcHNob3Qoc25hcHNob3Qp
CisgICAgeworICAgIH0KKworICAgIEl0ZXJhdGlvblN0YXR1cyBvcGVyYXRvcigpKEpTQ2VsbCog
Y2VsbCkKKyAgICB7CisgICAgICAgIG1fc25hcHNob3Quc3dlZXBDZWxsKGNlbGwpOworICAgICAg
ICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKKyAgICB9CisKKyAgICBIZWFwU25h
cHNob3QmIG1fc25hcHNob3Q7Cit9OworCit2b2lkIEhlYXA6OnJlbW92ZURlYWRIZWFwU25hcHNo
b3ROb2RlcygpCit7CisgICAgR0NQSEFTRShSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMpOwor
ICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+aGVhcFByb2ZpbGVyKCk7Cisg
ICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpIHsKKyAgICAgICAgaWYgKEhlYXBTbmFwc2hv
dCogc25hcHNob3QgPSBoZWFwUHJvZmlsZXItPm1vc3RSZWNlbnRTbmFwc2hvdCgpKSB7CisgICAg
ICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNjb3BlKCp0aGlzKTsKKyAg
ICAgICAgICAgIFJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyBmdW5jdG9yKCpzbmFwc2hvdCk7
CisgICAgICAgICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFkQ2VsbChoZWFwSXRlcmF0aW9u
U2NvcGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgc25hcHNob3QtPnNocmlua1RvRml0KCk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgSGVhcDo6dmlzaXRQcm90ZWN0ZWRPYmplY3RzKEhl
YXBSb290VmlzaXRvciYgaGVhcFJvb3RWaXNpdG9yKQogewogICAgIEdDUEhBU0UoVmlzaXRQcm90
ZWN0ZWRPYmplY3RzKTsKQEAgLTExMjQsNiArMTE2Myw3IEBAIE5FVkVSX0lOTElORSB2b2lkIEhl
YXA6OmNvbGxlY3RJbXBsKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUsIHZvaWQqIHN0YWNr
T3JpCiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7CiAgICAgZGVsZXRl
VW5tYXJrZWRDb21waWxlZENvZGUoKTsKICAgICBkZWxldGVTb3VyY2VQcm92aWRlckNhY2hlcygp
OworICAgIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcygpOwogICAgIG5vdGlmeUluY3JlbWVu
dGFsU3dlZXBlcigpOwogICAgIHdyaXRlQmFycmllckN1cnJlbnRseUV4ZWN1dGluZ0NvZGVCbG9j
a3MoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGJlZWU4NjUuLjExMGFjMjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKQEAgLTE2Myw2ICsxNjMsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBub3RpZnlJc1NhZmVUb0NvbGxlY3QoKSB7IG1faXNTYWZlVG9Db2xsZWN0ID0g
dHJ1ZTsgfQogICAgIGJvb2wgaXNTYWZlVG9Db2xsZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pc1Nh
ZmVUb0NvbGxlY3Q7IH0KIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNIZWFwU25hcHNo
b3R0aW5nKCkgY29uc3Q7CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbGxlY3RBbGxH
YXJiYWdlSWZOb3REb25lUmVjZW50bHkoKTsKICAgICB2b2lkIGNvbGxlY3RBbGxHYXJiYWdlKCkg
eyBjb2xsZWN0QW5kU3dlZXAoRnVsbENvbGxlY3Rpb24pOyB9CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBjb2xsZWN0QW5kU3dlZXAoSGVhcE9wZXJhdGlvbiBjb2xsZWN0aW9uVHlwZSA9IEFu
eUNvbGxlY3Rpb24pOwpAQCAtMzI3LDYgKzMyOSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2Vl
cEFycmF5QnVmZmVycygpOwogICAgIHZvaWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOwogICAgIHZv
aWQgZGVsZXRlU291cmNlUHJvdmlkZXJDYWNoZXMoKTsKKyAgICB2b2lkIHJlbW92ZURlYWRIZWFw
U25hcHNob3ROb2RlcygpOwogICAgIHZvaWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAg
ICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CiAgICAg
dm9pZCByZXNldEFsbG9jYXRvcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
UHJvZmlsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NjgxYjUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwUHJvZmls
ZXIuY3BwCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhlYXBQcm9maWxl
ci5oIgorCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90LmgiCisjaW5jbHVkZSAiVk0uaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK0hlYXBQcm9maWxlcjo6SGVhcFByb2ZpbGVyKFZNJiB2bSkKKyAgICA6
IG1fdm0odm0pCit7Cit9CisKK0hlYXBQcm9maWxlcjo6fkhlYXBQcm9maWxlcigpCit7Cit9CisK
K0hlYXBTbmFwc2hvdCogSGVhcFByb2ZpbGVyOjptb3N0UmVjZW50U25hcHNob3QoKQoreworICAg
IGlmIChtX3NuYXBzaG90cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBtX3NuYXBzaG90cy5sYXN0KCkuZ2V0KCk7Cit9CisKK3ZvaWQgSGVhcFByb2ZpbGVy
OjphcHBlbmRTbmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBzaG90PiBzbmFwc2hvdCkK
K3sKKyAgICBtX3NuYXBzaG90cy5hcHBlbmQoV1RGTW92ZShzbmFwc2hvdCkpOworfQorCit2b2lk
IEhlYXBQcm9maWxlcjo6Y2xlYXJTbmFwc2hvdHMoKQoreworICAgIG1fc25hcHNob3RzLmNsZWFy
KCk7Cit9CisKK3ZvaWQgSGVhcFByb2ZpbGVyOjpzZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIoSGVh
cFNuYXBzaG90QnVpbGRlciogYnVpbGRlcikKK3sKKyAgICBBU1NFUlQoISFtX2FjdGl2ZUJ1aWxk
ZXIgIT0gISFidWlsZGVyKTsKKyAgICBtX2FjdGl2ZUJ1aWxkZXIgPSBidWlsZGVyOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXBQcm9maWxlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFByb2ZpbGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJhN2QzNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBQcm9maWxlci5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBIZWFwUHJvZmlsZXJfaAorI2RlZmluZSBIZWFwUHJvZmlsZXJfaAorCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSGVhcFNuYXBz
aG90OworY2xhc3MgSGVhcFNuYXBzaG90QnVpbGRlcjsKK2NsYXNzIFZNOworCitjbGFzcyBIZWFw
UHJvZmlsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEhl
YXBQcm9maWxlcihWTSYpOworICAgIH5IZWFwUHJvZmlsZXIoKTsKKworICAgIFZNJiB2bSgpIGNv
bnN0IHsgcmV0dXJuIG1fdm07IH0KKworICAgIEhlYXBTbmFwc2hvdCogbW9zdFJlY2VudFNuYXBz
aG90KCk7CisgICAgdm9pZCBhcHBlbmRTbmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBz
aG90Pik7CisgICAgdm9pZCBjbGVhclNuYXBzaG90cygpOworCisgICAgSGVhcFNuYXBzaG90QnVp
bGRlciogYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVCdWls
ZGVyOyB9CisgICAgdm9pZCBzZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIoSGVhcFNuYXBzaG90QnVp
bGRlciopOworCitwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8SGVhcFNuYXBzaG90Pj4gbV9zbmFwc2hvdHM7CisgICAgSGVhcFNuYXBzaG90QnVpbGRl
ciogbV9hY3RpdmVCdWlsZGVyIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBIZWFwUHJvZmlsZXJfaCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwU25hcHNob3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRk
NjEwY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
U25hcHNob3QuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIZWFw
U25hcHNob3QuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKK0hlYXBTbmFwc2hvdDo6SGVhcFNuYXBzaG90KEhlYXBTbmFwc2hvdCogcHJldmlvdXNTbmFw
c2hvdCkKKyAgICA6IG1fcHJldmlvdXMocHJldmlvdXNTbmFwc2hvdCkKK3sKK30KKworSGVhcFNu
YXBzaG90Ojp+SGVhcFNuYXBzaG90KCkKK3sKK30KKwordm9pZCBIZWFwU25hcHNob3Q6OmFwcGVu
ZE5vZGUoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQoIW1fZmlu
YWxpemVkKTsKKyAgICBBU1NFUlQoIW1fcHJldmlvdXMgfHwgIW1fcHJldmlvdXMtPm5vZGVGb3JD
ZWxsKG5vZGUuY2VsbCkpOworCisgICAgbV9ub2Rlcy5hcHBlbmQobm9kZSk7Cit9CisKK3ZvaWQg
SGVhcFNuYXBzaG90Ojpzd2VlcENlbGwoSlNDZWxsKiBjZWxsKQoreworICAgIEFTU0VSVChjZWxs
KTsKKworICAgIGlmIChtX2ZpbmFsaXplZCAmJiAhaXNFbXB0eSgpKSB7CisgICAgICAgIHVuc2ln
bmVkIHN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9ub2Rlcy5zaXplKCk7Cisg
ICAgICAgIHdoaWxlIChzdGFydCAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1pZGRs
ZSA9IHN0YXJ0ICsgKChlbmQgLSBzdGFydCkgLyAyKTsKKyAgICAgICAgICAgIEhlYXBTbmFwc2hv
dE5vZGUmIG5vZGUgPSBtX25vZGVzW21pZGRsZV07CisgICAgICAgICAgICBpZiAoY2VsbCA9PSBu
b2RlLmNlbGwpIHsKKyAgICAgICAgICAgICAgICAvLyBDZWxscyBzaG91bGQgYWx3YXlzIGhhdmUg
MCBhcyBsb3cgYml0cy4KKyAgICAgICAgICAgICAgICAvLyBNYXJrIHRoaXMgY2VsbCBmb3IgcmVt
b3ZhbCBieSBzZXR0aW5nIHRoZSBsb3cgYml0LgorICAgICAgICAgICAgICAgIEFTU0VSVCghKHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG5vZGUuY2VsbCkgJiBDZWxsVG9Td2VlcFRhZykpOwor
ICAgICAgICAgICAgICAgIG5vZGUuY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4ocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obm9kZS5jZWxsKSB8IENlbGxUb1N3ZWVwVGFnKTsKKyAg
ICAgICAgICAgICAgICBtX2hhc0NlbGxzVG9Td2VlcCA9IHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNlbGwgPCBub2RlLmNlbGwp
CisgICAgICAgICAgICAgICAgZW5kID0gbWlkZGxlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gbWlkZGxlICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlm
IChtX3ByZXZpb3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5zd2VlcENlbGwoY2VsbCk7Cit9CisK
K3ZvaWQgSGVhcFNuYXBzaG90OjpzaHJpbmtUb0ZpdCgpCit7CisgICAgaWYgKG1fZmluYWxpemVk
ICYmIG1faGFzQ2VsbHNUb1N3ZWVwKSB7CisgICAgICAgIG1fbm9kZXMucmVtb3ZlQWxsTWF0Y2hp
bmcoCisgICAgICAgICAgICBbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90Pihu
b2RlLmNlbGwpICYgQ2VsbFRvU3dlZXBUYWc7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9u
b2Rlcy5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2hhc0NlbGxzVG9Td2VlcCA9IGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChtX3ByZXZpb3VzKQorICAgICAgICBtX3ByZXZpb3VzLT5zaHJpbmtU
b0ZpdCgpOworfQorCit2b2lkIEhlYXBTbmFwc2hvdDo6ZmluYWxpemUoKQoreworICAgIEFTU0VS
VCghbV9maW5hbGl6ZWQpOworICAgIG1fZmluYWxpemVkID0gdHJ1ZTsKKworICAgIC8vIE5vZGVz
IGFyZSBhcHBlbmRlZCB0byB0aGUgc25hcHNob3QgaW4gaWRlbnRpZmllciBvcmRlci4KKyAgICAv
LyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBjb21wbGV0ZSBsaXN0IG9mIG5vZGVzIHdlIHdpbGwgc29y
dAorICAgIC8vIHRoZW0gaW4gYSBkaWZmZXJlbnQgb3JkZXIuIFJlbWVtYmVyIHRoZSByYW5nZSBv
ZiBpZGVudGlmaWVycworICAgIC8vIGluIHRoaXMgc25hcHNob3QuCisgICAgaWYgKCFpc0VtcHR5
KCkpIHsKKyAgICAgICAgbV9maXJzdE9iamVjdElkZW50aWZpZXIgPSBtX25vZGVzLmZpcnN0KCku
aWRlbnRpZmllcjsKKyAgICAgICAgbV9sYXN0T2JqZWN0SWRlbnRpZmllciA9IG1fbm9kZXMubGFz
dCgpLmlkZW50aWZpZXI7CisgICAgfQorCisgICAgc3RkOjpzb3J0KG1fbm9kZXMuYmVnaW4oKSwg
bV9ub2Rlcy5lbmQoKSwgW10gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIGEsIGNvbnN0IEhlYXBT
bmFwc2hvdE5vZGUmIGIpIHsKKyAgICAgICAgcmV0dXJuIGEuY2VsbCA8IGIuY2VsbDsKKyAgICB9
KTsKKworI2lmbmRlZiBOREVCVUcKKyAgICAvLyBBc3NlcnQgdGhlcmUgYXJlIG5vIGR1cGxpY2F0
ZXMgb3IgbnVsbHB0ciBjZWxscy4KKyAgICBKU0NlbGwqIHByZXZpb3VzQ2VsbCA9IG51bGxwdHI7
CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9ub2RlcykgeworICAgICAgICBBU1NFUlQobm9kZS5j
ZWxsKTsKKyAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obm9kZS5j
ZWxsKSAmIENlbGxUb1N3ZWVwVGFnKSk7CisgICAgICAgIGlmIChwcmV2aW91c0NlbGwpCisgICAg
ICAgICAgICBBU1NFUlQobm9kZS5jZWxsICE9IHByZXZpb3VzQ2VsbCk7CisgICAgICAgIHByZXZp
b3VzQ2VsbCA9IG5vZGUuY2VsbDsKKyAgICB9CisjZW5kaWYKK30KKworT3B0aW9uYWw8SGVhcFNu
YXBzaG90Tm9kZT4gSGVhcFNuYXBzaG90Ojpub2RlRm9yQ2VsbChKU0NlbGwqIGNlbGwpCit7Cisg
ICAgQVNTRVJUKG1fZmluYWxpemVkKTsKKworICAgIGlmICghaXNFbXB0eSgpKSB7CisgICAgICAg
IHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICAgICAgdW5zaWduZWQgZW5kID0gbV9ub2Rlcy5zaXpl
KCk7CisgICAgICAgIHdoaWxlIChzdGFydCAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1pZGRsZSA9IHN0YXJ0ICsgKChlbmQgLSBzdGFydCkgLyAyKTsKKyAgICAgICAgICAgIEhlYXBT
bmFwc2hvdE5vZGUmIG5vZGUgPSBtX25vZGVzW21pZGRsZV07CisgICAgICAgICAgICBpZiAoY2Vs
bCA9PSBub2RlLmNlbGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE9wdGlvbmFsPEhlYXBTbmFw
c2hvdE5vZGU+KG5vZGUpOworICAgICAgICAgICAgaWYgKGNlbGwgPCBub2RlLmNlbGwpCisgICAg
ICAgICAgICAgICAgZW5kID0gbWlkZGxlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gbWlkZGxlICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3By
ZXZpb3VzKQorICAgICAgICByZXR1cm4gbV9wcmV2aW91cy0+bm9kZUZvckNlbGwoY2VsbCk7CisK
KyAgICByZXR1cm4gTnVsbG9wdDsKK30KKworT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSGVh
cFNuYXBzaG90Ojpub2RlRm9yT2JqZWN0SWRlbnRpZmllcih1bnNpZ25lZCBvYmplY3RJZGVudGlm
aWVyKQoreworICAgIGlmIChpc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fcHJldmlvdXMpCisg
ICAgICAgICAgICByZXR1cm4gbV9wcmV2aW91cy0+bm9kZUZvck9iamVjdElkZW50aWZpZXIob2Jq
ZWN0SWRlbnRpZmllcik7CisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIH0KKworICAgIGlm
IChvYmplY3RJZGVudGlmaWVyID4gbV9sYXN0T2JqZWN0SWRlbnRpZmllcikKKyAgICAgICAgcmV0
dXJuIE51bGxvcHQ7CisKKyAgICBpZiAob2JqZWN0SWRlbnRpZmllciA8IG1fZmlyc3RPYmplY3RJ
ZGVudGlmaWVyKSB7CisgICAgICAgIGlmIChtX3ByZXZpb3VzKQorICAgICAgICAgICAgcmV0dXJu
IG1fcHJldmlvdXMtPm5vZGVGb3JPYmplY3RJZGVudGlmaWVyKG9iamVjdElkZW50aWZpZXIpOwor
ICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBt
X25vZGVzKSB7CisgICAgICAgIGlmIChub2RlLmlkZW50aWZpZXIgPT0gb2JqZWN0SWRlbnRpZmll
cikKKyAgICAgICAgICAgIHJldHVybiBPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPihub2RlKTsK
KyAgICB9CisKKyAgICByZXR1cm4gTnVsbG9wdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3QuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjNiNmEwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3QuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFNuYXBz
aG90X2gKKyNkZWZpbmUgSGVhcFNuYXBzaG90X2gKKworI2luY2x1ZGUgIkhlYXBTbmFwc2hvdEJ1
aWxkZXIuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIEhlYXBTbmFwc2hvdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgSGVhcFNuYXBzaG90KEhlYXBTbmFwc2hvdCopOworICAgIH5IZWFwU25hcHNob3Qo
KTsKKworICAgIEhlYXBTbmFwc2hvdCogcHJldmlvdXMoKSBjb25zdCB7IHJldHVybiBtX3ByZXZp
b3VzOyB9CisKKyAgICB2b2lkIGFwcGVuZE5vZGUoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYpOwor
ICAgIHZvaWQgc3dlZXBDZWxsKEpTQ2VsbCopOworICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAg
ICB2b2lkIGZpbmFsaXplKCk7CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X25vZGVzLmlzRW1wdHkoKTsgfQorICAgIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IG5vZGVG
b3JDZWxsKEpTQ2VsbCopOworICAgIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JP
YmplY3RJZGVudGlmaWVyKHVuc2lnbmVkIG9iamVjdElkZW50aWZpZXIpOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBIZWFwU25hcHNob3RCdWlsZGVyOworICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBDZWxsVG9Td2VlcFRhZyA9IDE7CisKKyAgICBWZWN0b3I8SGVhcFNuYXBzaG90Tm9k
ZT4gbV9ub2RlczsKKyAgICBIZWFwU25hcHNob3QqIG1fcHJldmlvdXMgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9maXJzdE9iamVjdElkZW50aWZpZXIgeyAwIH07CisgICAgdW5zaWduZWQg
bV9sYXN0T2JqZWN0SWRlbnRpZmllciB7IDAgfTsKKyAgICBib29sIG1fZmluYWxpemVkIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faGFzQ2VsbHNUb1N3ZWVwIHsgZmFsc2UgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSGVhcFNuYXBzaG90X2ggCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZjllMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcApAQCAtMCwwICsx
LDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgorCisj
aW5jbHVkZSAiRGVmZXJHQy5oIgorI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJIZWFwUHJv
ZmlsZXIuaCIKKyNpbmNsdWRlICJIZWFwU25hcHNob3QuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeworICAgIAordW5zaWduZWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6bmV4dEF2YWlsYWJsZU9iamVjdElkZW50aWZpZXIgPSAxOwor
dW5zaWduZWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6Z2V0TmV4dE9iamVjdElkZW50aWZpZXIoKSB7
IHJldHVybiBuZXh0QXZhaWxhYmxlT2JqZWN0SWRlbnRpZmllcisrOyB9CisKK0hlYXBTbmFwc2hv
dEJ1aWxkZXI6OkhlYXBTbmFwc2hvdEJ1aWxkZXIoSGVhcFByb2ZpbGVyJiBwcm9maWxlcikKKyAg
ICA6IG1fcHJvZmlsZXIocHJvZmlsZXIpCit7Cit9CisKK0hlYXBTbmFwc2hvdEJ1aWxkZXI6On5I
ZWFwU25hcHNob3RCdWlsZGVyKCkKK3sKK30KKwordm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjpi
dWlsZFNuYXBzaG90KCkKK3sKKyAgICBtX3NuYXBzaG90ID0gc3RkOjptYWtlX3VuaXF1ZTxIZWFw
U25hcHNob3Q+KG1fcHJvZmlsZXIubW9zdFJlY2VudFNuYXBzaG90KCkpOworICAgIHsKKyAgICAg
ICAgbV9wcm9maWxlci5zZXRBY3RpdmVTbmFwc2hvdEJ1aWxkZXIodGhpcyk7CisgICAgICAgIG1f
cHJvZmlsZXIudm0oKS5oZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CisgICAgICAgIG1fcHJvZmls
ZXIuc2V0QWN0aXZlU25hcHNob3RCdWlsZGVyKG51bGxwdHIpOworICAgIH0KKyAgICBtX3NuYXBz
aG90LT5maW5hbGl6ZSgpOworCisgICAgbV9wcm9maWxlci5hcHBlbmRTbmFwc2hvdChXVEZNb3Zl
KG1fc25hcHNob3QpKTsKK30KKwordm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2Rl
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1
aWxkZXIoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQoY2VsbCkpOworCisg
ICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5kaW5nTm9kZU11dGV4KTsKKwor
ICAgIG1fc25hcHNob3QtPmFwcGVuZE5vZGUoSGVhcFNuYXBzaG90Tm9kZShjZWxsLCBnZXROZXh0
T2JqZWN0SWRlbnRpZmllcigpKSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBw
ZW5kRWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8pCit7CisgICAgQVNTRVJUKG1fcHJvZmls
ZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRvKTsKKwor
ICAgIC8vIEF2b2lkIHRyaXZpYWwgZWRnZXMuCisgICAgaWYgKGZyb20gPT0gdG8pCisgICAgICAg
IHJldHVybjsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5kaW5nRWRn
ZU11dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8p
KTsKK30KKworYm9vbCBIZWFwU25hcHNob3RCdWlsZGVyOjpoYXNFeGlzdGluZ05vZGVGb3JDZWxs
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBpZiAoIW1fc25hcHNob3QtPnByZXZpb3VzKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiAhIW1fc25hcHNob3QtPnByZXZpb3VzKCkt
Pm5vZGVGb3JDZWxsKGNlbGwpOworfQorCisKKy8vIEhlYXAgU25hcHNob3QgSlNPTiBGb3JtYXQ6
CisvLworLy8gICB7CisvLyAgICAgICJ2ZXJzaW9uIjogMS4wLAorLy8gICAgICAibm9kZXMiOiBb
CisvLyAgICAgICAgICBbPG5vZGVJZD4sIDxzaXplSW5CeXRlcz4sIDxub2RlQ2xhc3NOYW1lSW5k
ZXg+LCA8b3B0aW9uYWxJbnRlcm5hbD5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAgICAgIm5vZGVD
bGFzc05hbWVzIjogWworLy8gICAgICAgICAgInN0cmluZyIsICJTdHJ1Y3R1cmUiLCAiT2JqZWN0
IiwgLi4uCisvLyAgICAgIF0sCisvLyAgICAgICJlZGdlcyI6IFsKKy8vICAgICAgICAgIFs8ZnJv
bU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlvbmFsRWRnZUV4dHJh
RGF0YT5dLCAuLi4KKy8vICAgICAgXSwKKy8vICAgICAgImVkZ2VUeXBlcyI6IFsKKy8vICAgICAg
ICAgICJJbnRlcm5hbCIsICJQcm9wZXJ0eSIsICJJbmRleCIsICJWYXJpYWJsZSIKKy8vICAgICAg
XQorLy8gICB9CisvLworLy8gRklYTUU6IFBvc3NpYmxlIGNvbXBhY3Rpb24gaW1wcm92ZW1lbnRz
OgorLy8gICAtIGVsaW1pbmF0ZSBpbm5lciBhcnJheSBncm91cHMgYW5kIGp1c3QgaGF2ZSBhIHNp
bmdsZSBsaXN0IHdpdGggZml4ZWQgZ3JvdXAgc2l6ZXMgKG1ldGEgZGF0YSBzZWN0aW9uKS4KKy8v
ICAgLSBlbGltaW5hdGUgZHVwbGljYXRlIGVkZ2UgZXh0cmEgZGF0YSBzdHJpbmdzLCBoYXZlIGFu
IGluZGV4IGludG8gYSBkZS1kdXBsaWNhdGVkIGxpa2UgZWRnZVR5cGVzIC8gbm9kZUNsYXNzTmFt
ZXMuCisKK3N0YXRpYyB1aW50OF90IGVkZ2VUeXBlVG9OdW1iZXIoRWRnZVR5cGUgdHlwZSkKK3sK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4odHlwZSk7Cit9CisKK3N0YXRpYyBjb25z
dCBjaGFyKiBlZGdlVHlwZVRvU3RyaW5nKEVkZ2VUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBFZGdlVHlwZTo6SW50ZXJuYWw6CisgICAgICAgIHJldHVybiAiSW50
ZXJuYWwiOworICAgIGNhc2UgRWRnZVR5cGU6OlByb3BlcnR5OgorICAgICAgICByZXR1cm4gIlBy
b3BlcnR5IjsKKyAgICBjYXNlIEVkZ2VUeXBlOjpJbmRleDoKKyAgICAgICAgcmV0dXJuICJJbmRl
eCI7CisgICAgY2FzZSBFZGdlVHlwZTo6VmFyaWFibGU6CisgICAgICAgIHJldHVybiAiVmFyaWFi
bGUiOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gIkludGVy
bmFsIjsKK30KKworU3RyaW5nIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24oKQoreworICAgIHJl
dHVybiBqc29uKFtdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJikgeyByZXR1cm4gdHJ1ZTsgfSk7
Cit9CisKK1N0cmluZyBIZWFwU25hcHNob3RCdWlsZGVyOjpqc29uKHN0ZDo6ZnVuY3Rpb248Ym9v
bCAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYpPiBhbGxvd05vZGVDYWxsYmFjaykKK3sKKyAgICBW
TSYgdm0gPSBtX3Byb2ZpbGVyLnZtKCk7CisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZt
LmhlYXApOworCisgICAgLy8gQnVpbGQgYSBub2RlIHRvIGlkZW50aWZpZXIgbWFwIG9mIGFsbG93
ZWQgbm9kZXMgdG8gdXNlIHdoZW4gc2VyaWFsaXppbmcgZWRnZXMuCisgICAgSGFzaE1hcDxKU0Nl
bGwqLCB1bnNpZ25lZD4gYWxsb3dlZE5vZGVJZGVudGlmaWVyczsKKworICAgIC8vIEJ1aWxkIGEg
bGlzdCBvZiB1c2VkIGNsYXNzIG5hbWVzLgorICAgIEhhc2hNYXA8Y29uc3QgY2hhciosIHVuc2ln
bmVkPiBjbGFzc05hbWVJbmRleGVzOworICAgIHVuc2lnbmVkIG5leHRDbGFzc05hbWVJbmRleCA9
IDA7CisKKyAgICBTdHJpbmdCdWlsZGVyIGpzb247CisKKyAgICBhdXRvIGFwcGVuZE5vZGVKU09O
ID0gWyZdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgICAgIC8vIExldCB0
aGUgY2xpZW50IGRlY2lkZSBpZiB0aGV5IHdhbnQgdG8gYWxsb3cgb3IgZGlzYWxsb3cgY2VydGFp
biBub2Rlcy4KKyAgICAgICAgaWYgKCFhbGxvd05vZGVDYWxsYmFjayhub2RlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLnNldChub2RlLmNl
bGwsIG5vZGUuaWRlbnRpZmllcik7CisKKyAgICAgICAgYXV0byByZXN1bHQgPSBjbGFzc05hbWVJ
bmRleGVzLmFkZChub2RlLmNlbGwtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUsIG5leHRDbGFzc05h
bWVJbmRleCk7CisgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgIG5l
eHRDbGFzc05hbWVJbmRleCsrOworICAgICAgICB1bnNpZ25lZCBjbGFzc05hbWVJbmRleCA9IHJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgYm9vbCBpc0ludGVybmFsID0gZmFsc2U7
CisgICAgICAgIGlmICghbm9kZS5jZWxsLT5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUuY2VsbC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAg
IGlzSW50ZXJuYWwgPSAhc3RydWN0dXJlIHx8ICFzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gWzxub2RlSWQ+LCA8c2l6ZUluQnl0ZXM+LCA8Y2xhc3NO
YW1lPiwgPG9wdGlvbmFsSW50ZXJuYWxCb29sZWFuPl0KKyAgICAgICAganNvbi5hcHBlbmQoJywn
KTsKKyAgICAgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIo
bm9kZS5pZGVudGlmaWVyKTsKKyAgICAgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNv
bi5hcHBlbmROdW1iZXIobm9kZS5jZWxsLT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpKTsKKyAgICAg
ICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAganNvbi5hcHBlbmROdW1iZXIoY2xhc3NOYW1l
SW5kZXgpOworICAgICAgICBpZiAoaXNJbnRlcm5hbCkKKyAgICAgICAgICAgIGpzb24uYXBwZW5k
TGl0ZXJhbCgiLDEiKTsKKyAgICAgICAganNvbi5hcHBlbmQoJ10nKTsKKyAgICB9OworCisgICAg
Ym9vbCBmaXJzdEVkZ2UgPSB0cnVlOworICAgIGF1dG8gYXBwZW5kRWRnZUpTT04gPSBbJl0gKGNv
bnN0IEhlYXBTbmFwc2hvdEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgLy8gSWYgdGhlIGZyb20gY2Vs
bCBpcyBudWxsLCB0aGlzIG1lYW5zIGEgcm9vdCBlZGdlLgorICAgICAgICB1bnNpZ25lZCBmcm9t
SWRlbnRpZmllciA9IDA7CisgICAgICAgIGlmIChlZGdlLmZyb20pIHsKKyAgICAgICAgICAgIGF1
dG8gZnJvbUxvb2t1cCA9IGFsbG93ZWROb2RlSWRlbnRpZmllcnMuZmluZChlZGdlLmZyb20pOwor
ICAgICAgICAgICAgaWYgKGZyb21Mb29rdXAgPT0gYWxsb3dlZE5vZGVJZGVudGlmaWVycy5lbmQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBmcm9tSWRlbnRpZmllciA9
IGZyb21Mb29rdXAtPnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdG9JZGVu
dGlmaWVyID0gMDsKKyAgICAgICAgaWYgKGVkZ2UudG8pIHsKKyAgICAgICAgICAgIGF1dG8gdG9M
b29rdXAgPSBhbGxvd2VkTm9kZUlkZW50aWZpZXJzLmZpbmQoZWRnZS50byk7CisgICAgICAgICAg
ICBpZiAodG9Mb29rdXAgPT0gYWxsb3dlZE5vZGVJZGVudGlmaWVycy5lbmQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0b0lkZW50aWZpZXIgPSB0b0xvb2t1cC0+dmFs
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZpcnN0RWRnZSkKKyAgICAgICAgICAgIGpz
b24uYXBwZW5kKCcsJyk7CisgICAgICAgIGZpcnN0RWRnZSA9IGZhbHNlOworCisgICAgICAgIC8v
IFs8ZnJvbU5vZGVJZD4sIDx0b05vZGVJZD4sIDxlZGdlVHlwZUluZGV4PiwgPG9wdGlvbmFsRWRn
ZUV4dHJhRGF0YT5dLAorICAgICAgICBqc29uLmFwcGVuZCgnWycpOworICAgICAgICBqc29uLmFw
cGVuZE51bWJlcihmcm9tSWRlbnRpZmllcik7CisgICAgICAgIGpzb24uYXBwZW5kKCcsJyk7Cisg
ICAgICAgIGpzb24uYXBwZW5kTnVtYmVyKHRvSWRlbnRpZmllcik7CisgICAgICAgIGpzb24uYXBw
ZW5kKCcsJyk7CisgICAgICAgIGpzb24uYXBwZW5kTnVtYmVyKGVkZ2VUeXBlVG9OdW1iZXIoZWRn
ZS50eXBlKSk7CisgICAgICAgIGpzb24uYXBwZW5kKCddJyk7CisgICAgfTsKKworICAgIGpzb24u
YXBwZW5kKCd7Jyk7CisKKyAgICAvLyB2ZXJzaW9uCisgICAganNvbi5hcHBlbmRMaXRlcmFsKCJc
InZlcnNpb25cIjoxIik7CisKKyAgICAvLyBub2RlcworICAgIGpzb24uYXBwZW5kKCcsJyk7Cisg
ICAganNvbi5hcHBlbmRMaXRlcmFsKCJcIm5vZGVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1sn
KTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlswLDAsXCI8cm9vdD5cIl0iKTsKKyAgICBmb3Ig
KEhlYXBTbmFwc2hvdCogc25hcHNob3QgPSBtX3Byb2ZpbGVyLm1vc3RSZWNlbnRTbmFwc2hvdCgp
OyBzbmFwc2hvdDsgc25hcHNob3QgPSBzbmFwc2hvdC0+cHJldmlvdXMoKSkgeworICAgICAgICBm
b3IgKGF1dG8mIG5vZGUgOiBzbmFwc2hvdC0+bV9ub2RlcykKKyAgICAgICAgICAgIGFwcGVuZE5v
ZGVKU09OKG5vZGUpOworICAgIH0KKyAgICBqc29uLmFwcGVuZCgnXScpOworCisgICAgLy8gbm9k
ZSBjbGFzcyBuYW1lcworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5hcHBlbmRMaXRl
cmFsKCJcIm5vZGVDbGFzc05hbWVzXCI6Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICBW
ZWN0b3I8Y29uc3QgY2hhciAqPiBvcmRlcmVkQ2xhc3NOYW1lcyhjbGFzc05hbWVJbmRleGVzLnNp
emUoKSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IGNsYXNzTmFtZUluZGV4ZXMpCisgICAgICAg
IG9yZGVyZWRDbGFzc05hbWVzW2VudHJ5LnZhbHVlXSA9IGVudHJ5LmtleTsKKyAgICBib29sIGZp
cnN0Q2xhc3NOYW1lID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIGNsYXNzTmFtZSA6IG9yZGVyZWRD
bGFzc05hbWVzKSB7CisgICAgICAgIGlmICghZmlyc3RDbGFzc05hbWUpCisgICAgICAgICAgICBq
c29uLmFwcGVuZCgnLCcpOworICAgICAgICBmaXJzdENsYXNzTmFtZSA9IGZhbHNlOworICAgICAg
ICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmcoY2xhc3NOYW1lKTsKKyAgICB9CisgICAganNv
bi5hcHBlbmQoJ10nKTsKKworICAgIC8vIGVkZ2VzCisgICAganNvbi5hcHBlbmQoJywnKTsKKyAg
ICBqc29uLmFwcGVuZExpdGVyYWwoIlwiZWRnZXNcIjoiKTsKKyAgICBqc29uLmFwcGVuZCgnWycp
OworICAgIGZvciAoYXV0byYgZWRnZSA6IG1fZWRnZXMpCisgICAgICAgIGFwcGVuZEVkZ2VKU09O
KGVkZ2UpOworICAgIGpzb24uYXBwZW5kKCddJyk7CisKKyAgICAvLyBlZGdlIHR5cGVzCisgICAg
anNvbi5hcHBlbmQoJywnKTsKKyAgICBqc29uLmFwcGVuZExpdGVyYWwoIlwiZWRnZVR5cGVzXCI6
Iik7CisgICAganNvbi5hcHBlbmQoJ1snKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJp
bmcoZWRnZVR5cGVUb1N0cmluZyhFZGdlVHlwZTo6SW50ZXJuYWwpKTsKKyAgICBqc29uLmFwcGVu
ZCgnLCcpOworICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0cmluZyhlZGdlVHlwZVRvU3RyaW5n
KEVkZ2VUeXBlOjpQcm9wZXJ0eSkpOworICAgIGpzb24uYXBwZW5kKCcsJyk7CisgICAganNvbi5h
cHBlbmRRdW90ZWRKU09OU3RyaW5nKGVkZ2VUeXBlVG9TdHJpbmcoRWRnZVR5cGU6OkluZGV4KSk7
CisgICAganNvbi5hcHBlbmQoJywnKTsKKyAgICBqc29uLmFwcGVuZFF1b3RlZEpTT05TdHJpbmco
ZWRnZVR5cGVUb1N0cmluZyhFZGdlVHlwZTo6VmFyaWFibGUpKTsKKyAgICBqc29uLmFwcGVuZCgn
XScpOworCisgICAganNvbi5hcHBlbmQoJ30nKTsKKyAgICByZXR1cm4ganNvbi50b1N0cmluZygp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41OTYwMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSGVhcFNuYXBzaG90QnVp
bGRlcl9oCisjZGVmaW5lIEhlYXBTbmFwc2hvdEJ1aWxkZXJfaAorCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IEhlYXBQcm9maWxlcjsKK2NsYXNzIEhlYXBTbmFwc2hvdDsKK2NsYXNzIEpTQ2VsbDsKKworc3Ry
dWN0IEhlYXBTbmFwc2hvdE5vZGUgeworICAgIEhlYXBTbmFwc2hvdE5vZGUoSlNDZWxsKiBjZWxs
LCB1bnNpZ25lZCBpZGVudGlmaWVyKQorICAgICAgICA6IGNlbGwoY2VsbCkKKyAgICAgICAgLCBp
ZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgeyB9CisKKyAgICBKU0NlbGwqIGNlbGw7CisgICAg
dW5zaWduZWQgaWRlbnRpZmllcjsKK307CisKK2VudW0gY2xhc3MgRWRnZVR5cGUgOiB1aW50OF90
IHsKKyAgICBJbnRlcm5hbCwgICAgIC8vIE5vcm1hbCBzdHJvbmcgcmVmZXJlbmNlLiBObyBuYW1l
LgorICAgIFByb3BlcnR5LCAgICAgLy8gTmFtZWQgcHJvcGVydHkuIEluIGBvYmplY3QucHJvcGVy
dHlgIHRoZSBuYW1lIGlzICJwcm9wZXJ0eSIKKyAgICBJbmRleCwgICAgICAgIC8vIEluZGV4ZWQg
cHJvcGVydHkuIEluIGBhcnJheVswXWAgbmFtZSBpcyBpbmRleCAiMCIuCisgICAgVmFyaWFibGUs
ICAgICAvLyBWYXJpYWJsZSBoZWxkIGJ5IGEgc2NvcGUuIEluIGBsZXQgeCwgZj0oKSA9PiB4Kytg
IG5hbWUgaXMgIngiIGluIGYncyBjYXB0dXJlZCBzY29wZS4KKyAgICAvLyBGSVhNRTogPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzE1NDkzND4gSGVhcCBTbmFwc2hvdCBzaG91bGQgaW5jbHVkZSAiV2Vh
ayIgZWRnZXMKK307CisKK3N0cnVjdCBIZWFwU25hcHNob3RFZGdlIHsKKyAgICBIZWFwU25hcHNo
b3RFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bykKKyAgICAgICAgOiBmcm9tKGZyb20pCisg
ICAgICAgICwgdG8odG8pCisgICAgICAgICwgdHlwZShFZGdlVHlwZTo6SW50ZXJuYWwpCisgICAg
eyB9CisKKyAgICBKU0NlbGwqIGZyb207CisgICAgSlNDZWxsKiB0bzsKKyAgICBFZGdlVHlwZSB0
eXBlOworfTsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSGVhcFNuYXBzaG90QnVpbGRlciB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgSGVhcFNuYXBzaG90
QnVpbGRlcihIZWFwUHJvZmlsZXImKTsKKyAgICB+SGVhcFNuYXBzaG90QnVpbGRlcigpOworCisg
ICAgc3RhdGljIHVuc2lnbmVkIG5leHRBdmFpbGFibGVPYmplY3RJZGVudGlmaWVyOworICAgIHN0
YXRpYyB1bnNpZ25lZCBnZXROZXh0T2JqZWN0SWRlbnRpZmllcigpOyAgICAKKworICAgIC8vIFBl
cmZvcm1zIGEgZ2FyYmFnZSBjb2xsZWN0aW9uIHRoYXQgYnVpbGRzIGEgc25hcHNob3Qgb2YgYWxs
IGxpdmUgY2VsbHMuCisgICAgdm9pZCBidWlsZFNuYXBzaG90KCk7CisKKyAgICAvLyBBIG1hcmtl
ZCBjZWxsLgorICAgIHZvaWQgYXBwZW5kTm9kZShKU0NlbGwqKTsKKworICAgIC8vIEEgcmVmZXJl
bmNlIGZyb20gb25lIGNlbGwgdG8gYW5vdGhlci4KKyAgICB2b2lkIGFwcGVuZEVkZ2UoSlNDZWxs
KiBmcm9tLCBKU0NlbGwqIHRvKTsKKworICAgIFN0cmluZyBqc29uKCk7CisgICAgU3RyaW5nIGpz
b24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+IGFsbG93Tm9k
ZUNhbGxiYWNrKTsKKworcHJpdmF0ZToKKyAgICAvLyBGaW5hbGl6ZWQgc25hcHNob3RzIGFyZSBu
b3QgbW9kaWZpZWQgZHVyaW5nIGJ1aWxkaW5nLiBTbyBzZWFyY2hpbmcgdGhlbQorICAgIC8vIGZv
ciBhbiBleGlzdGluZyBub2RlIGNhbiBiZSBkb25lIGNvbmN1cnJlbnRseSB3aXRob3V0IGEgbG9j
ay4KKyAgICBib29sIGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoSlNDZWxsKik7CisKKyAgICBIZWFw
UHJvZmlsZXImIG1fcHJvZmlsZXI7CisKKyAgICAvLyBTbG90VmlzaXRvcnMgcnVuIGluIHBhcmFs
bGVsLgorICAgIExvY2sgbV9hcHBlbmRpbmdOb2RlTXV0ZXg7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEhlYXBTbmFwc2hvdD4gbV9zbmFwc2hvdDsKKyAgICBMb2NrIG1fYXBwZW5kaW5nRWRnZU11dGV4
OworICAgIFZlY3RvcjxIZWFwU25hcHNob3RFZGdlPiBtX2VkZ2VzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBIZWFwU25hcHNob3RCdWlsZGVyX2ggCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKaW5kZXggYmIyMGFhZS4uNjQxZTU5MCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcApAQCAtMzEsNiAr
MzEsOCBAQAogI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkNvcGll
ZFNwYWNlLmgiCiAjaW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCisjaW5jbHVkZSAiSGVh
cFByb2ZpbGVyLmgiCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgogI2luY2x1ZGUg
IkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUg
IlZNLmgiCkBAIC05NCw2ICs5Niw5IEBAIHZvaWQgU2xvdFZpc2l0b3I6OmRpZFN0YXJ0TWFya2lu
ZygpCiB7CiAgICAgaWYgKGhlYXAoKS0+b3BlcmF0aW9uSW5Qcm9ncmVzcygpID09IEZ1bGxDb2xs
ZWN0aW9uKQogICAgICAgICBBU1NFUlQobV9vcGFxdWVSb290cy5pc0VtcHR5KCkpOyAvLyBTaG91
bGQgaGF2ZSBtZXJnZWQgYnkgbm93LgorCisgICAgaWYgKEhlYXBQcm9maWxlciogaGVhcFByb2Zp
bGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKKyAgICAgICAgbV9oZWFwU25hcHNob3RCdWlsZGVy
ID0gaGVhcFByb2ZpbGVyLT5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKTsKIH0KIAogdm9pZCBTbG90
VmlzaXRvcjo6cmVzZXQoKQpAQCAtMTAxLDYgKzEwNiw4IEBAIHZvaWQgU2xvdFZpc2l0b3I6OnJl
c2V0KCkKICAgICBtX2J5dGVzVmlzaXRlZCA9IDA7CiAgICAgbV9ieXRlc0NvcGllZCA9IDA7CiAg
ICAgbV92aXNpdENvdW50ID0gMDsKKyAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXIgPSBudWxscHRy
OworICAgIEFTU0VSVCghbV9jdXJyZW50Q2VsbCk7CiAgICAgQVNTRVJUKG1fc3RhY2suaXNFbXB0
eSgpKTsKIH0KIApAQCAtMTIxLDYgKzEyOCwxMCBAQCB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQo
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKICAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1faGVhcFNuYXBzaG90QnVpbGRlcikKKyAgICAgICAg
bV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFz
Q2VsbCgpKTsKKwogICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2Vs
bCgpKTsKIH0KIApAQCAtMTU1LDEyICsxNjYsMzcgQEAgdm9pZCBTbG90VmlzaXRvcjo6YXBwZW5k
VG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogICAgIG1fdmlzaXRDb3VudCsrOwogICAgIG1fYnl0
ZXNWaXNpdGVkICs9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+Y2VsbFNpemUoKTsKICAg
ICBtX3N0YWNrLmFwcGVuZChjZWxsKTsKKworICAgIGlmIChtX2hlYXBTbmFwc2hvdEJ1aWxkZXIp
CisgICAgICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBwZW5kTm9kZShjZWxsKTsKIH0KIAor
Y2xhc3MgU2V0Q3VycmVudENlbGxTY29wZSB7CitwdWJsaWM6CisgICAgU2V0Q3VycmVudENlbGxT
Y29wZShTbG90VmlzaXRvciYgdmlzaXRvciwgY29uc3QgSlNDZWxsKiBjZWxsKQorICAgICAgICA6
IG1fdmlzaXRvcih2aXNpdG9yKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3Zpc2l0b3IubV9j
dXJyZW50Q2VsbCk7CisgICAgICAgIG1fdmlzaXRvci5tX2N1cnJlbnRDZWxsID0gY29uc3RfY2Fz
dDxKU0NlbGwqPihjZWxsKTsKKyAgICB9CisKKyAgICB+U2V0Q3VycmVudENlbGxTY29wZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQobV92aXNpdG9yLm1fY3VycmVudENlbGwpOworICAgICAgICBt
X3Zpc2l0b3IubV9jdXJyZW50Q2VsbCA9IG51bGxwdHI7CisgICAgfQorCitwcml2YXRlOgorICAg
IFNsb3RWaXNpdG9yJiBtX3Zpc2l0b3I7Cit9OworCisKIEFMV0FZU19JTkxJTkUgdm9pZCBTbG90
VmlzaXRvcjo6dmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJU
KEhlYXA6OmlzTWFya2VkKGNlbGwpKTsKIAorICAgIFNldEN1cnJlbnRDZWxsU2NvcGUgY3VycmVu
dENlbGxTY29wZSgqdGhpcywgY2VsbCk7CisKICAgICBtX2N1cnJlbnRPYmplY3RDZWxsU3RhdGVC
ZWZvcmVWaXNpdGluZyA9IGNlbGwtPmNlbGxTdGF0ZSgpOwogICAgIGNlbGwtPnNldENlbGxTdGF0
ZShDZWxsU3RhdGU6Ok9sZEJsYWNrKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9T
bG90VmlzaXRvci5oCmluZGV4IGFkZDI5NjUuLjI2YjYxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IGNsYXNzIENvbnNlcnZhdGl2ZVJvb3RzOwogY2xhc3MgR0NUaHJlYWRTaGFyZWREYXRhOwogY2xh
c3MgSGVhcDsKK2NsYXNzIEhlYXBTbmFwc2hvdEJ1aWxkZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjbGFzcyBKSVRXcml0ZUJhcnJpZXI7CiBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVyOwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgV2VhazsKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3Mg
U2xvdFZpc2l0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNsb3RWaXNpdG9yKTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAorICAgIGZyaWVuZCBjbGFzcyBTZXRDdXJyZW50
Q2VsbFNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBIZWFwUm9vdFZpc2l0b3I7IC8vIEFsbG93ZWQg
dG8gbWFyayBhIEpTVmFsdWUqIG9yIEpTQ2VsbCoqIGRpcmVjdGx5LgogICAgIGZyaWVuZCBjbGFz
cyBIZWFwOwogCkBAIC0xMTEsNiArMTEzLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBib29sIGlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSBj
b25zdCB7IHJldHVybiAhIW1faGVhcFNuYXBzaG90QnVpbGRlcjsgfQorCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIApAQCAtMTM3LDYgKzE0MSw5
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSGVhcCYgbV9oZWFwOwogCisgICAgSGVhcFNuYXBzaG90
QnVpbGRlciogbV9oZWFwU25hcHNob3RCdWlsZGVyIHsgbnVsbHB0ciB9OworICAgIEpTQ2VsbCog
bV9jdXJyZW50Q2VsbCB7IG51bGxwdHIgfTsKKwogICAgIENlbGxTdGF0ZSBtX2N1cnJlbnRPYmpl
Y3RDZWxsU3RhdGVCZWZvcmVWaXNpdGluZyB7IENlbGxTdGF0ZTo6TmV3V2hpdGUgfTsKIAogcHVi
bGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvanNjLmNwcAppbmRleCAzMDAwOTM5Li5lMTRmNjhjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvanNjLmNwcApAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNp
bmNsdWRlICJIZWFwUHJvZmlsZXIuaCIKKyNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgi
CiAjaW5jbHVkZSAiSGVhcFN0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTQ2NSwxMiArNDY3LDY3IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPGludD4gbV92ZWN0b3I7CiB9OwogCitjbGFzcyBTaW1wbGVPYmpl
Y3QgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CitwdWJsaWM6CisgICAgU2ltcGxlT2JqZWN0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQorICAgIHsKKyAgICB9CisKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gZmFsc2U7CisKKyAgICBz
dGF0aWMgU2ltcGxlT2JqZWN0KiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjcmVhdGVTdHJ1
Y3R1cmUodm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpOworICAgICAgICBTaW1wbGVPYmplY3Qq
IHNpbXBsZU9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFNpbXBsZU9iamVjdD4o
dm0uaGVhcCwgc2l6ZW9mKFNpbXBsZU9iamVjdCkpKSBTaW1wbGVPYmplY3Qodm0sIHN0cnVjdHVy
ZSk7CisgICAgICAgIHNpbXBsZU9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBy
ZXR1cm4gc2ltcGxlT2JqZWN0OworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
IHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIH0KKwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKKyAgICB7CisgICAgICAgIFNpbXBsZU9iamVjdCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxTaW1wbGVPYmplY3QqPihjZWxsKTsKKyAgICAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9o
aWRkZW5WYWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0
dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5
cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9i
amVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGlu
Zm8oKSk7CisgICAgfQorCisgICAgSlNWYWx1ZSBoaWRkZW5WYWx1ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9oaWRkZW5WYWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEhpZGRl
blZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1
ZS5pc0NlbGwoKSk7CisgICAgICAgIG1faGlkZGVuVmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7
CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCitwcml2YXRlOgorICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX2hpZGRlblZhbHVlOworfTsKKworCiBjb25zdCBDbGFzc0luZm8gRWxlbWVu
dDo6c19pbmZvID0geyAiRWxlbWVudCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoRWxlbWVudCkgfTsKIGNvbnN0IENsYXNzSW5mbyBNYXNxdWVyYWRlcjo6c19pbmZvID0g
eyAiTWFzcXVlcmFkZXIiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1h
c3F1ZXJhZGVyKSB9OwogY29uc3QgQ2xhc3NJbmZvIFJvb3Q6OnNfaW5mbyA9IHsgIlJvb3QiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFJvb3QpIH07CiBjb25zdCBDbGFz
c0luZm8gSW1wdXJlR2V0dGVyOjpzX2luZm8gPSB7ICJJbXB1cmVHZXR0ZXIiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEltcHVyZUdldHRlcikgfTsKIGNvbnN0IENsYXNz
SW5mbyBDdXN0b21HZXR0ZXI6OnNfaW5mbyA9IHsgIkN1c3RvbUdldHRlciIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoQ3VzdG9tR2V0dGVyKSB9OwogY29uc3QgQ2xhc3NJ
bmZvIFJ1bnRpbWVBcnJheTo6c19pbmZvID0geyAiUnVudGltZUFycmF5IiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShSdW50aW1lQXJyYXkpIH07Citjb25zdCBDbGFzc0lu
Zm8gU2ltcGxlT2JqZWN0OjpzX2luZm8gPSB7ICJTaW1wbGVPYmplY3QiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNpbXBsZU9iamVjdCkgfTsKIAogRWxlbWVudEhhbmRs
ZU93bmVyKiBFbGVtZW50OjpoYW5kbGVPd25lcigpCiB7CkBAIC01MDEsNiArNTU4LDkgQEAgc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdChF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
Q3JlYXRlUm9vdChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uQ3JlYXRlRWxlbWVudChFeGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0RWxlbWVudChFeGVjU3RhdGUqKTsKK3N0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU2ltcGxlT2JqZWN0
KEV4ZWNTdGF0ZSopOworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rp
b25HZXRIaWRkZW5WYWx1ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByaW50KEV4ZWNTdGF0ZSopOwogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25EZWJ1ZyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uRGVzY3JpYmUo
RXhlY1N0YXRlKik7CkBAIC01NTUsNiArNjE1LDcgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25Mb2FkV2ViQXNzZW1ibHkoRXhlY1N0YXRlKik7CiBzdGF0aWMg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkxvYWRNb2R1bGUoRXhlY1N0YXRl
Kik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNoZWNrTW9k
dWxlU3ludGF4KEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlcihFeGVjU3RhdGUqKTsK
K3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2VuZXJhdGVIZWFw
U25hcHNob3QoRXhlY1N0YXRlKik7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TdGFydFNhbXBsaW5nUHJv
ZmlsZXIoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBm
dW5jdGlvblNhbXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyhFeGVjU3RhdGUqKTsKQEAgLTcwOCw2
ICs3NjksMTAgQEAgcHJvdGVjdGVkOgogICAgICAgICBhZGRGdW5jdGlvbih2bSwgImdldEVsZW1l
bnQiLCBmdW5jdGlvbkdldEVsZW1lbnQsIDEpOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNl
dEVsZW1lbnRSb290IiwgZnVuY3Rpb25TZXRFbGVtZW50Um9vdCwgMik7CiAgICAgICAgIAorICAg
ICAgICBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24odm0sICJTaW1wbGVPYmplY3QiLCBmdW5jdGlv
bkNyZWF0ZVNpbXBsZU9iamVjdCwgMCk7CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2V0SGlk
ZGVuVmFsdWUiLCBmdW5jdGlvbkdldEhpZGRlblZhbHVlLCAxKTsKKyAgICAgICAgYWRkRnVuY3Rp
b24odm0sICJzZXRIaWRkZW5WYWx1ZSIsIGZ1bmN0aW9uU2V0SGlkZGVuVmFsdWUsIDIpOworICAg
ICAgICAKICAgICAgICAgcHV0RGlyZWN0TmF0aXZlRnVuY3Rpb24odm0sIHRoaXMsIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCAiREZHVHJ1ZSIpLCAwLCBmdW5jdGlvbkZhbHNlMSwgREZHVHJ1
ZUludHJpbnNpYywgRG9udEVudW0pOwogICAgICAgICBwdXREaXJlY3ROYXRpdmVGdW5jdGlvbih2
bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJPU1JFeGl0IiksIDAsIGZ1bmN0
aW9uVW5kZWZpbmVkMSwgT1NSRXhpdEludHJpbnNpYywgRG9udEVudW0pOwogICAgICAgICBwdXRE
aXJlY3ROYXRpdmVGdW5jdGlvbih2bSwgdGhpcywgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
ICJpc0ZpbmFsVGllciIpLCAwLCBmdW5jdGlvbkZhbHNlMiwgSXNGaW5hbFRpZXJJbnRyaW5zaWMs
IERvbnRFbnVtKTsKQEAgLTc0Nyw2ICs4MTIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGFkZEZ1
bmN0aW9uKHZtLCAiY2hlY2tNb2R1bGVTeW50YXgiLCBmdW5jdGlvbkNoZWNrTW9kdWxlU3ludGF4
LCAxKTsKIAogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInBsYXRmb3JtU3VwcG9ydHNTYW1wbGlu
Z1Byb2ZpbGVyIiwgZnVuY3Rpb25QbGF0Zm9ybVN1cHBvcnRzU2FtcGxpbmdQcm9maWxlciwgMCk7
CisgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2VuZXJhdGVIZWFwU25hcHNob3QiLCBmdW5jdGlv
bkdlbmVyYXRlSGVhcFNuYXBzaG90LCAwKTsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIp
CiAgICAgICAgIGFkZEZ1bmN0aW9uKHZtLCAic3RhcnRTYW1wbGluZ1Byb2ZpbGVyIiwgZnVuY3Rp
b25TdGFydFNhbXBsaW5nUHJvZmlsZXIsIDApOwogICAgICAgICBhZGRGdW5jdGlvbih2bSwgInNh
bXBsaW5nUHJvZmlsZXJTdGFja1RyYWNlcyIsIGZ1bmN0aW9uU2FtcGxpbmdQcm9maWxlclN0YWNr
VHJhY2VzLCAwKTsKQEAgLTExMzMsNiArMTE5OSwyOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGZ1bmN0aW9uU2V0RWxlbWVudFJvb3QoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVTaW1wbGVPYmplY3QoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoU2ltcGxlT2JqZWN0OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRI
aWRkZW5WYWx1ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhl
Yyk7CisgICAgU2ltcGxlT2JqZWN0KiBzaW1wbGVPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2JqZWN0
Kj4oZXhlYy0+YXJndW1lbnQoMCkuYXNDZWxsKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2ltcGxlT2JqZWN0LT5oaWRkZW5WYWx1ZSgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBmdW5jdGlvblNldEhpZGRlblZhbHVlKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKKyAgICBTaW1wbGVPYmplY3QqIHNpbXBsZU9iamVj
dCA9IGpzQ2FzdDxTaW1wbGVPYmplY3QqPihleGVjLT5hcmd1bWVudCgwKS5hc0NlbGwoKSk7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIHNpbXBsZU9iamVjdC0+
c2V0SGlkZGVuVmFsdWUoZXhlYy0+dm0oKSwgdmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25DcmVhdGVQcm94eShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7CkBAIC0xNjQ2LDYgKzE3MzQsMTkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBmdW5jdGlvblBsYXRmb3JtU3VwcG9ydHNTYW1wbGluZ1Byb2ZpbGVyKEV4ZWNTdGF0
ZSoKICNlbmRpZgogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2Vu
ZXJhdGVIZWFwU25hcHNob3QoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTTG9ja0hvbGRlciBs
b2NrKGV4ZWMpOworCisgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIoZXhl
Yy0+dm0oKS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CisgICAgc25hcHNob3RCdWlsZGVyLmJ1aWxk
U25hcHNob3QoKTsKKworICAgIFN0cmluZyBqc29uU3RyaW5nID0gc25hcHNob3RCdWlsZGVyLmpz
b24oKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjplbmNvZGUoSlNPTlBh
cnNlKGV4ZWMsIGpzb25TdHJpbmcpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKICNpZiBFTkFCTEUoU0FNUExJTkdf
UFJPRklMRVIpCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU3RhcnRTYW1w
bGluZ1Byb2ZpbGVyKEV4ZWNTdGF0ZSogZXhlYykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAppbmRleCBkZTk2Y2EwLi5lMGU2N2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkhlYXBJdGVyYXRpb25TY29wZS5oIgorI2luY2x1
ZGUgIkhlYXBQcm9maWxlci5oIgogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSW5jcmVtZW50YWxTd2VlcGVyLmgiCkBA
IC00NDMsNiArNDQ0LDEzIEBAIFdhdGNoZG9nJiBWTTo6ZW5zdXJlV2F0Y2hkb2coKQogICAgIHJl
dHVybiAqbV93YXRjaGRvZzsKIH0KIAorSGVhcFByb2ZpbGVyJiBWTTo6ZW5zdXJlSGVhcFByb2Zp
bGVyKCkKK3sKKyAgICBpZiAoIW1faGVhcFByb2ZpbGVyKQorICAgICAgICBtX2hlYXBQcm9maWxl
ciA9IHN0ZDo6bWFrZV91bmlxdWU8SGVhcFByb2ZpbGVyPigqdGhpcyk7CisgICAgcmV0dXJuICpt
X2hlYXBQcm9maWxlcjsKK30KKwogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKIHZvaWQg
Vk06OmVuc3VyZVNhbXBsaW5nUHJvZmlsZXIoUmVmUHRyPFN0b3B3YXRjaD4mJiBzdG9wd2F0Y2gp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAppbmRleCA3NTliYmQ5Li42MDgwOTNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKQEAgLTg3LDYgKzg3LDcgQEAgY2xhc3MgRXhj
ZXB0aW9uOwogY2xhc3MgSGFuZGxlU3RhY2s7CiBjbGFzcyBUeXBlUHJvZmlsZXI7CiBjbGFzcyBU
eXBlUHJvZmlsZXJMb2c7CitjbGFzcyBIZWFwUHJvZmlsZXI7CiBjbGFzcyBJZGVudGlmaWVyOwog
Y2xhc3MgSW50ZXJwcmV0ZXI7CiBjbGFzcyBKU0JvdW5kU2xvdEJhc2VGdW5jdGlvbjsKQEAgLTI0
OSw2ICsyNTAsOSBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hkb2cmIGVu
c3VyZVdhdGNoZG9nKCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hkb2cqIHdhdGNoZG9n
KCkgeyByZXR1cm4gbV93YXRjaGRvZy5nZXQoKTsgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
SGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYXBQcm9maWxl
ci5nZXQoKTsgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIEhlYXBQcm9maWxlciYgZW5zdXJlSGVh
cFByb2ZpbGVyKCk7CisKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU2FtcGxpbmdQcm9maWxlciogc2FtcGxpbmdQcm9maWxlcigpIHsgcmV0dXJu
IG1fc2FtcGxpbmdQcm9maWxlci5nZXQoKTsgfQogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZW5zdXJlU2FtcGxpbmdQcm9maWxlcihSZWZQdHI8U3RvcHdhdGNoPiYmKTsKQEAgLTY3Miw2ICs2
NzYsNyBAQCBwcml2YXRlOgogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxRdWV1ZWRUYXNrPj4g
bV9taWNyb3Rhc2tRdWV1ZTsKICAgICBNYWxsb2NQdHI8RW5jb2RlZEpTVmFsdWU+IG1fZXhjZXB0
aW9uRnV6ekJ1ZmZlcjsKICAgICBSZWZQdHI8V2F0Y2hkb2c+IG1fd2F0Y2hkb2c7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEhlYXBQcm9maWxlcj4gbV9oZWFwUHJvZmlsZXI7CiAjaWYgRU5BQkxFKFNB
TVBMSU5HX1BST0ZJTEVSKQogICAgIFJlZlB0cjxTYW1wbGluZ1Byb2ZpbGVyPiBtX3NhbXBsaW5n
UHJvZmlsZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9oZWFwUHJvZmlsZXIueWFtbCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJv
ZmlsZXIueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGQzYmNkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxl
ci55YW1sCkBAIC0wLDAgKzEsMjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisjIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorIyBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CistIHBhdGg6IGhlYXBQcm9maWxlcgorICBjbWQ6IGRlZmF1bHRSdW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMtZWRnZXMuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Jhc2ljLWVkZ2VzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NWI3YTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Jhc2ljLWVkZ2Vz
LmpzCkBAIC0wLDAgKzEsNTggQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZlci5qcyIpOworCitmdW5j
dGlvbiBleGNsdWRlU3RydWN0dXJlKGVkZ2VzKSB7CisgICAgcmV0dXJuIGVkZ2VzLmZpbHRlcigo
eCkgPT4geC50by5jbGFzc05hbWUgIT09ICJTdHJ1Y3R1cmUiKTsKK30KKworbGV0IHNpbXBsZU9i
amVjdDFOb2RlSWQ7CitsZXQgc2ltcGxlT2JqZWN0Mk5vZGVJZDsKKworbGV0IHNpbXBsZU9iamVj
dDEgPSBuZXcgU2ltcGxlT2JqZWN0OworbGV0IHNpbXBsZU9iamVjdDIgPSBuZXcgU2ltcGxlT2Jq
ZWN0OworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3JlYXRlQ2hlYXBIZWFw
U25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUo
IlNpbXBsZU9iamVjdCIpOworICAgIGFzc2VydChub2Rlcy5sZW5ndGggPT09IDIsICJTbmFwc2hv
dCBzaG91bGQgY29udGFpbiAyICdTaW1wbGVPYmplY3QnIGluc3RhbmNlcyIpOworICAgIGxldCBz
aW1wbGVPYmplY3QxTm9kZSA9IG5vZGVzWzBdLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAyID8g
bm9kZXNbMF0gOiBub2Rlc1sxXTsKKyAgICBsZXQgc2ltcGxlT2JqZWN0Mk5vZGUgPSBub2Rlc1sw
XS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMSA/IG5vZGVzWzBdIDogbm9kZXNbMV07CisgICAg
YXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAxLCAiJ3Np
bXBsZU9iamVjdDEnIHNob3VsZCByZWZlcmVuY2Ugb25seSBpdHMgc3RydWN0dXJlIik7CisgICAg
YXNzZXJ0KHNpbXBsZU9iamVjdDJOb2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID09PSAxLCAiJ3Np
bXBsZU9iamVjdDInIHNob3VsZCByZWZlcmVuY2Ugb25seSBpdHMgc3RydWN0dXJlIik7Cit9KSgp
OworCitzZXRIaWRkZW5WYWx1ZShzaW1wbGVPYmplY3QxLCBzaW1wbGVPYmplY3QyKTsKKworKGZ1
bmN0aW9uKCkgeworICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUNoZWFwSGVhcFNuYXBzaG90KCk7
CisgICAgbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmpl
Y3QiKTsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAyLCAiU25hcHNob3Qgc2hvdWxkIGNv
bnRhaW4gMiAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZXMiKTsKKyAgICBsZXQgc2ltcGxlT2JqZWN0
MU5vZGUgPSBub2Rlc1swXS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMiA/IG5vZGVzWzBdIDog
bm9kZXNbMV07CisgICAgbGV0IHNpbXBsZU9iamVjdDJOb2RlID0gbm9kZXNbMF0ub3V0Z29pbmdF
ZGdlcy5sZW5ndGggPT09IDEgPyBub2Rlc1swXSA6IG5vZGVzWzFdOworICAgIGFzc2VydChzaW1w
bGVPYmplY3QxTm9kZS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMiwgIidzaW1wbGVPYmplY3Qx
JyBzaG91bGQgcmVmZXJlbmNlIGl0cyBzdHJ1Y3R1cmUgYW5kIGhpZGRlbiB2YWx1ZSIpOworICAg
IGFzc2VydChzaW1wbGVPYmplY3QyTm9kZS5vdXRnb2luZ0VkZ2VzLmxlbmd0aCA9PT0gMSwgIidz
aW1wbGVPYmplY3QyJyBzaG91bGQgcmVmZXJlbmNlIG9ubHkgaXRzIHN0cnVjdHVyZSIpOworICAg
IGFzc2VydChleGNsdWRlU3RydWN0dXJlKHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXMp
WzBdLnRvLmlkID09PSBzaW1wbGVPYmplY3QyTm9kZS5pZCwgIidzaW1wbGVPYmplY3QxJyBzaG91
bGQgcmVmZXJlbmNlICdzaW1wbGVPYmplY3QyJyIpOworICAgIHNpbXBsZU9iamVjdDFOb2RlSWQg
PSBzaW1wbGVPYmplY3QxTm9kZS5pZDsKKyAgICBzaW1wbGVPYmplY3QyTm9kZUlkID0gc2ltcGxl
T2JqZWN0Mk5vZGUuaWQ7Cit9KSgpOworCitzaW1wbGVPYmplY3QyID0gbnVsbDsKKworKGZ1bmN0
aW9uKCkgeworICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUNoZWFwSGVhcFNuYXBzaG90KCk7Cisg
ICAgbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3Qi
KTsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAyLCAiU25hcHNob3Qgc2hvdWxkIGNvbnRh
aW4gMiAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZXMiKTsKKyAgICBsZXQgc2ltcGxlT2JqZWN0MU5v
ZGUgPSBub2Rlc1swXS5pZCA9PT0gc2ltcGxlT2JqZWN0MU5vZGVJZCA/IG5vZGVzWzBdIDogbm9k
ZXNbMV07CisgICAgbGV0IHNpbXBsZU9iamVjdDJOb2RlID0gbm9kZXNbMF0uaWQgPT09IHNpbXBs
ZU9iamVjdDJOb2RlSWQgPyBub2Rlc1swXSA6IG5vZGVzWzFdOworICAgIGFzc2VydChzaW1wbGVP
YmplY3QxTm9kZS5pZCA9PT0gc2ltcGxlT2JqZWN0MU5vZGVJZCAmJiBzaW1wbGVPYmplY3QyTm9k
ZS5pZCA9PT0gc2ltcGxlT2JqZWN0Mk5vZGVJZCwgIm5vZGUgaWRlbnRpZmllcnMgd2VyZSBtYWlu
dGFpbmVkIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXMubGVu
Z3RoID09PSAyLCAiJ3NpbXBsZU9iamVjdDEnIHNob3VsZCByZWZlcmVuY2UgaXRzIHN0cnVjdHVy
ZSBhbmQgaGlkZGVuIHZhbHVlIik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDJOb2RlLm91dGdv
aW5nRWRnZXMubGVuZ3RoID09PSAxLCAiJ3NpbXBsZU9iamVjdDInIHNob3VsZCByZWZlcmVuY2Ug
b25seSBpdHMgc3RydWN0dXJlIik7CisgICAgYXNzZXJ0KGV4Y2x1ZGVTdHJ1Y3R1cmUoc2ltcGxl
T2JqZWN0MU5vZGUub3V0Z29pbmdFZGdlcylbMF0udG8uaWQgPT09IHNpbXBsZU9iamVjdDJOb2Rl
SWQsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIHJlZmVyZW5jZSAnc2ltcGxlT2JqZWN0MiciKTsK
K30pKCk7CisKK3NpbXBsZU9iamVjdDEgPSBudWxsOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0
IHNuYXBzaG90ID0gY3JlYXRlQ2hlYXBIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBz
bmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIlNpbXBsZU9iamVjdCIpOworICAgIGFzc2VydChu
b2Rlcy5sZW5ndGggPT09IDAsICJTbmFwc2hvdCBzaG91bGQgbm90IGNvbnRhaW4gYSAnU2ltcGxl
T2JqZWN0JyBpbnN0YW5jZSIpOworfSkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvYmFzaWMtbm9kZXMuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Jhc2ljLW5vZGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmM2MzM5MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Jhc2ljLW5vZGVzLmpzCkBAIC0wLDAgKzEs
NzggQEAKK2xvYWQoIi4vZHJpdmVyL2RyaXZlci5qcyIpOworCitmdW5jdGlvbiBoYXNEaWZmZXJl
bnRTaXplTm9kZXMobm9kZXMpIHsKKyAgICBsZXQgc2VlblNpemUgPSBub2Rlc1swXS5zaXplOwor
ICAgIGZvciAobGV0IG5vZGUgb2Ygbm9kZXMpIHsKKyAgICAgICAgaWYgKG5vZGUuc2l6ZSAhPT0g
c2VlblNpemUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitmdW5jdGlvbiBoYXNBbGxJbnRlcm5hbE5vZGVzKG5vZGVzKSB7CisgICAgZm9y
IChsZXQgbm9kZSBvZiBub2RlcykgeworICAgICAgICBpZiAoIW5vZGUuaW50ZXJuYWwpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5j
dGlvbiBzb3J0ZWQobm9kZXMpIHsKKyAgICByZXR1cm4gbm9kZXMuc29ydCgoYSwgYikgPT4gYS5p
ZCAtIGIuaWQpOworfQorCitsZXQgc2ltcGxlT2JqZWN0MU5vZGVJZDsKK2xldCBzaW1wbGVPYmpl
Y3QyTm9kZUlkOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3JlYXRlQ2hl
YXBIZWFwU25hcHNob3QoKTsKKyAgICBhc3NlcnQoc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1l
KCJnbG9iYWwiKS5sZW5ndGggPT09IDEsICJTbmFwc2hvdCBzaG91bGQgY29udGFpbiBhIHNpbmds
ZSAnZ2xvYmFsJyBub2RlIik7CisgICAgYXNzZXJ0KHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFt
ZSgiU3RydWN0dXJlIikubGVuZ3RoID4gMCwgIlNuYXBzaG90IHNob3VsZCBjb250YWluICdTdHJ1
Y3R1cmUnIG5vZGVzIik7CisgICAgYXNzZXJ0KHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgi
VGhpc0NsYXNzTmFtZURvZXNOb3RFeGlzdCIpLmxlbmd0aCA9PT0gMCwgIlNuYXBzaG90IHNob3Vs
ZCBub3QgY29udGFpbiAnVGhpc0NsYXNzTmFtZURvZXNOb3RFeGlzdCcgbm9kZXMiKTsKKworICAg
IGxldCBzdHJpbmdzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJzdHJpbmciKTsKKyAg
ICBhc3NlcnQoc3RyaW5ncy5sZW5ndGggPiAwLCAiU25hcHNob3Qgc2hvdWxkIGNvbnRhaW4gJ3N0
cmluZycgbm9kZXMiKTsKKyAgICBhc3NlcnQoaGFzRGlmZmVyZW50U2l6ZU5vZGVzKHN0cmluZ3Mp
LCAiJ3N0cmluZycgbm9kZXMgc2hvdWxkIGhhdmUgZGlmZmVyZW50IHNpemVzIik7CisKKyAgICBs
ZXQgbmF0aXZlRXhlY3V0YWJsZXMgPSBzbmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIk5hdGl2
ZUV4ZWN1dGFibGUiKTsKKyAgICBhc3NlcnQobmF0aXZlRXhlY3V0YWJsZXMubGVuZ3RoID4gMCwg
IlNuYXBzaG90IHNob3VsZCBjb250YWluICdOYXRpdmVFeGVjdXRhYmxlJyBub2RlcyIpOworICAg
IGFzc2VydCghaGFzRGlmZmVyZW50U2l6ZU5vZGVzKG5hdGl2ZUV4ZWN1dGFibGVzKSwgIidOYXRp
dmVFeGVjdXRhYmxlJyBub2RlcyBzaG91bGQgYWxsIGJlIHRoZSBzYW1lIHNpemUiKTsKKyAgICBh
c3NlcnQoaGFzQWxsSW50ZXJuYWxOb2RlcyhuYXRpdmVFeGVjdXRhYmxlcyksICInTmF0aXZlRXhl
Y3V0YWJsZScgbm9kZXMgc2hvdWxkIGFsbCBiZSBpbnRlcm5hbCIpOworCisgICAgYXNzZXJ0KHNu
YXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxlT2JqZWN0IikubGVuZ3RoID09PSAwLCAi
U25hcHNob3Qgc2hvdWxkIG5vdCBjb250YWluIGEgJ1NpbXBsZU9iamVjdCcgaW5zdGFuY2UiKTsK
K30pKCk7CisKK2xldCBzaW1wbGVPYmplY3QxID0gbmV3IFNpbXBsZU9iamVjdDsKKworKGZ1bmN0
aW9uKCkgeworICAgIGxldCBzbmFwc2hvdCA9IGNyZWF0ZUNoZWFwSGVhcFNuYXBzaG90KCk7Cisg
ICAgbGV0IG5vZGVzID0gc29ydGVkKHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxl
T2JqZWN0IikpOworICAgIGxldCBbc2ltcGxlT2JqZWN0MU5vZGVdID0gbm9kZXM7CisgICAgc2lt
cGxlT2JqZWN0MU5vZGVJZCA9IG5vZGVzWzBdLmlkOworICAgIGFzc2VydChub2Rlcy5sZW5ndGgg
PT09IDEsICJTbmFwc2hvdCBzaG91bGQgY29udGFpbiAxICdTaW1wbGVPYmplY3QnIGluc3RhbmNl
Iik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXMubGVuZ3RoID09
PSAxLCAiJ3NpbXBsZU9iamVjdDEnIHNob3VsZCBvbmx5IHJlZmVyZW5jZSBpdHMgc3RydWN0dXJl
Iik7CisgICAgYXNzZXJ0KHNpbXBsZU9iamVjdDFOb2RlLm91dGdvaW5nRWRnZXNbMF0udG8uY2xh
c3NOYW1lID09PSAiU3RydWN0dXJlIiwgIidzaW1wbGVPYmplY3QxJyBzaG91bGQgcmVmZXJlbmNl
IGEgU3RydWN0dXJlIik7Cit9KSgpOworCitsZXQgc2ltcGxlT2JqZWN0TGlzdCA9IFtdOworZm9y
IChsZXQgaSA9IDA7IGkgPCAxMjM0OyArK2kpCisgICAgc2ltcGxlT2JqZWN0TGlzdC5wdXNoKG5l
dyBTaW1wbGVPYmplY3QpOworCisoZnVuY3Rpb24oKSB7CisgICAgbGV0IHNuYXBzaG90ID0gY3Jl
YXRlQ2hlYXBIZWFwU25hcHNob3QoKTsKKyAgICBsZXQgbm9kZXMgPSBzb3J0ZWQoc25hcHNob3Qu
bm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3QiKSk7CisgICAgc2ltcGxlT2JqZWN0MU5v
ZGVJZCA9IG5vZGVzWzBdLmlkOworICAgIHNpbXBsZU9iamVjdDJOb2RlSWQgPSBub2Rlc1sxXS5p
ZDsKKyAgICBhc3NlcnQobm9kZXMubGVuZ3RoID09PSAxMjM1LCAiU25hcHNob3Qgc2hvdWxkIGNv
bnRhaW4gMTIzNSAnU2ltcGxlT2JqZWN0JyBpbnN0YW5jZXMiKTsKKyAgICBhc3NlcnQobm9kZXNb
MF0uaWQgPT09IHNpbXBsZU9iamVjdDFOb2RlSWQsICInc2ltcGxlT2JqZWN0MScgc2hvdWxkIG1h
aW50YWluIHRoZSBzYW1lIGlkZW50aWZpZXIiKTsKKyAgICBhc3NlcnQoc2ltcGxlT2JqZWN0MU5v
ZGVJZCA8IHNpbXBsZU9iamVjdDJOb2RlSWQsICJub2RlIGlkZW50aWZpZXJzIHNob3VsZCBhbHdh
eXMgaW5jcmVhc2UgYWNyb3NzIHNuYXBzaG90cyIpOworfSkoKTsKKworc2ltcGxlT2JqZWN0MSA9
IG51bGw7CitzaW1wbGVPYmplY3RMaXN0LmZpbGwobnVsbCk7CisKKyhmdW5jdGlvbigpIHsKKyAg
ICBsZXQgc25hcHNob3QgPSBjcmVhdGVDaGVhcEhlYXBTbmFwc2hvdCgpOworICAgIGxldCBub2Rl
cyA9IHNuYXBzaG90Lm5vZGVzV2l0aENsYXNzTmFtZSgiU2ltcGxlT2JqZWN0Iik7CisgICAgYXNz
ZXJ0KG5vZGVzLmxlbmd0aCA9PT0gMCwgIlNuYXBzaG90IHNob3VsZCBub3QgY29udGFpbiBhICdT
aW1wbGVPYmplY3QnIGluc3RhbmNlIik7Cit9KSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNmNhODIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanMK
QEAgLTAsMCArMSwyNDIgQEAKK2Z1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHJlYXNvbikgewor
ICAgIGlmICghY29uZGl0aW9uKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVhc29uKTsKK30K
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0KKy8vIENoZWFwSGVhcFNuYXBzaG90CisvLworLy8gQ29u
dGFpbnMgdHdvIGxhcmdlIGxpc3RzIG9mIGFsbCBub2RlIGRhdGEgYW5kIGFsbCBlZGdlIGRhdGEu
CisvLyBMYXppbHkgY3JlYXRlcyBub2RlIGFuZCBlZGdlIG9iamVjdHMgb2ZmIG9mIGluZGV4ZXMg
aW50byB0aGVzZSBsaXN0cy4KKworLy8gWzwwOmlkPiwgPDE6c2l6ZT4sIDwyOmNsYXNzTmFtZVRh
YmxlSW5kZXg+LCA8MzppbnRlcm5hbD4sIDw0OmZpcnN0RWRnZUluZGV4Pl07Citjb25zdCBub2Rl
RmllbGRDb3VudCA9IDU7Citjb25zdCBub2RlSWRPZmZzZXQgPSAwOworY29uc3Qgbm9kZVNpemVP
ZmZzZXQgPSAxOworY29uc3Qgbm9kZUNsYXNzTmFtZU9mZnNldCA9IDI7Citjb25zdCBub2RlSW50
ZXJuYWxPZmZzZXQgPSAzOworY29uc3Qgbm9kZUZpcnN0RWRnZU9mZnNldCA9IDQ7Citjb25zdCBu
b2RlTm9FZGdlVmFsdWUgPSAweGZmZmZmZmZmOyAvLyBVSU5UX01BWAorCisvLyBbPDA6ZnJvbS1p
ZD4sIDwxOnRvLWlkPiwgPDI6dHlwZVRhYmxlSW5kZXg+LCA8MzpkYXRhPl0KK2NvbnN0IGVkZ2VG
aWVsZENvdW50ID0gNDsKK2NvbnN0IGVkZ2VGcm9tSWRPZmZzZXQgPSAwOworY29uc3QgZWRnZVRv
SWRPZmZzZXQgPSAxOworY29uc3QgZWRnZVR5cGVPZmZzZXQgPSAyOworY29uc3QgZWRnZURhdGFP
ZmZzZXQgPSAzOworCitDaGVhcEhlYXBTbmFwc2hvdE5vZGUgPSBjbGFzcyBDaGVhcEhlYXBTbmFw
c2hvdE5vZGUKK3sKKyAgICBjb25zdHJ1Y3RvcihzbmFwc2hvdCwgbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgYXNzZXJ0KChub2RlSW5kZXggJSBub2RlRmllbGRDb3VudCkgPT09IDAsICJCYWQg
Tm9kZSBJbmRleDogIiArIG5vZGVJbmRleCk7CisKKyAgICAgICAgbGV0IG5vZGVzID0gc25hcHNo
b3Qubm9kZXM7CisgICAgICAgIHRoaXMuaWQgPSBub2Rlc1tub2RlSW5kZXggKyBub2RlSWRPZmZz
ZXRdOworICAgICAgICB0aGlzLnNpemUgPSBub2Rlc1tub2RlSW5kZXggKyBub2RlU2l6ZU9mZnNl
dF07CisgICAgICAgIHRoaXMuY2xhc3NOYW1lID0gc25hcHNob3QuY2xhc3NOYW1lRnJvbVRhYmxl
SW5kZXgobm9kZXNbbm9kZUluZGV4ICsgbm9kZUNsYXNzTmFtZU9mZnNldF0pOworICAgICAgICB0
aGlzLmludGVybmFsID0gbm9kZXNbbm9kZUluZGV4ICsgbm9kZUludGVybmFsT2Zmc2V0XSA/IHRy
dWUgOiBmYWxzZTsKKworICAgICAgICB0aGlzLm91dGdvaW5nRWRnZXMgPSBbXTsKKyAgICAgICAg
bGV0IGZpcnN0RWRnZUluZGV4ID0gbm9kZXNbbm9kZUluZGV4ICsgbm9kZUZpcnN0RWRnZU9mZnNl
dF07CisgICAgICAgIGlmIChmaXJzdEVkZ2VJbmRleCAhPT0gbm9kZU5vRWRnZVZhbHVlKSB7Cisg
ICAgICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RFZGdlSW5kZXg7IGkgPCBzbmFwc2hvdC5lZGdl
cy5sZW5ndGg7IGkgKz0gZWRnZUZpZWxkQ291bnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoc25h
cHNob3QuZWRnZXNbaSArIGVkZ2VGcm9tSWRPZmZzZXRdICE9PSB0aGlzLmlkKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB0aGlzLm91dGdvaW5nRWRnZXMucHVz
aChuZXcgQ2hlYXBIZWFwU25hcHNob3RFZGdlKHNuYXBzaG90LCBpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NoZWFwSGVhcFNuYXBzaG90RWRnZSA9IGNsYXNzIENo
ZWFwSGVhcFNuYXBzaG90RWRnZQoreworICAgIGNvbnN0cnVjdG9yKHNuYXBzaG90LCBlZGdlSW5k
ZXgpCisgICAgeworICAgICAgICBhc3NlcnQoKGVkZ2VJbmRleCAlIGVkZ2VGaWVsZENvdW50KSA9
PT0gMCwgIkJhZCBFZGdlIEluZGV4OiAiICsgZWRnZUluZGV4KTsKKyAgICAgICAgdGhpcy5zbmFw
c2hvdCA9IHNuYXBzaG90OworCisgICAgICAgIGxldCBlZGdlcyA9IHNuYXBzaG90LmVkZ2VzOwor
ICAgICAgICB0aGlzLmZyb21JZCA9IGVkZ2VzW2VkZ2VJbmRleCArIGVkZ2VGcm9tSWRPZmZzZXRd
OworICAgICAgICB0aGlzLnRvSWQgPSBlZGdlc1tlZGdlSW5kZXggKyBlZGdlVG9JZE9mZnNldF07
CisgICAgICAgIHRoaXMudHlwZSA9IHNuYXBzaG90LmVkZ2VUeXBlRnJvbVRhYmxlSW5kZXgoZWRn
ZXNbZWRnZUluZGV4ICsgZWRnZVR5cGVPZmZzZXRdKTsKKyAgICAgICAgdGhpcy5kYXRhID0gZWRn
ZXNbZWRnZUluZGV4ICsgZWRnZURhdGFPZmZzZXRdOworICAgIH0KKworICAgIGdldCBmcm9tKCkg
eyByZXR1cm4gdGhpcy5zbmFwc2hvdC5ub2RlV2l0aElkZW50aWZpZXIodGhpcy5mcm9tSWQpOyB9
CisgICAgZ2V0IHRvKCkgeyByZXR1cm4gdGhpcy5zbmFwc2hvdC5ub2RlV2l0aElkZW50aWZpZXIo
dGhpcy50b0lkKTsgfQorfQorCitDaGVhcEhlYXBTbmFwc2hvdCA9IGNsYXNzIENoZWFwSGVhcFNu
YXBzaG90Cit7CisgICAgY29uc3RydWN0b3IoanNvbikKKyAgICB7CisgICAgICAgIGxldCB7bm9k
ZXMsIG5vZGVDbGFzc05hbWVzLCBlZGdlcywgZWRnZVR5cGVzfSA9IGpzb247CisKKyAgICAgICAg
dGhpcy5fbm9kZXMgPSBuZXcgVWludDMyQXJyYXkobm9kZXMubGVuZ3RoICogbm9kZUZpZWxkQ291
bnQpOworICAgICAgICB0aGlzLl9lZGdlcyA9IG5ldyBVaW50MzJBcnJheShlZGdlcy5sZW5ndGgg
KiBlZGdlRmllbGRDb3VudCk7CisgICAgICAgIHRoaXMuX25vZGVJZGVudGlmaWVyVG9JbmRleCA9
IG5ldyBNYXA7IC8vIDxpZD4gPT4gaW5kZXggaW4gX25vZGVzCisKKyAgICAgICAgdGhpcy5fZWRn
ZVR5cGVzVGFibGUgPSBlZGdlVHlwZXM7CisgICAgICAgIHRoaXMuX25vZGVDbGFzc05hbWVzVGFi
bGUgPSBub2RlQ2xhc3NOYW1lczsKKworICAgICAgICBsZXQgbiA9IDA7CisgICAgICAgIG5vZGVz
LmZvckVhY2goKG5vZGVQYXlsb2FkKSA9PiB7CisgICAgICAgICAgICBsZXQgW2lkLCBzaXplLCBj
bGFzc05hbWVUYWJsZUluZGV4LCBpbnRlcm5hbF0gPSBub2RlUGF5bG9hZDsKKyAgICAgICAgICAg
IHRoaXMuX25vZGVJZGVudGlmaWVyVG9JbmRleC5zZXQoaWQsIG4pOworICAgICAgICAgICAgdGhp
cy5fbm9kZXNbbisrXSA9IGlkOworICAgICAgICAgICAgdGhpcy5fbm9kZXNbbisrXSA9IHNpemU7
CisgICAgICAgICAgICB0aGlzLl9ub2Rlc1tuKytdID0gY2xhc3NOYW1lVGFibGVJbmRleDsKKyAg
ICAgICAgICAgIHRoaXMuX25vZGVzW24rK10gPSBpbnRlcm5hbDsKKyAgICAgICAgICAgIHRoaXMu
X25vZGVzW24rK10gPSBub2RlTm9FZGdlVmFsdWU7CisgICAgICAgIH0pOworCisgICAgICAgIGxl
dCBlID0gMDsKKyAgICAgICAgbGV0IGxhc3ROb2RlSWRlbnRpZmllciA9IC0xOworICAgICAgICBl
ZGdlcy5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkuZm9yRWFjaCgoZWRnZVBheWxvYWQpID0+
IHsKKyAgICAgICAgICAgIGxldCBbZnJvbUlkZW50aWZpZXIsIHRvSWRlbnRpZmllciwgZWRnZVR5
cGVUYWJsZUluZGV4LCBkYXRhXSA9IGVkZ2VQYXlsb2FkOworICAgICAgICAgICAgaWYgKGZyb21J
ZGVudGlmaWVyICE9PSBsYXN0Tm9kZUlkZW50aWZpZXIpIHsKKyAgICAgICAgICAgICAgICBsZXQg
bm9kZUluZGV4ID0gdGhpcy5fbm9kZUlkZW50aWZpZXJUb0luZGV4LmdldChmcm9tSWRlbnRpZmll
cik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHRoaXMuX25vZGVzW25vZGVJbmRleCArIG5vZGVJ
ZE9mZnNldF0gPT09IGZyb21JZGVudGlmaWVyLCAiTm9kZSBsb29rdXAgZmFpbGVkIik7CisgICAg
ICAgICAgICAgICAgdGhpcy5fbm9kZXNbbm9kZUluZGV4ICsgbm9kZUZpcnN0RWRnZU9mZnNldF0g
PSBlOworICAgICAgICAgICAgICAgIGxhc3ROb2RlSWRlbnRpZmllciA9IGZyb21JZGVudGlmaWVy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5fZWRnZXNbZSsrXSA9IGZyb21JZGVu
dGlmaWVyOworICAgICAgICAgICAgdGhpcy5fZWRnZXNbZSsrXSA9IHRvSWRlbnRpZmllcjsKKyAg
ICAgICAgICAgIHRoaXMuX2VkZ2VzW2UrK10gPSBlZGdlVHlwZVRhYmxlSW5kZXg7CisgICAgICAg
ICAgICB0aGlzLl9lZGdlc1tlKytdID0gZGF0YTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAg
Z2V0IG5vZGVzKCkgeyByZXR1cm4gdGhpcy5fbm9kZXM7IH0KKyAgICBnZXQgZWRnZXMoKSB7IHJl
dHVybiB0aGlzLl9lZGdlczsgfQorCisgICAgbm9kZVdpdGhJZGVudGlmaWVyKGlkKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBDaGVhcEhlYXBTbmFwc2hvdE5vZGUodGhpcywgdGhpcy5fbm9k
ZUlkZW50aWZpZXJUb0luZGV4LmdldChpZCkpOworICAgIH0KKworICAgIG5vZGVzV2l0aENsYXNz
TmFtZShjbGFzc05hbWUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gW107CisgICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbm9kZXMubGVuZ3RoOyBpICs9IG5vZGVGaWVsZENv
dW50KSB7CisgICAgICAgICAgICBsZXQgY2xhc3NOYW1lVGFibGVJbmRleCA9IHRoaXMuX25vZGVz
W2kgKyBub2RlQ2xhc3NOYW1lT2Zmc2V0XTsKKyAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFt
ZUZyb21UYWJsZUluZGV4KGNsYXNzTmFtZVRhYmxlSW5kZXgpID09PSBjbGFzc05hbWUpCisgICAg
ICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3IENoZWFwSGVhcFNuYXBzaG90Tm9kZSh0aGlzLCBp
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBjbGFz
c05hbWVGcm9tVGFibGVJbmRleCh0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMuX25vZGVDbGFzc05hbWVzVGFibGVbdGFibGVJbmRleF07CisgICAgfQorCisgICAgZWRnZVR5
cGVGcm9tVGFibGVJbmRleCh0YWJsZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
X2VkZ2VUeXBlc1RhYmxlW3RhYmxlSW5kZXhdOworICAgIH0KK30KKworZnVuY3Rpb24gY3JlYXRl
Q2hlYXBIZWFwU25hcHNob3QoKSB7CisgICAgbGV0IGpzb24gPSBnZW5lcmF0ZUhlYXBTbmFwc2hv
dCgpOworCisgICAgbGV0IHt2ZXJzaW9uLCBub2Rlcywgbm9kZUNsYXNzTmFtZXMsIGVkZ2VzLCBl
ZGdlVHlwZXN9ID0ganNvbjsKKyAgICBhc3NlcnQodmVyc2lvbiA9PT0gMSwgIkhlYXAgU25hcHNo
b3QgcGF5bG9hZCBzaG91bGQgYmUgdmVyc2lvbiAxIik7CisgICAgYXNzZXJ0KG5vZGVzLmxlbmd0
aCwgIkhlYXAgU25hcHNob3Qgc2hvdWxkIGhhdmUgbm9kZXMiKTsKKyAgICBhc3NlcnQobm9kZUNs
YXNzTmFtZXMubGVuZ3RoLCAiSGVhcCBTbmFwc2hvdCBzaG91bGQgaGF2ZSBub2RlQ2xhc3NOYW1l
cyIpOworICAgIGFzc2VydChlZGdlcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNob3VsZCBoYXZl
IGVkZ2VzIik7CisgICAgYXNzZXJ0KGVkZ2VUeXBlcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNo
b3VsZCBoYXZlIGVkZ2VUeXBlcyIpOworCisgICAgcmV0dXJuIG5ldyBDaGVhcEhlYXBTbmFwc2hv
dChqc29uKTsKK30KKworCisvLyAtLS0tLS0tLS0tLS0KKy8vIEhlYXBTbmFwc2hvdAorLy8KKy8v
IFRoaXMgY3JlYXRlcyBhIGxvdCBvZiBvYmplY3RzIHRoYXQgbWFrZSBpdCBlYXN5IHRvIHdhbGsg
dGhlIGVudGlyZSBub2RlIGdyYXBoCisvLyAoaW5jb21pbmcgYW5kIG91dGdvaW5nIGVkZ2VzKS4g
SG93ZXZlciB3aGVuIGEgdGVzdCBjcmVhdGVzIG11bHRpcGxlIHNuYXBzaG90cworLy8gd2l0aCBz
bmFwc2hvdHMgaW4gc2NvcGUgdGhpcyBjYW4gcXVpY2tseSBleHBsb2RlIGludG8gYSBzbmFwc2hv
dCB3aXRoIGEgbWFzc2l2ZQorLy8gbnVtYmVyIG9mIG5vZGVzL2VkZ2VzLiBGb3Igc3VjaCBjYXNl
cyBjcmVhdGUgQ2hlYXBIZWFwU25hcHNob3RzLCB3aGljaCBjcmVhdGUKKy8vIGEgdmVyeSBzbWFs
bCBudW1iZXIgb2Ygb2JqZWN0cyBwZXIgSGVhcCBTbmFwc2hvdC4KKworSGVhcFNuYXBzaG90Tm9k
ZSA9IGNsYXNzIEhlYXBTbmFwc2hvdE5vZGUKK3sKKyAgICBjb25zdHJ1Y3RvcihpZCwgY2xhc3NO
YW1lLCBzaXplLCBpbnRlcm5hbCkKKyAgICB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAg
ICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICAgIHRoaXMuc2l6ZSA9IHNpemU7
IAorICAgICAgICB0aGlzLmludGVybmFsID0gaW50ZXJuYWw7CisgICAgICAgIHRoaXMuaW5jb21p
bmdFZGdlcyA9IFtdOworICAgICAgICB0aGlzLm91dGdvaW5nRWRnZXMgPSBbXTsKKyAgICB9Cit9
CisKK0hlYXBTbmFwc2hvdEVkZ2UgPSBjbGFzcyBIZWFwU25hcHNob3RFZGdlCit7CisgICAgY29u
c3RydWN0b3IoZnJvbSwgdG8sIHR5cGUsIGRhdGEpCisgICAgeworICAgICAgICB0aGlzLmZyb20g
PSBmcm9tOworICAgICAgICB0aGlzLnRvID0gdG87CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7
CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorfQorCitIZWFwU25hcHNob3QgPSBj
bGFzcyBIZWFwU25hcHNob3QKK3sKKyAgICBjb25zdHJ1Y3Rvcihqc29uKQorICAgIHsgICAgICAg
IAorICAgICAgICBsZXQge3ZlcnNpb24sIG5vZGVzLCBub2RlQ2xhc3NOYW1lcywgZWRnZXMsIGVk
Z2VUeXBlc30gPSBqc29uOworCisgICAgICAgIHRoaXMubm9kZU1hcCA9IG5ldyBNYXA7CisKKyAg
ICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzLm1hcCgobm9kZVBheWxvYWQpID0+IHsKKyAgICAgICAg
ICAgIGxldCBbaWQsIHNpemUsIGNsYXNzTmFtZUluZGV4LCBpbnRlcm5hbF0gPSBub2RlUGF5bG9h
ZDsKKyAgICAgICAgICAgIGxldCBub2RlID0gbmV3IEhlYXBTbmFwc2hvdE5vZGUoaWQsIG5vZGVD
bGFzc05hbWVzW2NsYXNzTmFtZUluZGV4XSwgc2l6ZSwgaW50ZXJuYWwpOworICAgICAgICAgICAg
dGhpcy5ub2RlTWFwLnNldChpZCwgbm9kZSk7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgZWRnZXMubWFwKChlZGdlUGF5bG9hZCkgPT4geworICAgICAg
ICAgICAgbGV0IFtmcm9tSWRlbnRpZmllciwgdG9JZGVudGlmaWVyLCBlZGdlVHlwZUluZGV4LCBk
YXRhXSA9IGVkZ2VQYXlsb2FkOworICAgICAgICAgICAgbGV0IGZyb20gPSB0aGlzLm5vZGVNYXAu
Z2V0KGZyb21JZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGxldCB0byA9IHRoaXMubm9kZU1hcC5n
ZXQodG9JZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGFzc2VydChmcm9tLCAiTWlzc2luZyBub2Rl
IGZvciBgZnJvbWAgcGFydCBvZiBlZGdlIik7CisgICAgICAgICAgICBhc3NlcnQodG8sICJNaXNz
aW5nIG5vZGUgZm9yIGB0b2AgcGFydCBvZiBlZGdlIik7CisgICAgICAgICAgICBsZXQgZWRnZSA9
IG5ldyBIZWFwU25hcHNob3RFZGdlKGZyb20sIHRvLCBlZGdlVHlwZXNbZWRnZVR5cGVJbmRleF0s
IGRhdGEpOworICAgICAgICAgICAgZnJvbS5vdXRnb2luZ0VkZ2VzLnB1c2goZWRnZSk7CisgICAg
ICAgICAgICB0by5pbmNvbWluZ0VkZ2VzLnB1c2goZWRnZSk7CisgICAgICAgIH0pOworCisgICAg
ICAgIHRoaXMucm9vdE5vZGUgPSB0aGlzLm5vZGVNYXAuZ2V0KDApOworICAgICAgICBhc3NlcnQo
dGhpcy5yb290Tm9kZSwgIk1pc3NpbmcgPHJvb3Q+IG5vZGUgd2l0aCBpZGVudGlmaWVyIDAiKTsK
KyAgICAgICAgYXNzZXJ0KHRoaXMucm9vdE5vZGUub3V0Z29pbmdFZGdlcy5sZW5ndGggPiAwLCAi
PHJvb3Q+IHNob3VsZCBoYXZlIGNoaWxkcmVuIik7CisgICAgICAgIGFzc2VydCh0aGlzLnJvb3RO
b2RlLmluY29taW5nRWRnZXMubGVuZ3RoID09PSAwLCAiPHJvb3Q+IHNob3VsZCBub3QgaGF2ZSBi
YWNrIHJlZmVyZW5jZXMiKTsKKyAgICB9CisKKyAgICBub2Rlc1dpdGhDbGFzc05hbWUoY2xhc3NO
YW1lKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IFtdOworICAgICAgICBmb3IgKGxldCBu
b2RlIG9mIHRoaXMubm9kZXMpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTmFtZSA9PT0g
Y2xhc3NOYW1lKQorICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCitmdW5jdGlvbiBjcmVhdGVIZWFw
U25hcHNob3QoKSB7CisgICAgbGV0IGpzb24gPSBnZW5lcmF0ZUhlYXBTbmFwc2hvdCgpOworCisg
ICAgbGV0IHt2ZXJzaW9uLCBub2Rlcywgbm9kZUNsYXNzTmFtZXMsIGVkZ2VzLCBlZGdlVHlwZXN9
ID0ganNvbjsKKyAgICBhc3NlcnQodmVyc2lvbiA9PT0gMSwgIkhlYXAgU25hcHNob3QgcGF5bG9h
ZCBzaG91bGQgYmUgdmVyc2lvbiAxIik7CisgICAgYXNzZXJ0KG5vZGVzLmxlbmd0aCwgIkhlYXAg
U25hcHNob3Qgc2hvdWxkIGhhdmUgbm9kZXMiKTsKKyAgICBhc3NlcnQobm9kZUNsYXNzTmFtZXMu
bGVuZ3RoLCAiSGVhcCBTbmFwc2hvdCBzaG91bGQgaGF2ZSBub2RlQ2xhc3NOYW1lcyIpOworICAg
IGFzc2VydChlZGdlcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNob3VsZCBoYXZlIGVkZ2VzIik7
CisgICAgYXNzZXJ0KGVkZ2VUeXBlcy5sZW5ndGgsICJIZWFwIFNuYXBzaG90IHNob3VsZCBoYXZl
IGVkZ2VUeXBlcyIpOworCisgICAgcmV0dXJuIG5ldyBIZWFwU25hcHNob3QoanNvbik7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>