<?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>69295</bug_id>
          
          <creation_ts>2011-10-03 14:56:44 -0700</creation_ts>
          <short_desc>Web Inspector: reimplement protocol backend/frontend source generator</short_desc>
          <delta_ts>2012-07-20 09:59:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70486</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>thakis</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477261</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-03 14:56:44 -0700</bug_when>
    <thetext>Inspector includes generated C++ and JavaScript source. Currently generator is written in Python/Perl and uses intermediate IDL format.
Get rid of IDL intermediate and rewrite generator fully in Python.
This is need to prepare protocol validator development.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477266</commentid>
    <comment_count>1</comment_count>
      <attachid>109534</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-03 14:59:14 -0700</bug_when>
    <thetext>Created attachment 109534
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477455</commentid>
    <comment_count>2</comment_count>
      <attachid>109534</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-03 23:36:31 -0700</bug_when>
    <thetext>Comment on attachment 109534
Patch

It can&apos;t be applied to the ToT could you please rebaseline it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478000</commentid>
    <comment_count>3</comment_count>
      <attachid>109704</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-04 15:24:43 -0700</bug_when>
    <thetext>Created attachment 109704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478002</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-04 15:25:44 -0700</bug_when>
    <thetext>Patch is uploaded this time to try on buildbots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478044</commentid>
    <comment_count>5</comment_count>
      <attachid>109704</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-04 16:12:12 -0700</bug_when>
    <thetext>Comment on attachment 109704
Patch

Attachment 109704 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9938611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478045</commentid>
    <comment_count>6</comment_count>
      <attachid>109704</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-04 16:14:01 -0700</bug_when>
    <thetext>Comment on attachment 109704
Patch

Attachment 109704 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9940546</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478166</commentid>
    <comment_count>7</comment_count>
      <attachid>109704</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-10-04 22:20:47 -0700</bug_when>
    <thetext>Comment on attachment 109704
Patch

Attachment 109704 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9960001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478190</commentid>
    <comment_count>8</comment_count>
      <attachid>109704</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-05 00:07:56 -0700</bug_when>
    <thetext>Comment on attachment 109704
Patch

EWS reports multiple errors (qt, gtk, efl). Make sure your make files are ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478520</commentid>
    <comment_count>9</comment_count>
      <attachid>109826</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-05 11:11:13 -0700</bug_when>
    <thetext>Created attachment 109826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478522</commentid>
    <comment_count>10</comment_count>
      <attachid>109826</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 11:15:52 -0700</bug_when>
    <thetext>Comment on attachment 109826
Patch

Attachment 109826 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9953527</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478524</commentid>
    <comment_count>11</comment_count>
      <attachid>109826</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-05 11:19:31 -0700</bug_when>
    <thetext>Comment on attachment 109826
Patch

Attachment 109826 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9958351</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478584</commentid>
    <comment_count>12</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-05 12:33:44 -0700</bug_when>
    <thetext>InspectorProtocolVersion.h was generated into WebCore folder instead of WebKit folder.
Also it was added to the list of files for compilation.

gcc -c -pipe -O2 -o obj/release/InspectorProtocolVersion.o ../../WebCore/generated/InspectorProtocolVersion.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478719</commentid>
    <comment_count>13</comment_count>
      <attachid>109871</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-05 15:13:26 -0700</bug_when>
    <thetext>Created attachment 109871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478767</commentid>
    <comment_count>14</comment_count>
      <attachid>109871</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-05 16:15:42 -0700</bug_when>
    <thetext>Comment on attachment 109871
Patch

Attachment 109871 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9981028</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478773</commentid>
    <comment_count>15</comment_count>
      <attachid>109871</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 16:30:33 -0700</bug_when>
    <thetext>Comment on attachment 109871
Patch

Attachment 109871 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9964095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479366</commentid>
    <comment_count>16</comment_count>
      <attachid>109991</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-06 12:06:02 -0700</bug_when>
    <thetext>Created attachment 109991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479374</commentid>
    <comment_count>17</comment_count>
      <attachid>109991</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-06 12:12:03 -0700</bug_when>
    <thetext>Comment on attachment 109991
Patch

Attachment 109991 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9977304</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479479</commentid>
    <comment_count>18</comment_count>
      <attachid>110021</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-06 14:21:49 -0700</bug_when>
    <thetext>Created attachment 110021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479509</commentid>
    <comment_count>19</comment_count>
      <attachid>110021</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-06 14:46:25 -0700</bug_when>
    <thetext>Comment on attachment 110021
Patch

Attachment 110021 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9964416</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479540</commentid>
    <comment_count>20</comment_count>
      <attachid>110041</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-06 15:14:09 -0700</bug_when>
    <thetext>Created attachment 110041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479842</commentid>
    <comment_count>21</comment_count>
      <attachid>110041</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-07 00:08:46 -0700</bug_when>
    <thetext>Comment on attachment 110041
Patch

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

&gt; Source/WebCore/ChangeLog:10655
&gt; +2011-10-03  Peter Rybin  &lt;peter.rybin@gmail.com&gt;
&gt; +
&gt; +        Web Inspector: reimplement protocol backend/frontend source generator
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=69295
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        No new tests. (OOPS!)
&gt; +
&gt; +        * WebCore.gyp/WebCore.gyp:
&gt; +        * inspector/CodeGeneratorInspector.pm:
&gt; +        (finish):
&gt; +        * inspector/CodeGeneratorInspector.py: Added.
&gt; +

second change log entry.

&gt; Source/WebCore/CodeGenerators.pri:679
&gt; +inspectorJSON.output = $${WC_GENERATED_SOURCES_DIR}/InspectorFrontend.cpp $${WC_GENERATED_SOURCES_DIR}/InspectorBackendDispatcher.cpp

please add headers too

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:369
&gt; +          &apos;message&apos;: &apos;Generating Inspector protocol sources from Inspector.idl&apos;,

from Inspector.json

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:446
&gt; +if (!protocolErrors-&gt;length())
&gt; +    $agentField-&gt;$methodName(&amp;error$agentCallParams);

wrong indent in the generated file.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:449
&gt; +${responseCook}sendResponse(callId, result, String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;$domainName.$methodName&quot;), protocolErrors, error);

wrong indent in the generated file.
It&apos;d be nice to extract String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;some method name&quot;) call to an inline function.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:457
&gt; +$code    if (m_inspectorFrontendChannel)

improvement: I&apos;d like to convert this if statement to guard.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:462
&gt; +    frontend_h = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.

Copyright (c) 2011

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:482
&gt; +

unnecessary empty line

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:485
&gt; +$domainClassList
&gt; +private:

unnecessary empty line was inserted between last class and private statement

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:493
&gt; +    backend_h = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.

license 2011

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:539
&gt; +

unnecessary empty line

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:540
&gt; +$enumConstants

$methodNamesEnumContent ?

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:541
&gt; +};

wrong indent

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:565
&gt; +    backend_cpp = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.

Copyright (c) 2011

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:589
&gt; +

unnecessary empty string

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:601
&gt; +$messageHandlers

wrong indent in the generated file.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:666
&gt; +    if (m_inspectorFrontendChannel)

improvement: I&apos;d like to convert this if statement to guard.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:701
&gt; +    if (m_inspectorFrontendChannel)

improvement: I&apos;d like to convert this if statement to guard.

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:840
&gt; +PassRefPtr&lt;InspectorObject&gt; InspectorBackendDispatcher::getObject(InspectorObject* object, const String&amp; name, bool* valueFound, InspectorArray* protocolErrors)
&gt; +{
&gt; +    ASSERT(protocolErrors);
&gt; +
&gt; +    if (valueFound)
&gt; +        *valueFound = false;
&gt; +
&gt; +    RefPtr&lt;InspectorObject&gt; value = InspectorObject::create();
&gt; +
&gt; +    if (!object) {
&gt; +        if (!valueFound) {
&gt; +            // Required parameter in missing params container.
&gt; +            protocolErrors-&gt;pushString(String::format(&quot;&apos;params&apos; object must contain required parameter &apos;%s&apos; with type &apos;Object&apos;.&quot;, name.utf8().data()));
&gt; +        }
&gt; +        return value;
&gt; +    }
&gt; +
&gt; +    InspectorObject::const_iterator end = object-&gt;end();
&gt; +    InspectorObject::const_iterator valueIterator = object-&gt;find(name);
&gt; +
&gt; +    if (valueIterator == end) {
&gt; +        if (!valueFound)
&gt; +            protocolErrors-&gt;pushString(String::format(&quot;Parameter &apos;%s&apos; with type &apos;Object&apos; was not found.&quot;, name.utf8().data()));
&gt; +        return value;
&gt; +    }
&gt; +
&gt; +    if (!valueIterator-&gt;second-&gt;asObject(&amp;value))
&gt; +        protocolErrors-&gt;pushString(String::format(&quot;Parameter &apos;%s&apos; has wrong type. It must be &apos;Object&apos;.&quot;, name.utf8().data()));
&gt; +    else
&gt; +        if (valueFound)
&gt; +            *valueFound = true;
&gt; +    return value;
&gt; +}
&gt; +

The old version is generating the getters

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:874
&gt; +bool InspectorBackendDispatcher::getCommandName(const String&amp; message, String* result)

empty line required

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:914
&gt; +
&gt; +

unnecessary empty lines

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:928
&gt; +    backend_js = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.

license 2011

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:940
&gt; +$delegates$eventArgs$domainDispatchers    }

wrong indent in the generated code

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:1398
&gt; +    enumConstants=join(Generator.method_name_enum_list, &quot;\n&quot;),

bad name</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480075</commentid>
    <comment_count>22</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-07 09:38:34 -0700</bug_when>
    <thetext>Hi Ilya,

Thank you for review!

In this change I&apos;m trying to provide a generator that is character-compatible with the old version. Old extra or missing lines are kept as legacy. I think we should leave all improvements to the next CL not to do 2 things at once.

&gt; &gt; Source/WebCore/ChangeLog:10655
&gt; &gt; +2011-10-03  Peter Rybin  &lt;peter.rybin@gmail.com&gt;
&gt; &gt; +
&gt; &gt; +        Web Inspector: reimplement protocol backend/frontend source generator
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=69295
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; &gt; +        No new tests. (OOPS!)
&gt; &gt; +
&gt; &gt; +        * WebCore.gyp/WebCore.gyp:
&gt; &gt; +        * inspector/CodeGeneratorInspector.pm:
&gt; &gt; +        (finish):
&gt; &gt; +        * inspector/CodeGeneratorInspector.py: Added.
&gt; &gt; +
&gt; 
&gt; second change log entry.

Done

&gt; &gt; Source/WebCore/CodeGenerators.pri:679
&gt; &gt; +inspectorJSON.output = $${WC_GENERATED_SOURCES_DIR}/InspectorFrontend.cpp $${WC_GENERATED_SOURCES_DIR}/InspectorBackendDispatcher.cpp
&gt; please add headers too

Are you sure it&apos;s the right thing to do? Look at the removed target below, it doesn&apos;t list header files.

&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:369
&gt; &gt; +          &apos;message&apos;: &apos;Generating Inspector protocol sources from Inspector.idl&apos;,
&gt; from Inspector.json
Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:449
&gt; &gt; +${responseCook}sendResponse(callId, result, String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;$domainName.$methodName&quot;), protocolErrors, error);
&gt; It&apos;d be nice to extract String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;some method name&quot;) call to an inline function.

There&apos;s no need for formatting it on runtime. We should format it right in generator instead.

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:540
&gt; &gt; +$enumConstants
&gt; $methodNamesEnumContent ?

Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:601
&gt; &gt; +$messageHandlers
&gt; wrong indent in the generated file.

This is a multi-line placeholder. Indents are inside argument.

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:840
&gt; &gt; +PassRefPtr&lt;InspectorObject&gt; InspectorBackendDispatcher::getObject(InspectorObject* object, const String&amp; name, bool* valueFound, InspectorArray* protocolErrors)
&gt; &gt; +{
&gt; The old version is generating the getters

I missed this. Let me handle it in the next change. I would consider leaving it as it is or programming using C++ template technology (to keep the minimum amount of generated code).

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:1398
&gt; &gt; +    enumConstants=join(Generator.method_name_enum_list, &quot;\n&quot;),
&gt; bad name

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480083</commentid>
    <comment_count>23</comment_count>
      <attachid>110162</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-07 09:53:57 -0700</bug_when>
    <thetext>Created attachment 110162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480196</commentid>
    <comment_count>24</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-07 12:08:41 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:449
&gt; &gt; &gt; +${responseCook}sendResponse(callId, result, String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;$domainName.$methodName&quot;), protocolErrors, error);
&gt; &gt; It&apos;d be nice to extract String::format(&quot;Some arguments of method &apos;%s&apos; can&apos;t be processed&quot;, &quot;some method name&quot;) call to an inline function.
&gt; 
&gt; There&apos;s no need for formatting it on runtime. We should format it right in generator instead.
&gt; 

In this case the size of binary will be bigger.


&gt; &gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:601
&gt; &gt; &gt; +$messageHandlers
&gt; &gt; wrong indent in the generated file.
&gt; 
&gt; This is a multi-line placeholder. Indents are inside argument.

I saw the wrong indent in the generated file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481674</commentid>
    <comment_count>25</comment_count>
      <attachid>110523</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-11 09:22:32 -0700</bug_when>
    <thetext>Created attachment 110523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484790</commentid>
    <comment_count>26</comment_count>
      <attachid>110523</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-16 10:54:37 -0700</bug_when>
    <thetext>Comment on attachment 110523
Patch

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

Minor formal comments, otherwise code looks good.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Web Inspector: reimplement protocol backend/frontend source generator

You should be more explicit wrt rationale of the change. I.e. port source generator from perl to python, explain why.

&gt; Source/WebCore/ChangeLog:3178
&gt; +2011-10-04  Peter Rybin  &lt;peter.rybin@gmail.com&gt;

You should nuke this

&gt; Source/WebCore/ChangeLog:13819
&gt; +2011-10-03  Peter Rybin  &lt;peter.rybin@gmail.com&gt;

ditto

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:363
&gt; +            &apos;../inspector/CodeGeneratorInspector.py&apos;,

prefer &lt;@(_inputs)

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:493
&gt; +    backend_h = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.

2011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485219</commentid>
    <comment_count>27</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-17 09:36:54 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Web Inspector: reimplement protocol backend/frontend source generator
&gt; You should be more explicit wrt rationale of the change. I.e. port source generator from perl to python, explain why.

Done

&gt; &gt; Source/WebCore/ChangeLog:3178
&gt; &gt; +2011-10-04  Peter Rybin  &lt;peter.rybin@gmail.com&gt;
&gt; You should nuke this

Done

&gt; &gt; Source/WebCore/ChangeLog:13819
&gt; &gt; +2011-10-03  Peter Rybin  &lt;peter.rybin@gmail.com&gt;
&gt; 
&gt; ditto

Doneto

&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:363
&gt; &gt; +            &apos;../inspector/CodeGeneratorInspector.py&apos;,
&gt; 
&gt; prefer &lt;@(_inputs)
Done

&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:493
&gt; &gt; +    backend_h = string.Template(&quot;&quot;&quot;// Copyright (c) 2010 The Chromium Authors. All rights reserved.
&gt; 2011

Let&apos;s not modify output during this change. This change is the true port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485221</commentid>
    <comment_count>28</comment_count>
      <attachid>111276</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-17 09:40:33 -0700</bug_when>
    <thetext>Created attachment 111276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485223</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 09:44:20 -0700</bug_when>
    <thetext>Attachment 111276 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
Current branch master is up to date.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485238</commentid>
    <comment_count>30</comment_count>
      <attachid>111279</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-17 10:07:38 -0700</bug_when>
    <thetext>Created attachment 111279
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485243</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 10:10:58 -0700</bug_when>
    <thetext>Attachment 111279 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;, &apos;--chromium&apos;]&quot; exit_code: 2

Updating OpenSource
From git://git.webkit.org/WebKit
   38bca30..7d79b00  master     -&gt; origin/master
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/accessibility/AccessibilitySlider.h
	M	Source/WebCore/accessibility/AccessibilityScrollView.h
	M	Source/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp
	M	Source/WebCore/accessibility/AccessibilityTableColumn.cpp
	M	Source/WebCore/accessibility/AccessibilityRenderObject.h
	M	Source/WebCore/accessibility/AccessibilityObject.h
	M	Source/WebCore/accessibility/AccessibilitySlider.cpp
	M	Source/WebCore/accessibility/AccessibilityScrollView.cpp
	M	Source/WebCore/accessibility/AccessibilityRenderObject.cpp
	M	Source/WebCore/accessibility/AccessibilityObject.cpp
	M	Source/WebCore/accessibility/AccessibilityTableHeaderContainer.h
	M	Source/WebCore/accessibility/AccessibilityTableColumn.h
r97629 = db16dcbed1aa59c3f8b9618e43d75410fa38e632 (refs/remotes/trunk)
	M	LayoutTests/platform/qt-wk2/Skipped
	M	LayoutTests/ChangeLog
r97630 = 7d79b00ad79af37d995a3601775a897ea3539050 (refs/remotes/trunk)
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/trunk.
Updating chromium port dependencies using gclient...
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Re-trying &apos;depot_tools/gclient sync&apos;
Error: Can&apos;t switch the checkout to http://v8.googlecode.com/svn/branches/3.6@9637; UUID don&apos;t match and there is local changes in /mnt/git/webkit-style-queue/Source/WebKit/chromium/v8. Delete the directory and try again.
Error: &apos;depot_tools/gclient sync&apos; failed 3 tries and returned 256 at Tools/Scripts/update-webkit-chromium line 107.
Re-trying &apos;depot_tools/gclient sync&apos;
No such file or directory at Tools/Scripts/update-webkit line 104.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486574</commentid>
    <comment_count>32</comment_count>
      <attachid>111279</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-18 23:20:00 -0700</bug_when>
    <thetext>Comment on attachment 111279
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:265
&gt; +        def getCParamType(cls, param_type, optional):
&gt; +            if (param_type == ParamType.EVENT):
&gt; +                if optional:
&gt; +                    return cls._ref_c_type
&gt; +                else:
&gt; +                    return cls._plain_c_type
&gt; +            else:
&gt; +                return cls._plain_c_type

I&apos;m a bit confused by the mix of styles in this script.
I&apos;d like to see the names of methods, member variables, etc formatted according to WebKit style guide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486933</commentid>
    <comment_count>33</comment_count>
      <attachid>111660</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-19 12:52:07 -0700</bug_when>
    <thetext>Created attachment 111660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486934</commentid>
    <comment_count>34</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-10-19 12:56:33 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 111279 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111279&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:265
&gt; &gt; +        def getCParamType(cls, param_type, optional):
&gt; &gt; +            if (param_type == ParamType.EVENT):
&gt; &gt; +                if optional:
&gt; &gt; +                    return cls._ref_c_type
&gt; &gt; +                else:
&gt; &gt; +                    return cls._plain_c_type
&gt; &gt; +            else:
&gt; &gt; +                return cls._plain_c_type
&gt; 
&gt; I&apos;m a bit confused by the mix of styles in this script.
&gt; I&apos;d like to see the names of methods, member variables, etc formatted according to WebKit style guide.

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486982</commentid>
    <comment_count>35</comment_count>
      <attachid>111660</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-19 14:01:06 -0700</bug_when>
    <thetext>Comment on attachment 111660
Patch

I asked Peter to keep the generator code to be consistent with WebKit style guide. http://www.webkit.org/coding/coding-style.html
But Peter found that WebKit community has a separate guide for Python and informally supports PEP8.

&quot;Informally, we try to follow  PEP8. Eventually we may make this official.&quot; from http://trac.webkit.org/wiki/PythonGuidelines


lgtm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487437</commentid>
    <comment_count>36</comment_count>
      <attachid>111660</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-20 02:49:31 -0700</bug_when>
    <thetext>Comment on attachment 111660
Patch

Clearing flags on attachment: 111660

Committed r97954: &lt;http://trac.webkit.org/changeset/97954&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487438</commentid>
    <comment_count>37</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-20 02:49:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487804</commentid>
    <comment_count>38</comment_count>
      <attachid>111828</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-20 13:01:42 -0700</bug_when>
    <thetext>Created attachment 111828
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488175</commentid>
    <comment_count>39</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-20 22:59:47 -0700</bug_when>
    <thetext>Committed r98069: &lt;http://trac.webkit.org/changeset/98069&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488552</commentid>
    <comment_count>40</comment_count>
      <attachid>111828</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-10-21 12:18:06 -0700</bug_when>
    <thetext>Comment on attachment 111828
Patch

Clearing r? from the patch that has landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674658</commentid>
    <comment_count>41</comment_count>
    <who name="Nico Weber">thakis</who>
    <bug_when>2012-07-20 09:53:46 -0700</bug_when>
    <thetext>The build output when building chromium now looks like this:

hummer:src thakis$ time ninja -C out/Release/ chrome 
ninja: Entering directory `out/Release/&apos;
[595/10791] ACTION Generating Inspector protocol sources from Inspector.json
    writing ../../../../../out/Release/gen/webkit/InspectorBackendDispatcher.h
    writing ../../../../../out/Release/gen/webcore/InspectorBackendDispatcher.cpp
    writing ../../../../../out/Release/gen/webkit/InspectorFrontend.h
    writing ../../../../../out/Release/gen/webcore/InspectorFrontend.cpp
    writing ../../../../../out/Release/gen/webkit/InspectorTypeBuilder.h
    writing ../../../../../out/Release/gen/webcore/InspectorBackendCommands.js
[5508/10791] CXX obj/third_party/WebKit/Source/WebCore/html/webcore_html.HTMLStyleElement.o


Can you remove the print spew from this new generator please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674662</commentid>
    <comment_count>42</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-07-20 09:59:49 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; The build output when building chromium now looks like this:
&gt; 
&gt; hummer:src thakis$ time ninja -C out/Release/ chrome 
&gt; ninja: Entering directory `out/Release/&apos;
&gt; [595/10791] ACTION Generating Inspector protocol sources from Inspector.json
&gt;     writing ../../../../../out/Release/gen/webkit/InspectorBackendDispatcher.h
&gt;     writing ../../../../../out/Release/gen/webcore/InspectorBackendDispatcher.cpp
&gt;     writing ../../../../../out/Release/gen/webkit/InspectorFrontend.h
&gt;     writing ../../../../../out/Release/gen/webcore/InspectorFrontend.cpp
&gt;     writing ../../../../../out/Release/gen/webkit/InspectorTypeBuilder.h
&gt;     writing ../../../../../out/Release/gen/webcore/InspectorBackendCommands.js
&gt; [5508/10791] CXX obj/third_party/WebKit/Source/WebCore/html/webcore_html.HTMLStyleElement.o
&gt; 
&gt; 
&gt; Can you remove the print spew from this new generator please?

Sorry about this.
https://bugs.webkit.org/show_bug.cgi?id=91758</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109534</attachid>
            <date>2011-10-03 14:59:14 -0700</date>
            <delta_ts>2011-10-04 15:24:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111004015912.patch</filename>
            <type>text/plain</type>
            <size>57046</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU0NzAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MTAxNzI5NWNhODhlYzY5
ZDFjMzVmMTQzYzEzNjBkN2M0ZmY3ZTc2Li4wMzliNjgzZDA0MWYzODNiZjY2YTBjNTQ5MzlhNzg3
ODk2N2U4ZjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMDMgIFBldGVy
IFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOgorICAgICAgICAoZmluaXNo
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogQWRkZWQu
CisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1YnkgYmFzZXMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IDI4YzQ3YWNiNjhmNDhjNWExYTdjN2NiNjZjZTIzODU5
OWI1NTQ2ZTAuLmQ1N2U2ODc3YTUyYTI3MDEwMDAxYzhhOWUxY2I3NDM0NDZmNzZiODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0zMzUsNiArMzM1LDcwIEBACiAg
IH0sCiAgICd0YXJnZXRzJzogWwogICAgIHsKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0
b3JfaWRsXzInLAorICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAnYWN0aW9ucyc6IFsKKyAg
ICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3Rv
Y29sSURMJywKKyAgICAgICAgICAnaW5wdXRzJzogWworICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24nLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRs
XzInLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKKyAgICAgICAgICAg
ICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgXSwKKyAgICAgICAgICB9
LAorICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAgICAncHl0aG9uJywKKyAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAn
LW8nLAorICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCisgICAgICAgICAgICAnPEAoX2lucHV0
cyknCisgICAgICAgICAgXSwKKyAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3Bl
Y3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCisgICAgICAgIH0sCisg
ICAgICBdCisgICAgfSwKKyAgICB7CisgICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3By
b3RvY29sX3NvdXJjZXMnLAorICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAnZGVwZW5kZW5j
aWVzJzogWworICAgICAgICAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXNfMicKKyAgICAgIF0s
CisgICAgICAnYWN0aW9ucyc6IFsKKyAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6
ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCisgICAgICAgICAgJ2lucHV0cyc6
IFsKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weScs
CisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKKyAgICAgICAgICBd
LAorICAgICAgICAgICdvdXRwdXRzJzogWworICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywKKyAgICAg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2ViY29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JGcm9udGVuZC5oJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmRTdHVi
LmpzJywKKyAgICAgICAgICBdLAorICAgICAgICAgICd2YXJpYWJsZXMnOiB7CisgICAgICAgICAg
ICAnZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgIF0sCisgICAgICAgICAg
fSwKKyAgICAgICAgICAnYWN0aW9uJzogWworICAgICAgICAgICAgJ3B5dGhvbicsCisgICAgICAg
ICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHknLAorICAgICAgICAg
ICAgJy4uL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbicsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2Via2l0JywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLXNpbXBsZWpzb25fcGF0aD0uLi8u
Li9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3RoaXJkcGFydHknLAorICAgICAgICAgIF0sCisgICAg
ICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbnNwZWN0b3IgcHJvdG9jb2wgc291cmNlcyBm
cm9tIEluc3BlY3Rvci5pZGwnLAorICAgICAgICB9LAorICAgICAgXQorICAgIH0sCisgICAgewog
ICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9pZGwnLAogICAgICAgJ3R5cGUnOiAnbm9u
ZScsCiAgICAgICAnYWN0aW9ucyc6IFsKQEAgLTM2MywxNCArNDI3LDE0IEBACiAgICAgICBdCiAg
ICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3Nv
dXJjZXMnLAorICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2Vz
XzInLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAg
ICAgICAnaW5zcGVjdG9yX2lkbCcKICAgICAgIF0sCiAgICAgICAnYWN0aW9ucyc6IFsKICAgICAg
ICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29s
U291cmNlcycsCisgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJv
dG9jb2xTb3VyY2VzIDInLAogICAgICAgICAgICMgVGhlIHNlY29uZCBpbnB1dCBpdGVtIHdpbGwg
YmUgdXNlZCBhcyBpdGVtIG5hbWUgaW4gdmNwcm9qLgogICAgICAgICAgICMgSXQgaXMgbm90IHBv
c3NpYmxlIHRvIHB1dCBJbnNwZWN0b3IuaWRsIHRoZXJlIGJlY2F1c2UKICAgICAgICAgICAjIGFs
bCBpZGwgZmlsZXMgYXJlIG1hcmtpbmcgYXMgZXhjbHVkZWQgYnkgZ3lwIGdlbmVyYXRvci4KQEAg
LTM4MywxMSArNDQ3LDExIEBACiAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRw
dXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKLSAgICAg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2ViY29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JGcm9udGVuZC5oJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcC5vbGQnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMub2xkJywKKyAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aC5vbGQnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwLm9sZCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJN
RURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgub2xkJywKICAgICAgICAgICBd
LAogICAgICAgICAgICd2YXJpYWJsZXMnOiB7CiAgICAgICAgICAgICAnZ2VuZXJhdG9yX2luY2x1
ZGVfZGlycyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KaW5kZXggZjFmODBiNDZjZjA4Njk0NjMzM2MzOTNjNjc4ZTQxNWUwOTlj
NzY1OS4uYjVlMDVmYjA0MGJjZTQ3MWQyODg5YjBhODk1ODZlYjNjNzE1MGFlNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KQEAg
LTExMzAsMTIgKzExMzAsMTIgQEAgc3ViIGZpbmlzaAogICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJvcigpKTsKICAgICB1bnNoaWZ0
KEBmcm9udGVuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUZyb250ZW5kQ29uc3RydWN0b3JJbXBsKCks
ICIiKTsKIAotICAgIG9wZW4obXkgJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRmcm9udGVuZENsYXNz
TmFtZS5jcHAiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRmcm9udGVu
ZENsYXNzTmFtZS5jcHAiOworICAgIG9wZW4obXkgJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRmcm9u
dGVuZENsYXNzTmFtZS5jcHAub2xkIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1
dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKICAgICBwcmludCAkU09VUkNFIGpvaW4oIlxu
IiwgZ2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsIFxA
ZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsKICAg
ICBjbG9zZSgkU09VUkNFKTsKICAgICB1bmRlZigkU09VUkNFKTsKIAotICAgIG9wZW4obXkgJEhF
QURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAi
Q291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5o
IjsKKyAgICBvcGVuKG15ICRIRUFERVIsICI+JG91dHB1dEhlYWRlcnNEaXIvJGZyb250ZW5kQ2xh
c3NOYW1lLmgub2xkIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNE
aXIvJGZyb250ZW5kQ2xhc3NOYW1lLmgiOwogICAgIHByaW50ICRIRUFERVIgZ2VuZXJhdGVIZWFk
ZXIoJGZyb250ZW5kQ2xhc3NOYW1lLCAkZnJvbnRlbmRDbGFzc05hbWUsIFwlZnJvbnRlbmRUeXBl
cywgJGZyb250ZW5kQ29uc3RydWN0b3IsIFxAZnJvbnRlbmRDb25zdGFudERlY2xhcmF0aW9ucywg
XEBmcm9udGVuZE1ldGhvZHMsIGpvaW4oIlxuIiwgQGZyb250ZW5kRm9vdGVyKSk7CiAgICAgY2xv
c2UoJEhFQURFUik7CiAgICAgdW5kZWYoJEhFQURFUik7CkBAIC0xMTY2LDE3ICsxMTY2LDE3IEBA
IHN1YiBmaW5pc2gKIAogICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiIp
OwogCi0gICAgb3BlbigkU09VUkNFLCAiPiRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05hbWUuY3Bw
IikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kYmFja2VuZENsYXNzTmFt
ZS5jcHAiOworICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1l
LmNwcC5vbGQiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5k
Q2xhc3NOYW1lLmNwcCI7CiAgICAgcHJpbnQgJFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRlU291
cmNlKCRiYWNrZW5kQ2xhc3NOYW1lLCBcJWJhY2tlbmRUeXBlcywgXEBiYWNrZW5kQ29uc3RhbnRE
ZWZpbml0aW9ucywgXEBiYWNrZW5kTWV0aG9kc0ltcGwpKTsKICAgICBjbG9zZSgkU09VUkNFKTsK
ICAgICB1bmRlZigkU09VUkNFKTsKIAotICAgIG9wZW4oJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVy
c0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91
dHB1dEhlYWRlcnNEaXIvJGJhY2tlbmRDbGFzc05hbWUuaCI7CisgICAgb3BlbigkSEVBREVSLCAi
PiRvdXRwdXRIZWFkZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgub2xkIikgfHwgZGllICJDb3Vs
ZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGJhY2tlbmRDbGFzc05hbWUuaCI7CiAg
ICAgcHJpbnQgJEhFQURFUiBqb2luKCJcbiIsIGdlbmVyYXRlSGVhZGVyKCRiYWNrZW5kQ2xhc3NO
YW1lLCAkYmFja2VuZENsYXNzRGVjbGFyYXRpb24sIFwlYmFja2VuZFR5cGVzLCAkYmFja2VuZENv
bnN0cnVjdG9yLCBcQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgXEBiYWNrZW5kTWV0aG9k
cywgam9pbigiXG4iLCBAYmFja2VuZEZvb3RlcikpKTsKICAgICBjbG9zZSgkSEVBREVSKTsKICAg
ICB1bmRlZigkSEVBREVSKTsKIAotICAgIG9wZW4obXkgJEpTX1NUVUIsICI+JG91dHB1dERpci8k
YmFja2VuZEpTU3R1Yk5hbWUuanMiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0
RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyI7CisgICAgb3BlbihteSAkSlNfU1RVQiwgIj4kb3V0
cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcy5vbGQiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4g
ZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyI7CiAgICAgcHJpbnQgJEpTX1NU
VUIgam9pbigiXG4iLCBnZW5lcmF0ZUJhY2tlbmRTdHViSlMoKSk7CiAgICAgY2xvc2UoJEpTX1NU
VUIpOwogICAgIHVuZGVmKCRKU19TVFVCKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI2YTQzMmU3OGI4OWMz
NDJjMTY2NDc0ODE2MThiYjhmN2JlOTU1MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0wLDAgKzEsMTI5NSBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
IyBtZXQ6CisjIAorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIyAKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
anNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKworY21kbGluZV9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIoKQorYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNl
ci5wYXJzZV9hcmdzKCkKKwordHJ5OgorICBpbnB1dF9qc29uX2ZpbGVuYW1lLCBvdXRwdXRfaGVh
ZGVyX2Rpcm5hbWUsIG91dHB1dF9jcHBfZGlybmFtZSA9IGFyZ192YWx1ZXMKK2V4Y2VwdCBWYWx1
ZUVycm9yLCBlOgorICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1s
aW5lIGFyZ3VtZW50czogJXNcblxuIiAlIGUpCisgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8
c2NyaXB0PiBJbnNwZWN0b3IuanNvbiA8b3V0cHV0X2hlYWRlcl9kaXI+IDxvdXRwdXRfY3BwX2Rp
cj5cbiIpCisgIGV4aXQoMSkKKworCitjbGFzcyBEb21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgorICAgICAg
ICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfdHlwZV9tYXA6CisgICAgICAgICAgICBhZ2Vu
dF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9t
YWluX25hbWUKKyAgICAgICAgICAgIAorICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdl
bnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IGNscy5hZ2Vu
dF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJBZ2VudCIKKyAgICAgICAg
ICAgIAorICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5cGVf
bmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFtZSBp
biBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFpbl9u
YW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucyAKKyAgICAgICAgICAgIGFnZW50X2ZpZWxk
X25hbWUgPSBmaWVsZF9uYW1lX3JlcworICAgICAgICByZXR1cm4gUmVzCisKKyAgICBza2lwX2pz
X2JpbmRfZG9tYWlucyA9IHNldChbIlJ1bnRpbWUiLCAiQ1NTIiwgIkRPTURlYnVnZ2VyIl0pCisg
ICAgaGlkZGVuX2RvbWFpbnMgPSBzZXQoWyJJbnNwZWN0b3IiXSkKKyAgICBhZ2VudF90eXBlX21h
cCA9IHsgIk5ldHdvcmsiOiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCIgfQorICAgIAorICAgICMg
VE9ETzogZ2V0IHJpZCBvZiB0aGlzLCBnZW5lcmF0ZSBuYW1lcyBpbnN0ZWFkLgorICAgIGFnZW50
X2ZpZWxkX25hbWVfbWFwID0geworICAgICAgICAiUGFnZSI6ICJwYWdlQWdlbnQiLAorICAgICAg
ICAiUnVudGltZSI6ICJydW50aW1lQWdlbnQiLAorICAgICAgICAiQ29uc29sZSI6ICJjb25zb2xl
QWdlbnQiLAorICAgICAgICAiTmV0d29yayI6ICAicmVzb3VyY2VBZ2VudCIsCisgICAgICAgICJE
YXRhYmFzZSI6ICAiZGF0YWJhc2VBZ2VudCIsCisgICAgICAgICJET01TdG9yYWdlIjogICJkb21T
dG9yYWdlQWdlbnQiLAorICAgICAgICAiQXBwbGljYXRpb25DYWNoZSI6ICAiYXBwbGljYXRpb25D
YWNoZUFnZW50IiwKKyAgICAgICAgIkRPTSI6ICAiZG9tQWdlbnQiLAorICAgICAgICAiQ1NTIjog
ICJjc3NBZ2VudCIsCisgICAgICAgICJEZWJ1Z2dlciI6ICJkZWJ1Z2dlckFnZW50IiwKKyAgICAg
ICAgIkRPTURlYnVnZ2VyIjogImRvbURlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiUHJvZmlsZXIi
OiAicHJvZmlsZXJBZ2VudCIsCisgICAgICAgICJXb3JrZXIiOiAid29ya2VyQWdlbnQiLAorICAg
ICB9CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4iOgor
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxpZiBqc29uX3R5cGUg
PT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCisgICAgICAg
IGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
QXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6CisgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRlZ2Vy
IjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAgZWxpZiBqc29uX3R5
cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiVW5rbm93biB0eXBlOiAl
cyIgJSBqc29uX3R5cGUKKyAgICAKKyAgICBjbGFzcyBTdHJpbmcob2JqZWN0KToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1R5cGVOYW1lKHBhcmFtX3R5cGUpOgorICAg
ICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJjb25zdCBTdHJpbmcmIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIlN0cmluZyIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBnZXRHZXR0ZXJOYW1lKCk6IHJldHVybiAiU3RyaW5nIgorCisgICAgICAgIGdldFNldHRlck5h
bWUgPSBnZXRHZXR0ZXJOYW1lCisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKTogcmV0dXJuICJcIlwiIgorICAgICAgICAKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOiByZXR1cm4gInN0
cmluZyIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZl
bnRQYXJhbUNoZWNrT3B0aW9uYWwoKTogcmV0dXJuIEZhbHNlICAKKworICAgIGNsYXNzIEludChv
YmplY3QpOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDVHlwZU5hbWUo
cGFyYW1fdHlwZSk6IHJldHVybiAiaW50IgorICAgICAgICAKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOiByZXR1cm4gIkludCIKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0ZXJOYW1lKCk6IHJldHVybiAiTnVtYmVy
IgorICAgICAgICAKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRp
YWxpemVyKCk6IHJldHVybiAiMCIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEpzQmluZFR5cGUoKTogcmV0dXJuICJudW1iZXIiIAorICAgICAgICAKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25h
bCgpOiByZXR1cm4gRmFsc2UgIAorCisgICAgY2xhc3MgTnVtYmVyKG9iamVjdCk6CisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENUeXBlTmFtZShwYXJhbV90eXBlKTogcmV0
dXJuICJkb3VibGUiCisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBnZXRHZXR0ZXJOYW1lKCk6IHJldHVybiAiT2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGdldFNldHRlck5hbWUoKTogcmV0dXJuICJOdW1iZXIiCisgICAgICAg
IAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKTog
cmFpc2UgVmFsdWVFcnJvciwgIlVua25vd24gdHlwZSIKKyAgICAgICAgCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKTogcmFpc2UgVmFsdWVFcnJvciwg
IlVua25vd24gdHlwZSIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKTogcmV0dXJuIEZhbHNlCisKKyAgICBjbGFz
cyBCb29sKG9iamVjdCk6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENU
eXBlTmFtZShwYXJhbV90eXBlKTogcmV0dXJuICJib29sIgorICAgICAgICAKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOiByZXR1cm4gIkJvb2xlYW4i
CisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0ZXJO
YW1lKCk6IHJldHVybiAiQm9vbGVhbiIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOiByZXR1cm4gImZhbHNlIgorICAgICAgICAK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOiByZXR1
cm4gImJvb2xlYW4iCisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6IHJldHVybiBUcnVlICAKKworICAgIGNsYXNz
IE9iamVjdChvYmplY3QpOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRD
VHlwZU5hbWUocGFyYW1fdHlwZSk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFt
VHlwZS5FVkVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEdldHRlck5hbWUoKTogcmV0dXJuICJPYmplY3QiCisgICAgICAgIAorICAg
ICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorICAgICAgICAKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6IHJldHVybiAiSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSIKKyAgICAgICAgCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEpzQmluZFR5cGUoKTogcmV0dXJuICJvYmplY3QiIAorICAgICAgICAKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25h
bCgpOiByZXR1cm4gVHJ1ZSAgCisKKyAgICBjbGFzcyBBcnJheShvYmplY3QpOgorICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDVHlwZU5hbWUocGFyYW1fdHlwZSk6CisgICAg
ICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5PVVRQVVQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IgorICAgICAgICAgICAgZWxpZiBwYXJh
bV90eXBlID09IFBhcmFtVHlwZS5JTlBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIlJlZlB0
cjxJbnNwZWN0b3JBcnJheT4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iCisgICAgICAgIAorICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6IHJldHVybiAiQXJyYXkiCisg
ICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0ZXJOYW1l
KCk6IHJldHVybiAiQXJyYXkiCisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKTogcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCkiCisgICAgICAgIAorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0Jp
bmRUeXBlKCk6IHJldHVybiAib2JqZWN0IgorICAgICAgICAKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOiByZXR1cm4gRmFsc2Ug
IAorCitjbGFzcyBQYXJhbVR5cGUob2JqZWN0KToKKyAgICBJTlBVVCA9ICJpbnB1dCIKKyAgICBP
VVRQVVQgPSAib3V0cHV0IgorICAgIEVWRU5UID0gImV2ZW50IgorCitjbGFzcyBUeXBlRGF0YShv
YmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToK
KyAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNvbl9k
b21haW5fID0ganNvbl9kb21haW4KKyAgICAgICAgCisgICAgICAgIGlmICJ0eXBlIiBpbiBqc29u
X3R5cGU6CisgICAgICAgICAgICBqc29uX3R5cGVfbmFtZSA9IGpzb25fdHlwZVsidHlwZSJdCisg
ICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVfbmFtZSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJVbmtub3duIHR5cGUiCisg
ICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKworICAgIGRlZiBnZXRSYXdUeXBlKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KKworCitjbGFzcyBUeXBlTWFwOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGkpOgorICAgICAgICBzZWxmLm1hcF8gPSB7fQorICAg
ICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpOgorICAgICAgICAgICAgZG9tYWluX25hbWUgPSBq
c29uX2RvbWFpblsiZG9tYWluIl0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG9tYWluX21h
cCA9IHt9CisgICAgICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0gZG9tYWluX21hcCAK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKKyAg
ICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgorICAg
ICAgICAgICAgICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAgICAgICAg
ICAgICAgICAgdHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbikKKyAg
ICAgICAgICAgICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCisgICAg
ICAgICAgICAgICAgICAgIAorICAgIGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFt
ZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0gICAg
ICAgIAorCitkZWYgcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9t
YWluX25hbWUpOgorICAgIGlmICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKKyAgICAgICAganNv
bl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCisgICAgICAgIHR5cGVfZGF0YSA9IGdldFJl
ZkRhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gdHlwZV9k
YXRhLmdldFJhd1R5cGUoKQorICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVyOgorICAg
ICAgICBqc29uX3R5cGUgPSBqc29uX3BhcmFtZXRlclsidHlwZSJdCisgICAgICAgIHJldHVybiBS
YXdUeXBlcy5nZXQoanNvbl90eXBlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IsICJVbmtub3duIHR5cGUiCisKK2RlZiBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29wZV9kb21h
aW5fbmFtZSk6CisgICAgZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKSAKKyAgICBpZiBkb3Rf
cG9zID09IC0xOgorICAgICAgICBkb21haW5fbmFtZSA9IHNjb3BlX2RvbWFpbl9uYW1lCisgICAg
ICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmCisgICAgZWxzZToKKyAgICAgICAgZG9tYWluX25hbWUg
PSBqc29uX3JlZls6ZG90X3Bvc10KKyAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWZbZG90X3Bv
cyArIDEgOl0KKyAgICAgICAgCisgICAgcmV0dXJuIHR5cGVfbWFwLmdldChkb21haW5fbmFtZSwg
dHlwZV9uYW1lKQorCisgIAoraW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwg
InIiKQoranNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQoranNvbl9hcGkgPSBqc29uLmxv
YWRzKGpzb25fc3RyaW5nKQorCisKK2NsYXNzIFRlbXBsYXRlczoKKyAgICBmcm9udGVuZF9kb21h
aW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoCisiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFt
ZSB7CisgICAgcHVibGljOgorICAgICAgICAkZG9tYWluQ2xhc3NOYW1lKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ciske2Zyb250ZW5kRG9tYWlu
TWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
KyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQorICAgIHByaXZh
dGU6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CisgICAgfTsKKworICAgICRkb21haW5DbGFzc05hbWUqICRkb21haW5GaWVsZE5h
bWUoKSB7IHJldHVybiAmbV8kZG9tYWluRmllbGROYW1lOyB9CisKKyIiIikKKworICAgIGJhY2tl
bmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKAorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6JHtkb21haW5OYW1lfV8kbWV0aG9kTmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYg
KCEkYWdlbnRGaWVsZCkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9t
YWluTmFtZX0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOworJG1ldGhvZE91dENvZGUKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyRtZXRob2RJbkNvZGUKK2lmICghcHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKQorICAgICRhZ2VudEZpZWxkLT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxs
UGFyYW1zKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Ciske3Jlc3BvbnNlQ29va31zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4n
dCBiZSBwcm9jZXNzZWQiLCAiJGRvbWFpbk5hbWUuJG1ldGhvZE5hbWUiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsKK30KKyIiIikKKworICAgIGZyb250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1w
bGF0ZSgiIiJ2b2lkIEluc3BlY3RvckZyb250ZW5kOjokZG9tYWluTmFtZTo6JGV2ZW50TmFtZSgk
cGFyYW1ldGVycykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2V2ZW50TmFtZX1N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAke2V2ZW50TmFtZX1NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICIkZG9tYWluTmFtZS4kZXZlbnROYW1lIik7CiskY29k
ZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoJHtldmVudE5hbWV9TWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworfQorIiIiKQorICAgIAorICAgIGZyb250ZW5kX2ggPSBzdHJp
bmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAorI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCisKKyNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVj
dG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CitjbGFzcyBJbnNwZWN0
b3JPYmplY3Q7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZCB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKik7CisKKworJGRvbWFpbkNsYXNzTGlzdAorcHJpdmF0ZToKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJHtmaWVs
ZERlY2xhcmF0aW9uc319OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkKKyIiIikKKworICAgIGJhY2tlbmRfaCA9IHN0cmlu
Zy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisjZGVm
aW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKworI2luY2x1ZGUgPFBsYXRmb3JtU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFnZW50Owor
Y2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CisKKyRmb3J3YXJkRGVjbGFyYXRpb25zCisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjog
cHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKK3B1YmxpYzoK
KyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCRjb25zdHJ1Y3RvclBhcmFtcykKKyAgICAgICAgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiskY29u
c3RydWN0b3JJbml0ICAgICAgICAKKyAgICB7IH0KKworICAgIHZvaWQgY2xlYXJGcm9udGVuZCgp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9CisKKyAgICBlbnVtIENvbW1vbkVy
cm9yQ29kZSB7CisgICAgICAgIFBhcnNlRXJyb3IgPSAwLAorICAgICAgICBJbnZhbGlkUmVxdWVz
dCwKKyAgICAgICAgTWV0aG9kTm90Rm91bmQsCisgICAgICAgIEludmFsaWRQYXJhbXMsCisgICAg
ICAgIEludGVybmFsRXJyb3IsCisgICAgICAgIFNlcnZlckVycm9yLAorICAgICAgICBMYXN0RW50
cnksCisgICAgfTsKKworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Up
IGNvbnN0OworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBj
YWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OworICAgIHZvaWQgZGlzcGF0Y2goY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsKKworICAgIGVudW0gTWV0aG9kTmFt
ZXMgeworICAgIAorJGVudW1Db25zdGFudHMKK307CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29tbWFuZE5hbWVzW107CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldFN0
cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBi
b29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
OworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJv
cik7CisKKyRtZXRob2REZWNsYXJhdGlvbnMKKworICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiskZmllbGREZWNsYXJhdGlvbnMKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcl9oKQorCisKKyIiIikKKyAgICAKKyAgICBiYWNrZW5kX2NwcCA9IHN0cmlu
Zy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmgiCiskaW5jbHVkZXMKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBj
aGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiskbWV0
aG9kTmFtZURlY2xhcmF0aW9ucworfTsKKworCiskbWV0aG9kcwordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7CisgICAgdHlw
ZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBjYWxsSWQgPSAw
OworCisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgQ2Fs
bEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKKyRtZXNzYWdlSGFuZGxlcnMgICAgICAgIAorICAgICAg
ICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXpl
b2YoY29tbWFuZE5hbWVzWzBdKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhh
bmRsZXJzW2ldKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghcGFy
c2VkTWVzc2FnZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3Is
ICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRN
ZXNzYWdlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkgeworICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEg
SlNPTmlmaWVkIG9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsK
KyAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwg
SW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQp
KSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUg
dHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2Fn
ZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsKKyAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CisgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBw
cm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0
cmluZyBtZXRob2Q7CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRo
ZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRv
ciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoaXQgPT0gZGlzcGF0Y2hN
YXAuZW5kKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2RO
b3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2Jq
ZWN0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJl
c3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKK3sKKyAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0
aW9uRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKKyAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOworICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30g
ICAgCisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElk
LCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChWZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOworICAgIGlmICghc19jb21tb25FcnJv
cnMuc2l6ZSgpKSB7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAt
MzI3MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0z
MjYwMCk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMy
NjAxKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYw
Mik7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMp
OworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7Cisg
ICAgfQorICAgIEFTU0VSVChjb2RlID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwg
c19jb21tb25FcnJvcnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0p
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29k
ZV0pOworICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOworICAg
IEFTU0VSVChlcnJvcik7CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVycm9yLT5zZXRBcnJheSgi
ZGF0YSIsIGRhdGEpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBl
cnJvcik7CisgICAgaWYgKGNhbGxJZCkKKyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIs
ICpjYWxsSWQpOworICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5z
cGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworaW50IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQor
eworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAg
ICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAgIGludCB2YWx1ZSA9IDA7CisKKyAgICBp
ZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8v
IFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycg
b2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051
bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZh
bHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRv
ciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGgg
dHlwZSAnTnVtYmVyJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAg
ICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNv
bmQtPmFzTnVtYmVyKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBi
ZSAnTnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlm
ICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVy
biB2YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChw
cm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91
bmQgPSBmYWxzZTsKKworICAgIFN0cmluZyB2YWx1ZSA9ICIiOworCisgICAgaWYgKCFvYmplY3Qp
IHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBw
YXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0
IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+
ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9y
ID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7
CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmlu
Zycgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmlu
ZygmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3Vu
ZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9y
cyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsK
KworICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAg
IGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGlu
IG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJl
cXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAg
IEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3Qt
PmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAg
aWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicgd2FzIG5v
dCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVl
KSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBh
cmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAg
ICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRP
YmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVl
Rm91bmQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlm
ICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1p
c3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVp
cmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+Zmlu
ZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAo
IXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnIHdhcyBub3QgZm91
bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKKyAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdPYmplY3QnLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAg
ICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5z
cGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2Nv
bEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBm
YWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91
bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFt
cyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0
ZXIgJyVzJyB3aXRoIHR5cGUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKwor
ICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQp
CisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICgh
dmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29s
RXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAg
IGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9
IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3Vs
dCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6
OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmpl
Y3QoKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KCFvYmplY3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKyAgICAKKyAgICBmcm9udGVuZF9j
cHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisKKworSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwg
bV9pbnNwZWN0b3IoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9wYWdlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fY29uc29sZShpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCisgICAgLCBtX25ldHdvcmsoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwg
bV9kYXRhYmFzZShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX2RvbXN0b3JhZ2Uo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9hcHBsaWNhdGlvbmNhY2hlKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZG9tKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKKyAgICAsIG1fdGltZWxpbmUoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9k
ZWJ1Z2dlcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX3Byb2ZpbGVyKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fd29ya2VyKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKK3sKK30KKworJG1ldGhvZHMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGJhY2tlbmRfanMgPSBzdHJpbmcu
VGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKworCitJbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKK3sKKyAg
ICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0Nv
dW50ID0gMDsKKyAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLl9kb21haW5EaXNw
YXRjaGVycyA9IHt9OworICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OworJGRlbGVnYXRlcyRldmVu
dEFyZ3MkZG9tYWluRGlzcGF0Y2hlcnMgICAgfQorCitJbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGUgPSB7CisgICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAg
dmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJhY2tJZCsrOworICAgICAgICB0aGlzLl9j
YWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9OworICAgICAg
ICByZXR1cm4gY2FsbGJhY2tJZDsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRGVsZWdhdGU6IGZ1
bmN0aW9uKHJlcXVlc3RTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgZG9tYWluQW5kRnVuY3Rp
b24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAg
ICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQiOworICAgICAg
ICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQorICAgICAgICAgICAgd2luZG93W2FnZW50TmFtZV0g
PSB7fTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dID0g
dGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKTsKKyAg
ICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dWyJpbnZva2UiXSA9
IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpCisgICAgfSwKKworICAgIF9p
bnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFyZ3MsIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpOworICAgICAgICBy
ZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRN
ZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3NlbmRNZXNz
YWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYXJncyA9IEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZhciByZXF1ZXN0ID0g
SlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICB2YXIgY2FsbGJhY2sgPSAoYXJncy5s
ZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0aW9uIikgPyBh
cmdzLnBvcCgpIDogMDsKKyAgICAgICAgdmFyIGRvbWFpbkFuZE1ldGhvZCA9IHJlcXVlc3QubWV0
aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE1ldGhvZCA9IGRvbWFpbkFuZE1ldGhv
ZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9kWzFdOworCisgICAgICAgIHZhciBoYXNQ
YXJhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2YXIg
dHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5cGU7CisgICAgICAgICAgICAgICAgdmFy
IG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7CisKKyAgICAgICAg
ICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbmFsRmxhZykgeworICAgICAg
ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBudW1i
ZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwuIEl0
IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0
LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Muc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1ZSA9PT0gInVuZGVm
aW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFyYW1zW2tleV07
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIHR5cGUgb2Yg
YXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBj
YWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIgKyB0eXBlb2Yg
dmFsdWUgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1zW2tleV0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKCFoYXNQYXJhbXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFyYW1z
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICFjYWxsYmFj
aykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZpbmVkIikgewor
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBPcHRpb25hbCBj
YWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsIG11
c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIgKyB0eXBlb2YgYXJnc1swXSArICIn
LiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3Qs
IGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2Jq
ZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIG1l
c3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge30pOwor
CisgICAgICAgIGlmICh3aW5kb3cuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMpCisgICAg
ICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0cmluZ2lmeShtZXNzYWdl
T2JqZWN0KSk7CisKKyAgICAgICAgKyt0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CisgICAg
ICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQobWVzc2FnZU9iamVjdCk7CisgICAg
fSwKKworICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kOiBmdW5jdGlvbihtZXNzYWdlT2Jq
ZWN0KQorICAgIHsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdl
T2JqZWN0KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNr
ZW5kKG1lc3NhZ2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyOiBm
dW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCisgICAgeworICAgICAgICB0aGlzLl9kb21haW5E
aXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKKyAgICB9LAorCisgICAgZGlzcGF0Y2g6
IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAod2luZG93LmR1bXBJbnNwZWN0
b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImJhY2tlbmQ6ICIg
KyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNzYWdlIDogSlNPTi5zdHJpbmdp
ZnkobWVzc2FnZSkpKTsKKworICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0eXBlb2YgbWVz
c2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7CisKKyAg
ICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBqdXN0IGEgcmVzcG9uc2UgZm9y
IHNvbWUgcmVxdWVzdAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJvdG9fXyA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuY29kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1cm4gIlBhcnNlIGVycm9yIjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMDogcmV0dXJuICJJbnZhbGlk
IFJlcXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAxOiByZXR1
cm4gIk1ldGhvZCBub3QgZm91bmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
LTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJvciI7OworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNlcnZlciBlcnJvciI7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg
ICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0iVW5rbm93biBlcnJvciBj
b2RlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0aW9u
KCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVzc2FnZSArICIuIiArICh0aGlz
LmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIpOworICAgICAgICAgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldE1lc3NhZ2U6IGZ1bmN0aW9uKCkKKyAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
bWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkKKyAg
ICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmplY3Qp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107CisgICAg
ICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVj
dC5pZF07CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBhcmd1
bWVudHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICAgICAgICAgICAgICBjYWxs
YmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVu
ZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFj
a3NbbWVzc2FnZU9iamVjdC5pZF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0
aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpCisgICAgICAgICAg
ICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKCk7CisKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdl
T2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBt
ZXRob2RbMF07CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOworICAg
ICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBpbiB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsK
KyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3Nh
Z2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJyIgKyBkb21haW5OYW1lICsgIiciKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgZGlz
cGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbk5hbWVdOworICAgICAgICAg
ICAgaWYgKCEoZnVuY3Rpb25OYW1lIGluIGRpc3BhdGNoZXIpKSB7CisgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1
bmltcGxlbWVudGVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXSkgeworICAgICAgICAgICAgICAg
IGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4g
dW5zcGVjaWZpZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHBh
cmFtcyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucGFyYW1zKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHBhcmFtTmFtZXMgPSB0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVj
dC5tZXRob2RdOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1l
cy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9i
amVjdC5wYXJhbXNbcGFyYW1OYW1lc1tpXV0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNz
YWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlk
ID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJy
b3IpOworICAgIH0sCisKKyAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihz
Y3JpcHQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCisgICAgICAgICAgICB0
aGlzLl9zY3JpcHRzID0gW107CisKKyAgICAgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOworCisgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7
CisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KKyAgICAgICAgICAgIGZvciAodmFyIGlk
ID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKKyAgICAgICAgICAgICAgICAgc2NyaXB0
c1tpZF0uY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW5zcGVjdG9yQmFja2Vu
ZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOyIiIikKKyAgICAKKyAgICBwYXJhbV9jb250
YWluZXJfYWNjZXNzX2NvZGUgPSAiIiIKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsK
KyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5l
ci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2Nv
bEVycm9ycy5nZXQoKTsKKyIiIgorICAgIAorCit0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkp
CisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtd
CisgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KKyAgICAKKyAgICBtZXRob2Rf
bmFtZV9lbnVtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3Qg
PSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQorICAgIGJh
Y2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAgbWV0aG9kX2hhbmRs
ZXJfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQorICAgIGJhY2tlbmRf
anNfaW5pdGlhbGl6ZXJfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19ldmVudF9saXN0ID0gW10K
KyAgICBiYWNrZW5kX2pzX2RvbWFpbl9kaXNwYXRjaGVyX2xpc3QgPSBbXQorICAgIAorICAgIGJh
Y2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCA9IFtdCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rv
cl9pbml0X2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZmllbGRfbGlzdCA9IFtdCisgICAgYmFja2Vu
ZF9mb3J3YXJkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfaW5jbHVkZV9saXN0ID0gW10KKyAgICAK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdvKCk6CisgICAgICAgIGZvciBqc29uX2RvbWFp
biBpbiBqc29uX2FwaToKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRv
bWFpbiJdCisgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dlciA9IGRvbWFpbl9uYW1lLmxvd2Vy
KCkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5OYW1lRml4
ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisgICAgICAgICAgICBhZ2VudF9maWVsZF9u
YW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMgPSBbXQorICAgICAgICAgICAg
aWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fZXZl
bnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAgICAgICAgICAgICAgICAgICBHZW5lcmF0
b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9k
X2RlY2xhcmF0aW9uX2xpbmVzKQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5hcHBlbmQoIiAgICAlcyBtXyVzO1xu
IiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIpKTsKKyAgICAgICAgICAgICAgICBH
ZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJv
bnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAg
ZG9tYWluQ2xhc3NOYW1lID0gZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgIGRvbWFp
bkZpZWxkTmFtZSA9IGRvbWFpbl9uYW1lX2xvd2VyLAorICAgICAgICAgICAgICAgICAgICBmcm9u
dGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9ucyA9IGpvaW4oZnJvbnRlbmRfbWV0aG9kX2RlY2xh
cmF0aW9uX2xpbmVzLCAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAg
ICAgICAgICAgIGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAg
Zm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMiXToKKyAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9u
YW1lLCBhZ2VudF9maWVsZF9uYW1lKQorICAgICAgICAKKyAgICAgICAgICAgIGlmIG5vdCBkb21h
aW5fZGF0YS5za2lwX2pzX2JpbmQ6ICAgCisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNE
aXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIl
c1wiKTtcbiIgJSAoIGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZSApKSAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAKKyAgICAgICAgc29ydGVkX2pzb25fZG9tYWlucyA9
IGxpc3QoanNvbl9hcGkpCisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMuc29ydChrZXkgPSBs
YW1iZGEgbzogb1siZG9tYWluIl0pCisgICAgICAgIAorICAgICAgICBmb3IganNvbl9kb21haW4g
aW4gc29ydGVkX2pzb25fZG9tYWluczoKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9k
b21haW5bImRvbWFpbiJdCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0g
RG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAgICAgICAgICAg
aWYgZG9tYWluX2RhdGEuaGlkZGVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBhZ2VudF90eXBlX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF90eXBlX25hbWUKKyAgICAg
ICAgICAgIGFnZW50X2ZpZWxkX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF9maWVsZF9uYW1lCisg
ICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LmFwcGVu
ZCgiLCAlcyogJXMiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIg
ICAgICAgICwgbV8lcyglcykiICUgKGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUp
KQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdC5hcHBlbmQoIiAgICAl
cyogbV8lczsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QuYXBwZW5kKCJjbGFzcyAlczsiICUg
YWdlbnRfdHlwZV9uYW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9s
aXN0LmFwcGVuZCgiI2luY2x1ZGUgXCIlcy5oXCIiICUgYWdlbnRfdHlwZV9uYW1lKQorCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWlu
X25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgIGV2ZW50
X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KKyAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQor
ICAgICAgICBtZXRob2RfbGluZV9saXN0ID0gW10KKyAgICAgICAgYmFja2VuZF9qc19ldmVudF9w
YXJhbV9saXN0ID0gW10KKyAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fZXZlbnQ6Cisg
ICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7XG4iKQorICAg
ICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fZXZlbnRbInBhcmFtZXRlcnMiXTog
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJd
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFy
YW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBqc29uX29wdGlvbmFsID0gIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFt
ZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBvcHRpb25hbF9tYXNrID0gcmF3X3R5cGUuaXNFdmVudFBhcmFtQ2hlY2tP
cHRpb25hbCgpCisgICAgICAgICAgICAgICAgY190eXBlX25hbWUgPSByYXdfdHlwZS5nZXRDVHlw
ZU5hbWUoUGFyYW1UeXBlLkVWRU5UKQorICAgICAgICAgICAgICAgIHNldHRlcl90eXBlID0gcmF3
X3R5cGUuZ2V0U2V0dGVyTmFtZSgpCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
b3B0aW9uYWwgPSBvcHRpb25hbF9tYXNrIGFuZCBqc29uX29wdGlvbmFsCisgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAlIChj
X3R5cGVfbmFtZSwgcGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgICAgIHNldHRlcl9jb2Rl
ID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlw
ZSwgcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIGlmIG9w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9ICggIiAgICBpZiAoJXMp
XG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lICkgKyBzZXR0ZXJfY29kZQorICAgICAgICAgICAgICAg
IG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNc
IiIgJSBwYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5k
KCIgICAgJXNNZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTtcbiIg
JSBldmVudF9uYW1lKQorICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMu
YXBwZW5kKAorICAgICAgICAgICAgIiAgICAgICAgdm9pZCAlcyglcyk7XG4iICUgKCBldmVudF9u
YW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSApKQorCisgICAgICAgIEdlbmVyYXRvci5m
cm9udGVuZF9tZXRob2RfbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmZyb250ZW5kX21ldGhvZC5zdWJz
dGl0dXRlKE5vbmUsCisgICAgICAgICAgICBkb21haW5OYW1lID0gZG9tYWluX25hbWUsIGV2ZW50
TmFtZSA9IGV2ZW50X25hbWUsCisgICAgICAgICAgICBwYXJhbWV0ZXJzID0gam9pbihwYXJhbWV0
ZXJfbGlzdCwgIiwgIiksCisgICAgICAgICAgICBjb2RlID0gam9pbihtZXRob2RfbGluZV9saXN0
LCAiIiksCisgICAgICAgICAgICApKQorICAgICAgICAKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfanNfZXZlbnRfbGlzdC5hcHBlbmQoIiAgICB0aGlzLl9ldmVudEFyZ3NbXCIlcy4lc1wiXSA9
IFslc107XG4iICUgKAorICAgICAgICAgICAgZG9tYWluX25hbWUsIGV2ZW50X25hbWUsIGpvaW4o
YmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LCAiLCAiKQorICAgICAgICAgICAgKSkKKyAgICAg
ICAgCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21t
YW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpzb25fY29tbWFu
ZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9u
YW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9tYWluX25hbWUs
IGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVy
X2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNfJXMs
IiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVzKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUgKGRv
bWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisgICAgICAgIAorICAgICAgICBtZXRob2Rf
aW5fY29kZSA9ICIiCisgICAgICAgIG1ldGhvZF9vdXRfY29kZSA9ICIiCisgICAgICAgIGFnZW50
X2NhbGxfcGFyYW1fbGlzdCA9IFtdCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdCA9IFtdCisg
ICAgICAgIHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIiCisgICAgICAgIGpzX3BhcmFtZXRlcnNf
dGV4dCA9ICIiCisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6CisgICAg
ICAgICAgICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCisgICAgICAg
ICAgICBtZXRob2RfaW5fY29kZSArPSBUZW1wbGF0ZXMucGFyYW1fY29udGFpbmVyX2FjY2Vzc19j
b2RlCisgICAgICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIHJlcXVlc3RNZXNzYWdl
T2JqZWN0IgorICAgICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCisgICAgICAgIAorICAgICAg
ICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgorICAgICAgICAgICAgICAg
IGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KKyAgICAgICAgICAgICAg
ICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVQYXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIsIGRv
bWFpbl9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdmFyX3R5
cGUgPSBwYXJhbV9yYXdfdHlwZS5nZXRDVHlwZU5hbWUoUGFyYW1UeXBlLklOUFVUKQorICAgICAg
ICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFyYW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICJvcHRpb25hbCIgaW4ganNv
bl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdOgorICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gKCIgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7XG4iCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRh
aW5lclB0ciwgXCIlc1wiLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1lLCB2YXJfdHlwZSwg
anNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFt
X25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzX3ZhbHVlRm91bmQgPyAm
aW5fJXMgOiAwIiAlICgganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUgKQorICAgICAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICAlcyBpbl8l
cyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIlc1wiLCAwLCBwcm90b2NvbEVycm9yc1B0
cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFyX3R5cGUsIGpzb25fcGFy
YW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAg
ICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0gY29kZSAKKyAgICAgICAgICAgICAg
ICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmluZFR5
cGUoKQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRpb25h
bFwiOiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBqc29u
X3BhcmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIg
aW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNlICJm
YWxzZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUKKyAgICAgICAgICAgICAg
ICAgICAgKSAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqc19wYXJhbV9saXN0
LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQg
PSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1fbGlzdCwgIiwgIikgKyAifSIgCisg
ICAgICAgICAgICAgICAgCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCA9ICIiCisgICAgICAg
IGlmICJyZXR1cm5zIiBpbiBqc29uX2NvbW1hbmQ6CisgICAgICAgICAgICBtZXRob2Rfb3V0X2Nv
ZGUgKz0gIlxuIgorICAgICAgICAgICAgZm9yIGpzb25fcmV0dXJuIGluIGpzb25fY29tbWFuZFsi
cmV0dXJucyJdOgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGpzb25fcmV0dXJu
X25hbWUgPSBqc29uX3JldHVyblsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSBy
ZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAg
ICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAg
ICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAg
ICAgICB2YXJfdHlwZSA9IHJhd190eXBlLmdldENUeXBlTmFtZShQYXJhbVR5cGUuT1VUUFVUKSAK
KyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29kZSA9ICIgICAgJXMgb3V0XyVz
ID0gJXM7XG4iICUgKCB2YXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlhbGl6ZXIgKQor
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCisg
ICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRf
JXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFt
ZSkKKyAgICAgICAgICAgICAgICBpZiB2YXJfdHlwZSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIg
aW4ganNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAg
ICAgICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJu
X25hbWUgKSArIGNvb2sKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtZXRob2Rf
b3V0X2NvZGUgKz0gY29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5h
cHBlbmQocGFyYW0pCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfY29va19saXN0LmFwcGVuZChj
b29rKQorICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gIiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHtcbiVzICAgIH1cbiIgJSBqb2lu
KHJlc3BvbnNlX2Nvb2tfbGlzdCwgIiIpCisgICAgICAgIAorICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmJhY2tlbmRf
bWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWUgPSBkb21haW5f
bmFtZSwgbWV0aG9kTmFtZSA9IGpzb25fY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgYWdlbnRG
aWVsZCA9ICJtXyIgKyBhZ2VudF9maWVsZF9uYW1lLAorICAgICAgICAgICAgbWV0aG9kSW5Db2Rl
ID0gbWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRob2RPdXRDb2RlID0gbWV0aG9kX291
dF9jb2RlLAorICAgICAgICAgICAgYWdlbnRDYWxsUGFyYW1zID0gam9pbihhZ2VudF9jYWxsX3Bh
cmFtX2xpc3QsICIiKSwKKyAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlT2JqZWN0ID0gcmVxdWVz
dF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29rID0gcmVzcG9uc2VfY29v
a190ZXh0KSkKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRp
b25fbGlzdC5hcHBlbmQoIiAgICBcIiVzLiVzXCIsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21t
YW5kX25hbWUpKQorICAgICAgICAKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlh
bGl6ZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgne1wibWV0
aG9kXCI6IFwiJXMuJXNcIiVzLCBcImlkXCI6IDB9Jyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29u
X2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0KSkKKworCitHZW5lcmF0b3IuZ28oKQor
CitiYWNrZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oIiwgInciKQorYmFja2VuZF9jcHBfZmlsZSA9IG9wZW4ob3V0
cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiLCAidyIp
CisKK2Zyb250ZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNw
ZWN0b3JGcm9udGVuZC5oIiwgInciKQorZnJvbnRlbmRfY3BwX2ZpbGUgPSBvcGVuKG91dHB1dF9j
cHBfZGlybmFtZSArICIvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIiwgInciKQorCitiYWNrZW5kX2pz
X2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZFN0dWIu
anMiLCAidyIpCisKKworZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9o
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJh
dG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLCAiIiksCisgICAgICAgICBkb21haW5DbGFz
c0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIikKKyAg
ICAgICAgICkpCisKKworCitiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9o
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICBjb25zdHJ1Y3RvckluaXQgPSBqb2luKEdlbmVyYXRvci5i
YWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBjb25zdHJ1Y3RvclBhcmFtcyA9IGpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCwgIiIpLAorICAgIGVudW1D
b25zdGFudHMgPSBqb2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIpLAor
ICAgIG1ldGhvZERlY2xhcmF0aW9ucyA9IGpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2Rl
Y2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGZpZWxkRGVjbGFyYXRpb25zID0gam9pbihHZW5l
cmF0b3IuYmFja2VuZF9maWVsZF9saXN0LCAiXG4iKSwKKyAgICBmb3J3YXJkRGVjbGFyYXRpb25z
ID0gam9pbihHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICApKQorCisKK2Zyb250ZW5k
X2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAor
ICAgIG1ldGhvZHMgPSBqb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIiks
CisgICAgKSkKKworYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAu
c3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMgPSBqb2luKEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGlu
Y2x1ZGVzID0gam9pbihHZW5lcmF0b3IuYmFja2VuZF9pbmNsdWRlX2xpc3QsICJcbiIpLAorICAg
IG1ldGhvZHMgPSBqb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LCAiXG4iKSwKKyAgICBtZXNzYWdlSGFuZGxlcnMgPSBqb2luKEdlbmVyYXRvci5tZXRob2Rf
aGFuZGxlcl9saXN0LCAiXG4iKSwKKyAgICApKQorCisKKworYmFja2VuZF9qc19maWxlLndyaXRl
KFRlbXBsYXRlcy5iYWNrZW5kX2pzLnN1YnN0aXR1dGUoTm9uZSwKKyAgICBkZWxlZ2F0ZXMgPSBq
b2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QsICIiKSwKKyAgICBldmVu
dEFyZ3MgPSBqb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QsICIiKSwKKyAgICBk
b21haW5EaXNwYXRjaGVycyA9IGpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3Bh
dGNoZXJfbGlzdCwgIiIpLAorICAgICkpCisKKworYmFja2VuZF9oX2ZpbGUuY2xvc2UoKQorYmFj
a2VuZF9jcHBfZmlsZS5jbG9zZSgpCisKK2Zyb250ZW5kX2hfZmlsZS5jbG9zZSgpCitmcm9udGVu
ZF9jcHBfZmlsZS5jbG9zZSgpCisKK2JhY2tlbmRfanNfZmlsZS5jbG9zZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109704</attachid>
            <date>2011-10-04 15:24:43 -0700</date>
            <delta_ts>2011-10-05 11:11:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111005022440.patch</filename>
            <type>text/plain</type>
            <size>111633</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YmRmOWIyMzNjZTI5ZDYz
ZGY0YTI4YzcyMGVkZjliMDU4MTA5YjE4Li5kMDYzNjcxNjUxMGYwZWZmYzc4Y2RkOTFjYjU2MWI4
ODMzYzdhODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTAtMDQgIFBldGVy
IFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOiBSZW1vdmVkLgorICAgICAg
ICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1pZGw6IFJlbW92ZWQuCisKIDIwMTEtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCBmaXhlcyBmb3IgZXZlcnlvbmUu
CkBAIC0xMDYyNCw2ICsxMDYzOSwyMCBAQAogICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxl
bWVudEJhc2U6OmNhblJlbWFpbkFsaXZlT25SZW1vdmFsRnJvbVRyZWUpOgogICAgICAgICAqIGh0
bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuaDoKIAorMjAxMS0xMC0wMyAgUGV0ZXIgUnliaW4gIDxw
ZXRlci5yeWJpbkBnbWFpbC5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVpbXBsZW1l
bnQgcHJvdG9jb2wgYmFja2VuZC9mcm9udGVuZCBzb3VyY2UgZ2VuZXJhdG9yCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTI5NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMh
KQorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06CisgICAgICAgIChmaW5pc2gpOgorICAgICAg
ICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKwogMjAxMS0w
OS0xOSAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElz
c3VlcyB3aXRoIG1lcmdpbmcgcnVieSBiYXNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAKaW5kZXggZTc4MjU3MzM2MjBhN2RmYjdjYWI2ZjcwZGJkZGFlNWUyMDYyYmM3MS4u
ZjQyN2I0MzQwNTViYjgwNmMwZjU1MWVkNmEwYTk3ZDllNzQxZThmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTMzNSwxNyArMzM1LDI0IEBACiAgIH0sCiAgICd0
YXJnZXRzJzogWwogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnZW5lcmF0ZV9pbnNwZWN0
b3JfcHJvdG9jb2xfdmVyc2lvbicsCisgICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3By
b3RvY29sX3NvdXJjZXMnLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAnZGVwZW5kZW5j
aWVzJzogWworICAgICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nCisg
ICAgICBdLAogICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uJywKKyAgICAgICAgewor
ICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNl
cycsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAorICAgICAgICAgICAgJy4uL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKICAgICAgICAgICAgICcuLi9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMnOiBb
Ci0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3Rv
clByb3RvY29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVf
RElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCcsCisgICAgICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNv
cmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisgICAgICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcycs
CiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewogICAgICAgICAgICAgJ2dl
bmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTMsMjggKzM2MCwyNyBAQAogICAgICAgICAg
IH0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdweXRob24nLAotICAgICAg
ICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbics
Ci0gICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCi0gICAgICAg
ICAgICAnPEAoX2lucHV0cyknCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHknLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bicsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0JywKKyAg
ICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKICAgICAgICAg
ICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ1ZhbGlkYXRlIGluc3BlY3RvciBwcm90b2NvbCBm
b3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGdlbmVyYXRlIHZlcnNpb24gZmlsZScsCi0g
ICAgICAgIH0KKyAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90
b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCisgICAgICAgIH0sCiAgICAgICBdCiAg
ICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX2lkbCcsCisgICAg
ICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAog
ICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQotICAgICAgICB7Ci0g
ICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xJREwnLAor
ICAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclBy
b3RvY29sVmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9p
bnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICcu
Li9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291
dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29y
ZS9JbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElS
KS93ZWJraXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAgICAgIF0sCiAgICAg
ICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJz
JzogWwpAQCAtMzgyLDY1ICszODgsMTYgQEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rp
b24nOiBbCiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3Iv
Z2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICctbycsCiAgICAg
ICAgICAgICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScKICAgICAg
ICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3Rv
Y29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdW
YWxpZGF0ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFu
ZCBnZW5lcmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBdCiAgICAgfSwKICAg
ICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAot
ICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAn
aW5zcGVjdG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVy
c2lvbicKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAg
ICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCi0gICAg
ICAgICAgIyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFzIGl0ZW0gbmFtZSBp
biB2Y3Byb2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IEluc3BlY3Rv
ci5pZGwgdGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxlcyBhcmUgbWFya2lu
ZyBhcyBleGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdpbnB1dHMnOiBbCi0g
ICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0g
ICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0nLAotICAg
ICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbScsCi0gICAgICAg
ICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAgICAgICAgICAgJy4u
L2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgIF0s
Ci0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAotICAgICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2Vu
ZFN0dWIuanMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCi0gICAgICAg
ICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5k
LmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAg
ICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9
LAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAg
ICAgICdzY3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAg
ICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJy0tZGVmaW5l
cycsICc8KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCi0gICAgICAgICAg
ICAnLS1nZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8QChnZW5lcmF0b3Jf
aW5jbHVkZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVy
YXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKLSAg
ICAgICAgfSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdp
bmplY3RlZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2Fj
dGlvbnMnOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyMTgzYzFmMjlj
NDY3OTU4OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0jIENvcHlyaWdo
dCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1wYWNrYWdlIENv
ZGVHZW5lcmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBDbGFzczo6U3RydWN0
OwotdXNlIEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5cGVUcmFuc2Zvcm17
IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2FwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAgICJmb3J3YXJkIiA9
PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2Vu
dC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwKLX07Ci0kdHlwZVRy
YW5zZm9ybXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ29uc29s
ZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiLAotICAg
ICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiUGFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50IiwKLSAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3Nv
ciIgPT4gIm1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVidWdnZXIifSA9IHsK
LSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1fZGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURlYnVnZ2VyIn0gPSB7
Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNz
b3IiID0+ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEYXRhYmFz
ZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vz
c29yIiA9PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7
Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tQWdl
bnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21TdG9y
YWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0gPSB7Ci0gICAgImZv
cndhcmQiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9m
aWxlU3lzdGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudCIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvclJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3VyY2VBZ2VudCIsCi19
OwotJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JQcm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVyQWdlbnQiLAotfTsK
LSR0eXBlVHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0
b3JSdW50aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQu
aCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIs
Ci0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwKLX07Ci0kdHlwZVRy
YW5zZm9ybXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JXb3JrZXJB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50LmgiLAotICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5cGVUcmFuc2Zvcm17
IkZyb250ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCi0g
ICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0eXBlVHJhbnNmb3Jt
eyJQYXNzUmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0
ci5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewotICAgICJmb3J3YXJk
SGVhZGVyIiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAicGFyYW0iID0+ICJQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0
IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQXJyYXki
fSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAg
InZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgImRlZmF1bHRWYWx1
ZSIgPT4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JBcnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAi
SlNPTlR5cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4i
LAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
VmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAi
IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiY29u
c3QgU3RyaW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgU3RyaW5nKiBjb25z
dCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUi
ID0+ICJTdHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAgICJkZWZhdWx0VmFs
dWUiID0+ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgi
LAotICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiSlNPTlR5cGUiID0+
ICJTdHJpbmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5cGVUcmFuc2Zvcm17
ImxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+
ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAi
MCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09O
VHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRy
YW5zZm9ybXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAgICAib3B0aW9uYWxf
cGFyYW0iID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3Nv
ciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIg
PT4gIjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAi
SlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5
cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25l
ZCBsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBsb25nKiBj
b25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFi
bGUiID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAg
ICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+
ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17
InVuc2lnbmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCi0gICAg
Im9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25zdCIsCi0gICAgIm9w
dGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25l
ZCBpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZvcndhcmQiID0+ICIi
LAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAg
IkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91YmxlIn0gPSB7Ci0g
ICAgInBhcmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBk
b3VibGUqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAg
ICJ2YXJpYWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAuMCIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiYm9vbGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAgICJvcHRpb25hbF9w
YXJhbSIgPT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3Nv
ciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRlZmF1bHRWYWx1ZSIg
PT4gImZhbHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0g
ICAgIkpTT05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4gImJvb2xlYW4iCi19
OwotJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAg
ImhlYWRlciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0gPSB7Ci0gICAgImhl
YWRlciIgPT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRl
cwotCi1teSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0KLW15ICRjb2RlR2Vu
ZXJhdG9yOwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGlyOwotbXkgJHdyaXRl
RGVwZW5kZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7Ci0KLW15ICRiYWNr
ZW5kQ2xhc3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwotbXkgJGJhY2tlbmRK
U1N0dWJOYW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0aG9kczsKLW15IEBi
YWNrZW5kTWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkYmFj
a2VuZENvbnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBi
YWNrZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVyOwotbXkgQGJhY2tl
bmRKU1N0dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5kRG9tYWluczsKLQot
bXkgJGZyb250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1teSBAZnJvbnRlbmRN
ZXRob2RzOwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRlbmRNZXRob2RzSW1w
bDsKLW15ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRlbmRDb25zdHJ1Y3Rv
cjsKLW15IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZyb250ZW5kQ29uc3Rh
bnREZWZpbml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9udGVuZERvbWFpbnM7
Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKLSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0b3IgPSBz
aGlmdDsKLSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhlYWRlcnNEaXIgPSBz
aGlmdDsKLSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRwcmVwcm9j
ZXNzb3IKLSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAkdmVyYm9zZSA9IHNo
aWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAgcmV0dXJuICRyZWZl
cmVuY2U7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAotc3ViIEdlbmVyYXRl
TW9kdWxlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRkYXRhTm9kZSA9IHNo
aWZ0OwotCi0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwotICAgICRuYW1lc3Bh
Y2UgPX4gcy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NOYW1lID0gIkluc3Bl
Y3RvckZyb250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIgICAgJHtmcm9udGVu
ZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAgICBwdXNoKEBmcm9u
dGVuZEZvb3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsK
LSAgICAkZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7IlBhc3NS
ZWZQdHIifSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0gIkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcj4iOwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kU3R1YiI7
Ci0gICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJQYXNz
UmVmUHRyIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQifSA9IDE7Ci0gICAg
JGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50
JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRvYmplY3QgPSBzaGlm
dDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmluZXMgPSBzaGlmdDsK
LQotICAgIG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRpb25zID0+IFtdLAot
ICAgICAgICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBnZW5lcmF0ZUZ1bmN0
aW9ucygkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7bWV0aG9kRGVjbGFy
YXRpb25zfX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAkaW50ZXJmYWNlLT5u
YW1lKTsKLSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRlcmZhY2UsIFwlYWdl
bnQpOwotICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbgotewotICAgIG15
ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLSAgICBteSAkYWdl
bnROYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgY2xhc3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgcHVibGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgJHthZ2Vu
dE5hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+e21ldGhvZERlY2xh
cmF0aW9uc319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChA
ZnJvbnRlbmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRo
b2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICB9OyIpOwotICAg
IHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRlck5hbWUgPSBsYygk
YWdlbnROYW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgJHthZ2VudE5hbWV9
KiAke2dldHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsgfSIpOwotICAgIHB1
c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIg
ICAgJHthZ2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1c2goQGZyb250ZW5k
QWdlbnRGaWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRl
bmRDb25zdHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci0g
ICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5kQ2xhc3NOYW1lfTo6
JHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIg
ICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
Iik7Ci0gICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdlbnRGaWVsZHMpIHsK
LSAgICAgICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgLCAke2FnZW50Rmll
bGR9KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAgcHVzaChAZnJvbnRl
bmRDb25zdHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3Rvcklt
cGwsICJ9Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsKLX0KLQotc3Vi
IGdlbmVyYXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15
ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFj
ZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUZyb250ZW5k
RnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0
aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rp
b25zKCRpbnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzKCRpbnRlcmZh
Y2UpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVy
ZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9
IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5u
YW1lOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgQGFyZ3NG
aWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFt
ZXRlcnN9KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3IgZnJvbnRlbmQgaW50
ZXJmYWNlLgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAYXJnc0ZpbHRl
cmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJndW1lbnRzID0gam9p
bigiLCAiLCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1l
LCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25h
dHVyZS4KLQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7ZnVuY3Rpb25OYW1l
fSgke2FyZ3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNp
Z25hdHVyZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24gd2FzIGRldGVjdGVk
IGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57bWV0aG9kU2lnbmF0
dXJlc30tPnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+e21ldGhvZERlY2xh
cmF0aW9uc319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlufTo6JHtmdW5jdGlv
bk5hbWV9KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFt
ZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwg
XCIkZG9tYWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRl
cmVkKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotCi0gICAg
ICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewotICAgICAgICAgICAg
bXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFs
In0gPyAiaWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAgIiA6ICIiOwotICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAuICJwYXJhbXNPYmpl
Y3QtPnNldCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05UeXBlIikgLiAiKFwi
IiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRl
ciwgInZhbHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAg
fQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5z
ZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwot
ICAgIHB1c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBjYW1l
bENhc2UKLXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUgPX4gcy9cYihcdykv
XFUkMS9nOyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFtZQotICAgICR2YWx1
ZSA9fiBzLyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2Vu
ZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlv
biA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJl
LT5uYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+
bmFtZSAuICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlv
bk5hbWVEb3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uTmFtZTsKLQotICAg
IHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAgayR7ZnVsbFF1YWxp
ZmllZEZ1bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5p
dGlvbnMsICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCIsIik7Ci0KLSAg
ICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVy
c30pOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8t
PmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgIG15IEBv
dXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pOwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdWxsUXVhbGlm
aWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJl
fX0gfHwgZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUg
JyRzaWduYXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJl
fX0gPSAiJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2goQGJhY2tlbmRNZXRo
b2RzLCAke3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIG15ICRyZXF1ZXN0
TWVzc2FnZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3Qi
IDogIiI7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7
ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCok
cmVxdWVzdE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFj
Y2Vzc29yID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAkYmFj
a2VuZFR5cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAx
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIiRk
b21haW4gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50
cy4KLSAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
bWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAu
ICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikg
LiAiOyIsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgfQot
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAgaWYgKHNjYWxhcihA
aW5BcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KFwicGFyYW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3Jz
UHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkcGFy
YW1ldGVyIChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5h
bWU7Ci0gICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgICAg
ICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBlKTsKLSAgICAgICAg
ICAgIG15ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAgICAgIGlmICgkcGFy
YW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAgICAgICAg
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZvdW5kID0gZmFsc2U7
Iik7Ci0gICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIiYke25hbWV9X3Zh
bHVlRm91bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0
eXBlU3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0aW9uYWxGbGFnQXJn
dW1lbnQsIHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBm
dW5jdGlvbiwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAgIH0KLQotICAgIG15
ICRhcmdzID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZlcnJvciIsCi0gICAg
ICAgICAgICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwi
fSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92YWx1ZUZvdW5kID8g
JmluXyIgLiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJp
bl8iIC4gJF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAgICAgIG1hcCgiJm91
dF8iIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRl
bnQgLiAiaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAgcHVzaChAZnVuY3Rp
b24sICRpbmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7
Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OyIpOwotICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkg
eyIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdzKSB7Ci0gICAgICAg
ICAgICBteSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMgRG9uJ3QgYWRkIG9w
dGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlzICJ0cnVl
IgotICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBhcmFtZXRlci0+bmFt
ZSAuICIpIik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJyZXN1bHQtPnNldCIg
LiB0eXBlVHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFy
YW1ldGVyLT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAg
ICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0gICAgfQotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpm
b3JtYXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWRc
IiwgXCIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiIpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3Vi
IGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5kUmVzcG9uc2UgPSA8
PCAiRU9GIjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVzcG9uc2UobG9uZyBj
YWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywg
RXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlk
UGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNw
b25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAgICAKLUVPRgotICAg
IHJldHVybiBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFj
a2VuZFJlcG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9
IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcihj
YWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NO
YW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZl
Y3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXpl
KCkpIHsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7
Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsK
LSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwot
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKLSAg
ICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7Ci0gICAg
ICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKLSAgICB9Ci0g
ICAgQVNTRVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1v
bkVycm9ycy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0g
ICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7Ci0gICAgQVNTRVJU
KGVycm9yKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwg
ZGF0YSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsK
LSAgICBpZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJ
ZCk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JW
YWx1ZTo6bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAg
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRy
ZXBvcnRQcm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1lbnRHZXR0ZXJzCi17
Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVUcmFpdHMoJHR5cGUs
ICJKU09OVHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJp
YWJsZSIpOwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0eXBlLCAiZGVmYXVs
dFZhbHVlIik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikg
PyB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0eXBlLCAicGFyYW0i
KTsKLQotICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsKLSAgICBwdXNoKEBi
YWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1cm4gZ2V0JHR5cGVT
dHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsiKTsKLSAgICBteSAk
Z2V0dGVyQm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
Ci17Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZvdW5kKQot
ICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxlIHZhbHVlID0gJGRl
ZmF1bHRWYWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3Vu
ZCkgewotICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1z
IGNvbnRhaW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRl
ciAnXCVzJyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLQot
ICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQp
Ci0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51
dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAo
IXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3
cm9uZyB0eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0g
ICAgZWxzZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAgICp2YWx1ZUZvdW5k
ID0gdHJ1ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJldHVybiBzcGxpdCgi
XG4iLCAkZ2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCi17
Ci0gICAgbXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAgICAgICAgJiR7YmFj
a2VuZENsYXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyRffSwg
QGJhY2tlbmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBF
bnRyaWVzKTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXZv
aWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQot
ewotICAgIFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0gdGhpczsKLSAgICB0
eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxs
SWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9D
QUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2FsbElkID0gMDsKLQot
ICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5k
bGVyIGhhbmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9OwotICAgICAgICBzaXpl
X3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBd
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAg
ICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JW
YWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewotICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUg
aW4gSlNPTiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgp
OwotICAgIGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBj
YWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBpZiAoIWNhbGxJZFZh
bHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICIn
aWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3Bl
cnR5IG11c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRo
b2QiKTsKLSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91
bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAg
aWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2Qn
IHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFw
LmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0
aG9kICsgIicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAo
KCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKLX0KLUVP
RgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsKLX0KLQot
c3ViIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAkbWVzc2FnZVBhcnNl
ckJvZHkgPSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5h
bWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdl
KTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW9i
amVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmplY3QtPmdldFN0cmlu
ZygibWV0aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3NhZ2VQYXJzZXJCb2R5
KTsKLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17Ci0gICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEkXy0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9
KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkg
JGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5z
aWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24g
ZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50
TmFtZXMgPSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgbWFwKCJcIiIgLiAk
Xy0+bmFtZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAo
JF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIp
IC4gIiwgIgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRf
LT50eXBlLCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAifSIsCi0gICAgICAg
ICAgICAgICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAg
dGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwi
JGRvbWFpbi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJw
YXJhbXNcIjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAgICAgICAiXCJpZFwi
OiAwIiAuCi0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRK
U1N0dWJFdmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0
aW9ucyA9IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0s
IEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2Ut
Pm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAg
ICBteSAkbmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsK
LSAgICAgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigi
LCIsIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVz
aChAYmFja2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIgLiAkbmFtZSAuICJc
Il0gPSBbIiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0
ZUJhY2tlbmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzID0g
am9pbigiXG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRpc3BhdGNoZXIgPSB0
aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIgLiAkXyAuIlwiKTsi
LCBAZnJvbnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIsIEBiYWNr
ZW5kSlNTdHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBAYmFja2VuZEpTRXZl
bnRzKTsKLSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwotJGxpY2Vu
c2VUZW1wbGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0
aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50
ID0gMDsKLSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9kb21haW5EaXNwYXRj
aGVycyA9IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1YnMKLSRKU0V2ZW50
cwotJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1
Yi5wcm90b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKLSAgICBkdW1w
SW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBmdW5jdGlvbihjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNr
SWQrKzsKLSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwg
ZnVuY3Rpb24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0gICAgfSwKLQotICAg
IF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQotICAgIHsKLSAgICAg
ICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRo
b2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9u
WzBdICsgIkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKLSAgICAgICAg
ICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2Rv
bWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhp
cywgcmVxdWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1
bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3Ry
aW5nKQotICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdz
LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1
ZXN0U3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwotICAgICAgICB0aGlz
Ll93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0g
ICAgfSwKLQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwot
ICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKLSAgICAgICAg
dmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0g
MV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAgIHZhciBkb21haW5B
bmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnRN
ZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsx
XTsKLQotICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0
LnBhcmFtcykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBl
OwotICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXld
Lm9wdGlvbmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFv
cHRpb25hbEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9j
b2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdl
bnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsg
SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0
eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0
eXBlTmFtZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAn
IiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicg
YnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXF1ZXN0LnBh
cmFtc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAgICAgICAgICAgICAg
IGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxl
bmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1sw
XSAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICci
ICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5k
TWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF93cmFwQ2Fs
bGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJh
Y2spCi0gICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFj
ayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgewotICAgICAg
ICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0
LmlkXTsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9i
amVjdC5tZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1l
ID0gRGF0ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0
b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAi
ICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAgICsrdGhpcy5fcGVu
ZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNr
ZW5kKG1lc3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFj
a2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUudGlt
ZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09O
LnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCi0gICAgewotICAg
ICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKLSAgICB9
LAotCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2Fn
ZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VPYmpl
Y3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkg
OiBtZXNzYWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVz
dCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2Jq
ZWN0LmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3Rv
X18gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlz
LmNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJu
ICJQYXJzZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6
IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3Ii
OzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2
ZXIgZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB9LAotCi0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
IlVua25vd24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3Nh
Z2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsK
LSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdl
OiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2Rl
ICE9PSAtMzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJv
cihtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFyZ3Vt
ZW50cyA9IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7Ci0gICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJh
Y2tzW21lc3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICAgICAgaWYg
KHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQotICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAg
ICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAgICAgICAgICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFj
ay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNl
bmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGlt
ZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAh
dGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0
ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3Bs
aXQoIi4iKTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOwotICAgICAg
ICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAgICAgIGlmICghKGRv
bWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhp
c3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9k
b21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlmICghKGZ1bmN0aW9u
TmFtZSBpbiBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRo
b2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1tt
ZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQ
cm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhv
ZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAg
ICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciBw
YXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFt
TmFtZXNbaV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdT
dGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQot
ICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAg
ICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1z
KTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0
aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAg
ICAgfQotICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdl
T2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0g
IiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3Ip
OwotICAgIH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3Jp
cHQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlz
Ll9zY3JpcHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMu
X3NjcmlwdHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0g
ICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFyIGlkID0g
MDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2NyaXB0c1tp
ZF0uY2FsbCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9
IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxu
IiwgJGluc3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJhdGVIZWFkZXIKLXsK
LSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVjbGFyYXRpb24gPSBz
aGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RydWN0b3IgPSBzaGlm
dDsKLSAgICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsK
LSAgICBteSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhlYWRlcnMgPSBqb2lu
KCJcbiIsIHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVh
ZGVyIikgLiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFkZXIiKSwga2V5cyAl
eyR0eXBlc30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBz
b3J0KG1hcCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikgLiAiOyIsIGdyZXAo
dHlwZVRyYWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRj
b25zdGFudERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRzfSk7Ci0gICAgbXkg
JG1ldGhvZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9KTsKLQotICAgIG15
ICRoZWFkZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFtZX1faAotI2RlZmlu
ZSAke2NsYXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1lc3BhY2UgJG5hbWVz
cGFjZSB7Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCi1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0kY29uc3RydWN0b3IK
LQotJGNvbnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9ucwotCi0kZm9vdGVy
Ci19OwotCi19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8gIWRlZmluZWQoJHtj
bGFzc05hbWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsKLX0KLQotc3ViIGdl
bmVyYXRlU291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICR0eXBl
cyA9IHNoaWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9
IHNoaWZ0OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIiLCAkbGljZW5zZVRl
bXBsYXRlKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVkZSBcImNvbmZpZy5o
XCIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhc
IiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNv
dXJjZUNvbnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNoIG15ICR0eXBlIChr
ZXlzICV7JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUgXCIiIC4gdHlwZVRy
YWl0cygkdHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJhaXRzKCR0eXBlLCAi
aGVhZGVyIikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBzb3J0IGtl
eXMgJWhlYWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBz
b3VyY2VDb250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAgIHB1c2goQHNvdXJj
ZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2luKCJcbiIsIEB7JGNv
bnN0YW50c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFjZSIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAi
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwg
IiIpOwotICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5cGVUcmFpdHMKLXsK
LSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0OwotICAgIHJldHVy
biAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIgcGFyYW1UeXBlVHJh
aXRzCi17Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAgICBteSAkdHJhaXQg
PSBzaGlmdDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9IHR5cGVUcmFpdHMo
JHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0KTsKLSAgICAgICAg
cmV0dXJuICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJlc3VsdDsKLSAgICB9
Ci0gICAgbXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICR0
cmFpdCk7Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQgOiAiIjsKLX0KLQot
c3ViIGdlbmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IKLXsKLSAgICBteSBA
YXJndW1lbnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAgIHB1c2goQGFyZ3Vt
ZW50cywgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Iik7Ci0gICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGJh
Y2tlbmRGb290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc29ydCBrZXlzICVi
YWNrZW5kRG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBkZWNsYXJhdGlvbiB0
byB0aGUgZm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0eXBlVHJhaXRzKCRk
b21haW4sICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVUcmFpdHMoJGRvbWFp
biwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAg
JHthZ2VudENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMgQWRkIGFnZW50IHBh
cmFtZXRlciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBzdWJzdHIoJGZpZWxk
LCAyKTsKLSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgICwgJHtmaWVs
ZH0oJHthcmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2FnZW50Q2xhc3NOYW1l
fSogJHthcmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAi
LCBAYXJndW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBwdXNoKEBiYWNrZW5k
SGVhZCwgIiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJpbmd9KSIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVz
aChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsiKTsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7Ci0gICAgcHVzaChA
YmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAgICAgSW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAg
U2VydmVyRXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRy
eSwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90
b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQs
ICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwg
Q29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIg
ICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwotICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7
Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1lcyB7Iik7Ci0gICAg
JGJhY2tlbmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFkKTsKLX0KLQotc3Vi
IGZpbmlzaAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1c2goQGJhY2tlbmRN
ZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgpKTsKLSAgICBwdXNo
KEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3Io
KSk7Ci0gICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVGcm9udGVuZENv
bnN0cnVjdG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0UsICI+JG91dHB1dERp
ci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91
dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4o
IlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMs
IFxAZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsK
LSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9wZW4obXkg
JEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFt
ZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9udGVuZENsYXNzTmFt
ZSwgJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9udGVuZENvbnN0cnVj
dG9yLCBcQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzLCBq
b2luKCJcbiIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVu
ZGVmKCRIRUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMs
ICJjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10g
PSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJ9OyIpOwotICAg
IHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAgICAjIE1ha2UgZGlz
cGF0Y2hlciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAgcHVzaChAYmFja2Vu
ZENvbnN0YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMs
ICIgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAgICAKLSAgICBwdXNo
KEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29u
c3RhbnREZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFjaCBteSAkdHlwZSAo
a2V5cyAlYmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRzKCR0eXBlLCAiSlNP
TlR5cGUiKSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0
ZUFyZ3VtZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVzaChA
YmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
Y2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMs
IEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5lcmF0ZUJhY2tlbmRB
Z2VudEZpZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0lt
cGwsIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1l
dGhvZHNJbXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMs
ICIiKTsKLQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1l
LmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRDbGFz
c05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2Uo
JGJhY2tlbmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRDb25zdGFudERlZmlu
aXRpb25zLCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAg
IHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGly
LyRiYWNrZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0
SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGpvaW4o
IlxuIiwgZ2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNrZW5kQ2xhc3NEZWNs
YXJhdGlvbiwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3IsIFxAYmFja2VuZENv
bnN0YW50RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBiYWNrZW5k
Rm9vdGVyKSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0g
ICAgb3BlbihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyIp
IHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1l
LmpzIjsKLSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRlQmFja2VuZFN0dWJK
UygpKTsKLSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NUVUIpOwotfQotCi0x
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42M2FmYTI3OTEwMmYzNjljMDQwNTQyY2Q3MDNhOWE1YTNlZjA3YmU1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKQEAgLTAsMCArMSwxMzYxIEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0
cmluZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpv
aW4KKworY21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorYXJnX29wdGlv
bnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9hcmdzKCkKKwordHJ5OgorICAg
IGlucHV0X2pzb25fZmlsZW5hbWUsIG91dHB1dF9oZWFkZXJfZGlybmFtZSwgb3V0cHV0X2NwcF9k
aXJuYW1lID0gYXJnX3ZhbHVlcworZXhjZXB0IFZhbHVlRXJyb3IsIGU6CisgICAgc3lzLnN0ZGVy
ci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzXG5cbiIg
JSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNwZWN0b3IuanNv
biA8b3V0cHV0X2hlYWRlcl9kaXI+IDxvdXRwdXRfY3BwX2Rpcj5cbiIpCisgICAgZXhpdCgxKQor
CisKK2NsYXNzIERvbWFpbk5hbWVGaXhlczoKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0
X2ZpeGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6CisgICAgICAgIGlmIGRvbWFpbl9uYW1lIGlu
IGNscy5hZ2VudF90eXBlX21hcDoKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gY2xzLmFn
ZW50X3R5cGVfbWFwW2RvbWFpbl9uYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWdl
bnRfbmFtZV9yZXMgPSAiSW5zcGVjdG9yJXNBZ2VudCIgJSBkb21haW5fbmFtZQorCisgICAgICAg
IGlmIGRvbWFpbl9uYW1lIGluIGNscy5hZ2VudF9maWVsZF9uYW1lX21hcDoKKyAgICAgICAgICAg
IGZpZWxkX25hbWVfcmVzID0gY2xzLmFnZW50X2ZpZWxkX25hbWVfbWFwW2RvbWFpbl9uYW1lXQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRfbmFtZV9yZXMgPSBkb21haW5fbmFtZS5s
b3dlcigpICsgIkFnZW50IgorCisgICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgorICAgICAgICAg
ICAgYWdlbnRfdHlwZV9uYW1lID0gYWdlbnRfbmFtZV9yZXMKKyAgICAgICAgICAgIGhpZGRlbiA9
IGRvbWFpbl9uYW1lIGluIGNscy5oaWRkZW5fZG9tYWlucworICAgICAgICAgICAgc2tpcF9qc19i
aW5kID0gZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCisgICAgICAgICAg
ICBhZ2VudF9maWVsZF9uYW1lID0gZmllbGRfbmFtZV9yZXMKKyAgICAgICAgcmV0dXJuIFJlcwor
CisgICAgc2tpcF9qc19iaW5kX2RvbWFpbnMgPSBzZXQoWyJSdW50aW1lIiwgIkNTUyIsICJET01E
ZWJ1Z2dlciJdKQorICAgIGhpZGRlbl9kb21haW5zID0gc2V0KFsiSW5zcGVjdG9yIl0pCisgICAg
YWdlbnRfdHlwZV9tYXAgPSB7Ik5ldHdvcmsiOiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCJ9CisK
KyAgICAjIFRPRE86IGdldCByaWQgb2YgdGhpcywgZ2VuZXJhdGUgbmFtZXMgaW5zdGVhZC4KKyAg
ICBhZ2VudF9maWVsZF9uYW1lX21hcCA9IHsKKyAgICAgICAgIlBhZ2UiOiAicGFnZUFnZW50IiwK
KyAgICAgICAgIlJ1bnRpbWUiOiAicnVudGltZUFnZW50IiwKKyAgICAgICAgIkNvbnNvbGUiOiAi
Y29uc29sZUFnZW50IiwKKyAgICAgICAgIk5ldHdvcmsiOiAgInJlc291cmNlQWdlbnQiLAorICAg
ICAgICAiRGF0YWJhc2UiOiAgImRhdGFiYXNlQWdlbnQiLAorICAgICAgICAiRE9NU3RvcmFnZSI6
ICAiZG9tU3RvcmFnZUFnZW50IiwKKyAgICAgICAgIkFwcGxpY2F0aW9uQ2FjaGUiOiAgImFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudCIsCisgICAgICAgICJET00iOiAgImRvbUFnZW50IiwKKyAgICAgICAg
IkNTUyI6ICAiY3NzQWdlbnQiLAorICAgICAgICAiRGVidWdnZXIiOiAiZGVidWdnZXJBZ2VudCIs
CisgICAgICAgICJET01EZWJ1Z2dlciI6ICJkb21EZWJ1Z2dlckFnZW50IiwKKyAgICAgICAgIlBy
b2ZpbGVyIjogInByb2ZpbGVyQWdlbnQiLAorICAgICAgICAiV29ya2VyIjogIndvcmtlckFnZW50
IiwKKyAgICAgfQorCisKK2NsYXNzIENQYXJhbVR5cGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgdHlwZSwgc2V0dGVyX2Zvcm1hdD0iJXMiKToKKyAgICAgICAgc2VsZi50eXBlID0g
dHlwZQorICAgICAgICBzZWxmLnNldHRlcl9mb3JtYXQgPSBzZXR0ZXJfZm9ybWF0CisKKyAgICBk
ZWYgZ2V0X3RleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUKKworICAgIGRlZiBn
ZXRfc2V0dGVyX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc2V0dGVyX2Zvcm1h
dAorCisKK2NsYXNzIFJhd1R5cGVzKG9iamVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBnZXQoanNvbl90eXBlKToKKyAgICAgICAgaWYganNvbl90eXBlID09ICJib29sZWFuIjoKKyAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5Cb29sCisgICAgICAgIGVsaWYganNvbl90eXBlID09
ICJzdHJpbmciOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZworICAgICAgICBl
bGlmIGpzb25fdHlwZSA9PSAiYXJyYXkiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFy
cmF5CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJvYmplY3QiOgorICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLk9iamVjdAorICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiaW50ZWdlciI6
CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50CisgICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJudW1iZXIiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk51bWJlcgorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAl
IGpzb25fdHlwZSkKKworICAgIGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6CisgICAgICAgIEBjbGFz
c21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlv
bmFsKToKKyAgICAgICAgICAgIHJldHVybiBjbHMuZGVmYXVsdF9jX3BhcmFtX3R5cGUKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFs
KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGNsYXNzIFN0cmluZyhCYXNlVHlw
ZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMs
IHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFy
YW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAg
ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBl
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgor
ICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdl
dEdldHRlck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5p
dGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiXCJcIiIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4g
InN0cmluZyIKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiU3RyaW5nIikK
KyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJpbmcmIikKKworICAg
IGNsYXNzIEludChCYXNlVHlwZSk6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiSW50IgorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldFNldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJl
dHVybiAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJ
bml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICIwIgorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAi
bnVtYmVyIgorCisgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgiaW50
IikKKworICAgIGNsYXNzIE51bWJlcihCYXNlVHlwZSk6CisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiT2JqZWN0
IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldFNldHRlck5hbWUoKToK
KyAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIp
CisKKyAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQor
CisgICAgY2xhc3MgQm9vbChCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAg
ICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAg
ICAgIGlmIChwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCk6CisgICAgICAgICAgICAgICAg
aWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9w
bGFpbl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
cy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJCb29sZWFuIgorCisgICAgICAgIGdl
dFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gImZhbHNlIgor
CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAg
ICAgICAgICAgIHJldHVybiAiYm9vbGVhbiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJib29sIikKKyAgICAg
ICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBib29sKiBjb25zdCIsICIqJXMiKQor
CisgICAgY2xhc3MgT2JqZWN0KEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAg
ICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIk9iamVjdCIKKwor
ICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAib2JqZWN0Igor
CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0
aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlw
ZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKKyAgICAgICAgX3JlZl9j
X3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQorCisgICAg
Y2xhc3MgQXJyYXkoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVm
IGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBp
ZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5PVVRQVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1U
eXBlLklOUFVUOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAg
ICAgICAgICAgcmV0dXJuICJBcnJheSIKKworICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0
dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFs
aXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAg
ICAgICAgICAgcmV0dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4iKQorCisKK2NsYXNzIFBhcmFtVHlwZShvYmplY3QpOgorICAgIElOUFVU
ID0gImlucHV0IgorICAgIE9VVFBVVCA9ICJvdXRwdXQiCisgICAgRVZFTlQgPSAiZXZlbnQiCisK
KworY2xhc3MgVHlwZURhdGEob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl90
eXBlLCBqc29uX2RvbWFpbik6CisgICAgICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25fdHlwZQor
ICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCisKKyAgICAgICAgaWYgInR5
cGUiIGluIGpzb25fdHlwZToKKyAgICAgICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBl
WyJ0eXBlIl0KKyAgICAgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9u
YW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3du
IHR5cGUiKQorICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCisKKyAgICBkZWYgZ2V0
UmF3VHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfCisKKworY2xhc3Mg
VHlwZU1hcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXBpKToKKyAgICAgICAgc2VsZi5tYXBf
ID0ge30KKyAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGFwaVsiZG9tYWlucyJdOgorICAgICAg
ICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKworICAgICAgICAgICAg
ZG9tYWluX21hcCA9IHt9CisgICAgICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0gZG9t
YWluX21hcAorCisgICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgorICAgICAg
ICAgICAgICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06CisgICAgICAg
ICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQorICAgICAgICAgICAgICAg
ICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluKQorICAgICAg
ICAgICAgICAgICAgICBkb21haW5fbWFwW3R5cGVfbmFtZV0gPSB0eXBlX2RhdGEKKworICAgIGRl
ZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxm
Lm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0KKworCitkZWYgcmVzb2x2ZVBhcmFtUmF3VHlw
ZShqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUpOgorICAgIGlmICIkcmVmIiBpbiBq
c29uX3BhcmFtZXRlcjoKKyAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJd
CisgICAgICAgIHR5cGVfZGF0YSA9IGdldFJlZkRhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9u
YW1lKQorICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldFJhd1R5cGUoKQorICAgIGVsaWYgInR5
cGUiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3R5cGUgPSBqc29uX3BhcmFtZXRl
clsidHlwZSJdCisgICAgICAgIHJldHVybiBSYXdUeXBlcy5nZXQoanNvbl90eXBlKQorICAgIGVs
c2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKKworCitkZWYgZ2V0
UmVmRGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpOgorICAgIGRvdF9wb3MgPSBqc29u
X3JlZi5maW5kKCIuIikKKyAgICBpZiBkb3RfcG9zID09IC0xOgorICAgICAgICBkb21haW5fbmFt
ZSA9IHNjb3BlX2RvbWFpbl9uYW1lCisgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmCisgICAg
ZWxzZToKKyAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX3JlZls6ZG90X3Bvc10KKyAgICAgICAg
dHlwZV9uYW1lID0ganNvbl9yZWZbZG90X3BvcyArIDE6XQorCisgICAgcmV0dXJuIHR5cGVfbWFw
LmdldChkb21haW5fbmFtZSwgdHlwZV9uYW1lKQorCisKK2lucHV0X2ZpbGUgPSBvcGVuKGlucHV0
X2pzb25fZmlsZW5hbWUsICJyIikKK2pzb25fc3RyaW5nID0gaW5wdXRfZmlsZS5yZWFkKCkKK2pz
b25fYXBpID0ganNvbi5sb2Fkcyhqc29uX3N0cmluZykKKworCitjbGFzcyBUZW1wbGF0ZXM6Cisg
ICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzID0gc3RyaW5nLlRlbXBsYXRlKAorIiIiICAgIGNsYXNz
ICRkb21haW5DbGFzc05hbWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgJGRvbWFpbkNsYXNzTmFt
ZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQor
JHtmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9uc30gICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworICAgIH07CisKKyAgICAkZG9tYWluQ2xhc3NOYW1l
KiAkZG9tYWluRmllbGROYW1lKCkgeyByZXR1cm4gJm1fJGRvbWFpbkZpZWxkTmFtZTsgfQorCisi
IiIpCisKKyAgICBiYWNrZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgKKyIiInZvaWQgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1fJG1ldGhvZE5hbWUobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpCit7CisgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKworICAgIGlmICghJGFnZW50RmllbGQpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKCIke2RvbWFpbk5hbWV9IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKKyRt
ZXRob2RPdXRDb2RlCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiskbWV0aG9kSW5Db2RlCitpZiAo
IXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKKyAgICAkYWdlbnRGaWVsZC0+JG1ldGhvZE5hbWUo
JmVycm9yJGFnZW50Q2FsbFBhcmFtcyk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXNwb25zZUNvb2t9c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiRkb21haW5OYW1lLiRtZXRob2ROYW1l
IiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cit9CisiIiIpCisKKyAgICBmcm9udGVuZF9tZXRo
b2QgPSBzdHJpbmcuVGVtcGxhdGUoIiIidm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6JGRvbWFpbk5h
bWU6OiRldmVudE5hbWUoJHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gJHtldmVudE5hbWV9TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
JHtldmVudE5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiJGRvbWFpbk5hbWUuJGV2
ZW50TmFtZSIpOworJGNvZGUgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7
ZXZlbnROYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyIiIikKKworICAgIGZyb250
ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAor
I2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZF9oCisKKyNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Citj
bGFzcyBJbnNwZWN0b3JPYmplY3Q7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmQo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CisKKworJGRvbWFpbkNsYXNzTGlzdAorcHJpdmF0
ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOworJHtmaWVsZERlY2xhcmF0aW9uc319OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkKKyIiIikKKworICAgIGJhY2tl
bmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcl9oCisjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKworI2luY2x1ZGUg
PFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3Bl
Y3RvckFnZW50OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7
CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisKKyRmb3J3YXJkRGVjbGFyYXRpb25z
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCRjb25zdHJ1Y3RvclBhcmFtcykK
KyAgICAgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCiskY29uc3RydWN0b3JJbml0CisgICAgeyB9CisKKyAgICB2b2lkIGNsZWFyRnJvbnRl
bmQoKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsgfQorCisgICAgZW51bSBDb21t
b25FcnJvckNvZGUgeworICAgICAgICBQYXJzZUVycm9yID0gMCwKKyAgICAgICAgSW52YWxpZFJl
cXVlc3QsCisgICAgICAgIE1ldGhvZE5vdEZvdW5kLAorICAgICAgICBJbnZhbGlkUGFyYW1zLAor
ICAgICAgICBJbnRlcm5hbEVycm9yLAorICAgICAgICBTZXJ2ZXJFcnJvciwKKyAgICAgICAgTGFz
dEVudHJ5LAorICAgIH07CisKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29u
c3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsKKyAgICB2b2lkIGRpc3BhdGNo
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCk7CisKKyAgICBlbnVtIE1ldGhv
ZE5hbWVzIHsKKworJGVudW1Db25zdGFudHMKK307CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29tbWFuZE5hbWVzW107CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldFN0
cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBi
b29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
OworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJv
cik7CisKKyRtZXRob2REZWNsYXJhdGlvbnMKKworICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiskZmllbGREZWNsYXJhdGlvbnMKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcl9oKQorCisKKyIiIikKKworICAgIGJhY2tlbmRfY3BwID0gc3RyaW5nLlRl
bXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaCIKKyRpbmNsdWRlcworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIq
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kTmFtZXNbXSA9IHsKKyRtZXRob2RO
YW1lRGVjbGFyYXRpb25zCit9OworCisKKyRtZXRob2RzCit2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0ID0gdGhpczsKKyAgICB0eXBlZGVm
IHZvaWQgKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VPYmplY3QpOworICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKTsKKyAgICBsb25nIGNhbGxJZCA9IDA7CisK
KyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBDYWxsSGFu
ZGxlciBoYW5kbGVyc1tdID0geworJG1lc3NhZ2VIYW5kbGVycworICAgICAgICB9OworICAgICAg
ICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5h
bWVzWzBdKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNw
ZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghcGFyc2VkTWVzc2FnZSkg
eworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11
c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09i
amVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkgeworICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9i
amVjdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKKyAgICBpZiAoIWNh
bGxJZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVl
c3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7CisgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQn
IHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0
KCJtZXRob2QiKTsKKyAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNu
J3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0cmluZyBtZXRob2Q7
CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKKyAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdt
ZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3Bh
dGNoTWFwLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIici
ICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsK
K30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcg
Y2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMs
IEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKK3sKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMt
Pmxlbmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxp
ZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3IpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
cG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXNwb25zZU1l
c3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKKyAgICByZXNwb25zZU1lc3NhZ2Ut
PnNldE51bWJlcigiaWQiLCBjYWxsSWQpOworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSkgY29uc3QKK3sKKyAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJZCwgY29kZSwgZXJy
b3JNZXNzYWdlLCAwKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVw
b3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZGF0YSkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+
LHNfY29tbW9uRXJyb3JzLCk7CisgICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKKyAg
ICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7CisgICAgICAg
IHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKKyAgICAgICAg
c19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOworICAgICAgICBz
X2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKKyAgICAgICAgc19j
b21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7CisgICAgICAgIHNfY29t
bW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKKyAgICB9CisgICAgQVNTRVJU
KGNvZGUgPj0wKTsKKyAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9ycy5z
aXplKCkpOworICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGVy
cm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7CisgICAgZXJyb3It
PnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7CisgICAgQVNTRVJUKGVycm9yKTsK
KyAgICBpZiAoZGF0YSkKKyAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKKyAgICBpZiAo
Y2FsbElkKQorICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7CisgICAg
ZWxzZQorICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorCitpbnQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHBy
b3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3Vu
ZCA9IGZhbHNlOworCisgICAgaW50IHZhbHVlID0gMDsKKworICAgIGlmICghb2JqZWN0KSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1l
dGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250
YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVyJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQor
CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgp
OworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9i
amVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAg
ICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdOdW1iZXInIHdh
cyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnZh
bHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdOdW1iZXInLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisg
ICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitT
dHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsK
KworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisg
ICAgU3RyaW5nIHZhbHVlID0gIiI7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAo
IXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNz
aW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJl
ZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQo
bmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3RyaW5nJyB3YXMgbm90IGZvdW5k
LiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQor
CisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIg
JyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnU3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAg
KnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworYm9vbCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2
YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgYm9vbCB2YWx1
ZSA9IGZhbHNlOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5k
KSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMg
Y29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVy
ICclcycgd2l0aCB0eXBlICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKwor
ICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQp
CisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdCb29sZWFuJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYg
KCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpKQorICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVG
b3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3Jz
KTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwor
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7
CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29u
dGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICcl
cycgd2l0aCB0eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAg
aWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJh
bWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFs
dWVJdGVyYXRvci0+c2Vjb25kLT5hc09iamVjdCgmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25n
IHR5cGUuIEl0IG11c3QgYmUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAg
ZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0g
dHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAg
IGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKwor
ICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAg
ICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFy
YW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRv
ciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRl
cmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHBy
b3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3
aXRoIHR5cGUgJ0FycmF5JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5z
ZWNvbmQtPmFzQXJyYXkoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0
IGJlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBp
ZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1
cm4gdmFsdWU7Cit9Citib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21tYW5k
TmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3Nh
Z2UpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICgh
b2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdC0+Z2V0U3Ry
aW5nKCJtZXRob2QiLCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRl
KCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5k
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworCisKK0luc3Bl
Y3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1faW5zcGVjdG9yKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fcGFnZShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CisgICAgLCBtX2NvbnNvbGUoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9uZXR3
b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZGF0YWJhc2UoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9kb21zdG9yYWdlKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKKyAgICAsIG1fYXBwbGljYXRpb25jYWNoZShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CisgICAgLCBtX2RvbShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX3RpbWVsaW5l
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZGVidWdnZXIoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQorICAgICwgbV9wcm9maWxlcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
CisgICAgLCBtX3dvcmtlcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCit7Cit9CisKKyRtZXRo
b2RzCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisiIiIpCisKKyAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHly
aWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKworSW5z
cGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5fbGFzdENhbGxiYWNr
SWQgPSAxOworICAgIHRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCA9IDA7CisgICAgdGhpcy5f
Y2FsbGJhY2tzID0ge307CisgICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMgPSB7fTsKKyAgICB0
aGlzLl9ldmVudEFyZ3MgPSB7fTsKKyRkZWxlZ2F0ZXMkZXZlbnRBcmdzJGRvbWFpbkRpc3BhdGNo
ZXJzICAgIH0KKworSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0geworICAgIGR1bXBJ
bnNwZWN0b3JUaW1lU3RhdHM6IDAsCisgICAgZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXM6
IDAsCisKKyAgICBfd3JhcDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIg
Y2FsbGJhY2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7CisgICAgICAgIHRoaXMuX2NhbGxi
YWNrc1tjYWxsYmFja0lkXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307CisgICAgICAgIHJl
dHVybiBjYWxsYmFja0lkOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rp
b24ocmVxdWVzdFN0cmluZykKKyAgICB7CisgICAgICAgIHZhciBkb21haW5BbmRGdW5jdGlvbiA9
IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZykubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZh
ciBhZ2VudE5hbWUgPSBkb21haW5BbmRGdW5jdGlvblswXSArICJBZ2VudCI7CisgICAgICAgIGlm
ICghd2luZG93W2FnZW50TmFtZV0pCisgICAgICAgICAgICB3aW5kb3dbYWdlbnROYW1lXSA9IHt9
OworICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV0gPSB0aGlz
Ll9zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpOworICAgICAg
ICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV1bImludm9rZSJdID0gdGhp
cy5faW52b2tlLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZykKKyAgICB9LAorCisgICAgX2ludm9r
ZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZywgYXJncywgY2FsbGJhY2spCisgICAgeworICAgICAg
ICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZyk7CisgICAgICAgIHJlcXVl
c3QucGFyYW1zID0gYXJnczsKKyAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3Nh
Z2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOworICAgIH0sCisKKyAgICBfc2VuZE1lc3NhZ2VU
b0JhY2tlbmQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJv
dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09O
LnBhcnNlKGFyZ3Muc2hpZnQoKSk7CisgICAgICAgIHZhciBjYWxsYmFjayA9IChhcmdzLmxlbmd0
aCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rpb24iKSA/IGFyZ3Mu
cG9wKCkgOiAwOworICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVxdWVzdC5tZXRob2Qu
c3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWluQW5kTWV0aG9kWzBd
ICsgIkFnZW50LiIgKyBkb21haW5BbmRNZXRob2RbMV07CisKKyAgICAgICAgdmFyIGhhc1BhcmFt
cyA9IGZhbHNlOworICAgICAgICBpZiAocmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhciB0eXBl
TmFtZSA9IHJlcXVlc3QucGFyYW1zW2tleV0udHlwZTsKKyAgICAgICAgICAgICAgICB2YXIgb3B0
aW9uYWxGbGFnID0gcmVxdWVzdC5wYXJhbXNba2V5XS5vcHRpb25hbDsKKworICAgICAgICAgICAg
ICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG51bWJlciBv
ZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVz
dCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QucGFy
YW1zKSArICInLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOworICAgICAg
ICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVk
IikgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5XTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1
bWVudCAnIiArIGtleSArICInIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwu
IEl0IG11c3QgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVvZiB2YWx1
ZSArICInLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZhbHVlOworICAgICAg
ICAgICAgICAgIGhhc1BhcmFtcyA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIWhhc1BhcmFtcykKKyAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXM7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgIWNhbGxiYWNrKSB7
CisgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmluZWQiKSB7CisgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxi
YWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwgbXVzdCBi
ZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnIiArIHR5cGVvZiBhcmdzWzBdICsgIicuIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2Fs
bGJhY2spOworICAgIH0sCisKKyAgICBfd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3Q6
IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbWVzc2Fn
ZU9iamVjdC5pZCA9IHRoaXMuX3dyYXAoY2FsbGJhY2spOworCisgICAgICAgIGlmICh0aGlzLmR1
bXBJbnNwZWN0b3JUaW1lU3RhdHMpIHsKKyAgICAgICAgICAgIHZhciB3cmFwcGVkQ2FsbGJhY2sg
PSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07CisgICAgICAgICAgICB3cmFwcGVk
Q2FsbGJhY2subWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QubWV0aG9kOworICAgICAgICAgICAg
d3JhcHBlZENhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSA9IERhdGUubm93KCk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VP
YmplY3QpKTsKKworICAgICAgICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKKyAgICAg
ICAgdGhpcy5zZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2JqZWN0KTsKKyAgICB9
LAorCisgICAgc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9uKG1lc3NhZ2VPYmpl
Y3QpCisgICAgeworICAgICAgICBjb25zb2xlLnRpbWVTdGFtcChtZXNzYWdlT2JqZWN0Lm1ldGhv
ZCk7CisgICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCk7
CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNz
YWdlKTsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcjogZnVuY3Rpb24o
ZG9tYWluLCBkaXNwYXRjaGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hl
cnNbZG9tYWluXSA9IGRpc3BhdGNoZXI7CisgICAgfSwKKworICAgIGRpc3BhdGNoOiBmdW5jdGlv
bihtZXNzYWdlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29s
TWVzc2FnZXMpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiYmFja2VuZDogIiArICgodHlwZW9m
IG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdl
KSkpOworCisgICAgICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdlID09PSAi
c3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKKworICAgICAgICBpZiAo
ImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBmb3Igc29tZSByZXF1
ZXN0CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvcikgeworICAgICAgICAgICAg
ICAgIG1lc3NhZ2VPYmplY3QuZXJyb3IuX19wcm90b19fID0geworICAgICAgICAgICAgICAgICAg
ICBnZXREZXNjcmlwdGlvbjogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGhpcy5jb2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAtMzI3MDA6IHJldHVybiAiUGFyc2UgZXJyb3IiOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAwOiByZXR1cm4gIkludmFsaWQgUmVxdWVzdCI7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDE6IHJldHVybiAiTWV0aG9k
IG5vdCBmb3VuZCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDI6IHJl
dHVybiAiSW52YWxpZCBwYXJhbXMiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
LTMyNjAzOiByZXR1cm4gIkludGVybmFsIGVycm9yIjs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSAtMzIwMDA6IHJldHVybiAiU2VydmVyIGVycm9yIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAg
ICB0b1N0cmluZzogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSJVbmtub3duIGVycm9yIGNvZGUiOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSArICIoIiAr
IHRoaXMuY29kZSArICIpOiAiICsgdGhpcy5tZXNzYWdlICsgIi4iICsgKHRoaXMuZGF0YSA/ICIg
IiArIHRoaXMuZGF0YS5qb2luKCIgIikgOiAiIik7CisgICAgICAgICAgICAgICAgICAgIH0sCisK
KyAgICAgICAgICAgICAgICAgICAgZ2V0TWVzc2FnZTogZnVuY3Rpb24oKQorICAgICAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IuY29kZSAhPT0gLTMyMDAwKQorICAgICAgICAgICAg
ICAgICAgICB0aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKKyAgICAgICAgICAgIGlm
IChtZXNzYWdlT2JqZWN0LnJlc3VsdCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBp
biBtZXNzYWdlT2JqZWN0LnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLnB1
c2gobWVzc2FnZU9iamVjdC5yZXN1bHRba2V5XSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKyAg
ICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzaW5n
U3RhcnRUaW1lOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3Rh
dHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2lu
Z1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMudW5z
aGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBs
eShudWxsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50OworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbbWVzc2Fn
ZU9iamVjdC5pZF07CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGlt
ZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgY2FsbGJhY2subWV0aG9kTmFtZSArICIgPSAiICsgKHBy
b2Nlc3NpbmdTdGFydFRpbWUgLSBjYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUpICsgIiArICIgKyAo
RGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHRoaXMuX3NjcmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3Vu
dCkKKyAgICAgICAgICAgICAgICB0aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoKTsKKwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIG1l
dGhvZCA9IG1lc3NhZ2VPYmplY3QubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgICAgICB2YXIg
ZG9tYWluTmFtZSA9IG1ldGhvZFswXTsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBt
ZXRob2RbMV07CisgICAgICAgICAgICBpZiAoIShkb21haW5OYW1lIGluIHRoaXMuX2RvbWFpbkRp
c3BhdGNoZXJzKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVy
cm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnIiArIGRvbWFpbk5h
bWUgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9tYWluTmFt
ZV07CisgICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0Y2hlcikpIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRv
IGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRo
b2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCF0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdKSB7Cisg
ICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0
byBkaXNwYXRjaCBhbiB1bnNwZWNpZmllZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhv
ZCArICInIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5w
YXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyYW1OYW1lcyA9IHRoaXMuX2V2ZW50QXJn
c1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBwYXJhbU5hbWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbXMu
cHVzaChtZXNzYWdlT2JqZWN0LnBhcmFtc1twYXJhbU5hbWVzW2ldXSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOworICAgICAgICAgICAgaWYg
KHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAgICAgICAgICAgICAgICBwcm9jZXNzaW5n
U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAgICAgICAgICAgZGlzcGF0Y2hlcltmdW5jdGlv
bk5hbWVdLmFwcGx5KGRpc3BhdGNoZXIsIHBhcmFtcyk7CisKKyAgICAgICAgICAgIGlmICh0aGlz
LmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRp
bWUtc3RhdHM6ICIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICIgPSAiICsgKERhdGUubm93KCkg
LSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcjogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNv
bnNvbGUuZXJyb3IoIlJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2JqZWN0LmlkICsgIiBm
YWlsZWQuICIgKyBtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICB9LAorCisgICAgcnVuQWZ0ZXJQ
ZW5kaW5nRGlzcGF0Y2hlczogZnVuY3Rpb24oc2NyaXB0KQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9zY3JpcHRzKQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdOworCisgICAgICAg
IGlmIChzY3JpcHQpCisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2goc2NyaXB0KTsKKwor
ICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkgeworICAgICAgICAgICAg
dmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzOworICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9
IFtdCisgICAgICAgICAgICBmb3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0cy5sZW5ndGg7ICsr
aWQpCisgICAgICAgICAgICAgICAgIHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0luc3BlY3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9yQmFja2VuZFN0dWIo
KTsiIiIpCisKKyAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSAiIiIKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyIiIgorCisKK3R5cGVfbWFw
ID0gVHlwZU1hcChqc29uX2FwaSkKKworCitjbGFzcyBHZW5lcmF0b3I6CisgICAgZnJvbnRlbmRf
Y2xhc3NfZmllbGRfbGluZXMgPSBbXQorICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9
IFtdCisKKyAgICBtZXRob2RfbmFtZV9lbnVtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9k
X2RlY2xhcmF0aW9uX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9u
X2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCA9IFtd
CisgICAgbWV0aG9kX2hhbmRsZXJfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfbWV0aG9kX2xpc3Qg
PSBbXQorICAgIGJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCA9IFtdCisgICAgYmFja2VuZF9q
c19ldmVudF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2RvbWFpbl9kaXNwYXRjaGVyX2xpc3Qg
PSBbXQorCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0ID0gW10KKyAgICBiYWNr
ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9maWVsZF9saXN0ID0g
W10KKyAgICBiYWNrZW5kX2ZvcndhcmRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9pbmNsdWRlX2xp
c3QgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnbygpOgorICAgICAgICBmb3Ig
anNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9u
YW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dl
ciA9IGRvbWFpbl9uYW1lLmxvd2VyKCkKKworICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21h
aW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisgICAgICAgICAgICBhZ2Vu
dF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQorCisgICAgICAgICAg
ICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMgPSBbXQorICAgICAgICAgICAgaWYg
ImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fZXZlbnQg
aW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
cHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2Rl
Y2xhcmF0aW9uX2xpbmVzKQorCisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2Ns
YXNzX2ZpZWxkX2xpbmVzLmFwcGVuZCgiICAgICVzIG1fJXM7XG4iICUgKGRvbWFpbl9uYW1lLCBk
b21haW5fbmFtZV9sb3dlcikpCisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2Rv
bWFpbl9jbGFzc19saW5lcy5hcHBlbmQoVGVtcGxhdGVzLmZyb250ZW5kX2RvbWFpbl9jbGFzcy5z
dWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT1kb21h
aW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluRmllbGROYW1lPWRvbWFpbl9uYW1l
X2xvd2VyLAorICAgICAgICAgICAgICAgICAgICBmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0
aW9ucz1qb2luKGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcywgIiIpKSkKKyAgICAg
ICAgICAgIGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9y
IGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMiXToKKyAgICAgICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1l
LCBhZ2VudF9maWVsZF9uYW1lKQorCisgICAgICAgICAgICBpZiBub3QgZG9tYWluX2RhdGEuc2tp
cF9qc19iaW5kOgorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9k
aXNwYXRjaGVyX2xpc3QuYXBwZW5kKCIgICAgdGhpcy5yZWdpc3RlciVzRGlzcGF0Y2hlciA9IHRo
aXMuX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKHRoaXMsIFwiJXNcIik7XG4iICUgKGRv
bWFpbl9uYW1lLCBkb21haW5fbmFtZSkpCisKKyAgICAgICAgc29ydGVkX2pzb25fZG9tYWlucyA9
IGxpc3QoanNvbl9hcGlbImRvbWFpbnMiXSkKKyAgICAgICAgc29ydGVkX2pzb25fZG9tYWlucy5z
b3J0KGtleT1sYW1iZGEgbzogb1siZG9tYWluIl0pCisKKyAgICAgICAgZm9yIGpzb25fZG9tYWlu
IGluIHNvcnRlZF9qc29uX2RvbWFpbnM6CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25f
ZG9tYWluWyJkb21haW4iXQorCisgICAgICAgICAgICBkb21haW5fZGF0YSA9IERvbWFpbk5hbWVG
aXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFtZSkKKyAgICAgICAgICAgIGlmIGRvbWFpbl9k
YXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYWdlbnRf
dHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9uYW1lCisgICAgICAgICAgICBhZ2Vu
dF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQorICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdC5hcHBlbmQoIiwgJXMqICVz
IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFwcGVuZCgiICAgICAgICAsIG1f
JXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1fJXM7IiAl
IChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xhc3MgJXM7IiAlIGFnZW50X3R5cGVf
bmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdC5hcHBlbmQo
IiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFtZSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRl
bmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgZXZlbnRfbmFtZSA9IGpzb25f
ZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCisgICAgICAgIG1ldGhv
ZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QgPSBb
XQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9ldmVudDoKKyAgICAgICAgICAgIG1l
dGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCisgICAgICAgICAgICBmb3Ig
anNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1ldGVycyJdOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorCisgICAgICAgICAg
ICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBkb21h
aW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0aW9uYWwgPSAib3B0aW9uYWwiIGlu
IGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXQorCisgICAgICAg
ICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlzRXZlbnRQYXJhbUNoZWNrT3B0aW9u
YWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFy
YW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAgICAgICAgICAgc2V0dGVyX3R5
cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAgICAgICAgICAgICAgIG9wdGlvbmFs
ID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAorCisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBlLmdldF90ZXh0KCksIHBhcmFtZXRl
cl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IGNfdHlwZS5nZXRf
c2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgICAgIHNldHRl
cl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0
ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKKyAgICAgICAgICAgICAg
ICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAoIiAgICBp
ZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2RlCisgICAgICAgICAg
ICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCisKKyAgICAgICAgICAg
ICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVzXCIiICUgcGFyYW1l
dGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgICVzTWVz
c2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVjdCk7XG4iICUgZXZlbnRfbmFt
ZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZCgKKyAg
ICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAlIChldmVudF9uYW1lLCBqb2luKHBh
cmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX21ldGhv
ZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwK
KyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIGV2ZW50TmFtZT1ldmVudF9uYW1l
LAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSwKKyAg
ICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0LCAiIikpKQorCisgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5kKCIgICAgdGhpcy5fZXZlbnRBcmdz
W1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lLCBldmVu
dF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCwgIiwgIikpKQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21h
aW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpzb25fY29tbWFuZF9uYW1lID0g
anNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1f
bGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29t
bWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3QuYXBw
ZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNfJXMsIiAlIChkb21h
aW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9t
ZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVzKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUgKGRvbWFpbl9uYW1l
LCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0aG9kX2luX2NvZGUgPSAiIgorICAg
ICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3Qg
PSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBbXQorICAgICAgICByZXF1ZXN0X21l
c3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiIgorICAgICAg
ICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAganNvbl9wYXJh
bXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAgICAgICAgICAgbWV0aG9kX2luX2Nv
ZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZQorICAgICAgICAgICAg
cmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVzc2FnZU9iamVjdCIKKyAgICAgICAg
ICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIg
aW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lID0ganNvbl9w
YXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2
ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCisKKyAgICAgICAgICAg
ICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLklO
UFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFyYW1fcmF3X3R5cGUu
Z2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGluIGpzb25f
cGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXToKKyAgICAgICAgICAgICAg
ICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWlu
ZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgdmFyX3R5cGUuZ2V0
X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lLCBq
c29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzX3ZhbHVl
Rm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25hbWUsIGpzb25fcGFyYW1fbmFtZSkK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAg
JXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgMCwgcHJvdG9jb2xF
cnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcl90eXBlLmdl
dF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkp
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1l
CisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBjb2RlCisgICAgICAgICAgICAg
ICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKworICAgICAgICAgICAgICAg
IGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmluZFR5cGUoKQorICAgICAgICAg
ICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRpb25hbFwiOiAlcywgXCJ0eXBl
XCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25hbWUsCisg
ICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIgaW4ganNvbl9wYXJhbWV0
ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNlICJmYWxzZSIpLAorICAgICAg
ICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAgICAgICAgICAgICBqc19wYXJhbV9s
aXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAgICBqc19wYXJhbWV0ZXJzX3Rl
eHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1fbGlzdCwgIiwgIikgKyAifSIK
KworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgorICAgICAgICBpZiAicmV0dXJucyIg
aW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9ICJcbiIKKyAg
ICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMiXToKKwor
ICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFtZSJdCisg
ICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcmV0dXJu
LCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdl
dFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0
Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHJhd190eXBlLmdldENQ
YXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKworICAgICAgICAgICAgICAgIGNvZGUg
PSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3Jl
dHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICZvdXRf
JXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICBy
ZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0
dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAgaWYgdmFyX3R5cGUu
Z2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIgaW4ganNvbl9yZXR1cm4gYW5kIGpz
b25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAg
ICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vaworCisgICAg
ICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKKyAgICAgICAgICAgICAgICBhZ2Vu
dF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAgICAgICAgICAgIHJlc3BvbnNl
X2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCA9
ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7
XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3QsICIiKQorCisgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0
ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgZG9tYWluTmFt
ZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKKyAgICAgICAgICAg
IGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisgICAgICAgICAgICBtZXRob2RJ
bkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRob2RPdXRDb2RlPW1ldGhvZF9v
dXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFtcz1qb2luKGFnZW50X2NhbGxfcGFy
YW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmplY3Q9cmVxdWVzdF9t
ZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29rPXJlc3BvbnNlX2Nvb2tfdGV4
dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xp
c3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9u
YW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0LmFw
cGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7XCJtZXRob2RcIjogXCIlcy4l
c1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1l
LCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRvci5nbygpCisKK2JhY2tlbmRfaF9m
aWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5h
bWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIsICJ3IikKKworZnJvbnRlbmRf
aF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckZyb250ZW5k
LmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsg
Ii9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2JhY2tlbmRfanNfZmlsZSA9IG9wZW4o
b3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcyIsICJ3IikKKwor
Citmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShO
b25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRf
Y2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1qb2luKEdl
bmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSkpCisKK2JhY2tlbmRfaF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgIGNvbnN0
cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwg
IlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9jb25z
dHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgZW51bUNvbnN0YW50cz1qb2luKEdlbmVyYXRv
ci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIpLAorICAgIG1ldGhvZERlY2xhcmF0aW9ucz1q
b2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAg
ICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsICJc
biIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9mb3J3
YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZy
b250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5m
cm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0aG9kTmFtZURlY2xh
cmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xp
c3QsICJcbiIpLAorICAgIGluY2x1ZGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9s
aXN0LCAiXG4iKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2lt
cGxlbWVudGF0aW9uX2xpc3QsICJcbiIpLAorICAgIG1lc3NhZ2VIYW5kbGVycz1qb2luKEdlbmVy
YXRvci5tZXRob2RfaGFuZGxlcl9saXN0LCAiXG4iKSkpCisKK2JhY2tlbmRfanNfZmlsZS53cml0
ZShUZW1wbGF0ZXMuYmFja2VuZF9qcy5zdWJzdGl0dXRlKE5vbmUsCisgICAgZGVsZWdhdGVzPWpv
aW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCwgIiIpLAorICAgIGV2ZW50
QXJncz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QsICIiKSwKKyAgICBkb21h
aW5EaXNwYXRjaGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9kaXNwYXRjaGVy
X2xpc3QsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLmNsb3NlKCkKK2JhY2tlbmRfY3BwX2ZpbGUu
Y2xvc2UoKQorCitmcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQorZnJvbnRlbmRfY3BwX2ZpbGUuY2xv
c2UoKQorCitiYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCmluZGV4IDk2ZjFmM2ZmMjY5YjY5MDZlYzQ3NWFhMjcxYzE2YjE3MjY2Yjhm
ODYuLmUzOTZlNTY0NGY0M2IwZWMwNDVmY2JlNWYwNDU4Y2M3NDYzYTc1ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAidHlwZSI6ICJib29sZWFuIiwgImRl
c2NyaXB0aW9uIjogIlRydWUgaW4gY2FzZSBvZiBzZXNzaW9uIGNvb2tpZS4iIH0KICAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCi0gICAgICAgICAgICB9
LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAg
ICAgICAgICB7CkBAIC04NDYsNyArODQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJpc0xvY2FsU3RvcmFnZSIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAi
VHJ1ZSBmb3IgbG9jYWwgc3RvcmFnZS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiRW50cnkgaWQgZm9yIGZ1
cnRoZXIgcmVmZXJlbmNlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKICAgICAgICAg
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1p
ZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE4ZGVkNjEwYjI4NmJhNWU2NDgwY2E5
YWRhM2ZkYWRmOTA2ZmJhN2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0j
IENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5cwotCi1wcm9ncmFt
X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKQotaWYgbGVuKHN5cy5hcmd2KSA8IDQg
b3Igc3lzLmFyZ3ZbMV0gIT0gIi1vIjoKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogJXMg
LW8gT1VUUFVUX0ZJTEUgSU5QVVRfRklMRVxuIiAlIHByb2dyYW1fbmFtZSkKLSAgICBleGl0KDEp
Ci0KLW91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0KLWlucHV0X3BhdGggPSBzeXMuYXJndlszXQot
Ci1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoLCAiciIpCi1qc29uX3N0cmluZyA9IGlucHV0
X2ZpbGUucmVhZCgpCi1qc29uX3N0cmluZyA9IGpzb25fc3RyaW5nLnJlcGxhY2UoIjogdHJ1ZSIs
ICI6IFRydWUiKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IGZhbHNlIiwg
IjogZmFsc2UiKQotanNvbl9hcGkgPSBldmFsKGpzb25fc3RyaW5nKVsiZG9tYWlucyJdCi0KLW91
dHB1dF9maWxlID0gb3BlbihvdXRwdXRfcGF0aCwgInciKQotb3V0cHV0X2ZpbGUud3JpdGUoIiIi
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gCi1tb2R1bGUg
Y29yZSB7IiIiKQotCi10eXBlX3RyYWl0cyA9IHsKLSAgICAic3RyaW5nIjogIlN0cmluZyIsCi0g
ICAgImludGVnZXIiOiAiaW50IiwKLSAgICAibnVtYmVyIjogImRvdWJsZSIsCi0gICAgImJvb2xl
YW4iOiAiYm9vbGVhbiIsCi0gICAgImFycmF5IjogIkFycmF5IiwKLSAgICAib2JqZWN0IjogIk9i
amVjdCIKLX0KLQotcmVmX3R5cGVzID0ge30KLQotbWFjcm9fdHJhaXRzID0gewotICAgICJEYXRh
YmFzZSI6ICJTUUxfREFUQUJBU0UiLAotICAgICJET01TdG9yYWdlIjogIkRPTV9TVE9SQUdFIiwK
LSAgICAiRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIkRPTURlYnVnZ2Vy
IjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJQcm9maWxlciI6ICJKQVZBU0NSSVBUX0RF
QlVHR0VSIiwKLSAgICAiV29ya2VyIjogIldPUktFUlMiCi19Ci0KLWRlZiBmdWxsX3F1YWxpZmll
ZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlX2lkKToKLSAgICBpZiB0eXBlX2lkLmZpbmQoIi4i
KSA9PSAtMToKLSAgICAgICByZXR1cm4gIiVzLiVzIiAlIChkb21haW5fbmFtZSwgdHlwZV9pZCkK
LSAgICByZXR1cm4gdHlwZV9pZAotICAgIAotCi1kZWYgcGFyYW1fdHlwZShkb21haW5fbmFtZSwg
cGFyYW0pOgotICAgIGlmICJ0eXBlIiBpbiBwYXJhbToKLSAgICAgICAgcmV0dXJuIHR5cGVfdHJh
aXRzW3BhcmFtWyJ0eXBlIl1dCi0gICAgaWYgIiRyZWYiIGluIHBhcmFtOgotICAgICAgICB0eXBl
X2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgcGFyYW1bIiRyZWYiXSkK
LSAgICAgICAgaWYgdHlwZV9pZCBpbiByZWZfdHlwZXM6Ci0gICAgICAgICAgICByZWZfdHlwZSA9
IHJlZl90eXBlc1t0eXBlX2lkXQotICAgICAgICAgICAgcmV0dXJuIHR5cGVfdHJhaXRzW3JlZl90
eXBlWyJ0eXBlIl1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgiVHlwZSBub3Qg
Zm91bmQ6ICIgKyB0eXBlX2lkKQotICAgICAgICAgICAgcmV0dXJuICIhISBUeXBlIG5vdCBmb3Vu
ZDogIiArIHR5cGVfaWQKLQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAgICBkb21haW5fbmFt
ZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiAidHlwZXMiIGluIGRvbWFpbjoKLSAgICAgICAg
Zm9yIHR5cGUgaW4gZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgdHlwZV9pZCA9IGZ1bGxf
cXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5cGVbImlkIl0pCi0gICAgICAgICAgICBy
ZWZfdHlwZXNbdHlwZV9pZF0gPSB0eXBlOwotCi1mb3IgZG9tYWluIGluIGpzb25fYXBpOgotICAg
IGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAgIGlmIGRvbWFpbl9uYW1lIGluIG1h
Y3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuI2lmIGRlZmluZWQoRU5B
QkxFXyVzKSAmJiBFTkFCTEVfJXMiICUgKG1hY3JvX3RyYWl0c1tkb21haW5fbmFtZV0sIG1hY3Jv
X3RyYWl0c1tkb21haW5fbmFtZV0pKQotICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICBpbnRl
cmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gJXMgeyIgJSBkb21haW5fbmFtZSkKLQotICAg
IGlmICJjb21tYW5kcyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW5b
ImNvbW1hbmRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAgICAgICAgaWYgKCJw
YXJhbWV0ZXJzIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3IgaW5fcGFyYW0gaW4g
Y29tbWFuZFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFs
IiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIgW29w
dGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgiaW4l
cyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIGluX3BhcmFtKSwg
aW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBpZiAoInJldHVybnMiIGluIGNvbW1hbmQp
OgotICAgICAgICAgICAgICAgIGZvciBvdXRfcGFyYW0gaW4gY29tbWFuZFsicmV0dXJucyJdOgot
ICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFsIiBpbiBvdXRfcGFyYW0pOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAlIChvcHRpb25hbCwg
cGFyYW1fdHlwZShkb21haW5fbmFtZSwgb3V0X3BhcmFtKSwgb3V0X3BhcmFtWyJuYW1lIl0pKQot
ICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgICAgICB2b2lkICVzKCVzKTsiICUg
KGNvbW1hbmRbIm5hbWUiXSwgIiwgIi5qb2luKHBhcmFtcykpKQotCi0gICAgaWYgImV2ZW50cyIg
aW4gZG9tYWluOgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluWyJldmVudHMiXToKLSAgICAg
ICAgICAgIHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRlcnMiIGluIGV2ZW50
KToKLSAgICAgICAgICAgICAgICBmb3IgaW5fcGFyYW0gaW4gZXZlbnRbInBhcmFtZXRlcnMiXToK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0pOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAlIChvcHRpb25hbCwg
cGFyYW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsibmFtZSJdKSkKLSAg
ICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgW2V2ZW50XSB2b2lkICVzKCVz
KTsiICUgKGV2ZW50WyJuYW1lIl0sICIsICIuam9pbihwYXJhbXMpKSkKLQotICAgIG91dHB1dF9m
aWxlLndyaXRlKCJcbiAgICB9OyIpCi0gICAgaWYgZG9tYWluWyJkb21haW4iXSBpbiBtYWNyb190
cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNlbmRpZiAvLyBFTkFCTEVfJXMi
ICUgbWFjcm9fdHJhaXRzW2RvbWFpblsiZG9tYWluIl1dKQotb3V0cHV0X2ZpbGUud3JpdGUoIlxu
fVxuIikKLW91dHB1dF9maWxlLmNsb3NlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109826</attachid>
            <date>2011-10-05 11:11:13 -0700</date>
            <delta_ts>2011-10-05 15:13:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111005221110.patch</filename>
            <type>text/plain</type>
            <size>119911</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTU0MmY0
YWNkZWIxOGY1ODIzZGJhN2IzY2VhNmE2NGRiNWFlNjAzNy4uZDY1ZGNhZDRhOGE1YmY0NjliZWE1
NWQ0Mzc3M2ZiMjI1YzFlNjM3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTIsMTcgKzIy
MTIsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAorICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZyb250ZW5kLmggJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmRTdHViLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCi0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElS
fS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KLSAgICBWRVJCQVRJTSkKLQotQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBV
VCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZyb250ZW5kLmgK
LSAgICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3Bl
Y3Rvci5pZGwKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ2Vu
ZXJhdGUtYmluZGluZ3MucGwgJHtTQ1JJUFRTX0JJTkRJTkdTfSAke1dFQkNPUkVfRElSfS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9IC1JJHtX
RUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cyAtSSR7V0VCQ09SRV9ESVJ9L2luc3BlY3RvciAk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZGVm
aW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH0iIC0tZ2VuZXJhdG9yIEluc3BlY3Rv
ciAke0lETF9JTkNMVURFU30gLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfSIgLS1wcmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSIgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwKKyAgICBERVBFTkRTICR7
V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisgICAgQ09N
TUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24gIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgIiR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfSIKICAgICBWRVJCQVRJTSkKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVu
ZC5jcHApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YmRmOWIyMzNjZTI5ZDYzZGY0YTI4YzcyMGVkZjliMDU4
MTA5YjE4Li5kMDYzNjcxNjUxMGYwZWZmYzc4Y2RkOTFjYjU2MWI4ODMzYzdhODk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTAtMDQgIFBldGVyIFJ5YmluICA8cGV0ZXIucnli
aW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3Rv
Y29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAg
ICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnBtOiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGw6IFJl
bW92ZWQuCisKIDIwMTEtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBCdWlsZCBmaXhlcyBmb3IgZXZlcnlvbmUuCkBAIC0xMDYyNCw2ICsxMDYz
OSwyMCBAQAogICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmNhblJlbWFp
bkFsaXZlT25SZW1vdmFsRnJvbVRyZWUpOgogICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVu
dEJhc2UuaDoKIAorMjAxMS0xMC0wMyAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVpbXBsZW1lbnQgcHJvdG9jb2wgYmFja2Vu
ZC9mcm9udGVuZCBzb3VyY2UgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02OTI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG06CisgICAgICAgIChmaW5pc2gpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKwogMjAxMS0wOS0xOSAgQWJoaXNoZWsgQXJ5
YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElzc3VlcyB3aXRoIG1lcmdpbmcg
cnVieSBiYXNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnBy
aSBiL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQppbmRleCA2MzE5MzgyN2NjZDAy
NmRjYmRlN2UxM2MwYWMxYzc5MTBkNDdkNzlhLi4yMWIyZjg2NDA0Y2JjNGUzZTgyZTZkMmRhZjg3
NjdiZmY0YjJmY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5w
cmkKKysrIGIvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCkBAIC02NzMsMzIgKzY3
MywxNSBAQCBpbnNwZWN0b3JWYWxpZGF0ZS5pbnB1dCA9IElOU1BFQ1RPUl9KU09OCiBpbnNwZWN0
b3JWYWxpZGF0ZS53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUuY29tbWFuZHMgPSBweXRob24gJCRp
bnNwZWN0b3JWYWxpZGF0ZS53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9
L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgogaW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgotaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRU
b1NvdXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAot
aW5zcGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQ
RUNUT1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5z
cGVjdG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRl
cGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAoraW5zcGVjdG9y
SlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CitpbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVjdG9ySlNPTi53a1Njcmlw
dCAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJCRXQ19HRU5FUkFURURfU09VUkNFU19E
SVIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIKK2luc3BlY3RvckpTT04uZGVwZW5kcyA9ICQk
aW5zcGVjdG9ySlNPTi53a1NjcmlwdAogaW5zcGVjdG9ySlNPTi53a0FkZE91dHB1dFRvU291cmNl
cyA9IGZhbHNlCiBhZGRFeHRyYUNvbXBpbGVyKGluc3BlY3RvckpTT04pCi1pbnNwZWN0b3JKU09O
LnZhcmlhYmxlX291dCA9IElOU1BFQ1RPUl9KU09OX09VVFBVVAotCi1pbnNwZWN0b3JJREwub3V0
cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAg
JCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHAKLWluc3BlY3RvcklETC5pbnB1dCA9IElOU1BFQ1RPUl9KU09OX09VVFBVVAotaW5zcGVjdG9y
SURMLndrU2NyaXB0ID0gJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5w
bAotaW5zcGVjdG9ySURMLmNvbW1hbmRzID0gcGVybCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMg
LUkkJFBXRC9pbnNwZWN0b3IgJCRpbnNwZWN0b3JJREwud2tTY3JpcHQgLS1kZWZpbmVzIFwiJCR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9XCIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yIC0tb3V0
cHV0RGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1B
S0VfTU9DfSAtRVwiICR7UU1BS0VfRklMRV9OQU1FfQotaW5zcGVjdG9ySURMLmRlcGVuZHMgPSAk
JFBXRC9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0gXAotICAgICAgICAgICAgICAk
JFBXRC9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBcCi0gICAgICAgICAgICAg
ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtIFwKLSAgICAgICAgICAgICAgJCRQ
V0QvYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG0gXAotICAgICAgICAgICAgICAkJFBX
RC9iaW5kaW5ncy9zY3JpcHRzL0luRmlsZXNQYXJzZXIucG0gXAotICAgICAgICAgICAgICAkJFBX
RC9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3Nvci5wbSBcCi0gICAgICAgICAgICAgICQkUFdE
L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JJREwud2tFeHRyYVNvdXJjZXMgPSAk
JGluc3BlY3RvcklETC5vdXRwdXQKLWFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9ySURMKQogCiBp
bnNwZWN0b3JCYWNrZW5kU3R1Yi5vdXRwdXQgPSBnZW5lcmF0ZWQvSW5zcGVjdG9yQmFja2VuZFN0
dWIucXJjCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5pbnB1dCA9IElOU1BFQ1RPUl9CQUNLRU5EX1NU
VUJfUVJDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAwOWQwNzAzMGE4ZmUwMTMz
MGZiZmU3NjY5YWE5ZTc2MjI3NzJmYTU1Li5kYzhlNDBkZGRjMTY4NmY5MWUxZTM2MjJiODAxNTkw
ZGYyNzEyNWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTg5MywxNSArODkz
LDEyIEBAIGFsbCA6IEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oCiBJbnNwZWN0b3JQcm90b2Nv
bFZlcnNpb24uaCA6IEluc3BlY3Rvci5qc29uIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbgogCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAtbyBJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCAk
KFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgogCi1JbnNwZWN0b3IuaWRsIDogSW5z
cGVjdG9yLmpzb24gaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLQlweXRob24gJChX
ZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyBJbnNwZWN0b3IuaWRs
ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0KIGFsbCA6IEluc3BlY3RvckZy
b250ZW5kLmgKIAotSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gJChHRU5FUkFURV9TQ1JJ
UFRTKSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorSU5TUEVDVE9SX0dFTkVS
QVRPUl9TQ1JJUFRTID0gaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKIAotSW5z
cGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5pZGwgJChJTlNQRUNUT1JfR0VORVJBVE9SX1ND
UklQVFMpCi0JJChjYWxsIGdlbmVyYXRvcl9zY3JpcHQsICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9T
Q1JJUFRTKSkgLS1vdXRwdXREaXIgLiAtLWRlZmluZXMgIiQoRkVBVFVSRV9ERUZJTkVTKSBMQU5H
VUFHRV9KQVZBU0NSSVBUIiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJDwKK0luc3BlY3RvckZyb250
ZW5kLmggOiBJbnNwZWN0b3IuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKKwlw
eXRob24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpIEluc3BlY3Rvci5qc29uIC4gLgog
CiBhbGwgOiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXgg
M2UwOGRhMGIyZTNiNjYwOTExZjc5NjExYWYwNDRhYjBjMDUxMTg3Yi4uMWQ3ZWM0NTY3ZjQxYWVk
OWFjOTJiNmY5MzBkMDEyM2ViYmZjZjQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY5MCwx
MSArNjkwLDggQEAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxOYW1lcy5jcHAgRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9YTUxOYW1lcy5oOiAkKFdlYkNvcmUKIERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtdmVyc2lvbgogCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAtbyAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9y
UHJvdG9jb2xWZXJzaW9uLmggJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KIAot
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3IuaWRsIDogJChXZWJDb3JlKS9pbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9y
LWlkbAotCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
aWRsIC1vICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCi0KLURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuY3BwOiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5p
ZGwgJChTQ1JJUFRTX0JJTkRJTkdTKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnBtCi0JJChBTV9WX0dFTikkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9z
Y3JpcHRzIC1JJChXZWJDb3JlKS9pbnNwZWN0b3IgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsICQoSURMX1BBVEg6JT0tLWluY2x1ZGUgIiUiKSAtLW91dHB1
dERpciAiJChHRU5TT1VSQ0VTX1dFQkNPUkUpIiAtLWRlZmluZXMgIkxBTkdVQUdFX0pBVkFTQ1JJ
UFQ9MSAkKEZFQVRVUkVfREVGSU5FUykiIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAkPAorRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6ICQoV2ViQ29y
ZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKwkkKFBZVEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weSAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAk
KEdFTlNPVVJDRVNfV0VCQ09SRSkgJChHRU5TT1VSQ0VTX1dFQkNPUkUpCiBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmg6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kLmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwog
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3ODI1NzMzNjIwYTdkZmI3Y2FiNmY3MGRiZGRh
ZTVlMjA2MmJjNzEuLmY0MjdiNDM0MDU1YmI4MDZjMGY1NTFlZDZhMGE5N2Q5ZTc0MWU4ZjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0zMzUsMTcgKzMzNSwyNCBA
QAogICB9LAogICAndGFyZ2V0cyc6IFsKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2Vu
ZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAorICAgICAgJ3RhcmdldF9uYW1lJzog
J2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKICAgICAgICd0eXBlJzogJ25vbmUnLAorICAg
ICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2Nv
bF92ZXJzaW9uJworICAgICAgXSwKICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgewotICAg
ICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbics
CisgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQ
cm90b2NvbFNvdXJjZXMnLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4v
aW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKKyAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weScsCiAgICAgICAgICAg
ICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAg
ICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dl
YmtpdC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAn
LAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCisgICAgICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAorICAg
ICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFj
a2VuZFN0dWIuanMnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAg
ICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzUzLDI4ICszNjAsMjcg
QEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0
aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLXZlcnNpb24nLAotICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICc8QChfb3V0cHV0
cyknLAotICAgICAgICAgICAgJzxAKF9pbnB1dHMpJworICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24nLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmtpdCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29y
ZScsCiAgICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdWYWxpZGF0ZSBpbnNwZWN0
b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBnZW5lcmF0ZSB2ZXJz
aW9uIGZpbGUnLAotICAgICAgICB9CisgICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJ
bnNwZWN0b3IgcHJvdG9jb2wgc291cmNlcyBmcm9tIEluc3BlY3Rvci5pZGwnLAorICAgICAgICB9
LAogICAgICAgXQogICAgIH0sCiAgICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rv
cl9pZGwnLAorICAgICAgJ3RhcmdldF9uYW1lJzogJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2Nv
bF92ZXJzaW9uJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMnOiBbCi0K
LSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclBy
b3RvY29sSURMJywKKyAgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJh
dGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24nLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAg
ICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwnLAorICAgICAgICAg
ICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbicsCiAg
ICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAog
ICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oJywKICAgICAg
ICAgICBdLAogICAgICAgICAgICd2YXJpYWJsZXMnOiB7CiAgICAgICAgICAgICAnZ2VuZXJhdG9y
X2luY2x1ZGVfZGlycyc6IFsKQEAgLTM4Miw2NSArMzg4LDE2IEBACiAgICAgICAgICAgfSwKICAg
ICAgICAgICAnYWN0aW9uJzogWwogICAgICAgICAgICAgJ3B5dGhvbicsCi0gICAgICAgICAgICAn
Li4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwnLAorICAgICAgICAgICAgJy4uL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbicsCiAgICAgICAgICAg
ICAnLW8nLAogICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCiAgICAgICAgICAgICAnPEAoX2lu
cHV0cyknCiAgICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIElu
c3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCisgICAgICAgICAg
J21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29sIGZvciBiYWNrd2FyZHMgY29t
cGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywKICAgICAgICAgfQogICAgICAg
XQogICAgIH0sCiAgICAgewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9wcm90b2Nv
bF9zb3VyY2VzJywKLSAgICAgICd0eXBlJzogJ25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6
IFsKLSAgICAgICAgJ2luc3BlY3Rvcl9pZGwnLAotICAgICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9y
X3Byb3RvY29sX3ZlcnNpb24nCi0gICAgICBdLAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAg
IHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbFNv
dXJjZXMnLAotICAgICAgICAgICMgVGhlIHNlY29uZCBpbnB1dCBpdGVtIHdpbGwgYmUgdXNlZCBh
cyBpdGVtIG5hbWUgaW4gdmNwcm9qLgotICAgICAgICAgICMgSXQgaXMgbm90IHBvc3NpYmxlIHRv
IHB1dCBJbnNwZWN0b3IuaWRsIHRoZXJlIGJlY2F1c2UKLSAgICAgICAgICAjIGFsbCBpZGwgZmls
ZXMgYXJlIG1hcmtpbmcgYXMgZXhjbHVkZWQgYnkgZ3lwIGdlbmVyYXRvci4KLSAgICAgICAgICAn
aW5wdXRzJzogWwotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmlu
ZGluZ3MucGwnLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtJywKLSAgICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3Iu
cG0nLAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtJywKLSAg
ICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbScsCi0gICAgICAg
ICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywK
LSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
Y3BwJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0lu
c3BlY3RvckJhY2tlbmRTdHViLmpzJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCcsCi0gICAgICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JGcm9udGVuZC5j
cHAnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNw
ZWN0b3JGcm9udGVuZC5oJywKLSAgICAgICAgICBdLAotICAgICAgICAgICd2YXJpYWJsZXMnOiB7
Ci0gICAgICAgICAgICAnZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgIF0s
Ci0gICAgICAgICAgfSwKLSAgICAgICAgICAnYWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhv
bicsCi0gICAgICAgICAgICAnc2NyaXB0cy9ydWxlX2JpbmRpbmcucHknLAotICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCi0gICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZScsCi0gICAgICAgICAg
ICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0JywKLSAgICAgICAgICAgICctLScs
Ci0gICAgICAgICAgICAnPEAoX2lucHV0cyknLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAg
ICAgICctLWRlZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQn
LAotICAgICAgICAgICAgJy0tZ2VuZXJhdG9yJywgJ0luc3BlY3RvcicsCi0gICAgICAgICAgICAn
PEAoZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyknCi0gICAgICAgICAgXSwKLSAgICAgICAgICAnbWVz
c2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVj
dG9yLmlkbCcsCi0gICAgICAgIH0sCi0gICAgICBdCi0gICAgfSwKLSAgICB7CiAgICAgICAndGFy
Z2V0X25hbWUnOiAnaW5qZWN0ZWRfc2NyaXB0X3NvdXJjZScsCiAgICAgICAndHlwZSc6ICdub25l
JywKICAgICAgICdhY3Rpb25zJzogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NzJlMjE4M2MxZjI5YzQ2Nzk1ODkyNjA1MGNiZDk4NGNhOTM5Y2ExOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgL2Rldi9udWxsCkBAIC0xLDEyMzUgKzAsMCBA
QAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4K
LQotcGFja2FnZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yOwotCi11c2Ugc3RyaWN0OwotCi11c2Ug
Q2xhc3M6OlN0cnVjdDsKLXVzZSBGaWxlOjpzdGF0OwotCi1teSAldHlwZVRyYW5zZm9ybTsKLSR0
eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9h
cHBsaWNhdGlvbkNhY2hlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKLSAg
ICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNTU0FnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yQ1NTQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9jc3NBZ2VudCIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17IkNvbnNvbGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvckNvbnNvbGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNvbnNvbGVB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2NvbnNvbGVBZ2VudCIsCi19Owot
JHR5cGVUcmFuc2Zvcm17IlBhZ2UifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclBh
Z2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclBhZ2VBZ2VudC5oIiwKLSAgICAi
ZG9tYWluQWNjZXNzb3IiID0+ICJtX3BhZ2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRl
YnVnZ2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwK
LSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWlu
QWNjZXNzb3IiID0+ICJtX2RlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01E
ZWJ1Z2dlciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2Vu
dCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21EZWJ1Z2dlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5z
Zm9ybXsiRGF0YWJhc2UifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRhdGFiYXNl
QWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiLAotICAg
ICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGF0YWJhc2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zv
cm17IkRPTSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQiLAotICAg
ICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3Ii
ID0+ICJtX2RvbUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NU3RvcmFnZSJ9ID0gewot
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50IiwKLSAgICAiaGVhZGVy
IiA9PiAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIg
PT4gIm1fZG9tU3RvcmFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRmlsZVN5c3RlbSJ9
ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50IiwKLSAgICAi
aGVhZGVyIiA9PiAiSW5zcGVjdG9yRmlsZVN5c3RlbUFnZW50LmgiLAotICAgICJkb21haW5BY2Nl
c3NvciIgPT4gIm1fZmlsZVN5c3RlbUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiSW5zcGVj
dG9yIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5z
cGVjdG9yQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJOZXR3b3JrIn0gPSB7Ci0gICAgImZv
cndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Jlc291
cmNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQcm9maWxlciJ9ID0gewotICAgICJmb3J3
YXJkIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9wcm9maWxl
ckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUnVudGltZSJ9ID0gewotICAgICJmb3J3YXJk
IiA9PiAiSW5zcGVjdG9yUnVudGltZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
UnVudGltZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcnVudGltZUFnZW50
IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVGltZWxpbmUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvclRpbWVsaW5lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fdGltZWxpbmVBZ2VudCIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17IldvcmtlciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yV29ya2VyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3dvcmtlckFnZW50IiwKLX07Ci0KLSR0
eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
RnJvbnRlbmQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JGcm9udGVuZC5oIiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiUGFzc1JlZlB0ciJ9ID0gewotICAgICJmb3J3YXJkSGVhZGVyIiA9PiAi
d3RmL1Bhc3NSZWZQdHIuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlJlZkNvdW50ZWQifSA9IHsK
LSAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0Zi9SZWZDb3VudGVkLmgiLAotfTsKLSR0eXBlVHJh
bnNmb3JteyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4g
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiT2JqZWN0In0gPSB7Ci0gICAg
InBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKLSAgICAidmFyaWFibGUi
ID0+ICJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIklu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiLAotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yT2Jq
ZWN0IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAgICJKU09OVHlw
ZSIgPT4gIk9iamVjdCIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IkFycmF5In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAotICAg
ICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiLAotICAgICJmb3J3
YXJkIiA9PiAiSW5zcGVjdG9yQXJyYXkiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1
ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiQXJyYXkiLAotICAgICJKU1R5cGUiID0+ICJvYmpl
Y3QiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJWYWx1ZSJ9ID0gewotICAgICJwYXJhbSIgPT4gIlBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKLSAgICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yVmFsdWU6Om51
bGwoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JWYWx1ZSIsCi0gICAgImhlYWRlciIg
PT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJWYWx1ZSIsCi0gICAg
IkpTVHlwZSIgPT4gIiIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlN0cmluZyJ9ID0gewotICAgICJw
YXJhbSIgPT4gImNvbnN0IFN0cmluZyYiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0
IFN0cmluZyogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0g
ICAgInZhcmlhYmxlIiA9PiAiU3RyaW5nIiwKLSAgICAicmV0dXJuIiA9PiAiU3RyaW5nIiwKLSAg
ICAiZGVmYXVsdFZhbHVlIiA9PiAiXCJcIiIsCi0gICAgImZvcndhcmRIZWFkZXIiID0+ICJQbGF0
Zm9ybVN0cmluZy5oIiwKLSAgICAiaGVhZGVyIiA9PiAiUGxhdGZvcm1TdHJpbmcuaCIsCi0gICAg
IkpTT05UeXBlIiA9PiAiU3RyaW5nIiwKLSAgICAiSlNUeXBlIiA9PiAic3RyaW5nIgotfTsKLSR0
eXBlVHJhbnNmb3JteyJsb25nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAibG9uZyIsCi0gICAgIm9w
dGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgbG9uZyogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1
ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAibG9uZyIsCi0gICAgImRlZmF1
bHRWYWx1ZSIgPT4gIjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAi
IiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIi
Ci19OwotJHR5cGVUcmFuc2Zvcm17ImludCJ9ID0gewotICAgICJwYXJhbSIgPT4gImludCIsCi0g
ICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFs
X3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJpbnQiLAotICAgICJk
ZWZhdWx0VmFsdWUiID0+ICIwIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIg
PT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVt
YmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBsb25nIn0gPSB7Ci0gICAgInBhcmFt
IiA9PiAidW5zaWduZWQgbG9uZyIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5z
aWduZWQgbG9uZyogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIs
Ci0gICAgInZhcmlhYmxlIiA9PiAidW5zaWduZWQgbG9uZyIsCi0gICAgImRlZmF1bHRWYWx1ZSIg
PT4gIjB1IiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAg
IkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0
eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25l
ZCBpbnQiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IHVuc2lnbmVkIGludCogY29u
c3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxl
IiA9PiAidW5zaWduZWQgaW50IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJm
b3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJO
dW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImRv
dWJsZSJ9ID0gewotICAgICJwYXJhbSIgPT4gImRvdWJsZSIsCi0gICAgIm9wdGlvbmFsX3BhcmFt
IiA9PiAiY29uc3QgZG91YmxlKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3Ii
ID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJkb3VibGUiLAotICAgICJkZWZhdWx0VmFsdWUi
ID0+ICIwLjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAg
ICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19Owot
JHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9IHsKLSAgICAicGFyYW0iID0+ICJib29sIiwKLSAg
ICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBib29sKiBjb25zdCIsCi0gICAgIm9wdGlvbmFs
X3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiPT4gImJvb2wiLAotICAgICJk
ZWZhdWx0VmFsdWUiID0+ICJmYWxzZSIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFk
ZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIkJvb2xlYW4iLAotICAgICJKU1R5cGUiID0+
ICJib29sZWFuIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ2b2lkIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiCi19OwotJHR5cGVUcmFuc2Zvcm17IlZlY3RvciJ9
ID0gewotICAgICJoZWFkZXIiID0+ICJ3dGYvVmVjdG9yLmgiCi19OwotCi0jIERlZmF1bHQgTGlj
ZW5zZSBUZW1wbGF0ZXMKLQotbXkgJGxpY2Vuc2VUZW1wbGF0ZSA9IDw8ICJFT0YiOwotLy8gQ29w
eXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLUVPRgot
Ci1teSAkY29kZUdlbmVyYXRvcjsKLW15ICRvdXRwdXREaXI7Ci1teSAkb3V0cHV0SGVhZGVyc0Rp
cjsKLW15ICR3cml0ZURlcGVuZGVuY2llczsKLW15ICR2ZXJib3NlOwotCi1teSAkbmFtZXNwYWNl
OwotCi1teSAkYmFja2VuZENsYXNzTmFtZTsKLW15ICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlvbjsK
LW15ICRiYWNrZW5kSlNTdHViTmFtZTsKLW15ICViYWNrZW5kVHlwZXM7Ci1teSBAYmFja2VuZE1l
dGhvZHM7Ci1teSBAYmFja2VuZE1ldGhvZHNJbXBsOwotbXkgJWJhY2tlbmRNZXRob2RTaWduYXR1
cmVzOwotbXkgJGJhY2tlbmRDb25zdHJ1Y3RvcjsKLW15IEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnM7Ci1teSBAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnM7Ci1teSBAYmFja2VuZEZvb3Rl
cjsKLW15IEBiYWNrZW5kSlNTdHViczsKLW15IEBiYWNrZW5kSlNFdmVudHM7Ci1teSAlYmFja2Vu
ZERvbWFpbnM7Ci0KLW15ICRmcm9udGVuZENsYXNzTmFtZTsKLW15ICVmcm9udGVuZFR5cGVzOwot
bXkgQGZyb250ZW5kTWV0aG9kczsKLW15IEBmcm9udGVuZEFnZW50RmllbGRzOwotbXkgQGZyb250
ZW5kTWV0aG9kc0ltcGw7Ci1teSAlZnJvbnRlbmRNZXRob2RTaWduYXR1cmVzOwotbXkgJGZyb250
ZW5kQ29uc3RydWN0b3I7Ci1teSBAZnJvbnRlbmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBm
cm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnM7Ci1teSBAZnJvbnRlbmRGb290ZXI7Ci1teSBAZnJv
bnRlbmREb21haW5zOwotCi0jIERlZmF1bHQgY29uc3RydWN0b3IKLXN1YiBuZXcKLXsKLSAgICBt
eSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJHJlZmVyZW5jZSA9IHsgfTsKLQotICAgICRjb2Rl
R2VuZXJhdG9yID0gc2hpZnQ7Ci0gICAgJG91dHB1dERpciA9IHNoaWZ0OwotICAgICRvdXRwdXRI
ZWFkZXJzRGlyID0gc2hpZnQ7Ci0gICAgc2hpZnQ7ICMgJHVzZUxheWVyT25Ub3AKLSAgICBzaGlm
dDsgIyAkcHJlcHJvY2Vzc29yCi0gICAgJHdyaXRlRGVwZW5kZW5jaWVzID0gc2hpZnQ7Ci0gICAg
JHZlcmJvc2UgPSBzaGlmdDsKLQotICAgIGJsZXNzKCRyZWZlcmVuY2UsICRvYmplY3QpOwotICAg
IHJldHVybiAkcmVmZXJlbmNlOwotfQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1Y3QK
LXN1YiBHZW5lcmF0ZU1vZHVsZQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAk
ZGF0YU5vZGUgPSBzaGlmdDsKLQotICAgICRuYW1lc3BhY2UgPSAkZGF0YU5vZGUtPm1vZHVsZTsK
LSAgICAkbmFtZXNwYWNlID1+IHMvY29yZS9XZWJDb3JlLzsKLQotICAgICRmcm9udGVuZENsYXNz
TmFtZSA9ICJJbnNwZWN0b3JGcm9udGVuZCI7Ci0gICAgJGZyb250ZW5kQ29uc3RydWN0b3IgPSAi
ICAgICR7ZnJvbnRlbmRDbGFzc05hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOyI7Ci0g
ICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICJwcml2YXRlOiIpOwotICAgIHB1c2goQGZyb250ZW5k
Rm9vdGVyLCAiICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7Iik7Ci0gICAgJGZyb250ZW5kVHlwZXN7IlN0cmluZyJ9ID0gMTsKLSAgICAkZnJv
bnRlbmRUeXBlc3siSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIn0gPSAxOwotICAgICRmcm9udGVu
ZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwotCi0gICAgJGJhY2tlbmRDbGFzc05hbWUgPSAiSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIiOwotICAgICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlvbiA9
ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IjsKLSAgICAkYmFja2VuZEpTU3R1Yk5hbWUgPSAiSW5zcGVjdG9y
QmFja2VuZFN0dWIiOwotICAgICRiYWNrZW5kVHlwZXN7Ikluc3BlY3RvciJ9ID0gMTsKLSAgICAk
YmFja2VuZFR5cGVzeyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGJhY2tl
bmRUeXBlc3siUGFzc1JlZlB0ciJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJSZWZDb3VudGVk
In0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ik9iamVjdCJ9ID0gMTsKLX0KLQotIyBQYXJhbXM6
ICdpZGxEb2N1bWVudCcgc3RydWN0Ci1zdWIgR2VuZXJhdGVJbnRlcmZhY2UKLXsKLSAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRkZWZp
bmVzID0gc2hpZnQ7Ci0KLSAgICBteSAlYWdlbnQgPSAoCi0gICAgICAgIG1ldGhvZERlY2xhcmF0
aW9ucyA9PiBbXSwKLSAgICAgICAgbWV0aG9kU2lnbmF0dXJlcyA9PiB7fQotICAgICk7Ci0gICAg
Z2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZSwgXCVhZ2VudCk7Ci0gICAgaWYgKEB7JGFnZW50
e21ldGhvZERlY2xhcmF0aW9uc319KSB7Ci0gICAgICAgIHB1c2goQGZyb250ZW5kRG9tYWlucywg
JGludGVyZmFjZS0+bmFtZSk7Ci0gICAgICAgIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbigkaW50
ZXJmYWNlLCBcJWFnZW50KTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0ZUFnZW50RGVjbGFyYXRp
b24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGFnZW50ID0gc2hpZnQ7
Ci0gICAgbXkgJGFnZW50TmFtZSA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgIGNsYXNzICR7YWdlbnROYW1lfSB7Iik7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgIHB1YmxpYzoiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgICAgICR7YWdlbnROYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgfSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgQHskYWdlbnQt
PnttZXRob2REZWNsYXJhdGlvbnN9fSk7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAg
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfSIpOwotICAgIHB1c2goQGZyb250ZW5k
TWV0aG9kcywgIiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfSIp
OwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICBwcml2YXRlOiIpOwotICAgIHB1c2go
QGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgfTsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIiKTsKLQotICAgIG15ICRnZXR0
ZXJOYW1lID0gbGMoJGFnZW50TmFtZSk7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAg
ICR7YWdlbnROYW1lfSogJHtnZXR0ZXJOYW1lfSgpIHsgcmV0dXJuICZtXyR7Z2V0dGVyTmFtZX07
IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIiKTsKLQotICAgIHB1c2goQGZyb250
ZW5kRm9vdGVyLCAiICAgICR7YWdlbnROYW1lfSBtXyR7Z2V0dGVyTmFtZX07Iik7Ci0KLSAgICBw
dXNoKEBmcm9udGVuZEFnZW50RmllbGRzLCAibV8ke2dldHRlck5hbWV9Iik7Ci19Ci0KLXN1YiBn
ZW5lcmF0ZUZyb250ZW5kQ29uc3RydWN0b3JJbXBsCi17Ci0gICAgbXkgQGZyb250ZW5kQ29uc3Ry
dWN0b3JJbXBsOwotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAiJHtmcm9udGVu
ZENsYXNzTmFtZX06OiR7ZnJvbnRlbmRDbGFzc05hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGZyb250ZW5kQ29uc3Ry
dWN0b3JJbXBsLCAiICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSIpOwotICAgIGZvcmVhY2ggbXkgJGFnZW50RmllbGQgKEBmcm9udGVuZEFn
ZW50RmllbGRzKSB7Ci0gICAgICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAiICAg
ICwgJHthZ2VudEZpZWxkfShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgfQotICAg
IHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAieyIpOwotICAgIHB1c2goQGZyb250ZW5k
Q29uc3RydWN0b3JJbXBsLCAifSIpOwotICAgIHJldHVybiBAZnJvbnRlbmRDb25zdHJ1Y3Rvcklt
cGw7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZ1bmN0aW9ucwotewotICAgIG15ICRpbnRlcmZhY2UgPSBz
aGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9u
IChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKLSAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSkgewotICAgICAgICAgICAgZ2Vu
ZXJhdGVGcm9udGVuZEZ1bmN0aW9uKCRpbnRlcmZhY2UsICRmdW5jdGlvbiwgJGFnZW50KTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uKCRpbnRl
cmZhY2UsICRmdW5jdGlvbik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb2xsZWN0QmFja2Vu
ZEpTU3R1YkZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKLSAgICBjb2xsZWN0QmFja2VuZEpTU3R1YkV2
ZW50cygkaW50ZXJmYWNlKTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgotewot
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAg
ICBteSAkYWdlbnQgPSBzaGlmdDsKLQotICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKLQotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwot
ICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMganVzdCBrZWVwIG9ubHkgb3V0IHBhcmFtZXRlcnMgZm9y
IGZyb250ZW5kIGludGVyZmFjZS4KLSAgICBtYXAoJGZyb250ZW5kVHlwZXN7JF8tPnR5cGV9ID0g
MSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMuCi0gICAgbXkgJGFy
Z3VtZW50cyA9IGpvaW4oIiwgIiwgbWFwKHBhcmFtVHlwZVRyYWl0cygkXywgInBhcmFtIikgLiAi
ICIgLiAkXy0+bmFtZSwgQGFyZ3NGaWx0ZXJlZCkpOyAjIHByZXBhcmUgYXJndW1lbnRzIGZvciBm
dW5jdGlvbiBzaWduYXR1cmUuCi0KLSAgICBteSAkc2lnbmF0dXJlID0gIiAgICAgICAgdm9pZCAk
e2Z1bmN0aW9uTmFtZX0oJHthcmd1bWVudHN9KTsiOwotICAgICEkYWdlbnQtPnttZXRob2RTaWdu
YXR1cmVzfS0+eyRzaWduYXR1cmV9IHx8IGRpZSAiRHVwbGljYXRlIGZyb250ZW5kIGZ1bmN0aW9u
IHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4iOwotICAgICRhZ2VudC0+
e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVyZX0gPSAxOwotICAgIHB1c2goQHskYWdlbnQt
PnttZXRob2REZWNsYXJhdGlvbnN9fSwgJHNpZ25hdHVyZSk7Ci0KLSAgICBteSBAZnVuY3Rpb247
Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7ZnJvbnRlbmRDbGFzc05hbWV9Ojoke2RvbWFp
bn06OiR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pIik7Ci0gICAgcHVzaChAZnVuY3Rpb24s
ICJ7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
JHtmdW5jdGlvbk5hbWV9TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5n
KFwibWV0aG9kXCIsIFwiJGRvbWFpbi4kZnVuY3Rpb25OYW1lXCIpOyIpOwotICAgIGlmIChzY2Fs
YXIoQGFyZ3NGaWx0ZXJlZCkpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsiKTsKLQotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBhcmdzRmlsdGVyZWQpIHsK
LSAgICAgICAgICAgIG15ICRvcHRpb25hbCA9ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJvcHRpb25hbCJ9ID8gImlmICgiIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpXG4gICAgICAg
ICIgOiAiIjsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiAkb3B0aW9uYWwg
LiAicGFyYW1zT2JqZWN0LT5zZXQiIC4gcGFyYW1UeXBlVHJhaXRzKCRwYXJhbWV0ZXIsICJKU09O
VHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCAiIC4gcGFyYW1UeXBlVHJh
aXRzKCRwYXJhbWV0ZXIsICJ2YWx1ZUFjY2Vzc29yIikgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIik7
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5h
bWV9TWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVjdCk7Iik7Ci0gICAg
fQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCgke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ9Iik7Ci0gICAgcHVzaChAZnVu
Y3Rpb24sICIiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24pOwot
fQotCi1zdWIgY2FtZWxDYXNlCi17Ci0gICAgbXkgJHZhbHVlID0gc2hpZnQ7Ci0gICAgJHZhbHVl
ID1+IHMvXGIoXHcpL1xVJDEvZzsgIyBtYWtlIGEgY2FtZWwtY2FzZSBuYW1lIGZvciB0eXBlIG5h
bWUKLSAgICAkdmFsdWUgPX4gcy8gLy9nOwotICAgIHJldHVybiAkdmFsdWU7Ci19Ci0KLXN1YiBn
ZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAg
ICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLQotICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rp
b24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICBteSAkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZSA9
ICRpbnRlcmZhY2UtPm5hbWUgLiAiXyIgLiAkZnVuY3Rpb25OYW1lOwotICAgIG15ICRmdWxsUXVh
bGlmaWVkRnVuY3Rpb25OYW1lRG90ID0gJGludGVyZmFjZS0+bmFtZSAuICIuIiAuICRmdW5jdGlv
bk5hbWU7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgICAg
IGske2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWV9Q21kLCIpOwotICAgIHB1c2goQGJhY2tlbmRD
b25zdGFudERlZmluaXRpb25zLCAiICAgIFwiJHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90
fVwiLCIpOwotCi0gICAgbWFwKCRiYWNrZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQHskZnVuY3Rp
b24tPnBhcmFtZXRlcnN9KTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcwotICAgIG15IEBpbkFy
Z3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KTsKLSAgICBteSBAb3V0QXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAKLSAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lk
ICR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVj
dCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyI7Ci0gICAgISRiYWNrZW5kTWV0aG9kU2lnbmF0dXJl
c3ske3NpZ25hdHVyZX19IHx8IGRpZSAiRHVwbGljYXRlIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBm
b3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4iOwotICAgICRiYWNrZW5kTWV0aG9kU2lnbmF0dXJl
c3ske3NpZ25hdHVyZX19ID0gIiRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lIjsKLSAgICBwdXNo
KEBiYWNrZW5kTWV0aG9kcywgJHtzaWduYXR1cmV9KTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAg
ICBteSAkcmVxdWVzdE1lc3NhZ2VPYmplY3QgPSBzY2FsYXIoQGluQXJncykgPyAiIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0IiA6ICIiOwotICAgIHB1c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tlbmRD
bGFzc05hbWV9Ojoke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNw
ZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KSIpOwotICAgIHB1c2goQGZ1bmN0aW9u
LCAieyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIiKTsKLQotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotICAg
IG15ICRkb21haW5BY2Nlc3NvciA9IHR5cGVUcmFpdHMoJGRvbWFpbiwgImRvbWFpbkFjY2Vzc29y
Iik7Ci0gICAgJGJhY2tlbmRUeXBlc3skZG9tYWlufSA9IDE7Ci0gICAgJGJhY2tlbmREb21haW5z
eyRkb21haW59ID0gMTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoISRkb21haW5BY2Nl
c3NvcikiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoXCIkZG9tYWluIGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS5cIik7Iik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIiKTsKLQotICAgICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9y
IG91dCBhcmd1bWVudHMuCi0gICAgaWYgKHNjYWxhcihAb3V0QXJncykpIHsKLSAgICAgICAgcHVz
aChAZnVuY3Rpb24sIG1hcCgiICAgICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAidmFyaWFibGUi
KSAuICIgb3V0XyIgLiAkXy0+bmFtZSAuICIgPSAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgImRl
ZmF1bHRWYWx1ZSIpIC4gIjsiLCBAb3V0QXJncykpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiIpOwotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBFcnJvclN0cmluZyBlcnJvcjsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0gICAgbXkgJGluZGVudCA9ICIiOwotICAg
IGlmIChzY2FsYXIoQGluQXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QtPmdldE9iamVjdChcInBhcmFtc1wiKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOyIpOwotCi0gICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgewotICAgICAgICAgICAgbXkgJG5hbWUgPSAk
cGFyYW1ldGVyLT5uYW1lOwotICAgICAgICAgICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBl
OwotICAgICAgICAgICAgbXkgJHR5cGVTdHJpbmcgPSBjYW1lbENhc2UoJHBhcmFtZXRlci0+dHlw
ZSk7Ci0gICAgICAgICAgICBteSAkb3B0aW9uYWxGbGFnQXJndW1lbnQgPSAiMCI7Ci0gICAgICAg
ICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0pIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBib29sICR7bmFtZX1fdmFsdWVG
b3VuZCA9IGZhbHNlOyIpOwotICAgICAgICAgICAgICAgICRvcHRpb25hbEZsYWdBcmd1bWVudCA9
ICImJHtuYW1lfV92YWx1ZUZvdW5kIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICIgLiB0eXBlVHJhaXRzKCR0eXBlLCAidmFyaWFibGUiKSAuICIgaW5f
JG5hbWUgPSBnZXQkdHlwZVN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIFwiJG5hbWVcIiwgJG9w
dGlvbmFsRmxhZ0FyZ3VtZW50LCBwcm90b2NvbEVycm9yc1B0cik7Iik7Ci0gICAgICAgIH0KLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICAgICAgJGluZGVudCA9ICIgICAgIjsKLSAg
ICB9Ci0KLSAgICBteSAkYXJncyA9IGpvaW4oIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgKCIm
ZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgbWFwKCgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Im9wdGlvbmFsIn0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAkXy0+bmFtZSAuICJf
dmFsdWVGb3VuZCA/ICZpbl8iIC4gJF8tPm5hbWUgLiAiIDogMCIgOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaW5fIiAuICRfLT5uYW1lKSwgQGluQXJncyksCi0gICAgICAgICAgICAgICAg
ICAgICBtYXAoIiZvdXRfIiAuICRfLT5uYW1lLCBAb3V0QXJncykpKTsKLQotICAgIHB1c2goQGZ1
bmN0aW9uLCAkaW5kZW50IC4gImlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAkaW5kZW50IC4gIiAgICAkZG9tYWluQWNjZXNzb3ItPiRmdW5jdGlv
bk5hbWUoJGFyZ3MpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJy
b3IubGVuZ3RoKCkpIHsiKTsKLSAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAb3V0QXJn
cykgewotICAgICAgICAgICAgbXkgJG9mZnNldCA9ICIgICAgICAgICI7Ci0gICAgICAgICAgICAj
IERvbid0IGFkZCBvcHRpb25hbCBib29sZWFuIHBhcmFtZXRlciB0byB0aGUgcmVzdWx0IHVubGVz
cyBpdCBpcyAidHJ1ZSIKLSAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsib3B0aW9uYWwifSAmJiAkcGFyYW1ldGVyLT50eXBlIGVxICJib29sZWFuIikgewot
ICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAkb2Zmc2V0IC4gImlmIChvdXRfIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiKSIpOwotICAgICAgICAgICAgICAgICRvZmZzZXQgLj0gIiAgICAi
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAi
cmVzdWx0LT5zZXQiIC4gdHlwZVRyYWl0cygkcGFyYW1ldGVyLT50eXBlLCAiSlNPTlR5cGUiKSAu
ICIoXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwgb3V0XyIgLiAkcGFyYW1ldGVyLT5uYW1l
IC4gIik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOwot
ICAgIH0KLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQsIFN0cmluZzo6Zm9ybWF0KFwiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkXCIsIFwiJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3RcIiksIHByb3Rv
Y29sRXJyb3JzLCBlcnJvcik7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ9Iik7Ci0gICAgcHVz
aChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlv
bik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRTZW5kUmVzcG9uc2UKLXsKLSAgICBteSAkc2Vu
ZFJlc3BvbnNlID0gPDwgIkVPRiI7Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6c2VuZFJl
c3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKLXsKLSAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0
aW9uRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKLSAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOwotICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0g
ICAgCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJHNlbmRSZXNwb25zZSk7Ci19Ci0KLXN1
YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVycm9yCi17Ci0gICAgbXkgJHJlcG9ydFBy
b3RvY29sRXJyb3IgPSA8PCAiRU9GIjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpyZXBv
cnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2Rl
IGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAotewotICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1lc3NhZ2UsIDApOwotfQotCi12b2lkICR7
YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3Qg
Y2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Ci17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChWZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOwotICAgIGlmICghc19jb21t
b25FcnJvcnMuc2l6ZSgpKSB7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVy
cm9yLCAtMzI3MDApOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVl
c3QsIC0zMjYwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3Vu
ZCwgLTMyNjAxKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMs
IC0zMjYwMik7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAt
MzI2MDMpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAw
MCk7Ci0gICAgfQotICAgIEFTU0VSVChjb2RlID49MCk7Ci0gICAgQVNTRVJUKCh1bnNpZ25lZClj
b2RlIDwgc19jb21tb25FcnJvcnMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc19jb21tb25FcnJvcnNb
Y29kZV0pOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJv
cnNbY29kZV0pOwotICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2Up
OwotICAgIEFTU0VSVChlcnJvcik7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGVycm9yLT5zZXRB
cnJheSgiZGF0YSIsIGRhdGEpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJy
b3IiLCBlcnJvcik7Ci0gICAgaWYgKGNhbGxJZCkKLSAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVy
KCJpZCIsICpjYWxsSWQpOwotICAgIGVsc2UKLSAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlk
IiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0KLUVPRgotICAgIHJldHVybiBz
cGxpdCgiXG4iLCAkcmVwb3J0UHJvdG9jb2xFcnJvcik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUFyZ3Vt
ZW50R2V0dGVycwotewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJGpzb24gPSB0eXBl
VHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUiKTsKLSAgICBteSAkdmFyaWFibGUgPSB0eXBlVHJhaXRz
KCR0eXBlLCAidmFyaWFibGUiKTsKLSAgICBteSAkZGVmYXVsdFZhbHVlID0gdHlwZVRyYWl0cygk
dHlwZSwgImRlZmF1bHRWYWx1ZSIpOwotICAgIG15ICRyZXR1cm4gID0gdHlwZVRyYWl0cygkdHlw
ZSwgInJldHVybiIpID8gdHlwZVRyYWl0cygkdHlwZSwgInJldHVybiIpIDogdHlwZVRyYWl0cygk
dHlwZSwgInBhcmFtIik7Ci0KLSAgICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkdHlwZSk7
Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHN0YXRpYyAkcmV0
dXJuIGdldCR0eXBlU3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7
Iik7Ci0gICAgbXkgJGdldHRlckJvZHkgPSA8PCAiRU9GIjsKLQotJHJldHVybiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JHR5cGVTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKQotewotICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7Ci0KLSAgICBpZiAo
dmFsdWVGb3VuZCkKLSAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKLQotICAgICR2YXJpYWJs
ZSB2YWx1ZSA9ICRkZWZhdWx0VmFsdWU7Ci0KLSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBp
ZiAoIXZhbHVlRm91bmQpIHsKLSAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBt
aXNzaW5nIHBhcmFtcyBjb250YWluZXIuCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1
aXJlZCBwYXJhbWV0ZXIgJ1wlcycgd2l0aCB0eXBlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKLSAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZp
bmQobmFtZSk7Ci0KLSAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKLSAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVzJyB3aXRoIHR5cGUgJyRqc29uJyB3YXMgbm90IGZv
dW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
fQotCi0gICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzJGpzb24oJnZhbHVlKSkKLSAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnXCVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJGpzb24nLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAgICAgaWYgKHZhbHVlRm91bmQpCi0gICAgICAgICAg
ICAqdmFsdWVGb3VuZCA9IHRydWU7Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotRU9GCi0KLSAgICBy
ZXR1cm4gc3BsaXQoIlxuIiwgJGdldHRlckJvZHkpOwotfQotCi1zdWIgZ2VuZXJhdGVCYWNrZW5k
RGlzcGF0Y2hlcgotewotICAgIG15IEBib2R5OwotICAgIG15IEBtYXBFbnRyaWVzID0gbWFwKCIg
ICAgICAgICYke2JhY2tlbmRDbGFzc05hbWV9OjokXywiLCBtYXAgKCRiYWNrZW5kTWV0aG9kU2ln
bmF0dXJlc3skX30sIEBiYWNrZW5kTWV0aG9kcykpOwotICAgIG15ICRtYXBFbnRyaWVzID0gam9p
bigiXG4iLCBAbWFwRW50cmllcyk7Ci0KLSAgICBteSAkYmFja2VuZERpc3BhdGNoZXJCb2R5ID0g
PDwgIkVPRiI7Ci12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OmRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKLXsKLSAgICBSZWZQdHI8JHtiYWNrZW5kQ2xhc3NOYW1lfT4gcHJvdGVjdCA9
IHRoaXM7Ci0gICAgdHlwZWRlZiB2b2lkICgke2JhY2tlbmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRs
ZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VPYmplY3QpOwotICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKTsKLSAgICBsb25nIGNh
bGxJZCA9IDA7Ci0KLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0
YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0gewotJG1hcEVudHJpZXMKLSAgICAgICAgfTsK
LSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihjb21tYW5kTmFtZXMpIC8gc2l6ZW9mKGNv
bW1hbmROYW1lc1swXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVy
c1tpXSk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdl
ID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAgICBpZiAoIXBhcnNlZE1l
c3NhZ2UpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9yLCAiTWVz
c2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2Fn
ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKLSAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05p
ZmllZCBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7Ci0gICAg
aWYgKCFjYWxsSWRWYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFs
aWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUg
b2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmpl
Y3QtPmdldCgibWV0aG9kIik7Ci0gICAgaWYgKCFtZXRob2RWYWx1ZSkgewotICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVy
dHkgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
bWV0aG9kOwotICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7Ci0gICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlw
ZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQg
PSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVu
ZCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90Rm91
bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5n
ZXQoKSk7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGJhY2tlbmREaXNwYXRjaGVy
Qm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRNZXNzYWdlUGFyc2VyCi17Ci0gICAgbXkg
JG1lc3NhZ2VQYXJzZXJCb2R5ID0gPDwgIkVPRiI7Ci1ib29sICR7YmFja2VuZENsYXNzTmFtZX06
OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpCi17
Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJz
ZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7
Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghb2Jq
ZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiB0cnVlOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRtZXNz
YWdlUGFyc2VyQm9keSk7Ci19Ci0KLXN1YiBjb2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0aW9ucwot
ewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSBAZnVuY3Rpb25zID0gZ3JlcCgh
JF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0sIEB7JGludGVyZmFj
ZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0KLSAg
ICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAgICBteSAkbmFtZSA9
ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAgICAgICBteSBAaW5BcmdzID0gZ3JlcCgk
Xy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAg
IG15ICRhcmd1bWVudE5hbWVzID0gam9pbigKLSAgICAgICAgICAgICIsIiwKLSAgICAgICAgICAg
IG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCI6IHsiCi0gICAgICAgICAgICAgICAgLiAiXCJvcHRp
b25hbFwiOiAiIC4gKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/ICJ0cnVl
ICIgOiAiZmFsc2UiKSAuICIsICIKLSAgICAgICAgICAgICAgICAuICJcInR5cGVcIjogXCIiIC4g
dHlwZVRyYWl0cygkXy0+dHlwZSwgIkpTVHlwZSIpIC4gIlwiIgotICAgICAgICAgICAgICAgIC4g
In0iLAotICAgICAgICAgICAgICAgICBAaW5BcmdzKSk7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRK
U1N0dWJzLCAiICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3siIC4KLSAgICAgICAgICAgICJc
Im1ldGhvZFwiOiBcIiRkb21haW4uJG5hbWVcIiwgIiAuCi0gICAgICAgICAgICAoc2NhbGFyKEBp
bkFyZ3MpID8gIlwicGFyYW1zXCI6IHskYXJndW1lbnROYW1lc30sICIgOiAiIikgLgotICAgICAg
ICAgICAgIlwiaWRcIjogMCIgLgotICAgICAgICAifScpOyIpOwotICAgIH0KLX0KLQotc3ViIGNv
bGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0Owot
ICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCRfLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRl
cy0+eyJldmVudCJ9LCBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pOwotICAgIG15ICRkb21haW4g
PSAkaW50ZXJmYWNlLT5uYW1lOwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlv
bnMpIHsKLSAgICAgICAgbXkgJG5hbWUgPSAkZG9tYWluIC4gIi4iIC4gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVx
ICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgICAgICBteSAkYXJndW1lbnRO
YW1lcyA9IGpvaW4oIiwiLCBtYXAoIlwiIiAuICRfLT5uYW1lIC4gIlwiIiAsIEBvdXRBcmdzKSk7
Ci0gICAgICAgIHB1c2goQGJhY2tlbmRKU0V2ZW50cywgIiAgICB0aGlzLl9ldmVudEFyZ3NbXCIi
IC4gJG5hbWUgLiAiXCJdID0gWyIgLiAkYXJndW1lbnROYW1lcyAuIl07Iik7Ci0gICAgfQotfQot
Ci1zdWIgZ2VuZXJhdGVCYWNrZW5kU3R1YkpTCi17Ci0gICAgbXkgJEpTUmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVycyA9IGpvaW4oIlxuIiwgbWFwKCIgICAgdGhpcy5yZWdpc3RlciIgLiAkXyAuICJE
aXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIi
IC4gJF8gLiJcIik7IiwgQGZyb250ZW5kRG9tYWlucykpOwotICAgIG15ICRKU1N0dWJzID0gam9p
bigiXG4iLCBAYmFja2VuZEpTU3R1YnMpOwotICAgIG15ICRKU0V2ZW50cyA9IGpvaW4oIlxuIiwg
QGJhY2tlbmRKU0V2ZW50cyk7Ci0gICAgbXkgJGluc3BlY3RvckJhY2tlbmRTdHViSlMgPSA8PCAi
RU9GIjsKLSRsaWNlbnNlVGVtcGxhdGUKLQotSW5zcGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlv
bigpCi17Ci0gICAgdGhpcy5fbGFzdENhbGxiYWNrSWQgPSAxOwotICAgIHRoaXMuX3BlbmRpbmdS
ZXNwb25zZXNDb3VudCA9IDA7Ci0gICAgdGhpcy5fY2FsbGJhY2tzID0ge307Ci0gICAgdGhpcy5f
ZG9tYWluRGlzcGF0Y2hlcnMgPSB7fTsKLSAgICB0aGlzLl9ldmVudEFyZ3MgPSB7fTsKLSRKU1N0
dWJzCi0kSlNFdmVudHMKLSRKU1JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcnMKLX0KLQotSW5zcGVj
dG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0gewotICAgIGR1bXBJbnNwZWN0b3JUaW1lU3RhdHM6
IDAsCi0gICAgZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXM6IDAsCi0KLSAgICBfd3JhcDog
ZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMu
X2xhc3RDYWxsYmFja0lkKys7Ci0gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXSA9
IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307Ci0gICAgICAgIHJldHVybiBjYWxsYmFja0lkOwot
ICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZykK
LSAgICB7Ci0gICAgICAgIHZhciBkb21haW5BbmRGdW5jdGlvbiA9IEpTT04ucGFyc2UocmVxdWVz
dFN0cmluZykubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgIHZhciBhZ2VudE5hbWUgPSBkb21h
aW5BbmRGdW5jdGlvblswXSArICJBZ2VudCI7Ci0gICAgICAgIGlmICghd2luZG93W2FnZW50TmFt
ZV0pCi0gICAgICAgICAgICB3aW5kb3dbYWdlbnROYW1lXSA9IHt9OwotICAgICAgICB3aW5kb3db
YWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV0gPSB0aGlzLl9zZW5kTWVzc2FnZVRvQmFj
a2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpOwotICAgICAgICB3aW5kb3dbYWdlbnROYW1l
XVtkb21haW5BbmRGdW5jdGlvblsxXV1bImludm9rZSJdID0gdGhpcy5faW52b2tlLmJpbmQodGhp
cywgcmVxdWVzdFN0cmluZykKLSAgICB9LAotCi0gICAgX2ludm9rZTogZnVuY3Rpb24ocmVxdWVz
dFN0cmluZywgYXJncywgY2FsbGJhY2spCi0gICAgewotICAgICAgICB2YXIgcmVxdWVzdCA9IEpT
T04ucGFyc2UocmVxdWVzdFN0cmluZyk7Ci0gICAgICAgIHJlcXVlc3QucGFyYW1zID0gYXJnczsK
LSAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwg
Y2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfc2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo
YXJndW1lbnRzKTsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQo
KSk7Ci0gICAgICAgIHZhciBjYWxsYmFjayA9IChhcmdzLmxlbmd0aCAmJiB0eXBlb2YgYXJnc1th
cmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rpb24iKSA/IGFyZ3MucG9wKCkgOiAwOwotICAgICAg
ICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVxdWVzdC5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAg
ICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWluQW5kTWV0aG9kWzBdICsgIkFnZW50LiIgKyBkb21h
aW5BbmRNZXRob2RbMV07Ci0KLSAgICAgICAgdmFyIGhhc1BhcmFtcyA9IGZhbHNlOwotICAgICAg
ICBpZiAocmVxdWVzdC5wYXJhbXMpIHsKLSAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1
ZXN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciB0eXBlTmFtZSA9IHJlcXVlc3QucGFy
YW1zW2tleV0udHlwZTsKLSAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVz
dC5wYXJhbXNba2V5XS5vcHRpb25hbDsKLQotICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0
aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
ZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG1l
dGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBoYXZlIHRoZSBuZXh0IGFy
Z3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QucGFyYW1zKSArICInLiIpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOwotICAgICAgICAgICAgICAgIGlmIChvcHRp
b25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVv
ZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAnIiArIGtleSArICIn
IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwuIEl0IG11c3QgYmUgJyIgKyB0
eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVvZiB2YWx1ZSArICInLiIpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZhbHVlOwotICAgICAgICAgICAgICAgIGhhc1BhcmFt
cyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWhhc1BhcmFtcykKLSAg
ICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXM7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgIWNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxiYWNrIGFyZ3VtZW50IGZvciBt
ZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwgbXVzdCBiZSBhIGZ1bmN0aW9uIGJ1dCBp
dHMgdHlwZSBpcyAnIiArIHR5cGVvZiBhcmdzWzBdICsgIicuIik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdGhpcy5fd3JhcENh
bGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOwotICAgIH0sCi0K
LSAgICBfd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3Q6IGZ1bmN0aW9uKG1lc3NhZ2VP
YmplY3QsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbWVzc2FnZU9iamVjdC5pZCA9IHRoaXMu
X3dyYXAoY2FsbGJhY2spOwotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3Rh
dHMpIHsKLSAgICAgICAgICAgIHZhciB3cmFwcGVkQ2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3Nb
bWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2subWV0aG9kTmFt
ZSA9IG1lc3NhZ2VPYmplY3QubWV0aG9kOwotICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLnNl
bmRSZXF1ZXN0VGltZSA9IERhdGUubm93KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhp
cy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpKTsKLQotICAgICAg
ICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKLSAgICAgICAgdGhpcy5zZW5kTWVzc2Fn
ZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2JqZWN0KTsKLSAgICB9LAotCi0gICAgc2VuZE1lc3Nh
Z2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCi0gICAgewotICAgICAg
ICBjb25zb2xlLnRpbWVTdGFtcChtZXNzYWdlT2JqZWN0Lm1ldGhvZCk7Ci0gICAgICAgIHZhciBt
ZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCk7Ci0gICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsKLSAgICB9LAotCi0g
ICAgX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcjogZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVy
KQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9tYWluXSA9IGRpc3Bh
dGNoZXI7Ci0gICAgfSwKLQotICAgIGRpc3BhdGNoOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMpCi0gICAgICAg
ICAgICBjb25zb2xlLmxvZygiYmFja2VuZDogIiArICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJp
bmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSkpOwotCi0gICAgICAgIHZh
ciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBKU09OLnBh
cnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKLQotICAgICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2Jq
ZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBmb3Igc29tZSByZXF1ZXN0Ci0gICAgICAgICAgICBp
ZiAobWVzc2FnZU9iamVjdC5lcnJvcikgewotICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3Qu
ZXJyb3IuX19wcm90b19fID0gewotICAgICAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjog
ZnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2godGhpcy5jb2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAt
MzI3MDA6IHJldHVybiAiUGFyc2UgZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgLTMyNjAwOiByZXR1cm4gIkludmFsaWQgUmVxdWVzdCI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAtMzI2MDE6IHJldHVybiAiTWV0aG9kIG5vdCBmb3VuZCI7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDI6IHJldHVybiAiSW52YWxpZCBwYXJh
bXMiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAzOiByZXR1cm4gIklu
dGVybmFsIGVycm9yIjs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzIwMDA6
IHJldHVybiAiU2VydmVyIGVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rp
b24oKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIg
ZGVzY3JpcHRpb24gPSJVbmtub3duIGVycm9yIGNvZGUiOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSArICIoIiArIHRoaXMuY29kZSArICIpOiAi
ICsgdGhpcy5tZXNzYWdlICsgIi4iICsgKHRoaXMuZGF0YSA/ICIgIiArIHRoaXMuZGF0YS5qb2lu
KCIgIikgOiAiIik7Ci0gICAgICAgICAgICAgICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAg
ICAgZ2V0TWVzc2FnZTogZnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmpl
Y3QuZXJyb3IuY29kZSAhPT0gLTMyMDAwKQotICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9y
dFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhciBhcmd1bWVudHMgPSBbXTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnJl
c3VsdCkgewotICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LnJl
c3VsdCkKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLnB1c2gobWVzc2FnZU9iamVjdC5y
ZXN1bHRba2V5XSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBjYWxsYmFjayA9
IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLSAgICAgICAgICAgIGlmIChjYWxs
YmFjaykgewotICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOwotICAgICAg
ICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0
aG9kTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUu
bm93KCk7Ci0KLSAgICAgICAgICAgICAgICBhcmd1bWVudHMudW5zaGlmdChtZXNzYWdlT2JqZWN0
LmVycm9yKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMp
OwotICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAg
ICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0KLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNr
Lm1ldGhvZE5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRz
OiAiICsgY2FsbGJhY2subWV0aG9kTmFtZSArICIgPSAiICsgKHByb2Nlc3NpbmdTdGFydFRpbWUg
LSBjYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUpICsgIiArICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nl
c3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMu
X3NjcmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkKLSAgICAgICAgICAgICAg
ICB0aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmpl
Y3QubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgICAgICB2YXIgZG9tYWluTmFtZSA9IG1ldGhv
ZFswXTsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBtZXRob2RbMV07Ci0gICAgICAg
ICAgICBpZiAoIShkb21haW5OYW1lIGluIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgewotICAg
ICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBp
cyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnIiArIGRvbWFpbk5hbWUgKyAiJyIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBkaXNwYXRj
aGVyID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9tYWluTmFtZV07Ci0gICAgICAgICAgICBp
ZiAoIShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0Y2hlcikpIHsKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1w
bGVtZW50ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aGlz
Ll9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdKSB7Ci0gICAgICAgICAgICAgICAgY29u
c29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bnNw
ZWNpZmllZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcGFyYW1z
ID0gW107Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5wYXJhbXMpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcGFyYW1OYW1lcyA9IHRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1l
dGhvZF07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChtZXNzYWdlT2JqZWN0
LnBhcmFtc1twYXJhbU5hbWVzW2ldXSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZh
ciBwcm9jZXNzaW5nU3RhcnRUaW1lOwotICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3Rv
clRpbWVTdGF0cykKLSAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5u
b3coKTsKLQotICAgICAgICAgICAgZGlzcGF0Y2hlcltmdW5jdGlvbk5hbWVdLmFwcGx5KGRpc3Bh
dGNoZXIsIHBhcmFtcyk7Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1l
U3RhdHMpCi0gICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBtZXNz
YWdlT2JqZWN0Lm1ldGhvZCArICIgPSAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRU
aW1lKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcjogZnVu
Y3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVl
c3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2JqZWN0LmlkICsgIiBmYWlsZWQuICIgKyBtZXNzYWdl
T2JqZWN0LmVycm9yKTsKLSAgICB9LAotCi0gICAgcnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczog
ZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9zY3JpcHRzKQotICAg
ICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdOwotCi0gICAgICAgIGlmIChzY3JpcHQpCi0gICAg
ICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2goc2NyaXB0KTsKLQotICAgICAgICBpZiAoIXRoaXMu
X3BlbmRpbmdSZXNwb25zZXNDb3VudCkgewotICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlz
Ll9zY3JpcHRzOwotICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdCi0gICAgICAgICAgICBm
b3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0cy5sZW5ndGg7ICsraWQpCi0gICAgICAgICAgICAg
ICAgIHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUluc3Bl
Y3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9yQmFja2VuZFN0dWIoKTsKLQotRU9GCi0gICAgcmV0
dXJuIHNwbGl0KCJcbiIsICRpbnNwZWN0b3JCYWNrZW5kU3R1YkpTKTsKLX0KLQotc3ViIGdlbmVy
YXRlSGVhZGVyCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICRjbGFzc0Rl
Y2xhcmF0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGVzID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0
cnVjdG9yID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0YW50cyA9IHNoaWZ0OwotICAgIG15ICRtZXRo
b2RzID0gc2hpZnQ7Ci0gICAgbXkgJGZvb3RlciA9IHNoaWZ0OwotCi0gICAgbXkgJGZvcndhcmRI
ZWFkZXJzID0gam9pbigiXG4iLCBzb3J0KG1hcCgiI2luY2x1ZGUgPCIgLiB0eXBlVHJhaXRzKCRf
LCAiZm9yd2FyZEhlYWRlciIpIC4gIj4iLCBncmVwKHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVh
ZGVyIiksIGtleXMgJXskdHlwZXN9KSkpKTsKLSAgICBteSAkZm9yd2FyZERlY2xhcmF0aW9ucyA9
IGpvaW4oIlxuIiwgc29ydChtYXAoImNsYXNzICIgLiB0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZCIp
IC4gIjsiLCBncmVwKHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIiksIGtleXMgJXskdHlwZXN9KSkp
KTsKLSAgICBteSAkY29uc3RhbnREZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JGNvbnN0YW50
c30pOwotICAgIG15ICRtZXRob2RzRGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBAeyRtZXRob2Rz
fSk7Ci0KLSAgICBteSAkaGVhZGVyQm9keSA9IDw8ICJFT0YiOwotLy8gQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLSNpZm5kZWYgJHtjbGFzc05h
bWV9X2gKLSNkZWZpbmUgJHtjbGFzc05hbWV9X2gKLQotJHtmb3J3YXJkSGVhZGVyc30KLQotbmFt
ZXNwYWNlICRuYW1lc3BhY2UgewotCi0kZm9yd2FyZERlY2xhcmF0aW9ucwotCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQotY2xhc3MgJGNsYXNzRGVjbGFyYXRpb24gewotcHVibGljOgot
JGNvbnN0cnVjdG9yCi0KLSRjb25zdGFudERlY2xhcmF0aW9ucwotJG1ldGhvZHNEZWNsYXJhdGlv
bnMKLQotJGZvb3RlcgotfTsKLQotfSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFjZQotI2VuZGlmIC8v
ICFkZWZpbmVkKCR7Y2xhc3NOYW1lfV9oKQotCi1FT0YKLSAgICByZXR1cm4gJGhlYWRlckJvZHk7
Ci19Ci0KLXN1YiBnZW5lcmF0ZVNvdXJjZQotewotICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsK
LSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAg
bXkgJG1ldGhvZHMgPSBzaGlmdDsKLQotICAgIG15IEBzb3VyY2VDb250ZW50ID0gc3BsaXQoIlxy
IiwgJGxpY2Vuc2VUZW1wbGF0ZSk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIlxuI2luY2x1
ZGUgXCJjb25maWcuaFwiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIFwi
JGNsYXNzTmFtZS5oXCIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2lmIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAg
cHVzaChAc291cmNlQ29udGVudCwgIiIpOwotCi0gICAgbXkgJWhlYWRlcnM7Ci0gICAgZm9yZWFj
aCBteSAkdHlwZSAoa2V5cyAleyR0eXBlc30pIHsKLSAgICAgICAgJGhlYWRlcnN7IiNpbmNsdWRl
IFwiIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJoZWFkZXIiKSAuICJcIiJ9ID0gMSBpZiAhdHlwZVRy
YWl0cygkdHlwZSwgImhlYWRlciIpIGVxICAiIjsKLSAgICB9Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgc29ydCBrZXlzICVoZWFkZXJzKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7
Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIm5hbWVzcGFjZSAkbmFtZXNwYWNlIHsiKTsKLSAg
ICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgam9p
bigiXG4iLCBAeyRjb25zdGFudHN9KSk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIEB7JG1ldGhvZHN9KTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIn0gLy8gbmFtZXNwYWNlICRu
YW1lc3BhY2UiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKSIpOwotICAgIHB1c2goQHNv
dXJjZUNvbnRlbnQsICIiKTsKLSAgICByZXR1cm4gQHNvdXJjZUNvbnRlbnQ7Ci19Ci0KLXN1YiB0
eXBlVHJhaXRzCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlm
dDsKLSAgICByZXR1cm4gJHR5cGVUcmFuc2Zvcm17JHR5cGV9LT57JHRyYWl0fTsKLX0KLQotc3Vi
IHBhcmFtVHlwZVRyYWl0cwotewotICAgIG15ICRwYXJhbURlc2NyaXB0aW9uID0gc2hpZnQ7Ci0g
ICAgbXkgJHRyYWl0ID0gc2hpZnQ7Ci0gICAgaWYgKCRwYXJhbURlc2NyaXB0aW9uLT5leHRlbmRl
ZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAgICBteSAkb3B0aW9uYWxSZXN1bHQg
PSB0eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0aW9uLT50eXBlLCAib3B0aW9uYWxfIiAuICR0cmFp
dCk7Ci0gICAgICAgIHJldHVybiAkb3B0aW9uYWxSZXN1bHQgaWYgZGVmaW5lZCAkb3B0aW9uYWxS
ZXN1bHQ7Ci0gICAgfQotICAgIG15ICRyZXN1bHQgPSB0eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0
aW9uLT50eXBlLCAkdHJhaXQpOwotICAgIHJldHVybiBkZWZpbmVkICRyZXN1bHQgPyAkcmVzdWx0
IDogIiI7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZpZWxkc0FuZENvbnN0cnVjdG9y
Ci17Ci0gICAgbXkgQGFyZ3VtZW50czsKLSAgICBteSBAZmllbGRJbml0aWFsaXplcnM7Ci0KLSAg
ICBwdXNoKEBhcmd1bWVudHMsICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCIpOwotICAgIHB1c2goQGZpZWxkSW5pdGlhbGl6ZXJzLCAiICAgICAgICA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsK
LSAgICBwdXNoKEBiYWNrZW5kRm9vdGVyLCAiICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Iik7Ci0KLSAgICBmb3JlYWNoIG15ICRkb21haW4g
KHNvcnQga2V5cyAlYmFja2VuZERvbWFpbnMpIHsKLSAgICAgICAgIyBBZGQgYWdlbnQgZmllbGQg
ZGVjbGFyYXRpb24gdG8gdGhlIGZvb3Rlci4KLSAgICAgICAgbXkgJGFnZW50Q2xhc3NOYW1lID0g
dHlwZVRyYWl0cygkZG9tYWluLCAiZm9yd2FyZCIpOwotICAgICAgICBteSAkZmllbGQgPSB0eXBl
VHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nlc3NvciIpOwotICAgICAgICBwdXNoKEBiYWNrZW5k
Rm9vdGVyLCAiICAgICR7YWdlbnRDbGFzc05hbWV9KiAke2ZpZWxkfTsiKTsKLQotICAgICAgICAj
IEFkZCBhZ2VudCBwYXJhbWV0ZXIgYW5kIGluaXRpYWxpemVyLgotICAgICAgICBteSAkYXJnID0g
c3Vic3RyKCRmaWVsZCwgMik7Ci0gICAgICAgIHB1c2goQGZpZWxkSW5pdGlhbGl6ZXJzLCAiICAg
ICAgICAsICR7ZmllbGR9KCR7YXJnfSkiKTsKLSAgICAgICAgcHVzaChAYXJndW1lbnRzLCAiJHth
Z2VudENsYXNzTmFtZX0qICR7YXJnfSIpOwotICAgIH0KLQotICAgIG15ICRhcmd1bWVudFN0cmlu
ZyA9IGpvaW4oIiwgIiwgQGFyZ3VtZW50cyk7Ci0KLSAgICBteSBAYmFja2VuZEhlYWQ7Ci0gICAg
cHVzaChAYmFja2VuZEhlYWQsICIgICAgJHtiYWNrZW5kQ2xhc3NOYW1lfSgke2FyZ3VtZW50U3Ry
aW5nfSkiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgQGZpZWxkSW5pdGlhbGl6ZXJzKTsKLSAg
ICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9Iik7Ci0gICAgcHVzaChAYmFja2VuZEhl
YWQsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBlbnVtIENvbW1vbkVycm9yQ29k
ZSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIFBhcnNlRXJyb3IgPSAwLCIp
OwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBJbnZhbGlkUmVxdWVzdCwiKTsKLSAg
ICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgTWV0aG9kTm90Rm91bmQsIik7Ci0gICAgcHVz
aChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRQYXJhbXMsIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgICAgIEludGVybmFsRXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhl
YWQsICIgICAgICAgIFNlcnZlckVycm9yLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAg
ICAgICBMYXN0RW50cnksIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgfTsiKTsKLSAg
ICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZv
aWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OyIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OyIpOwotICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0gTWV0aG9kTmFt
ZXMgeyIpOwotICAgICRiYWNrZW5kQ29uc3RydWN0b3IgPSBqb2luKCJcbiIsIEBiYWNrZW5kSGVh
ZCk7Ci19Ci0KLXN1YiBmaW5pc2gKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0KLSAgICBw
dXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIoKSk7Ci0g
ICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRTZW5kUmVzcG9uc2Uo
KSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQ
cm90b2NvbEVycm9yKCkpOwotICAgIHVuc2hpZnQoQGZyb250ZW5kTWV0aG9kc0ltcGwsIGdlbmVy
YXRlRnJvbnRlbmRDb25zdHJ1Y3RvckltcGwoKSwgIiIpOwotCi0gICAgb3BlbihteSAkU09VUkNF
LCAiPiRvdXRwdXREaXIvJGZyb250ZW5kQ2xhc3NOYW1lLmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qg
b3BlbiBmaWxlICRvdXRwdXREaXIvJGZyb250ZW5kQ2xhc3NOYW1lLmNwcCI7Ci0gICAgcHJpbnQg
JFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRlU291cmNlKCRmcm9udGVuZENsYXNzTmFtZSwgXCVm
cm9udGVuZFR5cGVzLCBcQGZyb250ZW5kQ29uc3RhbnREZWZpbml0aW9ucywgXEBmcm9udGVuZE1l
dGhvZHNJbXBsKSk7Ci0gICAgY2xvc2UoJFNPVVJDRSk7Ci0gICAgdW5kZWYoJFNPVVJDRSk7Ci0K
LSAgICBvcGVuKG15ICRIRUFERVIsICI+JG91dHB1dEhlYWRlcnNEaXIvJGZyb250ZW5kQ2xhc3NO
YW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0SGVhZGVyc0Rpci8kZnJv
bnRlbmRDbGFzc05hbWUuaCI7Ci0gICAgcHJpbnQgJEhFQURFUiBnZW5lcmF0ZUhlYWRlcigkZnJv
bnRlbmRDbGFzc05hbWUsICRmcm9udGVuZENsYXNzTmFtZSwgXCVmcm9udGVuZFR5cGVzLCAkZnJv
bnRlbmRDb25zdHJ1Y3RvciwgXEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zLCBcQGZyb250
ZW5kTWV0aG9kcywgam9pbigiXG4iLCBAZnJvbnRlbmRGb290ZXIpKTsKLSAgICBjbG9zZSgkSEVB
REVSKTsKLSAgICB1bmRlZigkSEVBREVSKTsKLQotICAgIHVuc2hpZnQoQGJhY2tlbmRDb25zdGFu
dERlZmluaXRpb25zLCAiY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmROYW1lc1tdID0geyIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25z
LCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgIiIpOwotCi0g
ICAgIyBNYWtlIGRpc3BhdGNoZXIgbWV0aG9kcyBwcml2YXRlIG9uIHRoZSBiYWNrZW5kLgotICAg
IHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIn07Iik7Ci0gICAgcHVzaChAYmFj
a2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCAiICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsiKTsg
ICAgCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiIik7Ci0gICAgcHVz
aChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAicHJpdmF0ZToiKTsKLQotICAgIGZvcmVh
Y2ggbXkgJHR5cGUgKGtleXMgJWJhY2tlbmRUeXBlcykgewotICAgICAgICBpZiAodHlwZVRyYWl0
cygkdHlwZSwgIkpTT05UeXBlIikpIHsKLSAgICAgICAgICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVBcmd1bWVudEdldHRlcnMoJHR5cGUpKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICB2b2lkIHNlbmRS
ZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpOyIpOwotCi0gICAgZ2Vu
ZXJhdGVCYWNrZW5kQWdlbnRGaWVsZHNBbmRDb25zdHJ1Y3RvcigpOwotCi0gICAgcHVzaChAYmFj
a2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRNZXNzYWdlUGFyc2VyKCkpOwotICAgIHB1
c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgIiIpOwotCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCAiIik7Ci0KLSAgICBvcGVuKCRTT1VSQ0UsICI+JG91dHB1dERpci8kYmFj
a2VuZENsYXNzTmFtZS5jcHAiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0RGly
LyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCI7Ci0gICAgcHJpbnQgJFNPVVJDRSBqb2luKCJcbiIsIGdl
bmVyYXRlU291cmNlKCRiYWNrZW5kQ2xhc3NOYW1lLCBcJWJhY2tlbmRUeXBlcywgXEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9ucywgXEBiYWNrZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBjbG9zZSgk
U09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9wZW4oJEhFQURFUiwgIj4kb3V0
cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIikgfHwgZGllICJDb3VsZG4ndCBvcGVu
IGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGJhY2tlbmRDbGFzc05hbWUuaCI7Ci0gICAgcHJpbnQg
JEhFQURFUiBqb2luKCJcbiIsIGdlbmVyYXRlSGVhZGVyKCRiYWNrZW5kQ2xhc3NOYW1lLCAkYmFj
a2VuZENsYXNzRGVjbGFyYXRpb24sIFwlYmFja2VuZFR5cGVzLCAkYmFja2VuZENvbnN0cnVjdG9y
LCBcQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgXEBiYWNrZW5kTWV0aG9kcywgam9pbigi
XG4iLCBAYmFja2VuZEZvb3RlcikpKTsKLSAgICBjbG9zZSgkSEVBREVSKTsKLSAgICB1bmRlZigk
SEVBREVSKTsKLQotICAgIG9wZW4obXkgJEpTX1NUVUIsICI+JG91dHB1dERpci8kYmFja2VuZEpT
U3R1Yk5hbWUuanMiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNr
ZW5kSlNTdHViTmFtZS5qcyI7Ci0gICAgcHJpbnQgJEpTX1NUVUIgam9pbigiXG4iLCBnZW5lcmF0
ZUJhY2tlbmRTdHViSlMoKSk7Ci0gICAgY2xvc2UoJEpTX1NUVUIpOwotICAgIHVuZGVmKCRKU19T
VFVCKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjNhZmEyNzkxMDJmMzY5YzA0MDU0MmNkNzAz
YTlhNWEzZWYwN2JlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0wLDAgKzEsMTM2MSBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisj
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMg
ZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBz
eXMKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGpzb24KK2Zyb20gc3Ry
aW5nIGltcG9ydCBqb2luCisKK2NtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2Vy
KCkKK2FyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY21kbGluZV9wYXJzZXIucGFyc2VfYXJncygp
CisKK3RyeToKKyAgICBpbnB1dF9qc29uX2ZpbGVuYW1lLCBvdXRwdXRfaGVhZGVyX2Rpcm5hbWUs
IG91dHB1dF9jcHBfZGlybmFtZSA9IGFyZ192YWx1ZXMKK2V4Y2VwdCBWYWx1ZUVycm9yLCBlOgor
ICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1l
bnRzOiAlc1xuXG4iICUgZSkKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogPHNjcmlwdD4g
SW5zcGVjdG9yLmpzb24gPG91dHB1dF9oZWFkZXJfZGlyPiA8b3V0cHV0X2NwcF9kaXI+XG4iKQor
ICAgIGV4aXQoMSkKKworCitjbGFzcyBEb21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBk
b21haW5fbmFtZSBpbiBjbHMuYWdlbnRfdHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1l
X3JlcyA9IGNscy5hZ2VudF90eXBlX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25h
bWUKKworICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6
CisgICAgICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtk
b21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0g
ZG9tYWluX25hbWUubG93ZXIoKSArICJBZ2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0
KToKKyAgICAgICAgICAgIGFnZW50X3R5cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAg
ICAgICBoaWRkZW4gPSBkb21haW5fbmFtZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAg
ICAgIHNraXBfanNfYmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlu
cworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisgICAgICAg
IHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsiUnVudGltZSIs
ICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNldChbIkluc3Bl
Y3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3BlY3RvclJlc291
cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVyYXRlIG5hbWVz
IGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAgICJQYWdlIjog
InBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIsCisgICAgICAg
ICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjogICJyZXNvdXJj
ZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwKKyAgICAgICAg
IkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBsaWNhdGlvbkNh
Y2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjogICJkb21BZ2Vu
dCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVnZ2VyIjogImRl
YnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdnZXJBZ2VudCIs
CisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAgIldvcmtlciI6
ICJ3b3JrZXJBZ2VudCIsCisgICAgIH0KKworCitjbGFzcyBDUGFyYW1UeXBlKG9iamVjdCk6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHNldHRlcl9mb3JtYXQ9IiVzIik6CisgICAgICAg
IHNlbGYudHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5zZXR0ZXJfZm9ybWF0ID0gc2V0dGVyX2Zv
cm1hdAorCisgICAgZGVmIGdldF90ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50eXBl
CisKKyAgICBkZWYgZ2V0X3NldHRlcl9mb3JtYXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
LnNldHRlcl9mb3JtYXQKKworCitjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgorICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgZ2V0KGpzb25fdHlwZSk6CisgICAgICAgIGlmIGpzb25fdHlwZSA9PSAi
Ym9vbGVhbiI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQm9vbAorICAgICAgICBlbGlm
IGpzb25fdHlwZSA9PSAic3RyaW5nIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJp
bmcKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gImFycmF5IjoKKyAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5BcnJheQorICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAib2JqZWN0IjoKKyAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKKyAgICAgICAgZWxpZiBqc29uX3R5cGUg
PT0gImludGVnZXIiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAorICAgICAgICBl
bGlmIGpzb25fdHlwZSA9PSAibnVtYmVyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5O
dW1iZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93
biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCisKKyAgICBjbGFzcyBCYXNlVHlwZShvYmplY3QpOgor
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJh
bV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICByZXR1cm4gY2xzLmRlZmF1bHRfY19wYXJh
bV90eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFt
Q2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBjbGFzcyBT
dHJpbmcoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQ
YXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJh
bV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9y
ZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdl
dHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIgorCisgICAgICAgIGdldFNl
dHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIlwiXCIiCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAg
ICAgICAgcmV0dXJuICJzdHJpbmciCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5
cGUoIlN0cmluZyIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgU3Ry
aW5nJiIpCisKKyAgICBjbGFzcyBJbnQoQmFzZVR5cGUpOgorICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkludCIK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0ZXJOYW1lKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIk51bWJlciIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiMCIKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAg
ICAgICByZXR1cm4gIm51bWJlciIKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQ
YXJhbVR5cGUoImludCIpCisKKyAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgorICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICBy
ZXR1cm4gIk9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRT
ZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIk51bWJlciIKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VW5zdXBwb3J0ZWQiKQorCisgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlw
ZSgiZG91YmxlIikKKworICAgIGNsYXNzIEJvb2woQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3Nt
ZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25h
bCk6CisgICAgICAgICAgICBpZiAocGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQpOgorICAg
ICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xz
Ll9yZWZfY190eXBlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIK
KworICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0
dXJuICJmYWxzZSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0Jp
bmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgi
Ym9vbCIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29u
c3QiLCAiKiVzIikKKworICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6CisgICAgICAgIEBjbGFz
c21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlv
bmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAg
ICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJu
ICJPYmplY3QiCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1
cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50
UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAg
IF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisg
ICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IikKKworICAgIGNsYXNzIEFycmF5KEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9k
CisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgor
ICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuT1VUUFVUOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxpZiBwYXJhbV90
eXBlID09IFBhcmFtVHlwZS5JTlBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFp
bl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cmVmX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRl
ck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQXJyYXkiCisKKyAgICAgICAgZ2V0U2V0dGVy
TmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRl
ZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmlu
ZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAib2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUo
IlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKworCitjbGFzcyBQYXJhbVR5cGUob2JqZWN0
KToKKyAgICBJTlBVVCA9ICJpbnB1dCIKKyAgICBPVVRQVVQgPSAib3V0cHV0IgorICAgIEVWRU5U
ID0gImV2ZW50IgorCisKK2NsYXNzIFR5cGVEYXRhKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGpzb25fdHlwZSwganNvbl9kb21haW4pOgorICAgICAgICBzZWxmLmpzb25fdHlwZV8g
PSBqc29uX3R5cGUKKyAgICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29uX2RvbWFpbgorCisg
ICAgICAgIGlmICJ0eXBlIiBpbiBqc29uX3R5cGU6CisgICAgICAgICAgICBqc29uX3R5cGVfbmFt
ZSA9IGpzb25fdHlwZVsidHlwZSJdCisgICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdl
dChqc29uX3R5cGVfbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiVW5rbm93biB0eXBlIikKKyAgICAgICAgc2VsZi5yYXdfdHlwZV8gPSByYXdfdHlwZQor
CisgICAgZGVmIGdldFJhd1R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBl
XworCisKK2NsYXNzIFR5cGVNYXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSk6CisgICAg
ICAgIHNlbGYubWFwXyA9IHt9CisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFp
bnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisK
KyAgICAgICAgICAgIGRvbWFpbl9tYXAgPSB7fQorICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFp
bl9uYW1lXSA9IGRvbWFpbl9tYXAKKworICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2Rv
bWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBl
cyJdOgorICAgICAgICAgICAgICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAg
ICAgICAgICAgICAgICAgICAgdHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2Rv
bWFpbikKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9k
YXRhCisKKyAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgorICAgICAg
ICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBlX25hbWVdCisKKworZGVmIHJlc29s
dmVQYXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBp
ZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJh
bWV0ZXJbIiRyZWYiXQorICAgICAgICB0eXBlX2RhdGEgPSBnZXRSZWZEYXRhKGpzb25fcmVmLCBz
Y29wZV9kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuIHR5cGVfZGF0YS5nZXRSYXdUeXBlKCkK
KyAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFtZXRlcjoKKyAgICAgICAganNvbl90eXBlID0g
anNvbl9wYXJhbWV0ZXJbInR5cGUiXQorICAgICAgICByZXR1cm4gUmF3VHlwZXMuZ2V0KGpzb25f
dHlwZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIp
CisKKworZGVmIGdldFJlZkRhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBk
b3RfcG9zID0ganNvbl9yZWYuZmluZCgiLiIpCisgICAgaWYgZG90X3BvcyA9PSAtMToKKyAgICAg
ICAgZG9tYWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQorICAgICAgICB0eXBlX25hbWUgPSBq
c29uX3JlZgorICAgIGVsc2U6CisgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9w
b3NdCisgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KKworICAgIHJl
dHVybiB0eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKKworCitpbnB1dF9maWxl
ID0gb3BlbihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCitqc29uX3N0cmluZyA9IGlucHV0X2Zp
bGUucmVhZCgpCitqc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCisKKworY2xhc3Mg
VGVtcGxhdGVzOgorICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgK
KyIiIiAgICBjbGFzcyAkZG9tYWluQ2xhc3NOYW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgICRk
b21haW5DbGFzc05hbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KKyR7ZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnN9ICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyAgICB9OworCisgICAgJGRv
bWFpbkNsYXNzTmFtZSogJGRvbWFpbkZpZWxkTmFtZSgpIHsgcmV0dXJuICZtXyRkb21haW5GaWVs
ZE5hbWU7IH0KKworIiIiKQorCisgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUo
CisiIiJ2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRtZXRo
b2ROYW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisKKyAgICBpZiAoISRhZ2VudEZpZWxkKQorICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZygiJHtkb21haW5OYW1lfSBoYW5kbGVyIGlzIG5vdCBhdmFp
bGFibGUuIik7CiskbWV0aG9kT3V0Q29kZQorICAgIEVycm9yU3RyaW5nIGVycm9yOworJG1ldGhv
ZEluQ29kZQoraWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgJGFnZW50RmllbGQt
PiRtZXRob2ROYW1lKCZlcnJvciRhZ2VudENhbGxQYXJhbXMpOworCisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7cmVzcG9u
c2VDb29rfXNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIkZG9tYWluTmFt
ZS4kbWV0aG9kTmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOworfQorIiIiKQorCisgICAg
ZnJvbnRlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKCIiInZvaWQgSW5zcGVjdG9yRnJvbnRl
bmQ6OiRkb21haW5OYW1lOjokZXZlbnROYW1lKCRwYXJhbWV0ZXJzKQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+ICR7ZXZlbnROYW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICR7ZXZlbnROYW1lfU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIiRk
b21haW5OYW1lLiRldmVudE5hbWUiKTsKKyRjb2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZCgke2V2ZW50TmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisiIiIp
CisKKyAgICBmcm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3Rv
ckZyb250ZW5kX2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRfaAorCisjaW5jbHVkZSA8UGxh
dGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgeworcHVibGljOgorICAgIEluc3Bl
Y3RvckZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOworCisKKyRkb21haW5DbGFz
c0xpc3QKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKKyR7ZmllbGREZWNsYXJhdGlvbnN9fTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCisiIiIp
CisKKyAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9o
CisKKyNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIElu
c3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworCiskZm9yd2Fy
ZERlY2xhcmF0aW9ucworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwkY29uc3Ry
dWN0b3JQYXJhbXMpCisgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5pdAorICAgIHsgfQorCisgICAgdm9p
ZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KKwor
ICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsKKyAgICAgICAgUGFyc2VFcnJvciA9IDAsCisgICAg
ICAgIEludmFsaWRSZXF1ZXN0LAorICAgICAgICBNZXRob2ROb3RGb3VuZCwKKyAgICAgICAgSW52
YWxpZFBhcmFtcywKKyAgICAgICAgSW50ZXJuYWxFcnJvciwKKyAgICAgICAgU2VydmVyRXJyb3Is
CisgICAgICAgIExhc3RFbnRyeSwKKyAgICB9OworCisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNv
bnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisgICAg
dm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHN0YXRpYyBib29sIGdl
dENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOworCisg
ICAgZW51bSBNZXRob2ROYW1lcyB7CisKKyRlbnVtQ29uc3RhbnRzCit9OworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQg
Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGlj
IFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBp
bnZvY2F0aW9uRXJyb3IpOworCiskbWV0aG9kRGVjbGFyYXRpb25zCisKKyAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJGZpZWxkRGVjbGFy
YXRpb25zCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaCkKKworCisiIiIpCisKKyAgICBiYWNrZW5kX2Nw
cCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmgiCiskaW5jbHVkZXMKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10g
PSB7CiskbWV0aG9kTmFtZURlY2xhcmF0aW9ucworfTsKKworCiskbWV0aG9kcwordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7
CisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBj
YWxsSWQgPSAwOworCisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBz
dGF0aWMgQ2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKKyRtZXNzYWdlSGFuZGxlcnMKKyAgICAg
ICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihjb21tYW5kTmFtZXMpIC8gc2l6
ZW9mKGNvbW1hbmROYW1lc1swXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBo
YW5kbGVyc1tpXSk7CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRN
ZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXBh
cnNlZE1lc3NhZ2UpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9y
LCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2Vk
TWVzc2FnZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBh
IEpTT05pZmllZCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7
CisgICAgaWYgKCFjYWxsSWRWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAs
IEludmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElk
KSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3Nh
Z2VPYmplY3QtPmdldCgibWV0aG9kIik7CisgICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcg
cHJvcGVydHkgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
dHJpbmcgbWV0aG9kOworICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7
CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJU
aGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0
b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNo
TWFwLmVuZCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9k
Tm90Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9i
amVjdC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRS
ZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCit7CisgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2Nh
dGlvbkVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CisgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKKyAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3Io
Y29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBD
b21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChWZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOworICAgIGlmICghc19jb21tb25FcnJvcnMu
c2l6ZSgpKSB7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3
MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYw
MCk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAx
KTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7
CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwor
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7CisgICAg
fQorICAgIEFTU0VSVChjb2RlID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19j
b21tb25FcnJvcnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0p
OworICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOworICAgIEFT
U0VSVChlcnJvcik7CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0
YSIsIGRhdGEpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJv
cik7CisgICAgaWYgKGNhbGxJZCkKKyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpj
YWxsSWQpOworICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVj
dG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQor
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworaW50IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorewor
ICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAgIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAo
IW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJl
cXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2Jq
ZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJl
cicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
b2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVl
SXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9
PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnTnVtYmVyJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQt
PmFzTnVtYmVyKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAn
TnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2
YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2
YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQg
PSBmYWxzZTsKKworICAgIFN0cmluZyB2YWx1ZSA9ICIiOworCisgICAgaWYgKCFvYmplY3QpIHsK
KyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJh
bWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNv
bnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5k
KCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0g
b2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycg
d2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygm
dmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkK
KyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7
CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKwor
ICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlm
ICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1p
c3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVp
cmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZp
bmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicgd2FzIG5vdCBm
b3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKSkK
KyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAg
ICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChw
cm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91
bmQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICgh
dmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Np
bmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVk
IHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChu
YW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZh
bHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnIHdhcyBub3QgZm91bmQu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKKyAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAn
JXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAq
dmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVy
cm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxz
ZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQp
IHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBj
b250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIg
JyVzJyB3aXRoIHR5cGUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAg
IGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFy
YW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFs
dWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgbXVzdCBiZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVs
c2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRy
dWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFv
YmplY3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGZyb250ZW5kX2NwcCA9IHN0
cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1
ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKworCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX2luc3Bl
Y3RvcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX3BhZ2UoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQorICAgICwgbV9jb25zb2xlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
KyAgICAsIG1fbmV0d29yayhpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX2RhdGFi
YXNlKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZG9tc3RvcmFnZShpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX2FwcGxpY2F0aW9uY2FjaGUoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQorICAgICwgbV9kb20oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAg
ICwgbV90aW1lbGluZShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgLCBtX2RlYnVnZ2Vy
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fcHJvZmlsZXIoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQorICAgICwgbV93b3JrZXIoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQor
eworfQorCiskbWV0aG9kcworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0
ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisKK0luc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMu
X2xhc3RDYWxsYmFja0lkID0gMTsKKyAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQgPSAw
OworICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OworICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJz
ID0ge307CisgICAgdGhpcy5fZXZlbnRBcmdzID0ge307CiskZGVsZWdhdGVzJGV2ZW50QXJncyRk
b21haW5EaXNwYXRjaGVycyAgICB9CisKK0luc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9
IHsKKyAgICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAorICAgIGR1bXBJbnNwZWN0b3JQcm90
b2NvbE1lc3NhZ2VzOiAwLAorCisgICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJhY2tJZCsrOworICAgICAg
ICB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9
OworICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRGVs
ZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgZG9tYWlu
QW5kRnVuY3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgiLiIp
OworICAgICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQi
OworICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQorICAgICAgICAgICAgd2luZG93W2Fn
ZW50TmFtZV0gPSB7fTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rp
b25bMV1dID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0U3Ry
aW5nKTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dWyJp
bnZva2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpCisgICAgfSwK
KworICAgIF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFyZ3MsIGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpOwor
ICAgICAgICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFj
a0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAg
X3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYXJn
cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZhciBy
ZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICB2YXIgY2FsbGJhY2sg
PSAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0
aW9uIikgPyBhcmdzLnBvcCgpIDogMDsKKyAgICAgICAgdmFyIGRvbWFpbkFuZE1ldGhvZCA9IHJl
cXVlc3QubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE1ldGhvZCA9IGRvbWFp
bkFuZE1ldGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9kWzFdOworCisgICAgICAg
IHZhciBoYXNQYXJhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5cGU7CisgICAgICAgICAg
ICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7CisK
KyAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbmFsRmxhZykg
eworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52
YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICIn
IGNhbGwuIEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lm
eShyZXF1ZXN0LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Muc2hp
ZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1ZSA9
PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFy
YW1zW2tleV07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlk
IHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRo
b2QgKyAiJyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIg
KyB0eXBlb2YgdmFsdWUgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1zW2tleV0gPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFoYXNQYXJhbXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVl
c3QucGFyYW1zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYm
ICFjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZp
bmVkIikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBP
cHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAi
JyBjYWxsIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIgKyB0eXBlb2YgYXJn
c1swXSArICInLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0
KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3dyYXBDYWxsYmFja0FuZFNlbmRN
ZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxiYWNrKTsKKworICAgICAg
ICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7CisgICAgICAgICAgICB2YXIgd3Jh
cHBlZENhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAg
ICAgICAgd3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZDsK
KyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUgPSBEYXRlLm5vdygp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29sTWVz
c2FnZXMpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlT2JqZWN0KSk7CisKKyAgICAgICAgKyt0aGlzLl9wZW5kaW5nUmVzcG9uc2Vz
Q291bnQ7CisgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQobWVzc2FnZU9i
amVjdCk7CisgICAgfSwKKworICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kOiBmdW5jdGlv
bihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS50aW1lU3RhbXAobWVzc2Fn
ZU9iamVjdC5tZXRob2QpOworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG1l
c3NhZ2VPYmplY3QpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobWVzc2FnZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXI6IGZ1bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2Rv
bWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOworICAgIH0sCisKKyAgICBkaXNw
YXRjaDogZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNw
ZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImJhY2tlbmQ6
ICIgKyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNzYWdlIDogSlNPTi5zdHJp
bmdpZnkobWVzc2FnZSkpKTsKKworICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0eXBlb2Yg
bWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7CisK
KyAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBqdXN0IGEgcmVzcG9uc2Ug
Zm9yIHNvbWUgcmVxdWVzdAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJvdG9fXyA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuY29kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1cm4gIlBhcnNlIGVycm9y
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMDogcmV0dXJuICJJbnZh
bGlkIFJlcXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAxOiBy
ZXR1cm4gIk1ldGhvZCBub3QgZm91bmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgLTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJvciI7OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNlcnZlciBlcnJvciI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0iVW5rbm93biBlcnJv
ciBjb2RlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0
aW9uKCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVzc2FnZSArICIuIiArICh0
aGlzLmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIpOworICAgICAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldE1lc3NhZ2U6IGZ1bmN0aW9uKCkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMubWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmpl
Y3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107Cisg
ICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCisgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9i
amVjdC5pZF07CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2
YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5z
cGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgICAgICAgICAgICAg
YXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAtLXRoaXMu
X3BlbmRpbmdSZXNwb25zZXNDb3VudDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2Fs
bGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVt
cEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxiYWNrLm1ldGhvZE5hbWUg
KyAiID0gIiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2suc2VuZFJlcXVlc3RUaW1l
KSArICIgKyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5kaW5n
UmVzcG9uc2VzQ291bnQpCisgICAgICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNw
YXRjaGVzKCk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAg
ICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07CisgICAgICAgICAgICB2YXIgZnVu
Y3Rpb25OYW1lID0gbWV0aG9kWzFdOworICAgICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBpbiB0
aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4g
JyIgKyBkb21haW5OYW1lICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3BhdGNo
ZXJzW2RvbWFpbk5hbWVdOworICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb25OYW1lIGluIGRpc3Bh
dGNoZXIpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6
IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1ldGhvZCAnIiArIG1lc3Nh
Z2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3Qu
bWV0aG9kXSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9y
OiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0aG9kICciICsgbWVzc2Fn
ZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgaWYgKG1l
c3NhZ2VPYmplY3QucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFtTmFtZXMgPSB0
aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFyYW1OYW1lc1tpXV0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAgICAg
ICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgIGRpc3Bh
dGNoZXJbZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJhbXMpOworCisgICAgICAg
ICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiID0gIiAr
IChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAgICB9CisgICAgfSwK
KworICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAg
eworICAgICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2FnZU9i
amVjdC5pZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgfSwKKwor
ICAgIHJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNjcmlwdCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fc2NyaXB0cykKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMgPSBb
XTsKKworICAgICAgICBpZiAoc2NyaXB0KQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cy5wdXNo
KHNjcmlwdCk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpIHsK
KyAgICAgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsKKyAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMgPSBbXQorICAgICAgICAgICAgZm9yICh2YXIgaWQgPSAwOyBpZCA8IHNjcmlw
dHMubGVuZ3RoOyArK2lkKQorICAgICAgICAgICAgICAgICBzY3JpcHRzW2lkXS5jYWxsKHRoaXMp
OworICAgICAgICB9CisgICAgfQorfQorCitJbnNwZWN0b3JCYWNrZW5kID0gbmV3IEluc3BlY3Rv
ckJhY2tlbmRTdHViKCk7IiIiKQorCisgICAgcGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlID0g
IiIiCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CisgICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisiIiIK
KworCit0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCisKKworY2xhc3MgR2VuZXJhdG9yOgor
ICAgIGZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzID0gW10KKyAgICBmcm9udGVuZF9kb21haW5f
Y2xhc3NfbGluZXMgPSBbXQorCisgICAgbWV0aG9kX25hbWVfZW51bV9saXN0ID0gW10KKyAgICBi
YWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9p
bXBsZW1lbnRhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0
aW9uX2xpc3QgPSBbXQorICAgIG1ldGhvZF9oYW5kbGVyX2xpc3QgPSBbXQorICAgIGZyb250ZW5k
X21ldGhvZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QgPSBbXQor
ICAgIGJhY2tlbmRfanNfZXZlbnRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19kb21haW5fZGlz
cGF0Y2hlcl9saXN0ID0gW10KKworICAgIGJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCA9
IFtdCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQorICAgIGJhY2tlbmRf
ZmllbGRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9mb3J3YXJkX2xpc3QgPSBbXQorICAgIGJhY2tl
bmRfaW5jbHVkZV9saXN0ID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ28oKToK
KyAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CisgICAgICAg
ICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorICAgICAgICAgICAgZG9t
YWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCisKKyAgICAgICAgICAgIGRvbWFp
bl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAg
ICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50X2ZpZWxkX25hbWUK
KworICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzID0gW10KKyAg
ICAgICAgICAgIGlmICJldmVudHMiIGluIGpzb25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZv
ciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVudHMiXToKKyAgICAgICAgICAgICAgICAg
ICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250
ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKKworICAgICAgICAgICAgICAgIEdlbmVyYXRv
ci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5hcHBlbmQoIiAgICAlcyBtXyVzO1xuIiAlIChk
b21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIpKQorICAgICAgICAgICAgICAgIEdlbmVyYXRv
ci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMuYXBwZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9k
b21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgICAgICAgICBkb21haW5D
bGFzc05hbWU9ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbkZpZWxkTmFt
ZT1kb21haW5fbmFtZV9sb3dlciwKKyAgICAgICAgICAgICAgICAgICAgZnJvbnRlbmREb21haW5N
ZXRob2REZWNsYXJhdGlvbnM9am9pbihmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMs
ICIiKSkpCisgICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpzb25fZG9tYWluOgorICAgICAg
ICAgICAgICAgIGZvciBqc29uX2NvbW1hbmQgaW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Cisg
ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5k
LCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkKKworICAgICAgICAgICAgaWYgbm90IGRv
bWFpbl9kYXRhLnNraXBfanNfYmluZDoKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LmFwcGVuZCgiICAgIHRoaXMucmVnaXN0ZXIlc0Rp
c3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiVz
XCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWUpKQorCisgICAgICAgIHNvcnRlZF9q
c29uX2RvbWFpbnMgPSBsaXN0KGpzb25fYXBpWyJkb21haW5zIl0pCisgICAgICAgIHNvcnRlZF9q
c29uX2RvbWFpbnMuc29ydChrZXk9bGFtYmRhIG86IG9bImRvbWFpbiJdKQorCisgICAgICAgIGZv
ciBqc29uX2RvbWFpbiBpbiBzb3J0ZWRfanNvbl9kb21haW5zOgorICAgICAgICAgICAgZG9tYWlu
X25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKworICAgICAgICAgICAgZG9tYWluX2RhdGEg
PSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisgICAgICAgICAg
ICBpZiBkb21haW5fZGF0YS5oaWRkZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgIGFnZW50X3R5cGVfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50X3R5cGVfbmFtZQorICAg
ICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50X2ZpZWxkX25hbWUK
KyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX3BhcmFtX2xpc3QuYXBw
ZW5kKCIsICVzKiAlcyIgJSAoYWdlbnRfdHlwZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdC5hcHBlbmQo
IiAgICAgICAgLCBtXyVzKCVzKSIgJSAoYWdlbnRfZmllbGRfbmFtZSwgYWdlbnRfZmllbGRfbmFt
ZSkpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9maWVsZF9saXN0LmFwcGVuZCgiICAg
ICVzKiBtXyVzOyIgJSAoYWdlbnRfdHlwZV9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdC5hcHBlbmQoImNsYXNzICVzOyIg
JSBhZ2VudF90eXBlX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9pbmNsdWRl
X2xpc3QuYXBwZW5kKCIjaW5jbHVkZSBcIiVzLmhcIiIgJSBhZ2VudF90eXBlX25hbWUpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWlu
X25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6CisgICAgICAgIGV2ZW50
X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KKyAgICAgICAgcGFyYW1ldGVyX2xpc3QgPSBbXQor
ICAgICAgICBtZXRob2RfbGluZV9saXN0ID0gW10KKyAgICAgICAgYmFja2VuZF9qc19ldmVudF9w
YXJhbV9saXN0ID0gW10KKyAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fZXZlbnQ6Cisg
ICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7XG4iKQorICAg
ICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fZXZlbnRbInBhcmFtZXRlcnMiXToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0K
KworICAgICAgICAgICAgICAgIHJhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3Bh
cmFtZXRlciwgZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgICAgICBqc29uX29wdGlvbmFsID0g
Im9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFs
Il0KKworICAgICAgICAgICAgICAgIG9wdGlvbmFsX21hc2sgPSByYXdfdHlwZS5pc0V2ZW50UGFy
YW1DaGVja09wdGlvbmFsKCkKKyAgICAgICAgICAgICAgICBjX3R5cGUgPSByYXdfdHlwZS5nZXRD
UGFyYW1UeXBlKFBhcmFtVHlwZS5FVkVOVCwganNvbl9vcHRpb25hbCkKKworICAgICAgICAgICAg
ICAgIHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0U2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAg
ICAgICBvcHRpb25hbCA9IG9wdGlvbmFsX21hc2sgYW5kIGpzb25fb3B0aW9uYWwKKworICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9saXN0LmFwcGVuZCgiJXMgJXMiICUgKGNfdHlwZS5nZXRfdGV4
dCgpLCBwYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQg
PSBjX3R5cGUuZ2V0X3NldHRlcl9mb3JtYXQoKSAlIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAg
ICAgICAgICBzZXR0ZXJfY29kZSA9ICIgICAgcGFyYW1zT2JqZWN0LT5zZXQlcyhcIiVzXCIsICVz
KTtcbiIgJSAoc2V0dGVyX3R5cGUsIHBhcmFtZXRlcl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCisg
ICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHNldHRlcl9j
b2RlID0gKCIgICAgaWYgKCVzKVxuICAgICIgJSBwYXJhbWV0ZXJfbmFtZSkgKyBzZXR0ZXJfY29k
ZQorICAgICAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQor
CisgICAgICAgICAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LmFwcGVuZCgiXCIl
c1wiIiAlIHBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBl
bmQoIiAgICAlc01lc3NhZ2UtPnNldE9iamVjdChcInBhcmFtc1wiLCBwYXJhbXNPYmplY3QpO1xu
IiAlIGV2ZW50X25hbWUpCisgICAgICAgIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5l
cy5hcHBlbmQoCisgICAgICAgICAgICAiICAgICAgICB2b2lkICVzKCVzKTtcbiIgJSAoZXZlbnRf
bmFtZSwgam9pbihwYXJhbWV0ZXJfbGlzdCwgIiwgIikpKQorCisgICAgICAgIEdlbmVyYXRvci5m
cm9udGVuZF9tZXRob2RfbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmZyb250ZW5kX21ldGhvZC5zdWJz
dGl0dXRlKE5vbmUsCisgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLCBldmVudE5h
bWU9ZXZlbnRfbmFtZSwKKyAgICAgICAgICAgIHBhcmFtZXRlcnM9am9pbihwYXJhbWV0ZXJfbGlz
dCwgIiwgIiksCisgICAgICAgICAgICBjb2RlPWpvaW4obWV0aG9kX2xpbmVfbGlzdCwgIiIpKSkK
KworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0LmFwcGVuZCgiICAgIHRo
aXMuX2V2ZW50QXJnc1tcIiVzLiVzXCJdID0gWyVzXTtcbiIgJSAoCisgICAgICAgICAgICBkb21h
aW5fbmFtZSwgZXZlbnRfbmFtZSwgam9pbihiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QsICIs
ICIpKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19jb21tYW5kKGpzb25f
Y29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpOgorICAgICAgICBqc29uX2Nv
bW1hbmRfbmFtZSA9IGpzb25fY29tbWFuZFsibmFtZSJdCisgICAgICAgIEdlbmVyYXRvci5tZXRo
b2RfbmFtZV9lbnVtX2xpc3QuYXBwZW5kKCIgICAgICAgIGslc18lc0NtZCwiICUgKGRvbWFpbl9u
YW1lLCBqc29uX2NvbW1hbmRbIm5hbWUiXSkpCisgICAgICAgIEdlbmVyYXRvci5tZXRob2RfaGFu
ZGxlcl9saXN0LmFwcGVuZCgiICAgICAgICAmSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiVz
XyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKyAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlc18l
cyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IiAl
IChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorCisgICAgICAgIG1ldGhvZF9pbl9j
b2RlID0gIiIKKyAgICAgICAgbWV0aG9kX291dF9jb2RlID0gIiIKKyAgICAgICAgYWdlbnRfY2Fs
bF9wYXJhbV9saXN0ID0gW10KKyAgICAgICAgcmVzcG9uc2VfY29va19saXN0ID0gW10KKyAgICAg
ICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiIKKyAgICAgICAganNfcGFyYW1ldGVyc190ZXh0
ID0gIiIKKyAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fY29tbWFuZDoKKyAgICAgICAg
ICAgIGpzb25fcGFyYW1zID0ganNvbl9jb21tYW5kWyJwYXJhbWV0ZXJzIl0KKyAgICAgICAgICAg
IG1ldGhvZF9pbl9jb2RlICs9IFRlbXBsYXRlcy5wYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUK
KyAgICAgICAgICAgIHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIgcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QiCisgICAgICAgICAgICBqc19wYXJhbV9saXN0ID0gW10KKworICAgICAgICAgICAgZm9yIGpz
b25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgorICAgICAgICAgICAgICAgIGpzb25fcGFyYW1f
bmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KKyAgICAgICAgICAgICAgICBwYXJhbV9yYXdf
dHlwZSA9IHJlc29sdmVQYXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQor
CisgICAgICAgICAgICAgICAgdmFyX3R5cGUgPSBwYXJhbV9yYXdfdHlwZS5nZXRDUGFyYW1UeXBl
KFBhcmFtVHlwZS5JTlBVVCwgTm9uZSkKKyAgICAgICAgICAgICAgICBnZXR0ZXJfbmFtZSA9IHBh
cmFtX3Jhd190eXBlLmdldEdldHRlck5hbWUoKQorCisgICAgICAgICAgICAgICAgaWYgIm9wdGlv
bmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl06Cisg
ICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVzIGluXyVzID0gZ2V0JXMo
cGFyYW1zQ29udGFpbmVyUHRyLCBcIiVzXCIsICYlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
c1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChqc29uX3BhcmFtX25hbWUs
IHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25f
cGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0g
PSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDogMCIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29u
X3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
Y29kZSA9ICgiICAgICVzIGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBcIiVzXCIs
IDAsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29u
X3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsIGluXyVzIiAlIGpz
b25fcGFyYW1fbmFtZQorCisgICAgICAgICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0gY29kZQor
ICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCisKKyAg
ICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlwZS5nZXRKc0JpbmRUeXBl
KCkKKyAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIlwiJXNcIjoge1wib3B0aW9uYWxc
IjogJXMsIFwidHlwZVwiOiBcIiVzXCJ9IiAlICgKKyAgICAgICAgICAgICAgICAgICAganNvbl9w
YXJhbV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAoInRydWUiIGlmICgib3B0aW9uYWwiIGlu
IGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXSkgZWxzZSAiZmFs
c2UiKSwKKyAgICAgICAgICAgICAgICAgICAganNfYmluZF90eXBlKQorCisgICAgICAgICAgICAg
ICAganNfcGFyYW1fbGlzdC5hcHBlbmQoanNfcGFyYW1fdGV4dCkKKworICAgICAgICAgICAganNf
cGFyYW1ldGVyc190ZXh0ID0gIiwgXCJwYXJhbXNcIjogeyIgKyBqb2luKGpzX3BhcmFtX2xpc3Qs
ICIsICIpICsgIn0iCisKKyAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gIiIKKyAgICAgICAg
aWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKKyAgICAgICAgICAgIG1ldGhvZF9vdXRfY29k
ZSArPSAiXG4iCisgICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJy
ZXR1cm5zIl06CisKKyAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1
cm5bIm5hbWUiXQorICAgICAgICAgICAgICAgIHJhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlw
ZShqc29uX3JldHVybiwgZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAgc2V0dGVyX3R5cGUg
PSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKyAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9
IHJhd190eXBlLmdldENJbml0aWFsaXplcigpCisgICAgICAgICAgICAgICAgdmFyX3R5cGUgPSBy
YXdfdHlwZS5nZXRDUGFyYW1UeXBlKFBhcmFtVHlwZS5PVVRQVVQsIE5vbmUpCisKKyAgICAgICAg
ICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAodmFyX3R5cGUuZ2V0X3Rl
eHQoKSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlhbGl6ZXIpCisgICAgICAgICAgICAgICAgcGFy
YW0gPSAiLCAmb3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKKyAgICAgICAgICAgICAgICBjb29r
ID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7XG4iICUgKHNldHRlcl90
eXBlLCBqc29uX3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQorICAgICAgICAgICAgICAg
IGlmIHZhcl90eXBlLmdldF90ZXh0KCkgPT0gImJvb2wiIGFuZCAib3B0aW9uYWwiIGluIGpzb25f
cmV0dXJuIGFuZCBqc29uX3JldHVyblsib3B0aW9uYWwiXToKKyAgICAgICAgICAgICAgICAgICAg
Y29vayA9ICgiICAgICAgICBpZiAob3V0XyVzKVxuICAgICIgJSBqc29uX3JldHVybl9uYW1lKSAr
IGNvb2sKKworICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSArPSBjb2RlCisgICAgICAg
ICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKyAgICAgICAgICAg
ICAgICByZXNwb25zZV9jb29rX2xpc3QuYXBwZW5kKGNvb2spCisgICAgICAgICAgICByZXNwb25z
ZV9jb29rX3RleHQgPSAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJv
ci5sZW5ndGgoKSkge1xuJXMgICAgfVxuIiAlIGpvaW4ocmVzcG9uc2VfY29va19saXN0LCAiIikK
KworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5h
cHBlbmQoVGVtcGxhdGVzLmJhY2tlbmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAg
ICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIG1ldGhvZE5hbWU9anNvbl9jb21tYW5kX25hbWUs
CisgICAgICAgICAgICBhZ2VudEZpZWxkPSJtXyIgKyBhZ2VudF9maWVsZF9uYW1lLAorICAgICAg
ICAgICAgbWV0aG9kSW5Db2RlPW1ldGhvZF9pbl9jb2RlLAorICAgICAgICAgICAgbWV0aG9kT3V0
Q29kZT1tZXRob2Rfb3V0X2NvZGUsCisgICAgICAgICAgICBhZ2VudENhbGxQYXJhbXM9am9pbihh
Z2VudF9jYWxsX3BhcmFtX2xpc3QsICIiKSwKKyAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0PXJlcXVlc3RfbWVzc2FnZV9wYXJhbSwKKyAgICAgICAgICAgIHJlc3BvbnNlQ29vaz1yZXNw
b25zZV9jb29rX3RleHQpKQorICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9k
ZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIFwiJXMuJXNcIiwiICUgKGRvbWFpbl9uYW1lLCBq
c29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlh
bGl6ZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgne1wibWV0
aG9kXCI6IFwiJXMuJXNcIiVzLCBcImlkXCI6IDB9Jyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29u
X2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0KSkKKworCitHZW5lcmF0b3IuZ28oKQor
CitiYWNrZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oIiwgInciKQorYmFja2VuZF9jcHBfZmlsZSA9IG9wZW4ob3V0
cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiLCAidyIp
CisKK2Zyb250ZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgIi9JbnNw
ZWN0b3JGcm9udGVuZC5oIiwgInciKQorZnJvbnRlbmRfY3BwX2ZpbGUgPSBvcGVuKG91dHB1dF9j
cHBfZGlybmFtZSArICIvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIiwgInciKQorCitiYWNrZW5kX2pz
X2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZFN0dWIu
anMiLCAidyIpCisKKworZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9o
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJh
dG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLCAiIiksCisgICAgICAgICBkb21haW5DbGFz
c0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLCAiIikpKQor
CitiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUoTm9u
ZSwKKyAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rv
cl9pbml0X2xpc3QsICJcbiIpLAorICAgIGNvbnN0cnVjdG9yUGFyYW1zPWpvaW4oR2VuZXJhdG9y
LmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCwgIiIpLAorICAgIGVudW1Db25zdGFudHM9
am9pbihHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LCAiXG4iKSwKKyAgICBtZXRob2RE
ZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlz
dCwgIlxuIiksCisgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9m
aWVsZF9saXN0LCAiXG4iKSwKKyAgICBmb3J3YXJkRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9y
LmJhY2tlbmRfZm9yd2FyZF9saXN0LCAiXG4iKSkpCisKK2Zyb250ZW5kX2NwcF9maWxlLndyaXRl
KFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZHM9am9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKworYmFja2VuZF9jcHBf
ZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAorICAgIG1l
dGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9k
ZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNr
ZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiksCisgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNr
ZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBtZXNzYWdlSGFuZGxl
cnM9am9pbihHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdCwgIlxuIikpKQorCitiYWNrZW5k
X2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAorICAg
IGRlbGVnYXRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QsICIi
KSwKKyAgICBldmVudEFyZ3M9am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0LCAi
IiksCisgICAgZG9tYWluRGlzcGF0Y2hlcnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19kb21h
aW5fZGlzcGF0Y2hlcl9saXN0LCAiIikpKQorCitiYWNrZW5kX2hfZmlsZS5jbG9zZSgpCitiYWNr
ZW5kX2NwcF9maWxlLmNsb3NlKCkKKworZnJvbnRlbmRfaF9maWxlLmNsb3NlKCkKK2Zyb250ZW5k
X2NwcF9maWxlLmNsb3NlKCkKKworYmFja2VuZF9qc19maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA5NmYxZjNmZjI2OWI2OTA2ZWM0NzVhYTI3
MWMxNmIxNzI2NmI4Zjg2Li5lMzk2ZTU2NDRmNDNiMGVjMDQ1ZmNiZTVmMDQ1OGNjNzQ2M2E3NWU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNDAsNyArMTQw
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZXNzaW9uIiwgInR5cGUiOiAi
Ym9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGluIGNhc2Ugb2Ygc2Vzc2lvbiBjb29raWUu
IiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiaGlkZGVuIjogdHJ1ZQot
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1h
bmRzIjogWwogICAgICAgICAgICAgewpAQCAtODQ2LDcgKzg0Niw3IEBACiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiaXNMb2NhbFN0b3JhZ2UiLCAidHlwZSI6ICJib29sZWFuIiwgImRl
c2NyaXB0aW9uIjogIlRydWUgZm9yIGxvY2FsIHN0b3JhZ2UuIiB9LAogICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImlkIiwgInR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkVu
dHJ5IGlkIGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4iIH0KICAgICAgICAgICAgICAgICBdCi0gICAg
ICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMi
OiBbCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Z2VuZXJhdGUtaW5zcGVjdG9yLWlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxOGRlZDYxMGIy
ODZiYTVlNjQ4MGNhOWFkYTNmZGFkZjkwNmZiYTdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItaWRsCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLSMhL3Vzci9iaW4v
ZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBk
aXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMg
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
IyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
IyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBz
eXMKLQotcHJvZ3JhbV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykKLWlmIGxlbihz
eXMuYXJndikgPCA0IG9yIHN5cy5hcmd2WzFdICE9ICItbyI6Ci0gICAgc3lzLnN0ZGVyci53cml0
ZSgiVXNhZ2U6ICVzIC1vIE9VVFBVVF9GSUxFIElOUFVUX0ZJTEVcbiIgJSBwcm9ncmFtX25hbWUp
Ci0gICAgZXhpdCgxKQotCi1vdXRwdXRfcGF0aCA9IHN5cy5hcmd2WzJdCi1pbnB1dF9wYXRoID0g
c3lzLmFyZ3ZbM10KLQotaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfcGF0aCwgInIiKQotanNvbl9z
dHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBs
YWNlKCI6IHRydWUiLCAiOiBUcnVlIikKLWpzb25fc3RyaW5nID0ganNvbl9zdHJpbmcucmVwbGFj
ZSgiOiBmYWxzZSIsICI6IGZhbHNlIikKLWpzb25fYXBpID0gZXZhbChqc29uX3N0cmluZylbImRv
bWFpbnMiXQotCi1vdXRwdXRfZmlsZSA9IG9wZW4ob3V0cHV0X3BhdGgsICJ3IikKLW91dHB1dF9m
aWxlLndyaXRlKCIiIi8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotIAotbW9kdWxlIGNvcmUgeyIiIikKLQotdHlwZV90cmFpdHMgPSB7Ci0gICAgInN0cmluZyI6
ICJTdHJpbmciLAotICAgICJpbnRlZ2VyIjogImludCIsCi0gICAgIm51bWJlciI6ICJkb3VibGUi
LAotICAgICJib29sZWFuIjogImJvb2xlYW4iLAotICAgICJhcnJheSI6ICJBcnJheSIsCi0gICAg
Im9iamVjdCI6ICJPYmplY3QiCi19Ci0KLXJlZl90eXBlcyA9IHt9Ci0KLW1hY3JvX3RyYWl0cyA9
IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFCQVNFIiwKLSAgICAiRE9NU3RvcmFnZSI6ICJE
T01fU1RPUkFHRSIsCi0gICAgIkRlYnVnZ2VyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAg
ICJET01EZWJ1Z2dlciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiUHJvZmlsZXIiOiAi
SkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIldvcmtlciI6ICJXT1JLRVJTIgotfQotCi1kZWYg
ZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgdHlwZV9pZCk6Ci0gICAgaWYgdHlw
ZV9pZC5maW5kKCIuIikgPT0gLTE6Ci0gICAgICAgcmV0dXJuICIlcy4lcyIgJSAoZG9tYWluX25h
bWUsIHR5cGVfaWQpCi0gICAgcmV0dXJuIHR5cGVfaWQKLSAgICAKLQotZGVmIHBhcmFtX3R5cGUo
ZG9tYWluX25hbWUsIHBhcmFtKToKLSAgICBpZiAidHlwZSIgaW4gcGFyYW06Ci0gICAgICAgIHJl
dHVybiB0eXBlX3RyYWl0c1twYXJhbVsidHlwZSJdXQotICAgIGlmICIkcmVmIiBpbiBwYXJhbToK
LSAgICAgICAgdHlwZV9pZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHBh
cmFtWyIkcmVmIl0pCi0gICAgICAgIGlmIHR5cGVfaWQgaW4gcmVmX3R5cGVzOgotICAgICAgICAg
ICAgcmVmX3R5cGUgPSByZWZfdHlwZXNbdHlwZV9pZF0KLSAgICAgICAgICAgIHJldHVybiB0eXBl
X3RyYWl0c1tyZWZfdHlwZVsidHlwZSJdXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJp
bnQoIlR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZCkKLSAgICAgICAgICAgIHJldHVybiAiISEg
VHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkCi0KLWZvciBkb21haW4gaW4ganNvbl9hcGk6Ci0g
ICAgZG9tYWluX25hbWUgPSBkb21haW5bImRvbWFpbiJdCi0gICAgaWYgInR5cGVzIiBpbiBkb21h
aW46Ci0gICAgICAgIGZvciB0eXBlIGluIGRvbWFpblsidHlwZXMiXToKLSAgICAgICAgICAgIHR5
cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlWyJpZCJdKQot
ICAgICAgICAgICAgcmVmX3R5cGVzW3R5cGVfaWRdID0gdHlwZTsKLQotZm9yIGRvbWFpbiBpbiBq
c29uX2FwaToKLSAgICBkb21haW5fbmFtZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiBkb21h
aW5fbmFtZSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNp
ZiBkZWZpbmVkKEVOQUJMRV8lcykgJiYgRU5BQkxFXyVzIiAlIChtYWNyb190cmFpdHNbZG9tYWlu
X25hbWVdLCBtYWNyb190cmFpdHNbZG9tYWluX25hbWVdKSkKLSAgICBvdXRwdXRfZmlsZS53cml0
ZSgiXG4gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1JTlNQRUNUT1JdICVzIHsiICUgZG9tYWlu
X25hbWUpCi0KLSAgICBpZiAiY29tbWFuZHMiIGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGNvbW1h
bmQgaW4gZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAgcGFyYW1zID0gW10KLSAgICAg
ICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4gY29tbWFuZCk6Ci0gICAgICAgICAgICAgICAgZm9y
IGluX3BhcmFtIGluIGNvbW1hbmRbInBhcmFtZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5hcHBlbmQoImluJXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1l
LCBpbl9wYXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgaWYgKCJyZXR1cm5z
IiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3Igb3V0X3BhcmFtIGluIGNvbW1hbmRb
InJldHVybnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gb3V0X3Bh
cmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgot
ICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIg
JSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIG91dF9wYXJhbSksIG91dF9wYXJh
bVsibmFtZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgdm9p
ZCAlcyglcyk7IiAlIChjb21tYW5kWyJuYW1lIl0sICIsICIuam9pbihwYXJhbXMpKSkKLQotICAg
IGlmICJldmVudHMiIGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpblsiZXZl
bnRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAgICAgICAgaWYgKCJwYXJhbWV0
ZXJzIiBpbiBldmVudCk6Ci0gICAgICAgICAgICAgICAgZm9yIGluX3BhcmFtIGluIGV2ZW50WyJw
YXJhbWV0ZXJzIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3Bh
cmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgot
ICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
YWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIg
JSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIGluX3BhcmFtKSwgaW5fcGFyYW1b
Im5hbWUiXSkpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgICAgIFtldmVu
dF0gdm9pZCAlcyglcyk7IiAlIChldmVudFsibmFtZSJdLCAiLCAiLmpvaW4ocGFyYW1zKSkpCi0K
LSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgfTsiKQotICAgIGlmIGRvbWFpblsiZG9tYWlu
Il0gaW4gbWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4jZW5kaWYg
Ly8gRU5BQkxFXyVzIiAlIG1hY3JvX3RyYWl0c1tkb21haW5bImRvbWFpbiJdXSkKLW91dHB1dF9m
aWxlLndyaXRlKCJcbn1cbiIpCi1vdXRwdXRfZmlsZS5jbG9zZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109871</attachid>
            <date>2011-10-05 15:13:26 -0700</date>
            <delta_ts>2011-10-06 12:05:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111006021323.patch</filename>
            <type>text/plain</type>
            <size>119682</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTU0MmY0
YWNkZWIxOGY1ODIzZGJhN2IzY2VhNmE2NGRiNWFlNjAzNy4uMWI5NjEyZTc3MDkxNjNmOGEzYjIz
YjQ4MTY4ZjEwN2ZjYzMzYjA4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTIsMTcgKzIy
MTIsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAorICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJHtERVJJVkVEX1NPVVJD
RVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZyb250ZW5kLmggJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmRTdHViLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCi0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElS
fS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KLSAgICBWRVJCQVRJTSkKLQotQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBV
VCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZyb250ZW5kLmgK
LSAgICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3Bl
Y3Rvci5pZGwKLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ2Vu
ZXJhdGUtYmluZGluZ3MucGwgJHtTQ1JJUFRTX0JJTkRJTkdTfSAke1dFQkNPUkVfRElSfS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSAke0RFUklWRURfU09VUkNFU19XRUJDT1JF
X0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9IC1JJHtX
RUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0cyAtSSR7V0VCQ09SRV9ESVJ9L2luc3BlY3RvciAk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZGVm
aW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH0iIC0tZ2VuZXJhdG9yIEluc3BlY3Rv
ciAke0lETF9JTkNMVURFU30gLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfSIgLS1wcmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSIgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwKKyAgICBERVBFTkRTICR7
V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisgICAgQ09N
TUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b24gIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgIiR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfSIKICAgICBWRVJCQVRJTSkKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
Y3BwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA1YmRmOWIyMzNjZTI5ZDYzZGY0YTI4YzcyMGVkZjliMDU4MTA5YjE4
Li5kMDYzNjcxNjUxMGYwZWZmYzc4Y2RkOTFjYjU2MWI4ODMzYzdhODk3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTEtMTAtMDQgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21h
aWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJh
Y2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAq
IFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnBtOiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b246CisgICAgICAgICogaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGw6IFJlbW92ZWQu
CisKIDIwMTEtMTAtMDQgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBCdWlsZCBmaXhlcyBmb3IgZXZlcnlvbmUuCkBAIC0xMDYyNCw2ICsxMDYzOSwyMCBA
QAogICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmNhblJlbWFpbkFsaXZl
T25SZW1vdmFsRnJvbVRyZWUpOgogICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
aDoKIAorMjAxMS0xMC0wMyAgUGV0ZXIgUnliaW4gIDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogcmVpbXBsZW1lbnQgcHJvdG9jb2wgYmFja2VuZC9mcm9u
dGVuZCBzb3VyY2UgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02OTI5NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS5n
eXAvV2ViQ29yZS5neXA6CisgICAgICAgICogaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG06CisgICAgICAgIChmaW5pc2gpOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4KKwogMjAxMS0wOS0xOSAgQWJoaXNoZWsgQXJ5YSAgPGlu
ZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElzc3VlcyB3aXRoIG1lcmdpbmcgcnVieSBi
YXNlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaSBiL1Nv
dXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQppbmRleCA2MzE5MzgyN2NjZDAyNmRjYmRl
N2UxM2MwYWMxYzc5MTBkNDdkNzlhLi5kNjY5ZDY1NjY3OTJjNTM0YTIwMTdhNWI3ODQwZmVmOTk5
NWE4NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKKysr
IGIvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCkBAIC02NzYsMjkgKzY3NiwxMyBA
QCBpbnNwZWN0b3JWYWxpZGF0ZS5kZXBlbmRzID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiBpbnNwZWN0b3JWYWxpZGF0ZS53a0FkZE91dHB1dFRv
U291cmNlcyA9IGZhbHNlCiBhZGRFeHRyYUNvbXBpbGVyKGluc3BlY3RvclZhbGlkYXRlKQogCi1p
bnNwZWN0b3JKU09OLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVj
dG9yLmlkbAoraW5zcGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19E
SVJ9L0luc3BlY3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAogaW5zcGVjdG9ySlNPTi5pbnB1dCA9IElOU1BF
Q1RPUl9KU09OCi1pbnNwZWN0b3JKU09OLndrU2NyaXB0ID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVy
YXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvckpTT04uY29tbWFuZHMgPSBweXRob24gJCRpbnNw
ZWN0b3JKU09OLndrU2NyaXB0IC1vICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVj
dG9yLmlkbCAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLWluc3BlY3RvckpTT04uZGVw
ZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCitpbnNwZWN0b3JK
U09OLndrU2NyaXB0ID0gJCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
K2luc3BlY3RvckpTT04uY29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0
ICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJ
UiAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUgoraW5zcGVjdG9ySlNPTi5kZXBlbmRzID0gJCRp
bnNwZWN0b3JKU09OLndrU2NyaXB0CiBpbnNwZWN0b3JKU09OLndrQWRkT3V0cHV0VG9Tb3VyY2Vz
ID0gZmFsc2UKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9ySlNPTikKLWluc3BlY3RvckpTT04u
dmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVUCi0KLWluc3BlY3RvcklETC5vdXRw
dXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3RvckZyb250ZW5kLmNwcCAk
JHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVUCi1pbnNwZWN0b3JJ
REwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBs
Ci1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QvYmluZGluZ3Mvc2NyaXB0cyAt
SSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1NjcmlwdCAtLWRlZmluZXMgXCIkJHtG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgLS1vdXRw
dXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFL
RV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNwZWN0b3JJREwuZGVwZW5kcyA9ICQk
UFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBcCi0gICAgICAgICAgICAgICQk
UFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtIFwKLSAgICAgICAgICAgICAg
JCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gXAotICAgICAgICAgICAgICAkJFBX
RC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCi0gICAgICAgICAgICAgICQkUFdE
L2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBcCi0gICAgICAgICAgICAgICQkUFdE
L2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwKLSAgICAgICAgICAgICAgJCRQV0Qv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklETC53a0V4dHJhU291cmNlcyA9ICQk
aW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JJREwpCiAKIGlu
c3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRlZC9JbnNwZWN0b3JCYWNrZW5kU3R1
Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0gSU5TUEVDVE9SX0JBQ0tFTkRfU1RV
Ql9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDA5ZDA3MDMwYThmZTAxMzMw
ZmJmZTc2NjlhYTllNzYyMjc3MmZhNTUuLmRjOGU0MGRkZGMxNjg2ZjkxZTFlMzYyMmI4MDE1OTBk
ZjI3MTI1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtODkzLDE1ICs4OTMs
MTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgKIEluc3BlY3RvclByb3RvY29s
VmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oICQo
V2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAKLUluc3BlY3Rvci5pZGwgOiBJbnNw
ZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotCXB5dGhvbiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vIEluc3BlY3Rvci5pZGwg
JChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQogYWxsIDogSW5zcGVjdG9yRnJv
bnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSAkKEdFTkVSQVRFX1NDUklQ
VFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCitJTlNQRUNUT1JfR0VORVJB
VE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQogCi1JbnNw
ZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NS
SVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJTlNQRUNUT1JfR0VORVJBVE9SX1ND
UklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklORVMpIExBTkdV
QUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAkPAorSW5zcGVjdG9yRnJvbnRl
bmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKQorCXB5
dGhvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykgSW5zcGVjdG9yLmpzb24gLiAuCiAK
IGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAz
ZTA4ZGEwYjJlM2I2NjA5MTFmNzk2MTFhZjA0NGFiMGMwNTExODdiLi4xZDdlYzQ1NjdmNDFhZWQ5
YWM5MmI2ZjkzMGQwMTIzZWJiZmNmNDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjkwLDEx
ICs2OTAsOCBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmNwcCBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmg6ICQoV2ViQ29yZQogRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC12ZXJzaW9uCiAJJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNwZWN0b3JQ
cm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgogCi1E
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgOiAkKFdlYkNvcmUpL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
aWRsCi0JJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1p
ZGwgLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24KLQotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yLmlk
bCAkKFNDUklQVFNfQklORElOR1MpICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucG0KLQkkKEFNX1ZfR0VOKSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMgLUkkKFdlYkNvcmUpL2luc3BlY3RvciAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMv
Z2VuZXJhdGUtYmluZGluZ3MucGwgJChJRExfUEFUSDolPS0taW5jbHVkZSAiJSIpIC0tb3V0cHV0
RGlyICIkKEdFTlNPVVJDRVNfV0VCQ09SRSkiIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVNDUklQ
VD0xICQoRkVBVFVSRV9ERUZJTkVTKSIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yICQ8CitEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDogJChXZWJDb3Jl
KS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQorCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uICQo
R0VOU09VUkNFU19XRUJDT1JFKSAkKEdFTlNPVVJDRVNfV0VCQ09SRSkKIERlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuaDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNw
ZWN0b3JGcm9udGVuZC5jcHAKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRl
bmQuY3BwOiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCiBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOiBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZTc4MjU3MzM2MjBhN2RmYjdjYWI2ZjcwZGJkZGFl
NWUyMDYyYmM3MS4uZjQyN2I0MzQwNTViYjgwNmMwZjU1MWVkNmEwYTk3ZDllNzQxZThmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTMzNSwxNyArMzM1LDI0IEBA
CiAgIH0sCiAgICd0YXJnZXRzJzogWwogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnZW5l
cmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicsCisgICAgICAndGFyZ2V0X25hbWUnOiAn
aW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAg
ICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29s
X3ZlcnNpb24nCisgICAgICBdLAogICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICB7Ci0gICAg
ICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uJywK
KyAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclBy
b3RvY29sU291cmNlcycsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9p
bnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAorICAgICAgICAg
ICAgJy4uL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKICAgICAgICAgICAg
ICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAg
J291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCcs
CisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisgICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewogICAg
ICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTMsMjggKzM2MCwyNyBA
QAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdweXRo
b24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtdmVyc2lvbicsCi0gICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRwdXRz
KScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHknLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbicsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0JywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3Jl
JywKICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ1ZhbGlkYXRlIGluc3BlY3Rv
ciBwcm90b2NvbCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGdlbmVyYXRlIHZlcnNp
b24gZmlsZScsCi0gICAgICAgIH0KKyAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIElu
c3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCisgICAgICAgIH0s
CiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9y
X2lkbCcsCisgICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29s
X3ZlcnNpb24nLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQot
ICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJv
dG9jb2xJREwnLAorICAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0
ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAg
ICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAg
ICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAg
ICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAg
ICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAg
ICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3Jf
aW5jbHVkZV9kaXJzJzogWwpAQCAtMzgyLDY1ICszODgsMTYgQEAKICAgICAgICAgICB9LAogICAg
ICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcu
Li9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAg
ICctbycsCiAgICAgICAgICAgICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5w
dXRzKScKICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5z
cGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAn
bWVzc2FnZSc6ICdWYWxpZGF0ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5IGFuZCBnZW5lcmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBd
CiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29s
X3NvdXJjZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzog
WwotICAgICAgICAnaW5zcGVjdG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3Jf
cHJvdG9jb2xfdmVyc2lvbicKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAg
ewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291
cmNlcycsCi0gICAgICAgICAgIyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFz
IGl0ZW0gbmFtZSBpbiB2Y3Byb2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8g
cHV0IEluc3BlY3Rvci5pZGwgdGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxl
cyBhcmUgbWFya2luZyBhcyBleGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdp
bnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5k
aW5ncy5wbCcsCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bScsCi0gICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAg
ICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAot
ICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHAnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5z
cGVjdG9yQmFja2VuZFN0dWIuanMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNw
cCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvckZyb250ZW5kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsK
LSAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwK
LSAgICAgICAgICB9LAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9u
JywKLSAgICAgICAgICAgICdzY3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywK
LSAgICAgICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAg
ICAgJy0tZGVmaW5lcycsICc8KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcs
Ci0gICAgICAgICAgICAnLS1nZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8
QChnZW5lcmF0b3JfaW5jbHVkZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNz
YWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0
b3IuaWRsJywKLSAgICAgICAgfSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJn
ZXRfbmFtZSc6ICdpbmplY3RlZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUn
LAogICAgICAgJ2FjdGlvbnMnOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MmUyMTgzYzFmMjljNDY3OTU4OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBA
Ci0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ci1wYWNrYWdlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBD
bGFzczo6U3RydWN0OwotdXNlIEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5
cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Fw
cGxpY2F0aW9uQ2FjaGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JDU1NBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQ29uc29sZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiUGFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFn
ZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVi
dWdnZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fZGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURl
YnVnZ2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAi
ZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJEYXRhYmFzZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiRE9NIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIg
PT4gIm1fZG9tQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0g
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kb21TdG9yYWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0g
PSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vz
c29yIiA9PiAibV9maWxlU3lzdGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0
b3IifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVy
IiA9PiAiSW5zcGVjdG9yQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNw
ZWN0b3JBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9y
d2FyZCIgPT4gIkluc3BlY3RvclJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JSZXNvdXJjZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3Vy
Y2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndh
cmQiID0+ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVy
QWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JS
dW50aW1lQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQi
LAotfTsKLSR0eXBlVHJhbnNmb3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yVGltZWxpbmVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVs
aW5lQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JXb3JrZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50
LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5
cGVUcmFuc2Zvcm17IkZyb250ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JG
cm9udGVuZCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0
eXBlVHJhbnNmb3JteyJQYXNzUmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3
dGYvUGFzc1JlZlB0ci5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewot
ICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAi
cGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIg
PT4gIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmpl
Y3QiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBl
IiA9PiAiT2JqZWN0IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5z
Zm9ybXsiQXJyYXkifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAg
ImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndh
cmQiID0+ICJJbnNwZWN0b3JBcnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVl
cy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVj
dCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVs
bCgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAi
SlNUeXBlIiA9PiAiIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBh
cmFtIiA9PiAiY29uc3QgU3RyaW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3Qg
U3RyaW5nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAg
ICAidmFyaWFibGUiID0+ICJTdHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAg
ICJkZWZhdWx0VmFsdWUiID0+ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRm
b3JtU3RyaW5nLmgiLAotICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAi
SlNPTlR5cGUiID0+ICJTdHJpbmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5
cGVUcmFuc2Zvcm17ImxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0
aW9uYWxfcGFyYW0iID0+ICJjb25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVl
QWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVs
dFZhbHVlIiA9PiAiMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIi
LAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAg
ICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxf
dmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRl
ZmF1bHRWYWx1ZSIgPT4gIjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9
PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1i
ZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0i
ID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNp
Z25lZCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwK
LSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9
PiAiMHUiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAi
SlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5
cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVk
IGludCIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25z
dCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUi
ID0+ICJ1bnNpZ25lZCBpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZv
cndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51
bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91
YmxlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCBkb3VibGUqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIg
PT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIg
PT4gIjAuMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAg
ICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiYm9vbGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAg
ICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxf
dmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRl
ZmF1bHRWYWx1ZSIgPT4gImZhbHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRl
ciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4g
ImJvb2xlYW4iCi19OwotJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIg
PT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0g
PSB7Ci0gICAgImhlYWRlciIgPT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNl
bnNlIFRlbXBsYXRlcwotCi1teSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5
cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0K
LW15ICRjb2RlR2VuZXJhdG9yOwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGly
OwotbXkgJHdyaXRlRGVwZW5kZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7
Ci0KLW15ICRiYWNrZW5kQ2xhc3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwot
bXkgJGJhY2tlbmRKU1N0dWJOYW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0
aG9kczsKLW15IEBiYWNrZW5kTWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVy
ZXM7Ci1teSAkYmFja2VuZENvbnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0
aW9uczsKLW15IEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVy
OwotbXkgQGJhY2tlbmRKU1N0dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5k
RG9tYWluczsKLQotbXkgJGZyb250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1t
eSBAZnJvbnRlbmRNZXRob2RzOwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRl
bmRNZXRob2RzSW1wbDsKLW15ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRl
bmRDb25zdHJ1Y3RvcjsKLW15IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZy
b250ZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9u
dGVuZERvbWFpbnM7Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15
ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVH
ZW5lcmF0b3IgPSBzaGlmdDsKLSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhl
YWRlcnNEaXIgPSBzaGlmdDsKLSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0
OyAjICRwcmVwcm9jZXNzb3IKLSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAk
dmVyYm9zZSA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAg
cmV0dXJuICRyZWZlcmVuY2U7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAot
c3ViIEdlbmVyYXRlTW9kdWxlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRk
YXRhTm9kZSA9IHNoaWZ0OwotCi0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwot
ICAgICRuYW1lc3BhY2UgPX4gcy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NO
YW1lID0gIkluc3BlY3RvckZyb250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIg
ICAgJHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAg
ICBwdXNoKEBmcm9udGVuZEZvb3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRG
b290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsiKTsKLSAgICAkZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9u
dGVuZFR5cGVzeyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5k
VHlwZXN7IlBhc3NSZWZQdHIifSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0g
Ikluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4iOwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JC
YWNrZW5kU3R1YiI7Ci0gICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRi
YWNrZW5kVHlwZXN7Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2Vu
ZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQi
fSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczog
J2lkbERvY3VtZW50JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmlu
ZXMgPSBzaGlmdDsKLQotICAgIG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRp
b25zID0+IFtdLAotICAgICAgICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBn
ZW5lcmF0ZUZ1bmN0aW9ucygkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7
bWV0aG9kRGVjbGFyYXRpb25zfX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAk
aW50ZXJmYWNlLT5uYW1lKTsKLSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRl
cmZhY2UsIFwlYWdlbnQpOwotICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlv
bgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsK
LSAgICBteSAkYWdlbnROYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVu
ZE1ldGhvZHMsICIgICAgY2xhc3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVu
ZE1ldGhvZHMsICIgICAgcHVibGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAg
ICAgICAgJHthZ2VudE5hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+
e21ldGhvZERlY2xhcmF0aW9uc319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAg
ICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRN
ZXRob2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChA
ZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAg
ICB9OyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRl
ck5hbWUgPSBsYygkYWdlbnROYW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAg
JHthZ2VudE5hbWV9KiAke2dldHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsg
fSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRl
bmRGb290ZXIsICIgICAgJHthZ2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1
c2goQGZyb250ZW5kQWdlbnRGaWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdl
bmVyYXRlRnJvbnRlbmRDb25zdHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1
Y3RvckltcGw7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5k
Q2xhc3NOYW1lfTo6JHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1
Y3RvckltcGwsICIgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIik7Ci0gICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdl
bnRGaWVsZHMpIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAg
LCAke2FnZW50RmllbGR9KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAg
cHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRD
b25zdHJ1Y3RvckltcGwsICJ9Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1w
bDsKLX0KLQotc3ViIGdlbmVyYXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNo
aWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24g
KEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5l
cmF0ZUZyb250ZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVy
ZmFjZSwgJGZ1bmN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5k
SlNTdHViRnVuY3Rpb25zKCRpbnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZl
bnRzKCRpbnRlcmZhY2UpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0g
ICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAg
IG15ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5uYW1lOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0g
ICAgbXkgQGFyZ3NGaWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3Ig
ZnJvbnRlbmQgaW50ZXJmYWNlLgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAx
LCBAYXJnc0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJn
dW1lbnRzID0gam9pbigiLCAiLCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIg
IiAuICRfLT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1
bmN0aW9uIHNpZ25hdHVyZS4KLQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7
ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25h
dHVyZXN9LT57JHNpZ25hdHVyZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24g
d2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57
bWV0aG9kU2lnbmF0dXJlc30tPnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+
e21ldGhvZERlY2xhcmF0aW9uc319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsK
LSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlu
fTo6JHtmdW5jdGlvbk5hbWV9KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
InsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAk
e2Z1bmN0aW9uTmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmco
XCJtZXRob2RcIiwgXCIkZG9tYWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxh
cihAYXJnc0ZpbHRlcmVkKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OyIpOwotCi0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewot
ICAgICAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Im9wdGlvbmFsIn0gPyAiaWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAg
IiA6ICIiOwotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAu
ICJwYXJhbXNPYmplY3QtPnNldCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05U
eXBlIikgLiAiKFwiIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFp
dHMoJHBhcmFtZXRlciwgInZhbHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsi
KTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFt
ZX1NZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19
Ci0KLXN1YiBjYW1lbENhc2UKLXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUg
PX4gcy9cYihcdykvXFUkMS9nOyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFt
ZQotICAgICR2YWx1ZSA9fiBzLyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAg
IG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlv
bi0+c2lnbmF0dXJlLT5uYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0g
JGludGVyZmFjZS0+bmFtZSAuICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFs
aWZpZWRGdW5jdGlvbk5hbWVEb3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9u
TmFtZTsKLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAg
ayR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENv
bnN0YW50RGVmaW5pdGlvbnMsICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9
XCIsIik7Ci0KLSAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc30pOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJn
cyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwotICAgIG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5j
dGlvbi0+cGFyYW1ldGVyc30pOwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQg
JHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVz
eyR7c2lnbmF0dXJlfX0gfHwgZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZv
ciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVz
eyR7c2lnbmF0dXJlfX0gPSAiJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2go
QGJhY2tlbmRNZXRob2RzLCAke3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAg
IG15ICRyZXF1ZXN0TWVzc2FnZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1l
c3NhZ2VPYmplY3QiIDogIiI7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENs
YXNzTmFtZX06OiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24s
ICJ7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiIpOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAg
bXkgJGRvbWFpbkFjY2Vzc29yID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3Ii
KTsKLSAgICAkYmFja2VuZFR5cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7
JGRvbWFpbn0gPSAxOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vz
c29yKSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhcIiRkb21haW4gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgIiIpOwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Ig
b3V0IGFyZ3VtZW50cy4KLSAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgbWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIp
IC4gIiBvdXRfIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVm
YXVsdFZhbHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAi
Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIp
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAg
aWYgKHNjYWxhcihAaW5BcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVj
dC0+Z2V0T2JqZWN0KFwicGFyYW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5n
ZXQoKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9y
ZWFjaCBteSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRw
YXJhbWV0ZXItPm5hbWU7Ci0gICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7
Ci0gICAgICAgICAgICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBl
KTsKLSAgICAgICAgICAgIG15ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAg
ICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewot
ICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZv
dW5kID0gZmFsc2U7Iik7Ci0gICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0g
IiYke25hbWV9X3ZhbHVlRm91bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8k
bmFtZSA9IGdldCR0eXBlU3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0
aW9uYWxGbGFnQXJndW1lbnQsIHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAg
IH0KLQotICAgIG15ICRhcmdzID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZl
cnJvciIsCi0gICAgICAgICAgICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMt
Pnsib3B0aW9uYWwifSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92
YWx1ZUZvdW5kID8gJmluXyIgLiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbl8iIC4gJF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAg
ICAgIG1hcCgiJm91dF8iIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVu
Y3Rpb24sICRpbmRlbnQgLiAiaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9u
TmFtZSgkYXJncyk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOyIpOwotICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJv
ci5sZW5ndGgoKSkgeyIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdz
KSB7Ci0gICAgICAgICAgICBteSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMg
RG9uJ3QgYWRkIG9wdGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNz
IGl0IGlzICJ0cnVlIgotICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJvcHRpb25hbCJ9ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0g
ICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBh
cmFtZXRlci0+bmFtZSAuICIpIik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJy
ZXN1bHQtPnNldCIgLiB0eXBlVHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4g
IihcIiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUg
LiAiKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0g
ICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dCwgU3RyaW5nOjpmb3JtYXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWRcIiwgXCIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9j
b2xFcnJvcnMsIGVycm9yKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9u
KTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5k
UmVzcG9uc2UgPSA8PCAiRU9GIjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVz
cG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRp
b25FcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAg
ICAKLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3Vi
IGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJv
dG9jb2xFcnJvciA9IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9y
dFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUg
Y29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBj
YWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1v
bkVycm9ycy5zaXplKCkpIHsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJy
b3IsIC0zMjcwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVz
dCwgLTMyNjAwKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5k
LCAtMzI2MDEpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywg
LTMyNjAyKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0z
MjYwMyk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAw
KTsKLSAgICB9Ci0gICAgQVNTRVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNv
ZGUgPCBzX2NvbW1vbkVycm9ycy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tj
b2RlXSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9y
c1tjb2RlXSk7Ci0gICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7
Ci0gICAgQVNTRVJUKGVycm9yKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFy
cmF5KCJkYXRhIiwgZGF0YSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJv
ciIsIGVycm9yKTsKLSAgICBpZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIo
ImlkIiwgKmNhbGxJZCk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQi
LCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNw
bGl0KCJcbiIsICRyZXBvcnRQcm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1l
bnRHZXR0ZXJzCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVU
cmFpdHMoJHR5cGUsICJKU09OVHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMo
JHR5cGUsICJ2YXJpYWJsZSIpOwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0
eXBlLCAiZGVmYXVsdFZhbHVlIik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBl
LCAicmV0dXJuIikgPyB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0
eXBlLCAicGFyYW0iKTsKLQotICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsK
LSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1
cm4gZ2V0JHR5cGVTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsi
KTsKLSAgICBteSAkZ2V0dGVyQm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpCi17Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2
YWx1ZUZvdW5kKQotICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxl
IHZhbHVlID0gJGRlZmF1bHRWYWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlm
ICghdmFsdWVGb3VuZCkgewotICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1p
c3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVp
cmVkIHBhcmFtZXRlciAnXCVzJyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+Zmlu
ZChuYW1lKTsKLQotICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAo
IXZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91
bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9
Ci0KLSAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVy
ICdcJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAg
ICp2YWx1ZUZvdW5kID0gdHJ1ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJl
dHVybiBzcGxpdCgiXG4iLCAkZ2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRE
aXNwYXRjaGVyCi17Ci0gICAgbXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAg
ICAgICAgJiR7YmFja2VuZENsYXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWdu
YXR1cmVzeyRffSwgQGJhY2tlbmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2lu
KCJcbiIsIEBtYXBFbnRyaWVzKTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8
PCAiRU9GIjsKLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQotewotICAgIFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0g
dGhpczsKLSAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxl
cikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2Fs
bElkID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3Rh
dGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9Owot
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29t
bWFuZE5hbWVzWzBdKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsr
aSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJz
W2ldKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2Ug
PSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVz
c2FnZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNz
YWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdl
LT5hc09iamVjdCgpOwotICAgIGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlm
aWVkIG9iamVjdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBp
ZiAoIWNhbGxJZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxp
ZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBv
ZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVj
dC0+Z2V0KCJtZXRob2QiKTsKLSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0
eSB3YXNuJ3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBt
ZXRob2Q7Ci0gICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAg
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBl
IG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9
IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5k
KCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3Vu
ZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0Lmdl
dCgpKTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJC
b2R5KTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAk
bWVzc2FnZVBhcnNlckJvZHkgPSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNl
SlNPTihtZXNzYWdlKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsK
LSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmpl
Y3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3Nh
Z2VQYXJzZXJCb2R5KTsKLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17
Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEk
Xy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNl
LT5mdW5jdGlvbnN9KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAg
IGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0g
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRf
LT5kaXJlY3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAg
bXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAg
bWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlv
bmFsXCI6ICIgLiAoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUg
IiA6ICJmYWxzZSIpIC4gIiwgIgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0
eXBlVHJhaXRzKCRfLT50eXBlLCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAi
fSIsCi0gICAgICAgICAgICAgICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpT
U3R1YnMsICIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwi
bWV0aG9kXCI6IFwiJGRvbWFpbi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGlu
QXJncykgPyAiXCJwYXJhbXNcIjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAg
ICAgICAiXCJpZFwiOiAwIiAuCi0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29s
bGVjdEJhY2tlbmRKU1N0dWJFdmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0g
ICAgbXkgQGZ1bmN0aW9ucyA9IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57ImV2ZW50In0sIEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9
ICRpbnRlcmZhY2UtPm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9u
cykgewotICAgICAgICBteSAkbmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25h
dHVyZS0+bmFtZTsKLSAgICAgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEg
Im91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5h
bWVzID0gam9pbigiLCIsIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsK
LSAgICAgICAgcHVzaChAYmFja2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIg
LiAkbmFtZSAuICJcIl0gPSBbIiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0K
LXN1YiBnZW5lcmF0ZUJhY2tlbmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRp
c3BhdGNoZXJzID0gam9pbigiXG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRp
c3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIg
LiAkXyAuIlwiKTsiLCBAZnJvbnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2lu
KCJcbiIsIEBiYWNrZW5kSlNTdHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBA
YmFja2VuZEpTRXZlbnRzKTsKLSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJF
T0YiOwotJGxpY2Vuc2VUZW1wbGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9u
KCkKLXsKLSAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50ID0gMDsKLSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9k
b21haW5EaXNwYXRjaGVycyA9IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1
YnMKLSRKU0V2ZW50cwotJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0
b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czog
MCwKLSAgICBkdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBm
dW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5f
bGFzdENhbGxiYWNrSWQrKzsKLSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0g
Y2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0g
ICAgfSwKLQotICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQot
ICAgIHsKLSAgICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0
U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFp
bkFuZEZ1bmN0aW9uWzBdICsgIkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1l
XSkKLSAgICAgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1th
Z2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNr
ZW5kLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVd
W2RvbWFpbkFuZEZ1bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlz
LCByZXF1ZXN0U3RyaW5nKQotICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0
U3RyaW5nLCBhcmdzLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNP
Ti5wYXJzZShyZXF1ZXN0U3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwot
ICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBj
YWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24o
KQotICAgIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh
cmd1bWVudHMpOwotICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgp
KTsKLSAgICAgICAgdmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2Fy
Z3MubGVuZ3RoIC0gMV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAg
IHZhciBkb21haW5BbmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAg
ICB2YXIgYWdlbnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFp
bkFuZE1ldGhvZFsxXTsKLQotICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAg
IGlmIChyZXF1ZXN0LnBhcmFtcykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVl
c3QucGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJh
bXNba2V5XS50eXBlOwotICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0
LnBhcmFtc1trZXldLm9wdGlvbmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3Ro
ID09PSAwICYmICFvcHRpb25hbEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5l
cnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0
aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJn
dW1lbnRzICciICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB2YXIgdmFsdWUgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlv
bmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9m
IHZhbHVlICE9PSB0eXBlTmFtZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJQcm90b2NvbCBFcnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicg
Zm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5
cGVOYW1lICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXF1ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1z
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAg
ICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0
eXBlb2YgYXJnc1swXSAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJQcm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1l
dGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0
cyB0eXBlIGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2Fs
bGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQot
ICAgIF93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9i
amVjdCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5f
d3JhcChjYWxsYmFjayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0
cykgewotICAgICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1tt
ZXNzYWdlT2JqZWN0LmlkXTsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1l
ID0gbWVzc2FnZU9iamVjdC5tZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2Vu
ZFJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlz
LmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2co
ImZyb250ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAg
ICsrdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdl
T2JqZWN0VG9CYWNrZW5kKG1lc3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2Fn
ZU9iamVjdFRvQmFja2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAg
IGNvbnNvbGUudGltZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1l
c3NhZ2UgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAg
ICBfcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIp
Ci0gICAgewotICAgICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0
Y2hlcjsKLSAgICB9LAotCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewot
ICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAg
ICAgIGNvbnNvbGUubG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmlu
ZyIpID8gbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFy
IG1lc3NhZ2VPYmplY3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFy
c2UobWVzc2FnZSkgOiBtZXNzYWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmpl
Y3QpIHsgLy8ganVzdCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlm
IChtZXNzYWdlT2JqZWN0LmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5l
cnJvci5fX3Byb3RvX18gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBm
dW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCh0aGlzLmNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0z
MjcwMDogcmV0dXJuICJQYXJzZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSAtMzI2MDA6IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFt
cyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50
ZXJuYWwgZXJyb3IiOzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDog
cmV0dXJuICJTZXJ2ZXIgZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlv
bigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBk
ZXNjcmlwdGlvbiA9IlVua25vd24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIg
KyB0aGlzLm1lc3NhZ2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4o
IiAiKSA6ICIiKTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAg
ICBnZXRNZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVj
dC5lcnJvci5jb2RlICE9PSAtMzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0
UHJvdG9jb2xFcnJvcihtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgdmFyIGFyZ3VtZW50cyA9IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVz
dWx0KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVz
dWx0KQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJl
c3VsdFtrZXldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0g
dGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRo
b2ROYW1lKQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5u
b3coKTsKLQotICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3Qu
ZXJyb3IpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7
Ci0gICAgICAgICAgICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAg
ICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2su
bWV0aG9kTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6
ICIgKyBjYWxsYmFjay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAt
IGNhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vz
c2luZ1N0YXJ0VGltZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5f
c2NyaXB0cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAg
IHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVj
dC5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9k
WzBdOwotICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAg
ICAgIGlmICghKGRvbWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlz
IGZvciBub24tZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNo
ZXIgPSB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlm
ICghKGZ1bmN0aW9uTmFtZSBpbiBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBs
ZW1lbnRlZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMu
X2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3Bl
Y2lmaWVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMg
PSBbXTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAg
ICAgICAgIHZhciBwYXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0
aG9kXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3Qu
cGFyYW1zW3BhcmFtTmFtZXNbaV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFy
IHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9y
VGltZVN0YXRzKQotICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5v
dygpOwotCi0gICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0
Y2hlciwgcGFyYW1zKTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVT
dGF0cykKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3Nh
Z2VPYmplY3QubWV0aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRp
bWUpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5j
dGlvbihtZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVz
dCB3aXRoIGlkID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VP
YmplY3QuZXJyb3IpOwotICAgIH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBm
dW5jdGlvbihzY3JpcHQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAg
ICAgICAgICB0aGlzLl9zY3JpcHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAg
ICAgICAgIHRoaXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMu
X3NjcmlwdHM7Ci0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZv
ciAodmFyIGlkID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAg
ICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVj
dG9yQmFja2VuZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1
cm4gc3BsaXQoIlxuIiwgJGluc3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJh
dGVIZWFkZXIKLXsKLSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVj
bGFyYXRpb24gPSBzaGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3Ry
dWN0b3IgPSBzaGlmdDsKLSAgICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhv
ZHMgPSBzaGlmdDsKLSAgICBteSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhl
YWRlcnMgPSBqb2luKCJcbiIsIHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8s
ICJmb3J3YXJkSGVhZGVyIikgLiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFk
ZXIiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0g
am9pbigiXG4iLCBzb3J0KG1hcCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikg
LiAiOyIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkp
OwotICAgIG15ICRjb25zdGFudERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRz
fSk7Ci0gICAgbXkgJG1ldGhvZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9
KTsKLQotICAgIG15ICRoZWFkZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFt
ZX1faAotI2RlZmluZSAke2NsYXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1l
c3BhY2UgJG5hbWVzcGFjZSB7Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0k
Y29uc3RydWN0b3IKLQotJGNvbnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9u
cwotCi0kZm9vdGVyCi19OwotCi19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8g
IWRlZmluZWQoJHtjbGFzc05hbWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsK
LX0KLQotc3ViIGdlbmVyYXRlU291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0Owot
ICAgIG15ICR0eXBlcyA9IHNoaWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBt
eSAkbWV0aG9kcyA9IHNoaWZ0OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIi
LCAkbGljZW5zZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVk
ZSBcImNvbmZpZy5oXCIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIk
Y2xhc3NOYW1lLmhcIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNo
IG15ICR0eXBlIChrZXlzICV7JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUg
XCIiIC4gdHlwZVRyYWl0cygkdHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJh
aXRzKCR0eXBlLCAiaGVhZGVyIikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250
ZW50LCBzb3J0IGtleXMgJWhlYWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAg
IHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2lu
KCJcbiIsIEB7JGNvbnN0YW50c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0g
ICAgcHVzaChAc291cmNlQ29udGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNv
bnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5h
bWVzcGFjZSIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3Vy
Y2VDb250ZW50LCAiI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIiIpOwotICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5
cGVUcmFpdHMKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0
OwotICAgIHJldHVybiAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIg
cGFyYW1UeXBlVHJhaXRzCi17Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAg
ICBteSAkdHJhaXQgPSBzaGlmdDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9
IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0
KTsKLSAgICAgICAgcmV0dXJuICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJl
c3VsdDsKLSAgICB9Ci0gICAgbXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRp
b24tPnR5cGUsICR0cmFpdCk7Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQg
OiAiIjsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IK
LXsKLSAgICBteSBAYXJndW1lbnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAg
IHB1c2goQGFyZ3VtZW50cywgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsIik7Ci0gICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwot
ICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAo
c29ydCBrZXlzICViYWNrZW5kRG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBk
ZWNsYXJhdGlvbiB0byB0aGUgZm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0
eXBlVHJhaXRzKCRkb21haW4sICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVU
cmFpdHMoJGRvbWFpbiwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRG
b290ZXIsICIgICAgJHthZ2VudENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMg
QWRkIGFnZW50IHBhcmFtZXRlciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBz
dWJzdHIoJGZpZWxkLCAyKTsKLSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAg
ICAgICwgJHtmaWVsZH0oJHthcmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2Fn
ZW50Q2xhc3NOYW1lfSogJHthcmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5n
ID0gam9pbigiLCAiLCBAYXJndW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJp
bmd9KSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAi
Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2Rl
IHsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7
Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNo
KEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kSGVhZCwgIiAgICAgICAgSW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICAgICAgU2VydmVyRXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAg
ICAgIExhc3RFbnRyeSwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9p
ZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChA
YmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwot
ICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1l
cyB7Iik7Ci0gICAgJGJhY2tlbmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFk
KTsKLX0KLQotc3ViIGZpbmlzaAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1
c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAg
ICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgp
KTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFBy
b3RvY29sRXJyb3IoKSk7Ci0gICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJh
dGVGcm9udGVuZENvbnN0cnVjdG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0Us
ICI+JG91dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBv
cGVuIGZpbGUgJG91dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAk
U09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZy
b250ZW5kVHlwZXMsIFxAZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0
aG9kc0ltcGwpKTsKLSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQot
ICAgIG9wZW4obXkgJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05h
bWUuaCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9u
dGVuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9u
dGVuZENsYXNzTmFtZSwgJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9u
dGVuZENvbnN0cnVjdG9yLCBcQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRl
bmRNZXRob2RzLCBqb2luKCJcbiIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFE
RVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50
RGVmaW5pdGlvbnMsICJjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29t
bWFuZE5hbWVzW10gPSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMs
ICJ9OyIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAg
ICAjIE1ha2UgZGlzcGF0Y2hlciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAg
cHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICIgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAg
ICAKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNo
KEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFj
aCBteSAkdHlwZSAoa2V5cyAlYmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRz
KCR0eXBlLCAiSlNPTlR5cGUiKSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJ
bXBsLCBnZW5lcmF0ZUFyZ3VtZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJl
c3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5l
cmF0ZUJhY2tlbmRBZ2VudEZpZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVz
aChAYmFja2VuZE1ldGhvZHNJbXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICIiKTsKLQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNr
ZW5kQ2xhc3NOYW1lLmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIv
JGJhY2tlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2Vu
ZXJhdGVTb3VyY2UoJGJhY2tlbmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRD
b25zdGFudERlZmluaXRpb25zLCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRT
T1VSQ0UpOwotICAgIHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRw
dXRIZWFkZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4g
ZmlsZSAkb3V0cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAk
SEVBREVSIGpvaW4oIlxuIiwgZ2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNr
ZW5kQ2xhc3NEZWNsYXJhdGlvbiwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3Is
IFxAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJc
biIsIEBiYWNrZW5kRm9vdGVyKSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRI
RUFERVIpOwotCi0gICAgb3BlbihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNT
dHViTmFtZS5qcyIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tl
bmRKU1N0dWJOYW1lLmpzIjsKLSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRl
QmFja2VuZFN0dWJKUygpKTsKLSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NU
VUIpOwotfQotCi0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42M2FmYTI3OTEwMmYzNjljMDQwNTQyY2Q3MDNh
OWE1YTNlZjA3YmU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTAsMCArMSwxMzYxIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5
cworaW1wb3J0IHN0cmluZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJp
bmcgaW1wb3J0IGpvaW4KKworY21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIo
KQorYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9hcmdzKCkK
KwordHJ5OgorICAgIGlucHV0X2pzb25fZmlsZW5hbWUsIG91dHB1dF9oZWFkZXJfZGlybmFtZSwg
b3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX3ZhbHVlcworZXhjZXB0IFZhbHVlRXJyb3IsIGU6Cisg
ICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVu
dHM6ICVzXG5cbiIgJSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJ
bnNwZWN0b3IuanNvbiA8b3V0cHV0X2hlYWRlcl9kaXI+IDxvdXRwdXRfY3BwX2Rpcj5cbiIpCisg
ICAgZXhpdCgxKQorCisKK2NsYXNzIERvbWFpbk5hbWVGaXhlczoKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgZ2V0X2ZpeGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6CisgICAgICAgIGlmIGRv
bWFpbl9uYW1lIGluIGNscy5hZ2VudF90eXBlX21hcDoKKyAgICAgICAgICAgIGFnZW50X25hbWVf
cmVzID0gY2xzLmFnZW50X3R5cGVfbWFwW2RvbWFpbl9uYW1lXQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgYWdlbnRfbmFtZV9yZXMgPSAiSW5zcGVjdG9yJXNBZ2VudCIgJSBkb21haW5fbmFt
ZQorCisgICAgICAgIGlmIGRvbWFpbl9uYW1lIGluIGNscy5hZ2VudF9maWVsZF9uYW1lX21hcDoK
KyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gY2xzLmFnZW50X2ZpZWxkX25hbWVfbWFwW2Rv
bWFpbl9uYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRfbmFtZV9yZXMgPSBk
b21haW5fbmFtZS5sb3dlcigpICsgIkFnZW50IgorCisgICAgICAgIGNsYXNzIFJlcyhvYmplY3Qp
OgorICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gYWdlbnRfbmFtZV9yZXMKKyAgICAgICAg
ICAgIGhpZGRlbiA9IGRvbWFpbl9uYW1lIGluIGNscy5oaWRkZW5fZG9tYWlucworICAgICAgICAg
ICAgc2tpcF9qc19iaW5kID0gZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5z
CisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZmllbGRfbmFtZV9yZXMKKyAgICAgICAg
cmV0dXJuIFJlcworCisgICAgc2tpcF9qc19iaW5kX2RvbWFpbnMgPSBzZXQoWyJSdW50aW1lIiwg
IkNTUyIsICJET01EZWJ1Z2dlciJdKQorICAgIGhpZGRlbl9kb21haW5zID0gc2V0KFsiSW5zcGVj
dG9yIl0pCisgICAgYWdlbnRfdHlwZV9tYXAgPSB7Ik5ldHdvcmsiOiAiSW5zcGVjdG9yUmVzb3Vy
Y2VBZ2VudCJ9CisKKyAgICAjIFRPRE86IGdldCByaWQgb2YgdGhpcywgZ2VuZXJhdGUgbmFtZXMg
aW5zdGVhZC4KKyAgICBhZ2VudF9maWVsZF9uYW1lX21hcCA9IHsKKyAgICAgICAgIlBhZ2UiOiAi
cGFnZUFnZW50IiwKKyAgICAgICAgIlJ1bnRpbWUiOiAicnVudGltZUFnZW50IiwKKyAgICAgICAg
IkNvbnNvbGUiOiAiY29uc29sZUFnZW50IiwKKyAgICAgICAgIk5ldHdvcmsiOiAgInJlc291cmNl
QWdlbnQiLAorICAgICAgICAiRGF0YWJhc2UiOiAgImRhdGFiYXNlQWdlbnQiLAorICAgICAgICAi
RE9NU3RvcmFnZSI6ICAiZG9tU3RvcmFnZUFnZW50IiwKKyAgICAgICAgIkFwcGxpY2F0aW9uQ2Fj
aGUiOiAgImFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCisgICAgICAgICJET00iOiAgImRvbUFnZW50
IiwKKyAgICAgICAgIkNTUyI6ICAiY3NzQWdlbnQiLAorICAgICAgICAiRGVidWdnZXIiOiAiZGVi
dWdnZXJBZ2VudCIsCisgICAgICAgICJET01EZWJ1Z2dlciI6ICJkb21EZWJ1Z2dlckFnZW50IiwK
KyAgICAgICAgIlByb2ZpbGVyIjogInByb2ZpbGVyQWdlbnQiLAorICAgICAgICAiV29ya2VyIjog
IndvcmtlckFnZW50IiwKKyAgICAgfQorCisKK2NsYXNzIENQYXJhbVR5cGUob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgc2V0dGVyX2Zvcm1hdD0iJXMiKToKKyAgICAgICAg
c2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLnNldHRlcl9mb3JtYXQgPSBzZXR0ZXJfZm9y
bWF0CisKKyAgICBkZWYgZ2V0X3RleHQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR5cGUK
KworICAgIGRlZiBnZXRfc2V0dGVyX2Zvcm1hdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
c2V0dGVyX2Zvcm1hdAorCisKK2NsYXNzIFJhd1R5cGVzKG9iamVjdCk6CisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBnZXQoanNvbl90eXBlKToKKyAgICAgICAgaWYganNvbl90eXBlID09ICJi
b29sZWFuIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5Cb29sCisgICAgICAgIGVsaWYg
anNvbl90eXBlID09ICJzdHJpbmciOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmlu
ZworICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXkiOgorICAgICAgICAgICAgcmV0dXJu
IFJhd1R5cGVzLkFycmF5CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJvYmplY3QiOgorICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAorICAgICAgICBlbGlmIGpzb25fdHlwZSA9
PSAiaW50ZWdlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50CisgICAgICAgIGVs
aWYganNvbl90eXBlID09ICJudW1iZXIiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk51
bWJlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3du
IHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKKworICAgIGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6Cisg
ICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFt
X3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIHJldHVybiBjbHMuZGVmYXVsdF9jX3BhcmFt
X3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1D
aGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGNsYXNzIFN0
cmluZyhCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1Bh
cmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFt
X3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Jl
Zl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0
dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciCisKKyAgICAgICAgZ2V0U2V0
dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiXCJcIiIKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAg
ICAgICByZXR1cm4gInN0cmluZyIKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlw
ZSgiU3RyaW5nIikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBTdHJp
bmcmIikKKworICAgIGNsYXNzIEludChCYXNlVHlwZSk6CisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiSW50Igor
CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldFNldHRlck5hbWUoKToKKyAg
ICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICIwIgorCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAg
ICAgIHJldHVybiAibnVtYmVyIgorCisgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1Bh
cmFtVHlwZSgiaW50IikKKworICAgIGNsYXNzIE51bWJlcihCYXNlVHlwZSk6CisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJl
dHVybiAiT2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldFNl
dHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJV
bnN1cHBvcnRlZCIpCisKKyAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBl
KCJkb3VibGUiKQorCisgICAgY2xhc3MgQm9vbChCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21l
dGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKKyAgICAgICAgICAgIGlmIChwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVCk6CisgICAg
ICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3JlZl9jX3R5cGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJCb29sZWFuIgor
CisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1
cm4gImZhbHNlIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmlu
ZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAiYm9vbGVhbiIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJi
b29sIikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJjb25zdCBib29sKiBjb25z
dCIsICIqJXMiKQorCisgICAgY2xhc3MgT2JqZWN0KEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4g
Ik9iamVjdCIKKworICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVy
biAib2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQ
YXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAg
X3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IikKKyAg
ICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4iKQorCisgICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QK
KyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6Cisg
ICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5PVVRQVVQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbGlmIHBhcmFtX3R5
cGUgPT0gUGFyYW1UeXBlLklOUFVUOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWlu
X2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9y
ZWZfY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVy
TmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJBcnJheSIKKworICAgICAgICBnZXRTZXR0ZXJO
YW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5k
VHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVm
UHRyPEluc3BlY3RvckFycmF5PiIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgi
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iKQorCisKK2NsYXNzIFBhcmFtVHlwZShvYmplY3Qp
OgorICAgIElOUFVUID0gImlucHV0IgorICAgIE9VVFBVVCA9ICJvdXRwdXQiCisgICAgRVZFTlQg
PSAiZXZlbnQiCisKKworY2xhc3MgVHlwZURhdGEob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbik6CisgICAgICAgIHNlbGYuanNvbl90eXBlXyA9
IGpzb25fdHlwZQorICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCisKKyAg
ICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZToKKyAgICAgICAgICAgIGpzb25fdHlwZV9uYW1l
ID0ganNvbl90eXBlWyJ0eXBlIl0KKyAgICAgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0
KGpzb25fdHlwZV9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbmtub3duIHR5cGUiKQorICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCisK
KyAgICBkZWYgZ2V0UmF3VHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVf
CisKKworY2xhc3MgVHlwZU1hcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXBpKToKKyAgICAg
ICAgc2VsZi5tYXBfID0ge30KKyAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGFwaVsiZG9tYWlu
cyJdOgorICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKwor
ICAgICAgICAgICAgZG9tYWluX21hcCA9IHt9CisgICAgICAgICAgICBzZWxmLm1hcF9bZG9tYWlu
X25hbWVdID0gZG9tYWluX21hcAorCisgICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9t
YWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVz
Il06CisgICAgICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQorICAg
ICAgICAgICAgICAgICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9t
YWluKQorICAgICAgICAgICAgICAgICAgICBkb21haW5fbWFwW3R5cGVfbmFtZV0gPSB0eXBlX2Rh
dGEKKworICAgIGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFtZSk6CisgICAgICAg
IHJldHVybiBzZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0KKworCitkZWYgcmVzb2x2
ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUpOgorICAgIGlm
ICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKKyAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFt
ZXRlclsiJHJlZiJdCisgICAgICAgIHR5cGVfZGF0YSA9IGdldFJlZkRhdGEoanNvbl9yZWYsIHNj
b3BlX2RvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldFJhd1R5cGUoKQor
ICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3R5cGUgPSBq
c29uX3BhcmFtZXRlclsidHlwZSJdCisgICAgICAgIHJldHVybiBSYXdUeXBlcy5nZXQoanNvbl90
eXBlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikK
KworCitkZWYgZ2V0UmVmRGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpOgorICAgIGRv
dF9wb3MgPSBqc29uX3JlZi5maW5kKCIuIikKKyAgICBpZiBkb3RfcG9zID09IC0xOgorICAgICAg
ICBkb21haW5fbmFtZSA9IHNjb3BlX2RvbWFpbl9uYW1lCisgICAgICAgIHR5cGVfbmFtZSA9IGpz
b25fcmVmCisgICAgZWxzZToKKyAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX3JlZls6ZG90X3Bv
c10KKyAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWZbZG90X3BvcyArIDE6XQorCisgICAgcmV0
dXJuIHR5cGVfbWFwLmdldChkb21haW5fbmFtZSwgdHlwZV9uYW1lKQorCisKK2lucHV0X2ZpbGUg
PSBvcGVuKGlucHV0X2pzb25fZmlsZW5hbWUsICJyIikKK2pzb25fc3RyaW5nID0gaW5wdXRfZmls
ZS5yZWFkKCkKK2pzb25fYXBpID0ganNvbi5sb2Fkcyhqc29uX3N0cmluZykKKworCitjbGFzcyBU
ZW1wbGF0ZXM6CisgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzID0gc3RyaW5nLlRlbXBsYXRlKAor
IiIiICAgIGNsYXNzICRkb21haW5DbGFzc05hbWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgJGRv
bWFpbkNsYXNzTmFtZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQorJHtmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9uc30gICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KKyAgICBwcml2YXRlOgorICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworICAgIH07CisKKyAgICAkZG9t
YWluQ2xhc3NOYW1lKiAkZG9tYWluRmllbGROYW1lKCkgeyByZXR1cm4gJm1fJGRvbWFpbkZpZWxk
TmFtZTsgfQorCisiIiIpCisKKyAgICBiYWNrZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgK
KyIiInZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1fJG1ldGhv
ZE5hbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3Qp
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKworICAgIGlmICghJGFnZW50RmllbGQpCisgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKCIke2RvbWFpbk5hbWV9IGhhbmRsZXIgaXMgbm90IGF2YWls
YWJsZS4iKTsKKyRtZXRob2RPdXRDb2RlCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiskbWV0aG9k
SW5Db2RlCitpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkKKyAgICAkYWdlbnRGaWVsZC0+
JG1ldGhvZE5hbWUoJmVycm9yJGFnZW50Q2FsbFBhcmFtcyk7CisKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXNwb25z
ZUNvb2t9c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiRkb21haW5OYW1l
LiRtZXRob2ROYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Cit9CisiIiIpCisKKyAgICBm
cm9udGVuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoIiIidm9pZCBJbnNwZWN0b3JGcm9udGVu
ZDo6JGRvbWFpbk5hbWU6OiRldmVudE5hbWUoJHBhcmFtZXRlcnMpCit7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gJHtldmVudE5hbWV9TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgJHtldmVudE5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiLCAiJGRv
bWFpbk5hbWUuJGV2ZW50TmFtZSIpOworJGNvZGUgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKCR7ZXZlbnROYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyIiIikK
KworICAgIGZyb250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9y
RnJvbnRlbmRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVuZF9oCisKKyNpbmNsdWRlIDxQbGF0
Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CitwdWJsaWM6CisgICAgSW5zcGVj
dG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CisKKworJGRvbWFpbkNsYXNz
TGlzdAorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOworJHtmaWVsZERlY2xhcmF0aW9uc319OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkKKyIiIikK
KworICAgIGJhY2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcl9oCisjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gK
KworI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEluc3BlY3RvckFnZW50OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworY2xhc3MgSW5z
cGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisKKyRmb3J3YXJk
RGVjbGFyYXRpb25zCisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI+IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCRjb25zdHJ1
Y3RvclBhcmFtcykKKyAgICAgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCiskY29uc3RydWN0b3JJbml0CisgICAgeyB9CisKKyAgICB2b2lk
IGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gMDsgfQorCisg
ICAgZW51bSBDb21tb25FcnJvckNvZGUgeworICAgICAgICBQYXJzZUVycm9yID0gMCwKKyAgICAg
ICAgSW52YWxpZFJlcXVlc3QsCisgICAgICAgIE1ldGhvZE5vdEZvdW5kLAorICAgICAgICBJbnZh
bGlkUGFyYW1zLAorICAgICAgICBJbnRlcm5hbEVycm9yLAorICAgICAgICBTZXJ2ZXJFcnJvciwK
KyAgICAgICAgTGFzdEVudHJ5LAorICAgIH07CisKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJy
b3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsKKyAgICB2
b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgc3RhdGljIGJvb2wgZ2V0
Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCk7CisKKyAg
ICBlbnVtIE1ldGhvZE5hbWVzIHsKKworJGVudW1Db25zdGFudHMKK307CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29tbWFuZE5hbWVzW107CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBn
ZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMg
U3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwor
ICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVj
dChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnMpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGlu
dm9jYXRpb25FcnJvcik7CisKKyRtZXRob2REZWNsYXJhdGlvbnMKKworICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiskZmllbGREZWNsYXJh
dGlvbnMKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oKQorCisKKyIiIikKKworICAgIGJhY2tlbmRfY3Bw
ID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaCIKKyRpbmNsdWRlcworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kTmFtZXNbXSA9
IHsKKyRtZXRob2ROYW1lRGVjbGFyYXRpb25zCit9OworCisKKyRtZXRob2RzCit2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0ID0gdGhpczsK
KyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRs
ZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1lc3NhZ2VPYmplY3QpOworICAgIHR5
cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKTsKKyAgICBsb25nIGNh
bGxJZCA9IDA7CisKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0
YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0geworJG1lc3NhZ2VIYW5kbGVycworICAgICAg
ICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXpl
b2YoY29tbWFuZE5hbWVzWzBdKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhh
bmRsZXJzW2ldKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1l
c3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghcGFy
c2VkTWVzc2FnZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3Is
ICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRN
ZXNzYWdlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkgeworICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEg
SlNPTmlmaWVkIG9iamVjdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsK
KyAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwg
SW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQp
KSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUg
dHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2Fn
ZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsKKyAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CisgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBw
cm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFN0
cmluZyBtZXRob2Q7CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRo
ZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRv
ciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoaXQgPT0gZGlzcGF0Y2hN
YXAuZW5kKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2RO
b3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2Jq
ZWN0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJl
c3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBj
b25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcikKK3sKKyAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0
aW9uRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0IiwgcmVzdWx0KTsKKyAgICByZXNw
b25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQpOworICAgIGlmIChtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNl
bmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihj
b25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3QKK3sKKyAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgY29kZSwgZXJyb3JNZXNzYWdlLCAwKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENv
bW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7CisgICAgaWYgKCFzX2NvbW1vbkVycm9ycy5z
aXplKCkpIHsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcw
MCk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAw
KTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEp
OworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsK
KyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7Cisg
ICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKKyAgICB9
CisgICAgQVNTRVJUKGNvZGUgPj0wKTsKKyAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2Nv
bW1vbkVycm9ycy5zaXplKCkpOworICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7
CisgICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7CisgICAgQVNT
RVJUKGVycm9yKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRh
IiwgZGF0YSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9y
KTsKKyAgICBpZiAoY2FsbElkKQorICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNh
bGxJZCk7CisgICAgZWxzZQorICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0
b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisg
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
bWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitpbnQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7Cisg
ICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAg
ICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgaW50IHZhbHVlID0gMDsKKworICAgIGlmICgh
b2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVx
dWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmpl
Y3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVy
Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBv
YmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09
IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBl
ICdOdW1iZXInIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+
YXNOdW1iZXIoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdO
dW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZh
bHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3Rv
Y29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9
IGZhbHNlOworCisgICAgU3RyaW5nIHZhbHVlID0gIiI7CisKKyAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFt
ZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29u
dGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycuIiwgbmFtZS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQo
KTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBv
YmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAg
ICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3RyaW5nJyB3
YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzU3RyaW5nKCZ2
YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnU3RyaW5nJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQor
ICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsK
KworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisg
ICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlz
c2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWly
ZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+Zmlu
ZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAo
IXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdCb29sZWFuJyB3YXMgbm90IGZv
dW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQm9vbGVhbigmdmFsdWUpKQor
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAg
ICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVj
dChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHBy
b3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3Vu
ZCA9IGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2lu
ZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQg
cGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5h
bWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFs
dWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcgd2FzIG5vdCBmb3VuZC4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc09iamVjdCgmdmFsdWUpKQorICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2
YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0
b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJy
b3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNl
OworCisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkg
eworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNv
bnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAn
JXMnIHdpdGggdHlwZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAg
aWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAg
ICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJh
bWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0FycmF5JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1
ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQXJyYXkoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBtdXN0IGJlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxz
ZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1
ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9Citib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFy
c2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW9i
amVjdC0+Z2V0U3RyaW5nKCJtZXRob2QiLCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgZnJvbnRlbmRfY3BwID0gc3Ry
aW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUuCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVl
cy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworCisKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1faW5zcGVj
dG9yKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fcGFnZShpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCisgICAgLCBtX2NvbnNvbGUoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQor
ICAgICwgbV9uZXR3b3JrKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZGF0YWJh
c2UoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9kb21zdG9yYWdlKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fYXBwbGljYXRpb25jYWNoZShpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCisgICAgLCBtX2RvbShpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAg
LCBtX3RpbWVsaW5lKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAsIG1fZGVidWdnZXIo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICwgbV9wcm9maWxlcihpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpCisgICAgLCBtX3dvcmtlcihpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCit7
Cit9CisKKyRtZXRob2RzCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRl
KCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisKKworSW5zcGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCit7CisgICAgdGhpcy5f
bGFzdENhbGxiYWNrSWQgPSAxOworICAgIHRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCA9IDA7
CisgICAgdGhpcy5fY2FsbGJhY2tzID0ge307CisgICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMg
PSB7fTsKKyAgICB0aGlzLl9ldmVudEFyZ3MgPSB7fTsKKyRkZWxlZ2F0ZXMkZXZlbnRBcmdzJGRv
bWFpbkRpc3BhdGNoZXJzICAgIH0KKworSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0g
eworICAgIGR1bXBJbnNwZWN0b3JUaW1lU3RhdHM6IDAsCisgICAgZHVtcEluc3BlY3RvclByb3Rv
Y29sTWVzc2FnZXM6IDAsCisKKyAgICBfd3JhcDogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgewor
ICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7CisgICAgICAg
IHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307
CisgICAgICAgIHJldHVybiBjYWxsYmFja0lkOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJEZWxl
Z2F0ZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZykKKyAgICB7CisgICAgICAgIHZhciBkb21haW5B
bmRGdW5jdGlvbiA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZykubWV0aG9kLnNwbGl0KCIuIik7
CisgICAgICAgIHZhciBhZ2VudE5hbWUgPSBkb21haW5BbmRGdW5jdGlvblswXSArICJBZ2VudCI7
CisgICAgICAgIGlmICghd2luZG93W2FnZW50TmFtZV0pCisgICAgICAgICAgICB3aW5kb3dbYWdl
bnROYW1lXSA9IHt9OworICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlv
blsxXV0gPSB0aGlzLl9zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJp
bmcpOworICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV1bImlu
dm9rZSJdID0gdGhpcy5faW52b2tlLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZykKKyAgICB9LAor
CisgICAgX2ludm9rZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZywgYXJncywgY2FsbGJhY2spCisg
ICAgeworICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZyk7Cisg
ICAgICAgIHJlcXVlc3QucGFyYW1zID0gYXJnczsKKyAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNr
QW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOworICAgIH0sCisKKyAgICBf
c2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKKyAgICAgICAgdmFyIHJl
cXVlc3QgPSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7CisgICAgICAgIHZhciBjYWxsYmFjayA9
IChhcmdzLmxlbmd0aCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rp
b24iKSA/IGFyZ3MucG9wKCkgOiAwOworICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVx
dWVzdC5tZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWlu
QW5kTWV0aG9kWzBdICsgIkFnZW50LiIgKyBkb21haW5BbmRNZXRob2RbMV07CisKKyAgICAgICAg
dmFyIGhhc1BhcmFtcyA9IGZhbHNlOworICAgICAgICBpZiAocmVxdWVzdC5wYXJhbXMpIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFtcykgeworICAgICAgICAgICAg
ICAgIHZhciB0eXBlTmFtZSA9IHJlcXVlc3QucGFyYW1zW2tleV0udHlwZTsKKyAgICAgICAgICAg
ICAgICB2YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVzdC5wYXJhbXNba2V5XS5vcHRpb25hbDsKKwor
ICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZh
bGlkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicg
Y2FsbC4gSXQgbXVzdCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5
KHJlcXVlc3QucGFyYW1zKSArICInLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlm
dCgpOworICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09
PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJh
bXNba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQg
dHlwZSBvZiBhcmd1bWVudCAnIiArIGtleSArICInIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhv
ZCArICInIGNhbGwuIEl0IG11c3QgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiAr
IHR5cGVvZiB2YWx1ZSArICInLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZh
bHVlOworICAgICAgICAgICAgICAgIGhhc1BhcmFtcyA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAoIWhhc1BhcmFtcykKKyAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVz
dC5wYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYg
IWNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmlu
ZWQiKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9w
dGlvbmFsIGNhbGxiYWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICIn
IGNhbGwgbXVzdCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnIiArIHR5cGVvZiBhcmdz
WzBdICsgIicuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3Qo
cmVxdWVzdCwgY2FsbGJhY2spOworICAgIH0sCisKKyAgICBfd3JhcENhbGxiYWNrQW5kU2VuZE1l
c3NhZ2VPYmplY3Q6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QsIGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICAgbWVzc2FnZU9iamVjdC5pZCA9IHRoaXMuX3dyYXAoY2FsbGJhY2spOworCisgICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpIHsKKyAgICAgICAgICAgIHZhciB3cmFw
cGVkQ2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07CisgICAgICAg
ICAgICB3cmFwcGVkQ2FsbGJhY2subWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QubWV0aG9kOwor
ICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSA9IERhdGUubm93KCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNz
YWdlcykKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5n
aWZ5KG1lc3NhZ2VPYmplY3QpKTsKKworICAgICAgICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXND
b3VudDsKKyAgICAgICAgdGhpcy5zZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2Jq
ZWN0KTsKKyAgICB9LAorCisgICAgc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9u
KG1lc3NhZ2VPYmplY3QpCisgICAgeworICAgICAgICBjb25zb2xlLnRpbWVTdGFtcChtZXNzYWdl
T2JqZWN0Lm1ldGhvZCk7CisgICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVz
c2FnZU9iamVjdCk7CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRv
QmFja2VuZChtZXNzYWdlKTsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
cjogZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQorICAgIHsKKyAgICAgICAgdGhpcy5fZG9t
YWluRGlzcGF0Y2hlcnNbZG9tYWluXSA9IGRpc3BhdGNoZXI7CisgICAgfSwKKworICAgIGRpc3Bh
dGNoOiBmdW5jdGlvbihtZXNzYWdlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclByb3RvY29sTWVzc2FnZXMpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiYmFja2VuZDog
IiArICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlKSkpOworCisgICAgICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBt
ZXNzYWdlID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKKwor
ICAgICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBm
b3Igc29tZSByZXF1ZXN0CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvcikgewor
ICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QuZXJyb3IuX19wcm90b19fID0geworICAgICAg
ICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGhpcy5jb2RlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI3MDA6IHJldHVybiAiUGFyc2UgZXJyb3Ii
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAwOiByZXR1cm4gIkludmFs
aWQgUmVxdWVzdCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDE6IHJl
dHVybiAiTWV0aG9kIG5vdCBmb3VuZCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAtMzI2MDI6IHJldHVybiAiSW52YWxpZCBwYXJhbXMiOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgLTMyNjAzOiByZXR1cm4gIkludGVybmFsIGVycm9yIjs7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAtMzIwMDA6IHJldHVybiAiU2VydmVyIGVycm9yIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAg
ICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSJVbmtub3duIGVycm9y
IGNvZGUiOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRp
b24oKSArICIoIiArIHRoaXMuY29kZSArICIpOiAiICsgdGhpcy5tZXNzYWdlICsgIi4iICsgKHRo
aXMuZGF0YSA/ICIgIiArIHRoaXMuZGF0YS5qb2luKCIgIikgOiAiIik7CisgICAgICAgICAgICAg
ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgZ2V0TWVzc2FnZTogZnVuY3Rpb24oKQor
ICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5tZXNzYWdlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IuY29kZSAhPT0gLTMyMDAwKQor
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVj
dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKKyAg
ICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnJlc3VsdCkgeworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LnJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzLnB1c2gobWVzc2FnZU9iamVjdC5yZXN1bHRba2V5XSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2Jq
ZWN0LmlkXTsKKyAgICAgICAgICAgIGlmIChjYWxsYmFjaykgeworICAgICAgICAgICAgICAgIHZh
ciBwcm9jZXNzaW5nU3RhcnRUaW1lOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNw
ZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgICAgICBh
cmd1bWVudHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICAgICAgICAgICAgICBj
YWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICAgIC0tdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxs
YmFja3NbbWVzc2FnZU9iamVjdC5pZF07CisKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1w
SW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgY2FsbGJhY2subWV0aG9kTmFtZSAr
ICIgPSAiICsgKHByb2Nlc3NpbmdTdGFydFRpbWUgLSBjYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUp
ICsgIiArICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX3NjcmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdS
ZXNwb25zZXNDb3VudCkKKyAgICAgICAgICAgICAgICB0aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3Bh
dGNoZXMoKTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmplY3QubWV0aG9kLnNwbGl0KCIuIik7CisgICAg
ICAgICAgICB2YXIgZG9tYWluTmFtZSA9IG1ldGhvZFswXTsKKyAgICAgICAgICAgIHZhciBmdW5j
dGlvbk5hbWUgPSBtZXRob2RbMV07CisgICAgICAgICAgICBpZiAoIShkb21haW5OYW1lIGluIHRo
aXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAn
IiArIGRvbWFpbk5hbWUgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hl
cnNbZG9tYWluTmFtZV07CisgICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0
Y2hlcikpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
QXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICciICsgbWVzc2Fn
ZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5t
ZXRob2RdKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6
IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bnNwZWNpZmllZCBtZXRob2QgJyIgKyBtZXNzYWdl
T2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2YXIgcGFyYW1zID0gW107CisgICAgICAgICAgICBpZiAobWVz
c2FnZU9iamVjdC5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2YXIgcGFyYW1OYW1lcyA9IHRo
aXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF07CisgICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMucHVzaChtZXNzYWdlT2JqZWN0LnBhcmFtc1twYXJhbU5hbWVzW2ldXSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOworICAg
ICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAgICAgICAgICAgZGlzcGF0
Y2hlcltmdW5jdGlvbk5hbWVdLmFwcGx5KGRpc3BhdGNoZXIsIHBhcmFtcyk7CisKKyAgICAgICAg
ICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAgICAgICAgY29u
c29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICIgPSAiICsg
KERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAgICAgIH0KKyAgICB9LAor
CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcjogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2Jq
ZWN0LmlkICsgIiBmYWlsZWQuICIgKyBtZXNzYWdlT2JqZWN0LmVycm9yKTsKKyAgICB9LAorCisg
ICAgcnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczogZnVuY3Rpb24oc2NyaXB0KQorICAgIHsKKyAg
ICAgICAgaWYgKCF0aGlzLl9zY3JpcHRzKQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtd
OworCisgICAgICAgIGlmIChzY3JpcHQpCisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2go
c2NyaXB0KTsKKworICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkgewor
ICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzOworICAgICAgICAgICAgdGhp
cy5fc2NyaXB0cyA9IFtdCisgICAgICAgICAgICBmb3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0
cy5sZW5ndGg7ICsraWQpCisgICAgICAgICAgICAgICAgIHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK0luc3BlY3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9y
QmFja2VuZFN0dWIoKTsiIiIpCisKKyAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSAi
IiIKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0
TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMiKTsKKyAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyIiIgor
CisKK3R5cGVfbWFwID0gVHlwZU1hcChqc29uX2FwaSkKKworCitjbGFzcyBHZW5lcmF0b3I6Cisg
ICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBbXQorICAgIGZyb250ZW5kX2RvbWFpbl9j
bGFzc19saW5lcyA9IFtdCisKKyAgICBtZXRob2RfbmFtZV9lbnVtX2xpc3QgPSBbXQorICAgIGJh
Y2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX2lt
cGxlbWVudGF0aW9uX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRp
b25fbGlzdCA9IFtdCisgICAgbWV0aG9kX2hhbmRsZXJfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRf
bWV0aG9kX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCA9IFtdCisg
ICAgYmFja2VuZF9qc19ldmVudF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2RvbWFpbl9kaXNw
YXRjaGVyX2xpc3QgPSBbXQorCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0ID0g
W10KKyAgICBiYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9m
aWVsZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2ZvcndhcmRfbGlzdCA9IFtdCisgICAgYmFja2Vu
ZF9pbmNsdWRlX2xpc3QgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnbygpOgor
ICAgICAgICBmb3IganNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKKyAgICAgICAg
ICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisgICAgICAgICAgICBkb21h
aW5fbmFtZV9sb3dlciA9IGRvbWFpbl9uYW1lLmxvd2VyKCkKKworICAgICAgICAgICAgZG9tYWlu
X2RhdGEgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisgICAg
ICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQor
CisgICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMgPSBbXQorICAg
ICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9y
IGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRl
bmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQorCisgICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLmFwcGVuZCgiICAgICVzIG1fJXM7XG4iICUgKGRv
bWFpbl9uYW1lLCBkb21haW5fbmFtZV9sb3dlcikpCisgICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcy5hcHBlbmQoVGVtcGxhdGVzLmZyb250ZW5kX2Rv
bWFpbl9jbGFzcy5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbkNs
YXNzTmFtZT1kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluRmllbGROYW1l
PWRvbWFpbl9uYW1lX2xvd2VyLAorICAgICAgICAgICAgICAgICAgICBmcm9udGVuZERvbWFpbk1l
dGhvZERlY2xhcmF0aW9ucz1qb2luKGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcywg
IiIpKSkKKyAgICAgICAgICAgIGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46CisgICAgICAg
ICAgICAgICAgZm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMiXToKKyAg
ICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQs
IGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKQorCisgICAgICAgICAgICBpZiBub3QgZG9t
YWluX2RhdGEuc2tpcF9qc19iaW5kOgorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2pzX2RvbWFpbl9kaXNwYXRjaGVyX2xpc3QuYXBwZW5kKCIgICAgdGhpcy5yZWdpc3RlciVzRGlz
cGF0Y2hlciA9IHRoaXMuX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKHRoaXMsIFwiJXNc
Iik7XG4iICUgKGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZSkpCisKKyAgICAgICAgc29ydGVkX2pz
b25fZG9tYWlucyA9IGxpc3QoanNvbl9hcGlbImRvbWFpbnMiXSkKKyAgICAgICAgc29ydGVkX2pz
b25fZG9tYWlucy5zb3J0KGtleT1sYW1iZGEgbzogb1siZG9tYWluIl0pCisKKyAgICAgICAgZm9y
IGpzb25fZG9tYWluIGluIHNvcnRlZF9qc29uX2RvbWFpbnM6CisgICAgICAgICAgICBkb21haW5f
bmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorCisgICAgICAgICAgICBkb21haW5fZGF0YSA9
IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFtZSkKKyAgICAgICAgICAg
IGlmIGRvbWFpbl9kYXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9uYW1lCisgICAg
ICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQor
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdC5hcHBl
bmQoIiwgJXMqICVzIiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFwcGVuZCgi
ICAgICAgICAsIG1fJXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1l
KSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAg
JXMqIG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xhc3MgJXM7IiAl
IGFnZW50X3R5cGVfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVf
bGlzdC5hcHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFtZSkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5f
bmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgZXZlbnRf
bmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCisg
ICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3Bh
cmFtX2xpc3QgPSBbXQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9ldmVudDoKKyAg
ICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCisgICAg
ICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1ldGVycyJdOgor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQor
CisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFy
YW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0aW9uYWwgPSAi
b3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwi
XQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlzRXZlbnRQYXJh
bUNoZWNrT3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBlLmdldENQ
YXJhbVR5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAgICAgICAg
ICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAorCisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBlLmdldF90ZXh0
KCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9
IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAg
ICAgICAgIHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMp
O1xuIiAlIChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKKyAg
ICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2Nv
ZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2Rl
CisgICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCisK
KyAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVz
XCIiICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVu
ZCgiICAgICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVjdCk7XG4i
ICUgZXZlbnRfbmFtZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVz
LmFwcGVuZCgKKyAgICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAlIChldmVudF9u
YW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmZy
b250ZW5kX21ldGhvZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9kLnN1YnN0
aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIGV2ZW50TmFt
ZT1ldmVudF9uYW1lLAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFtZXRlcl9saXN0
LCAiLCAiKSwKKyAgICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0LCAiIikpKQor
CisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5kKCIgICAgdGhp
cy5fZXZlbnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAgICAgIGRvbWFp
bl9uYW1lLCBldmVudF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCwgIiwg
IikpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9j
b21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpzb25fY29t
bWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9yLm1ldGhv
ZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9tYWluX25h
bWUsIGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5k
bGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNf
JXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVz
KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUg
KGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0aG9kX2luX2Nv
ZGUgPSAiIgorICAgICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBhZ2VudF9jYWxs
X3BhcmFtX2xpc3QgPSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBbXQorICAgICAg
ICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQg
PSAiIgorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAg
ICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAgICAgICAgICAg
bWV0aG9kX2luX2NvZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZQor
ICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVzc2FnZU9iamVj
dCIKKyAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAgICBmb3IganNv
bl9wYXJhbWV0ZXIgaW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNvbl9wYXJhbV9u
YW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190
eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCisK
KyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQYXJhbVR5cGUo
UGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFy
YW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBpZiAib3B0aW9u
YWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXToKKyAg
ICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNl
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBnZXQlcyhw
YXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwg
dmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9w
YXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9
ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25hbWUsIGpzb25f
cGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBj
b2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwg
MCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25f
cGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNv
bl9wYXJhbV9uYW1lCisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBjb2RlCisg
ICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKworICAg
ICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmluZFR5cGUo
KQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRpb25hbFwi
OiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBqc29uX3Bh
cmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIgaW4g
anNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNlICJmYWxz
ZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAgICAgICAgICAg
ICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAgICBqc19w
YXJhbWV0ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1fbGlzdCwg
IiwgIikgKyAifSIKKworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgorICAgICAgICBp
ZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9kX291dF9jb2Rl
ICs9ICJcbiIKKyAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJl
dHVybnMiXToKKworICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVy
blsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBl
KGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9
IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0g
cmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHJh
d190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKworICAgICAgICAg
ICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlwZS5nZXRfdGV4
dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICBwYXJh
bSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgIGNvb2sg
PSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVyX3R5
cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAg
aWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIgaW4ganNvbl9y
ZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAgICAgICBj
b29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsg
Y29vaworCisgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKKyAgICAgICAg
ICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAgICAgICAg
ICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAgIHJlc3BvbnNl
X2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9y
Lmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3QsICIiKQor
CisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFw
cGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAg
ICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwK
KyAgICAgICAgICAgIGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisgICAgICAg
ICAgICBtZXRob2RJbkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRob2RPdXRD
b2RlPW1ldGhvZF9vdXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFtcz1qb2luKGFn
ZW50X2NhbGxfcGFyYW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmpl
Y3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29rPXJlc3Bv
bnNlX2Nvb2tfdGV4dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2Rl
Y2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpz
b25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFs
aXplcl9saXN0LmFwcGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7XCJtZXRo
b2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRvci5nbygpCisK
K2JhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0gb3BlbihvdXRw
dXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIsICJ3IikK
KworZnJvbnRlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3Bl
Y3RvckZyb250ZW5kLmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4ob3V0cHV0X2Nw
cF9kaXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2JhY2tlbmRfanNf
ZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5q
cyIsICJ3IikKKworCitmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2gu
c3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0
b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRvbWFpbkNsYXNz
TGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSkpCisK
K2JhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25l
LAorICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9y
X2luaXRfbGlzdCwgIlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihHZW5lcmF0b3Iu
YmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgZW51bUNvbnN0YW50cz1q
b2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIpLAorICAgIG1ldGhvZERl
Y2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0
LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2Zp
ZWxkX2xpc3QsICJcbiIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3Iu
YmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUo
VGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0aG9kcz1qb2lu
KEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2NwcF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0
aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2Rl
Y2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGluY2x1ZGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tl
bmRfaW5jbHVkZV9saXN0LCAiXG4iKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmJhY2tl
bmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsICJcbiIpLAorICAgIG1lc3NhZ2VIYW5kbGVy
cz1qb2luKEdlbmVyYXRvci5tZXRob2RfaGFuZGxlcl9saXN0LCAiXG4iKSkpCisKK2JhY2tlbmRf
anNfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9qcy5zdWJzdGl0dXRlKE5vbmUsCisgICAg
ZGVsZWdhdGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCwgIiIp
LAorICAgIGV2ZW50QXJncz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QsICIi
KSwKKyAgICBkb21haW5EaXNwYXRjaGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFp
bl9kaXNwYXRjaGVyX2xpc3QsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLmNsb3NlKCkKK2JhY2tl
bmRfY3BwX2ZpbGUuY2xvc2UoKQorCitmcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQorZnJvbnRlbmRf
Y3BwX2ZpbGUuY2xvc2UoKQorCitiYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDk2ZjFmM2ZmMjY5YjY5MDZlYzQ3NWFhMjcx
YzE2YjE3MjY2YjhmODYuLmUzOTZlNTY0NGY0M2IwZWMwNDVmY2JlNWYwNDU4Y2M3NDYzYTc1ZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MCw3ICsxNDAs
NyBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAidHlwZSI6ICJi
b29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgaW4gY2FzZSBvZiBzZXNzaW9uIGNvb2tpZS4i
IH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCi0g
ICAgICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFu
ZHMiOiBbCiAgICAgICAgICAgICB7CkBAIC04NDYsNyArODQ2LDcgQEAKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJpc0xvY2FsU3RvcmFnZSIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVz
Y3JpcHRpb24iOiAiVHJ1ZSBmb3IgbG9jYWwgc3RvcmFnZS4iIH0sCiAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiRW50
cnkgaWQgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6
IFsKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9n
ZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE4ZGVkNjEwYjI4
NmJhNWU2NDgwY2E5YWRhM2ZkYWRmOTA2ZmJhN2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1pZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRp
c3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0j
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0j
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5
cwotCi1wcm9ncmFtX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKQotaWYgbGVuKHN5
cy5hcmd2KSA8IDQgb3Igc3lzLmFyZ3ZbMV0gIT0gIi1vIjoKLSAgICBzeXMuc3RkZXJyLndyaXRl
KCJVc2FnZTogJXMgLW8gT1VUUFVUX0ZJTEUgSU5QVVRfRklMRVxuIiAlIHByb2dyYW1fbmFtZSkK
LSAgICBleGl0KDEpCi0KLW91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0KLWlucHV0X3BhdGggPSBz
eXMuYXJndlszXQotCi1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoLCAiciIpCi1qc29uX3N0
cmluZyA9IGlucHV0X2ZpbGUucmVhZCgpCi1qc29uX3N0cmluZyA9IGpzb25fc3RyaW5nLnJlcGxh
Y2UoIjogdHJ1ZSIsICI6IFRydWUiKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNl
KCI6IGZhbHNlIiwgIjogZmFsc2UiKQotanNvbl9hcGkgPSBldmFsKGpzb25fc3RyaW5nKVsiZG9t
YWlucyJdCi0KLW91dHB1dF9maWxlID0gb3BlbihvdXRwdXRfcGF0aCwgInciKQotb3V0cHV0X2Zp
bGUud3JpdGUoIiIiLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0gCi1tb2R1bGUgY29yZSB7IiIiKQotCi10eXBlX3RyYWl0cyA9IHsKLSAgICAic3RyaW5nIjog
IlN0cmluZyIsCi0gICAgImludGVnZXIiOiAiaW50IiwKLSAgICAibnVtYmVyIjogImRvdWJsZSIs
Ci0gICAgImJvb2xlYW4iOiAiYm9vbGVhbiIsCi0gICAgImFycmF5IjogIkFycmF5IiwKLSAgICAi
b2JqZWN0IjogIk9iamVjdCIKLX0KLQotcmVmX3R5cGVzID0ge30KLQotbWFjcm9fdHJhaXRzID0g
ewotICAgICJEYXRhYmFzZSI6ICJTUUxfREFUQUJBU0UiLAotICAgICJET01TdG9yYWdlIjogIkRP
TV9TVE9SQUdFIiwKLSAgICAiRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAg
IkRPTURlYnVnZ2VyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJQcm9maWxlciI6ICJK
QVZBU0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiV29ya2VyIjogIldPUktFUlMiCi19Ci0KLWRlZiBm
dWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlX2lkKToKLSAgICBpZiB0eXBl
X2lkLmZpbmQoIi4iKSA9PSAtMToKLSAgICAgICByZXR1cm4gIiVzLiVzIiAlIChkb21haW5fbmFt
ZSwgdHlwZV9pZCkKLSAgICByZXR1cm4gdHlwZV9pZAotICAgIAotCi1kZWYgcGFyYW1fdHlwZShk
b21haW5fbmFtZSwgcGFyYW0pOgotICAgIGlmICJ0eXBlIiBpbiBwYXJhbToKLSAgICAgICAgcmV0
dXJuIHR5cGVfdHJhaXRzW3BhcmFtWyJ0eXBlIl1dCi0gICAgaWYgIiRyZWYiIGluIHBhcmFtOgot
ICAgICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgcGFy
YW1bIiRyZWYiXSkKLSAgICAgICAgaWYgdHlwZV9pZCBpbiByZWZfdHlwZXM6Ci0gICAgICAgICAg
ICByZWZfdHlwZSA9IHJlZl90eXBlc1t0eXBlX2lkXQotICAgICAgICAgICAgcmV0dXJuIHR5cGVf
dHJhaXRzW3JlZl90eXBlWyJ0eXBlIl1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmlu
dCgiVHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkKQotICAgICAgICAgICAgcmV0dXJuICIhISBU
eXBlIG5vdCBmb3VuZDogIiArIHR5cGVfaWQKLQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAg
ICBkb21haW5fbmFtZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiAidHlwZXMiIGluIGRvbWFp
bjoKLSAgICAgICAgZm9yIHR5cGUgaW4gZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgdHlw
ZV9pZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5cGVbImlkIl0pCi0g
ICAgICAgICAgICByZWZfdHlwZXNbdHlwZV9pZF0gPSB0eXBlOwotCi1mb3IgZG9tYWluIGluIGpz
b25fYXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAgIGlmIGRvbWFp
bl9uYW1lIGluIG1hY3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuI2lm
IGRlZmluZWQoRU5BQkxFXyVzKSAmJiBFTkFCTEVfJXMiICUgKG1hY3JvX3RyYWl0c1tkb21haW5f
bmFtZV0sIG1hY3JvX3RyYWl0c1tkb21haW5fbmFtZV0pKQotICAgIG91dHB1dF9maWxlLndyaXRl
KCJcbiAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gJXMgeyIgJSBkb21haW5f
bmFtZSkKLQotICAgIGlmICJjb21tYW5kcyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAg
ICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3Ig
aW5fcGFyYW0gaW4gY29tbWFuZFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIm9wdGlvbmFsIiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRp
b25hbCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1z
LmFwcGVuZCgiaW4lcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUs
IGluX3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBpZiAoInJldHVybnMi
IGluIGNvbW1hbmQpOgotICAgICAgICAgICAgICAgIGZvciBvdXRfcGFyYW0gaW4gY29tbWFuZFsi
cmV0dXJucyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFsIiBpbiBvdXRfcGFy
YW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0g
ICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAl
IChvcHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgb3V0X3BhcmFtKSwgb3V0X3BhcmFt
WyJuYW1lIl0pKQotICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgICAgICB2b2lk
ICVzKCVzKTsiICUgKGNvbW1hbmRbIm5hbWUiXSwgIiwgIi5qb2luKHBhcmFtcykpKQotCi0gICAg
aWYgImV2ZW50cyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluWyJldmVu
dHMiXToKLSAgICAgICAgICAgIHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRl
cnMiIGluIGV2ZW50KToKLSAgICAgICAgICAgICAgICBmb3IgaW5fcGFyYW0gaW4gZXZlbnRbInBh
cmFtZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFy
YW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0g
ICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAl
IChvcHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsi
bmFtZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgW2V2ZW50
XSB2b2lkICVzKCVzKTsiICUgKGV2ZW50WyJuYW1lIl0sICIsICIuam9pbihwYXJhbXMpKSkKLQot
ICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICB9OyIpCi0gICAgaWYgZG9tYWluWyJkb21haW4i
XSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNlbmRpZiAv
LyBFTkFCTEVfJXMiICUgbWFjcm9fdHJhaXRzW2RvbWFpblsiZG9tYWluIl1dKQotb3V0cHV0X2Zp
bGUud3JpdGUoIlxufVxuIikKLW91dHB1dF9maWxlLmNsb3NlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109991</attachid>
            <date>2011-10-06 12:06:02 -0700</date>
            <delta_ts>2011-10-06 14:21:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111006230559.patch</filename>
            <type>text/plain</type>
            <size>121652</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTU0MmY0
YWNkZWIxOGY1ODIzZGJhN2IzY2VhNmE2NGRiNWFlNjAzNy4uZTc0MWRhNjA1NmJkOTNjZTFlNjNk
MjgyZTY4MTlkM2Y2Y2MwMWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTIsMTcgKzIy
MTIsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNWJkZjliMjMzY2UyOWQ2M2RmNGEyOGM3MjBlZGY5YjA1ODEwOWIxOC4u
ZDA2MzY3MTY1MTBmMGVmZmM3OGNkZDkxY2I1NjFiODgzM2M3YTg5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDExLTEwLTA0ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
OgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgor
CiAyMDExLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4ZXMgZm9yIGV2ZXJ5b25lLgpAQCAtMTA2MjQsNiArMTA2MzksMjAgQEAK
ICAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjYW5SZW1haW5BbGl2ZU9u
UmVtb3ZhbEZyb21UcmVlKToKICAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6
CiAKKzIwMTEtMTAtMDMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRl
bmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxpbmZl
cm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1YnkgYmFz
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKaW5kZXggNjMxOTM4MjdjY2QwMjZkY2JkZTdl
MTNjMGFjMWM3OTEwZDQ3ZDc5YS4uODU4MzQ1N2UxMGI4MDkyNDcwYTQ3ZjBhNzZkNjk5ZjdiNTA2
ZTNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQpAQCAtNjc2LDI5ICs2NzYsMTIgQEAg
aW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRUb1Nv
dXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAotaW5z
cGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQRUNU
T1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVj
dG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRlcGVu
ZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNP
Ti53a0FkZE91dHB1dFRvU291cmNlcyA9IGZhbHNlCitpbnNwZWN0b3JKU09OLndrU2NyaXB0ID0g
JCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKK2luc3BlY3RvckpTT04u
Y29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0ICQkUFdEL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJ
UiAtLW91dHB1dF9jcHBfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tZGVmaW5lcyBc
IiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiCitpbnNwZWN0b3JKU09OLmRlcGVuZHMg
PSAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9ySlNP
TikKLWluc3BlY3RvckpTT04udmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVUCi0K
LWluc3BlY3RvcklETC5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmNwcAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pTT05f
T1VUUFVUCi1pbnNwZWN0b3JJREwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL2dl
bmVyYXRlLWJpbmRpbmdzLnBsCi1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0Qv
YmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1Njcmlw
dCAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVyYXRv
ciBJbnNwZWN0b3IgLS1vdXRwdXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1wcmVw
cm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNwZWN0
b3JJREwuZGVwZW5kcyA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
IFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gXAot
ICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwKLSAg
ICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAgICAg
ICAgJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklETC53
a0V4dHJhU291cmNlcyA9ICQkaW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxlcihp
bnNwZWN0b3JJREwpCiAKIGluc3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRlZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0gSU5T
UEVDVE9SX0JBQ0tFTkRfU1RVQl9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IDA5ZDA3MDMwYThmZTAxMzMwZmJmZTc2NjlhYTllNzYyMjc3MmZhNTUuLmNkZDcwZDEyYWUwNWRj
ZGU1ZWJmNzVhYWQ3ODUxOWRlMjViNzU2ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQpAQCAtODkzLDE1ICs4OTMsMTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgK
IEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkvaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3RvclBy
b3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAKLUlu
c3BlY3Rvci5pZGwgOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9y
LWlkbAotCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRs
IC1vIEluc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQog
YWxsIDogSW5zcGVjdG9yRnJvbnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMg
PSAkKEdFTkVSQVRFX1NDUklQVFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
CitJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQogCi1JbnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJTlNQ
RUNUT1JfR0VORVJBVE9SX1NDUklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChGRUFU
VVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAk
PAorSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dFTkVS
QVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykgSW5z
cGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1kZWZpbmVz
ICIkKEZFQVRVUkVfREVGSU5FUykgTEFOR1VBR0VfSkFWQVNDUklQVCIKIAogYWxsIDogSW5qZWN0
ZWRTY3JpcHRTb3VyY2UuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNlMDhkYTBiMmUzYjY2
MDkxMWY3OTYxMWFmMDQ0YWIwYzA1MTE4N2IuLmI5YTg5MDQ4NDVjZGNkOTllNjA5NTM0Y2MwMGZk
ZDU4YTQxMmExNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC02OTAsMTEgKzY5MCw4IEBAIERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvWE1MTmFtZXMuY3BwIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
WE1MTmFtZXMuaDogJChXZWJDb3JlCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvclBy
b3RvY29sVmVyc2lvbi5oIDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChX
ZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIAkk
KFBZVEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LXZlcnNpb24gLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3RvclByb3RvY29sVmVyc2lv
bi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAKLURlcml2ZWRTb3VyY2Vz
L1dlYkNvcmUvSW5zcGVjdG9yLmlkbCA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLQkkKFBZVEhP
TikgJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyAkKEdFTlNP
VVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9yLmlkbCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbgotCi1EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3IuaWRsICQoU0NSSVBUU19C
SU5ESU5HUykgJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQot
CSQoQU1fVl9HRU4pJChQRVJMKSAtSSQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cyAtSSQoV2Vi
Q29yZSkvaW5zcGVjdG9yICQoV2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5k
aW5ncy5wbCAkKElETF9QQVRIOiU9LS1pbmNsdWRlICIlIikgLS1vdXRwdXREaXIgIiQoR0VOU09V
UkNFU19XRUJDT1JFKSIgLS1kZWZpbmVzICJMQU5HVUFHRV9KQVZBU0NSSVBUPTEgJChGRUFUVVJF
X0RFRklORVMpIiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJDwKK0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisJJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkgJDwgLS1vdXRwdXRfaF9kaXIgJChHRU5TT1VSQ0VTX1dFQkNPUkUpIC0tb3V0cHV0X2Nw
cF9kaXIgJChHRU5TT1VSQ0VTX1dFQkNPUkUpIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVNDUklQ
VD0xICQoRkVBVFVSRV9ERUZJTkVTKSIKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9y
RnJvbnRlbmQuaDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAK
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwOiBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzCiBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzOiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5n
eXAKaW5kZXggZTc4MjU3MzM2MjBhN2RmYjdjYWI2ZjcwZGJkZGFlNWUyMDYyYmM3MS4uN2I3MWI1
OTUzZDNmZTc3MjNiYjQwMzQwM2ExMWUwN2Y0MTEzNzU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAKQEAgLTMzNSwxNyArMzM1LDI0IEBACiAgIH0sCiAgICd0YXJnZXRz
JzogWwogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJv
dG9jb2xfdmVyc2lvbicsCisgICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29s
X3NvdXJjZXMnLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAnZGVwZW5kZW5jaWVzJzog
WworICAgICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nCisgICAgICBd
LAogICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1l
JzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uJywKKyAgICAgICAgeworICAgICAg
ICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCiAg
ICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKICAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvclByb3Rv
Y29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93
ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCcsCisgICAgICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVf
RElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcycsCiAgICAg
ICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewogICAgICAgICAgICAgJ2dlbmVyYXRv
cl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTMsMjggKzM2MCwyOCBAQAogICAgICAgICAgIH0sCiAg
ICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdweXRob24nLAotICAgICAgICAgICAg
Jy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbicsCi0gICAg
ICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRwdXRzKScsCi0gICAgICAgICAgICAn
PEAoX2lucHV0cyknCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHknLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbicsCisg
ICAgICAgICAgICAnLS1vdXRwdXRfaF9kaXInLCAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0JywKKyAgICAgICAgICAgICctLW91dHB1dF9jcHBfZGlyJywgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmNvcmUnLAorICAgICAgICAgICAgJy0tZGVmaW5lcycsICc8KGZlYXR1
cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCiAgICAgICAgICAgXSwKLSAgICAgICAg
ICAnbWVzc2FnZSc6ICdWYWxpZGF0ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5IGFuZCBnZW5lcmF0ZSB2ZXJzaW9uIGZpbGUnLAotICAgICAgICB9CisgICAg
ICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbnNwZWN0b3IgcHJvdG9jb2wgc291cmNlcyBm
cm9tIEluc3BlY3Rvci5pZGwnLAorICAgICAgICB9LAogICAgICAgXQogICAgIH0sCiAgICAgewot
ICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9pZGwnLAorICAgICAgJ3RhcmdldF9uYW1l
JzogJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJzaW9uJywKICAgICAgICd0eXBlJzog
J25vbmUnLAogICAgICAgJ2FjdGlvbnMnOiBbCi0KLSAgICAgICAgewotICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sSURMJywKKyAgICAgICAgIHsKKyAg
ICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24n
LAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVy
YXRlLWluc3BlY3Rvci1pZGwnLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbicsCiAgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzogWwotICAg
ICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlk
bCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvclByb3RvY29sVmVyc2lvbi5oJywKICAgICAgICAgICBdLAogICAgICAgICAgICd2YXJpYWJs
ZXMnOiB7CiAgICAgICAgICAgICAnZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyc6IFsKQEAgLTM4Miw2
NSArMzg5LDE2IEBACiAgICAgICAgICAgfSwKICAgICAgICAgICAnYWN0aW9uJzogWwogICAgICAg
ICAgICAgJ3B5dGhvbicsCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3Bl
Y3Rvci1pZGwnLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbicsCiAgICAgICAgICAgICAnLW8nLAogICAgICAgICAgICAgJzxAKF9v
dXRwdXRzKScsCiAgICAgICAgICAgICAnPEAoX2lucHV0cyknCiAgICAgICAgICAgXSwKLSAgICAg
ICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZy
b20gSW5zcGVjdG9yLmlkbCcsCisgICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVj
dG9yIHByb3RvY29sIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVy
c2lvbiBmaWxlJywKICAgICAgICAgfQogICAgICAgXQogICAgIH0sCiAgICAgewotICAgICAgJ3Rh
cmdldF9uYW1lJzogJ2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKLSAgICAgICd0eXBlJzog
J25vbmUnLAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2luc3BlY3Rvcl9pZGwn
LAotICAgICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nCi0gICAgICBd
LAotICAgICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUn
OiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbFNvdXJjZXMnLAotICAgICAgICAgICMgVGhlIHNl
Y29uZCBpbnB1dCBpdGVtIHdpbGwgYmUgdXNlZCBhcyBpdGVtIG5hbWUgaW4gdmNwcm9qLgotICAg
ICAgICAgICMgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBJbnNwZWN0b3IuaWRsIHRoZXJlIGJl
Y2F1c2UKLSAgICAgICAgICAjIGFsbCBpZGwgZmlsZXMgYXJlIG1hcmtpbmcgYXMgZXhjbHVkZWQg
YnkgZ3lwIGdlbmVyYXRvci4KLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJy4u
L2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwnLAotICAgICAgICAgICAgJy4u
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtJywKLSAgICAgICAgICAgICcuLi9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRp
bmdzL3NjcmlwdHMvSURMUGFyc2VyLnBtJywKLSAgICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3Jp
cHRzL0lETFN0cnVjdHVyZS5wbScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdv
dXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywKLSAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKLSAg
ICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JGcm9udGVuZC5oJywKLSAgICAgICAg
ICBdLAotICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnZ2VuZXJhdG9yX2lu
Y2x1ZGVfZGlycyc6IFsKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAn
YWN0aW9uJzogWwotICAgICAgICAgICAgJ3B5dGhvbicsCi0gICAgICAgICAgICAnc2NyaXB0cy9y
dWxlX2JpbmRpbmcucHknLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2ViY29yZScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2Via2l0JywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cykn
LAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICctLWRlZmluZXMnLCAnPChmZWF0dXJl
X2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAotICAgICAgICAgICAgJy0tZ2VuZXJhdG9y
JywgJ0luc3BlY3RvcicsCi0gICAgICAgICAgICAnPEAoZ2VuZXJhdG9yX2luY2x1ZGVfZGlycykn
Ci0gICAgICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3Rv
ciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgIH0sCi0gICAg
ICBdCi0gICAgfSwKLSAgICB7CiAgICAgICAndGFyZ2V0X25hbWUnOiAnaW5qZWN0ZWRfc2NyaXB0
X3NvdXJjZScsCiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJlMjE4M2MxZjI5YzQ2Nzk1ODkyNjA1MGNi
ZDk4NGNhOTM5Y2ExOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQor
KysgL2Rldi9udWxsCkBAIC0xLDEyMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LSMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotcGFja2FnZSBDb2RlR2VuZXJhdG9ySW5z
cGVjdG9yOwotCi11c2Ugc3RyaWN0OwotCi11c2UgQ2xhc3M6OlN0cnVjdDsKLXVzZSBGaWxlOjpz
dGF0OwotCi1teSAldHlwZVRyYW5zZm9ybTsKLSR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNh
Y2hlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIs
Ci0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAotfTsK
LSR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNT
U0FnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIsCi0gICAgImRv
bWFpbkFjY2Vzc29yIiA9PiAibV9jc3NBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNvbnNv
bGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNvbnNvbGVBZ2VudCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNz
b3IiID0+ICJtX2NvbnNvbGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlBhZ2UifSA9IHsK
LSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclBhZ2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvclBhZ2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3BhZ2VB
Z2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
RGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RlYnVnZ2VyQWdl
bnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01EZWJ1Z2dlciJ9ID0gewotICAgICJmb3J3YXJk
IiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21E
ZWJ1Z2dlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGF0YWJhc2UifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JEYXRhYmFzZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGF0
YWJhc2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewotICAgICJmb3J3YXJk
IiA9PiAiSW5zcGVjdG9yRE9NQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01B
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbUFnZW50IiwKLX07Ci0kdHlw
ZVRyYW5zZm9ybXsiRE9NU3RvcmFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tU3RvcmFnZUFnZW50IiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiRmlsZVN5c3RlbSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yRmlsZVN5c3RlbUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRmlsZVN5
c3RlbUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZmlsZVN5c3RlbUFnZW50
IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiSW5zcGVjdG9yIn0gPSB7Ci0gICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFnZW50LmgiLAot
ICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQWdlbnQiLAotfTsKLSR0eXBlVHJh
bnNmb3JteyJOZXR3b3JrIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKLSAg
ICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Jlc291cmNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJQcm9maWxlciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV9wcm9maWxlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiUnVudGltZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUnVudGltZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUnVudGltZUFnZW50LmgiLAotICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1fcnVudGltZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVGlt
ZWxpbmUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fdGltZWxpbmVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ildvcmtl
ciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yV29ya2VyQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3Ii
ID0+ICJtX3dvcmtlckFnZW50IiwKLX07Ci0KLSR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmQiLAotICAgICJoZWFkZXIiID0+
ICJJbnNwZWN0b3JGcm9udGVuZC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFzc1JlZlB0ciJ9
ID0gewotICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL1Bhc3NSZWZQdHIuaCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlJlZkNvdW50ZWQifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0
Zi9SZWZDb3VudGVkLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIiwKLX07Ci0kdHlw
ZVRyYW5zZm9ybXsiT2JqZWN0In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IiwKLSAgICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiLAot
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yT2JqZWN0IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yVmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4gIk9iamVjdCIsCi0gICAgIkpTVHlw
ZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7Ci0gICAgInBh
cmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAotICAgICJ2YXJpYWJsZSIgPT4g
IlJlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCkiLAotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXJyYXkiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAi
QXJyYXkiLAotICAgICJKU1R5cGUiID0+ICJvYmplY3QiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJW
YWx1ZSJ9ID0gewotICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwK
LSAgICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKLSAgICAiZGVmYXVs
dFZhbHVlIiA9PiAiSW5zcGVjdG9yVmFsdWU6Om51bGwoKSIsCi0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JWYWx1ZSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAg
ICAiSlNPTlR5cGUiID0+ICJWYWx1ZSIsCi0gICAgIkpTVHlwZSIgPT4gIiIsCi19OwotJHR5cGVU
cmFuc2Zvcm17IlN0cmluZyJ9ID0gewotICAgICJwYXJhbSIgPT4gImNvbnN0IFN0cmluZyYiLAot
ICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IFN0cmluZyogY29uc3QiLAotICAgICJvcHRp
b25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAiU3RyaW5nIiwK
LSAgICAicmV0dXJuIiA9PiAiU3RyaW5nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiXCJcIiIs
Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiaGVhZGVy
IiA9PiAiUGxhdGZvcm1TdHJpbmcuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiU3RyaW5nIiwKLSAg
ICAiSlNUeXBlIiA9PiAic3RyaW5nIgotfTsKLSR0eXBlVHJhbnNmb3JteyJsb25nIn0gPSB7Ci0g
ICAgInBhcmFtIiA9PiAibG9uZyIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgbG9u
ZyogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZh
cmlhYmxlIiA9PiAibG9uZyIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAiLAotICAgICJmb3J3
YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1i
ZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImludCJ9
ID0gewotICAgICJwYXJhbSIgPT4gImludCIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29u
c3QgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAg
ICAidmFyaWFibGUiID0+ICJpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwIiwKLSAgICAi
Zm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAi
TnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ1
bnNpZ25lZCBsb25nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAidW5zaWduZWQgbG9uZyIsCi0gICAg
Im9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgbG9uZyogY29uc3QiLAotICAgICJv
cHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAidW5zaWdu
ZWQgbG9uZyIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjB1IiwKLSAgICAiZm9yd2FyZCIgPT4g
IiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAg
ICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQi
fSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBpbnQiLAotICAgICJvcHRpb25hbF9wYXJh
bSIgPT4gImNvbnN0IHVuc2lnbmVkIGludCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFj
Y2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAidW5zaWduZWQgaW50IiwKLSAgICAi
ZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVy
IiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJu
dW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImRvdWJsZSJ9ID0gewotICAgICJwYXJhbSIgPT4g
ImRvdWJsZSIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgZG91YmxlKiBjb25zdCIs
Ci0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+
ICJkb3VibGUiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwLjAiLAotICAgICJmb3J3YXJkIiA9
PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAot
ICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9
IHsKLSAgICAicGFyYW0iID0+ICJib29sIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25z
dCBib29sKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAg
ICAidmFyaWFibGUiPT4gImJvb2wiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJmYWxzZSIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIkJvb2xlYW4iLAotICAgICJKU1R5cGUiID0+ICJib29sZWFuIgotfTsKLSR0eXBlVHJhbnNm
b3JteyJ2b2lkIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIi
Ci19OwotJHR5cGVUcmFuc2Zvcm17IlZlY3RvciJ9ID0gewotICAgICJoZWFkZXIiID0+ICJ3dGYv
VmVjdG9yLmgiCi19OwotCi0jIERlZmF1bHQgTGljZW5zZSBUZW1wbGF0ZXMKLQotbXkgJGxpY2Vu
c2VUZW1wbGF0ZSA9IDw8ICJFT0YiOwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLUVPRgotCi1teSAkY29kZUdlbmVyYXRvcjsKLW15ICRv
dXRwdXREaXI7Ci1teSAkb3V0cHV0SGVhZGVyc0RpcjsKLW15ICR3cml0ZURlcGVuZGVuY2llczsK
LW15ICR2ZXJib3NlOwotCi1teSAkbmFtZXNwYWNlOwotCi1teSAkYmFja2VuZENsYXNzTmFtZTsK
LW15ICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlvbjsKLW15ICRiYWNrZW5kSlNTdHViTmFtZTsKLW15
ICViYWNrZW5kVHlwZXM7Ci1teSBAYmFja2VuZE1ldGhvZHM7Ci1teSBAYmFja2VuZE1ldGhvZHNJ
bXBsOwotbXkgJWJhY2tlbmRNZXRob2RTaWduYXR1cmVzOwotbXkgJGJhY2tlbmRDb25zdHJ1Y3Rv
cjsKLW15IEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnM7Ci1teSBAYmFja2VuZENvbnN0YW50
RGVmaW5pdGlvbnM7Ci1teSBAYmFja2VuZEZvb3RlcjsKLW15IEBiYWNrZW5kSlNTdHViczsKLW15
IEBiYWNrZW5kSlNFdmVudHM7Ci1teSAlYmFja2VuZERvbWFpbnM7Ci0KLW15ICRmcm9udGVuZENs
YXNzTmFtZTsKLW15ICVmcm9udGVuZFR5cGVzOwotbXkgQGZyb250ZW5kTWV0aG9kczsKLW15IEBm
cm9udGVuZEFnZW50RmllbGRzOwotbXkgQGZyb250ZW5kTWV0aG9kc0ltcGw7Ci1teSAlZnJvbnRl
bmRNZXRob2RTaWduYXR1cmVzOwotbXkgJGZyb250ZW5kQ29uc3RydWN0b3I7Ci1teSBAZnJvbnRl
bmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBmcm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnM7
Ci1teSBAZnJvbnRlbmRGb290ZXI7Ci1teSBAZnJvbnRlbmREb21haW5zOwotCi0jIERlZmF1bHQg
Y29uc3RydWN0b3IKLXN1YiBuZXcKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkg
JHJlZmVyZW5jZSA9IHsgfTsKLQotICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7Ci0gICAgJG91
dHB1dERpciA9IHNoaWZ0OwotICAgICRvdXRwdXRIZWFkZXJzRGlyID0gc2hpZnQ7Ci0gICAgc2hp
ZnQ7ICMgJHVzZUxheWVyT25Ub3AKLSAgICBzaGlmdDsgIyAkcHJlcHJvY2Vzc29yCi0gICAgJHdy
aXRlRGVwZW5kZW5jaWVzID0gc2hpZnQ7Ci0gICAgJHZlcmJvc2UgPSBzaGlmdDsKLQotICAgIGJs
ZXNzKCRyZWZlcmVuY2UsICRvYmplY3QpOwotICAgIHJldHVybiAkcmVmZXJlbmNlOwotfQotCi0j
IFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZU1vZHVsZQotewotICAg
IG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKLQotICAgICRu
YW1lc3BhY2UgPSAkZGF0YU5vZGUtPm1vZHVsZTsKLSAgICAkbmFtZXNwYWNlID1+IHMvY29yZS9X
ZWJDb3JlLzsKLQotICAgICRmcm9udGVuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JGcm9udGVuZCI7
Ci0gICAgJGZyb250ZW5kQ29uc3RydWN0b3IgPSAiICAgICR7ZnJvbnRlbmRDbGFzc05hbWV9KElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOyI7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICJw
cml2YXRlOiIpOwotICAgIHB1c2goQGZyb250ZW5kRm9vdGVyLCAiICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Iik7Ci0gICAgJGZyb250ZW5k
VHlwZXN7IlN0cmluZyJ9ID0gMTsKLSAgICAkZnJvbnRlbmRUeXBlc3siSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwot
Ci0gICAgJGJhY2tlbmRDbGFzc05hbWUgPSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIiOwot
ICAgICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlvbiA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IjsKLSAgICAk
YmFja2VuZEpTU3R1Yk5hbWUgPSAiSW5zcGVjdG9yQmFja2VuZFN0dWIiOwotICAgICRiYWNrZW5k
VHlwZXN7Ikluc3BlY3RvciJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siUGFzc1JlZlB0ciJ9ID0gMTsK
LSAgICAkYmFja2VuZFR5cGVzeyJSZWZDb3VudGVkIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7
Ik9iamVjdCJ9ID0gMTsKLX0KLQotIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0Ci1zdWIg
R2VuZXJhdGVJbnRlcmZhY2UKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGlu
dGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7Ci0KLSAgICBteSAlYWdl
bnQgPSAoCi0gICAgICAgIG1ldGhvZERlY2xhcmF0aW9ucyA9PiBbXSwKLSAgICAgICAgbWV0aG9k
U2lnbmF0dXJlcyA9PiB7fQotICAgICk7Ci0gICAgZ2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFj
ZSwgXCVhZ2VudCk7Ci0gICAgaWYgKEB7JGFnZW50e21ldGhvZERlY2xhcmF0aW9uc319KSB7Ci0g
ICAgICAgIHB1c2goQGZyb250ZW5kRG9tYWlucywgJGludGVyZmFjZS0+bmFtZSk7Ci0gICAgICAg
IGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbigkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICB9Ci19
Ci0KLXN1YiBnZW5lcmF0ZUFnZW50RGVjbGFyYXRpb24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0g
c2hpZnQ7Ci0gICAgbXkgJGFnZW50ID0gc2hpZnQ7Ci0gICAgbXkgJGFnZW50TmFtZSA9ICRpbnRl
cmZhY2UtPm5hbWU7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIGNsYXNzICR7YWdl
bnROYW1lfSB7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIHB1YmxpYzoiKTsK
LSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgICR7YWdlbnROYW1lfShJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfSIpOwotICAgIHB1
c2goQGZyb250ZW5kTWV0aG9kcywgQHskYWdlbnQtPnttZXRob2REZWNsYXJhdGlvbnN9fSk7Ci0g
ICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9k
cywgIiAgICBwcml2YXRlOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsK
LSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgfTsiKTsKLSAgICBwdXNoKEBmcm9udGVu
ZE1ldGhvZHMsICIiKTsKLQotICAgIG15ICRnZXR0ZXJOYW1lID0gbGMoJGFnZW50TmFtZSk7Ci0g
ICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICR7YWdlbnROYW1lfSogJHtnZXR0ZXJOYW1l
fSgpIHsgcmV0dXJuICZtXyR7Z2V0dGVyTmFtZX07IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1l
dGhvZHMsICIiKTsKLQotICAgIHB1c2goQGZyb250ZW5kRm9vdGVyLCAiICAgICR7YWdlbnROYW1l
fSBtXyR7Z2V0dGVyTmFtZX07Iik7Ci0KLSAgICBwdXNoKEBmcm9udGVuZEFnZW50RmllbGRzLCAi
bV8ke2dldHRlck5hbWV9Iik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZyb250ZW5kQ29uc3RydWN0b3JJ
bXBsCi17Ci0gICAgbXkgQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsOwotICAgIHB1c2goQGZyb250
ZW5kQ29uc3RydWN0b3JJbXBsLCAiJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZnJvbnRlbmRDbGFz
c05hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSIpOwotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAiICAgIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIGZvcmVh
Y2ggbXkgJGFnZW50RmllbGQgKEBmcm9udGVuZEFnZW50RmllbGRzKSB7Ci0gICAgICAgIHB1c2go
QGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAiICAgICwgJHthZ2VudEZpZWxkfShpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIik7Ci0gICAgfQotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJ
bXBsLCAieyIpOwotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAifSIpOwotICAg
IHJldHVybiBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZ1bmN0
aW9ucwotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlm
dDsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30p
IHsKLSAgICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiZXZlbnQifSkgewotICAgICAgICAgICAgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uKCRpbnRl
cmZhY2UsICRmdW5jdGlvbiwgJGFnZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uKCRpbnRlcmZhY2UsICRmdW5jdGlvbik7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBjb2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0aW9ucygkaW50ZXJmYWNl
KTsKLSAgICBjb2xsZWN0QmFja2VuZEpTU3R1YkV2ZW50cygkaW50ZXJmYWNlKTsKLX0KLQotc3Vi
IGdlbmVyYXRlRnJvbnRlbmRGdW5jdGlvbgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsK
LSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLQotICAg
IG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLQotICAgIG15
ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVw
KCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMganVz
dCBrZWVwIG9ubHkgb3V0IHBhcmFtZXRlcnMgZm9yIGZyb250ZW5kIGludGVyZmFjZS4KLSAgICBt
YXAoJGZyb250ZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0
ZXIgcmVxdWlyZWQgdHlwZXMuCi0gICAgbXkgJGFyZ3VtZW50cyA9IGpvaW4oIiwgIiwgbWFwKHBh
cmFtVHlwZVRyYWl0cygkXywgInBhcmFtIikgLiAiICIgLiAkXy0+bmFtZSwgQGFyZ3NGaWx0ZXJl
ZCkpOyAjIHByZXBhcmUgYXJndW1lbnRzIGZvciBmdW5jdGlvbiBzaWduYXR1cmUuCi0KLSAgICBt
eSAkc2lnbmF0dXJlID0gIiAgICAgICAgdm9pZCAke2Z1bmN0aW9uTmFtZX0oJHthcmd1bWVudHN9
KTsiOwotICAgICEkYWdlbnQtPnttZXRob2RTaWduYXR1cmVzfS0+eyRzaWduYXR1cmV9IHx8IGRp
ZSAiRHVwbGljYXRlIGZyb250ZW5kIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJl
ICckc2lnbmF0dXJlJy4iOwotICAgICRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25h
dHVyZX0gPSAxOwotICAgIHB1c2goQHskYWdlbnQtPnttZXRob2REZWNsYXJhdGlvbnN9fSwgJHNp
Z25hdHVyZSk7Ci0KLSAgICBteSBAZnVuY3Rpb247Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lk
ICR7ZnJvbnRlbmRDbGFzc05hbWV9Ojoke2RvbWFpbn06OiR7ZnVuY3Rpb25OYW1lfSgke2FyZ3Vt
ZW50c30pIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24s
ICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gJHtmdW5jdGlvbk5hbWV9TWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtm
dW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwibWV0aG9kXCIsIFwiJGRvbWFpbi4kZnVu
Y3Rpb25OYW1lXCIpOyIpOwotICAgIGlmIChzY2FsYXIoQGFyZ3NGaWx0ZXJlZCkpIHsKLSAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLQotICAgICAgICBmb3JlYWNoIG15
ICRwYXJhbWV0ZXIgKEBhcmdzRmlsdGVyZWQpIHsKLSAgICAgICAgICAgIG15ICRvcHRpb25hbCA9
ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gImlmICgiIC4g
JHBhcmFtZXRlci0+bmFtZSAuICIpXG4gICAgICAgICIgOiAiIjsKLSAgICAgICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICIgLiAkb3B0aW9uYWwgLiAicGFyYW1zT2JqZWN0LT5zZXQiIC4gcGFy
YW1UeXBlVHJhaXRzKCRwYXJhbWV0ZXIsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVy
LT5uYW1lIC4gIlwiLCAiIC4gcGFyYW1UeXBlVHJhaXRzKCRwYXJhbWV0ZXIsICJ2YWx1ZUFjY2Vz
c29yIikgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0T2JqZWN0KFwicGFy
YW1zXCIsIHBhcmFtc09iamVjdCk7Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCgke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICJ9Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmcm9u
dGVuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24pOwotfQotCi1zdWIgY2FtZWxDYXNlCi17Ci0gICAg
bXkgJHZhbHVlID0gc2hpZnQ7Ci0gICAgJHZhbHVlID1+IHMvXGIoXHcpL1xVJDEvZzsgIyBtYWtl
IGEgY2FtZWwtY2FzZSBuYW1lIGZvciB0eXBlIG5hbWUKLSAgICAkdmFsdWUgPX4gcy8gLy9nOwot
ICAgIHJldHVybiAkdmFsdWU7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgotewot
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLQot
ICAgIG15ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICBt
eSAkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiXyIgLiAk
ZnVuY3Rpb25OYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90ID0gJGlu
dGVyZmFjZS0+bmFtZSAuICIuIiAuICRmdW5jdGlvbk5hbWU7Ci0KLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgICAgIGske2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5h
bWV9Q21kLCIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiICAgIFwi
JHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90fVwiLCIpOwotCi0gICAgbWFwKCRiYWNrZW5k
VHlwZXN7JF8tPnR5cGV9ID0gMSwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsgIyByZWdpc3Rl
ciByZXF1aXJlZCB0eXBlcwotICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEg
ImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICBteSBAb3V0QXJncyA9IGdyZXAo
JF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAK
LSAgICBteSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFt
ZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyI7
Ci0gICAgISRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3ske3NpZ25hdHVyZX19IHx8IGRpZSAiRHVw
bGljYXRlIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4i
OwotICAgICRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3ske3NpZ25hdHVyZX19ID0gIiRmdWxsUXVh
bGlmaWVkRnVuY3Rpb25OYW1lIjsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kcywgJHtzaWduYXR1
cmV9KTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBteSAkcmVxdWVzdE1lc3NhZ2VPYmplY3Qg
PSBzY2FsYXIoQGluQXJncykgPyAiIHJlcXVlc3RNZXNzYWdlT2JqZWN0IiA6ICIiOwotICAgIHB1
c2goQGZ1bmN0aW9uLCAidm9pZCAke2JhY2tlbmRDbGFzc05hbWV9Ojoke2Z1bGxRdWFsaWZpZWRG
dW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdl
T2JqZWN0KSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwotICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLQotICAgIG15ICRk
b21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIG15ICRkb21haW5BY2Nlc3NvciA9IHR5cGVU
cmFpdHMoJGRvbWFpbiwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgJGJhY2tlbmRUeXBlc3skZG9t
YWlufSA9IDE7Ci0gICAgJGJhY2tlbmREb21haW5zeyRkb21haW59ID0gMTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBpZiAoISRkb21haW5BY2Nlc3NvcikiKTsKLSAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoXCIkZG9tYWluIGhhbmRsZXIg
aXMgbm90IGF2YWlsYWJsZS5cIik7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLQotICAg
ICMgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMuCi0gICAgaWYgKHNj
YWxhcihAb3V0QXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sIG1hcCgiICAgICIgLiB0
eXBlVHJhaXRzKCRfLT50eXBlLCAidmFyaWFibGUiKSAuICIgb3V0XyIgLiAkXy0+bmFtZSAuICIg
PSAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgImRlZmF1bHRWYWx1ZSIpIC4gIjsiLCBAb3V0QXJn
cykpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIH0KLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICBFcnJvclN0cmluZyBlcnJvcjsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwotCi0gICAgbXkgJGluZGVudCA9ICIiOwotICAgIGlmIChzY2FsYXIoQGluQXJncykpIHsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdChcInBhcmFtc1wiKTsi
KTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOyIpOwotCi0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJn
cykgewotICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOwotICAgICAgICAg
ICAgbXkgJHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOwotICAgICAgICAgICAgbXkgJHR5cGVTdHJp
bmcgPSBjYW1lbENhc2UoJHBhcmFtZXRlci0+dHlwZSk7Ci0gICAgICAgICAgICBteSAkb3B0aW9u
YWxGbGFnQXJndW1lbnQgPSAiMCI7Ci0gICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICBib29sICR7bmFtZX1fdmFsdWVGb3VuZCA9IGZhbHNlOyIpOwotICAgICAgICAg
ICAgICAgICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICImJHtuYW1lfV92YWx1ZUZvdW5kIjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiB0eXBlVHJh
aXRzKCR0eXBlLCAidmFyaWFibGUiKSAuICIgaW5fJG5hbWUgPSBnZXQkdHlwZVN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsIFwiJG5hbWVcIiwgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50LCBwcm90b2Nv
bEVycm9yc1B0cik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsK
LSAgICAgICAgJGluZGVudCA9ICIgICAgIjsKLSAgICB9Ci0KLSAgICBteSAkYXJncyA9IGpvaW4o
IiwgIiwKLSAgICAgICAgICAgICAgICAgICAgKCImZXJyb3IiLAotICAgICAgICAgICAgICAgICAg
ICAgbWFwKCgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAkXy0+bmFtZSAuICJfdmFsdWVGb3VuZCA/ICZpbl8iIC4gJF8tPm5h
bWUgLiAiIDogMCIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5fIiAuICRfLT5uYW1l
KSwgQGluQXJncyksCi0gICAgICAgICAgICAgICAgICAgICBtYXAoIiZvdXRfIiAuICRfLT5uYW1l
LCBAb3V0QXJncykpKTsKLQotICAgIHB1c2goQGZ1bmN0aW9uLCAkaW5kZW50IC4gImlmICghcHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAkaW5kZW50IC4g
IiAgICAkZG9tYWluQWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBpZiAo
c2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIXBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsiKTsKLSAgICAgICAg
Zm9yZWFjaCBteSAkcGFyYW1ldGVyIChAb3V0QXJncykgewotICAgICAgICAgICAgbXkgJG9mZnNl
dCA9ICIgICAgICAgICI7Ci0gICAgICAgICAgICAjIERvbid0IGFkZCBvcHRpb25hbCBib29sZWFu
IHBhcmFtZXRlciB0byB0aGUgcmVzdWx0IHVubGVzcyBpdCBpcyAidHJ1ZSIKLSAgICAgICAgICAg
IGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSAmJiAkcGFy
YW1ldGVyLT50eXBlIGVxICJib29sZWFuIikgewotICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAkb2Zmc2V0IC4gImlmIChvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSIpOwotICAg
ICAgICAgICAgICAgICRvZmZzZXQgLj0gIiAgICAiOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAicmVzdWx0LT5zZXQiIC4gdHlwZVRyYWl0cygk
cGFyYW1ldGVyLT50eXBlLCAiSlNPTlR5cGUiKSAuICIoXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAu
ICJcIiwgb3V0XyIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIik7Iik7Ci0gICAgICAgIH0KLSAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgfSIpOwotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBzZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KFwiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkXCIsIFwiJGZ1bGxRdWFs
aWZpZWRGdW5jdGlvbk5hbWVEb3RcIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Iik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICJ9Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNo
KEBiYWNrZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tl
bmRTZW5kUmVzcG9uc2UKLXsKLSAgICBteSAkc2VuZFJlc3BvbnNlID0gPDwgIkVPRiI7Ci0KLXZv
aWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGlu
dm9jYXRpb25FcnJvcikKLXsKLSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JN
ZXNzYWdlLCBwcm90b2NvbEVycm9ycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVj
dCgicmVzdWx0IiwgcmVzdWx0KTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQi
LCBjYWxsSWQpOwotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25z
ZU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKLX0gICAgCi1FT0YKLSAgICByZXR1cm4gc3BsaXQo
IlxuIiwgJHNlbmRSZXNwb25zZSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90
b2NvbEVycm9yCi17Ci0gICAgbXkgJHJlcG9ydFByb3RvY29sRXJyb3IgPSA8PCAiRU9GIjsKLQot
dm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcq
IGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKSBjb25zdAotewotICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBjb2RlLCBl
cnJvck1lc3NhZ2UsIDApOwotfQotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFBy
b3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGRhdGEpIGNvbnN0Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50PixzX2Nv
bW1vbkVycm9ycywpOwotICAgIGlmICghc19jb21tb25FcnJvcnMuc2l6ZSgpKSB7Ci0gICAgICAg
IHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3MDApOwotICAgICAgICBzX2Nv
bW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7Ci0gICAgICAgIHNfY29t
bW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsKLSAgICAgICAgc19jb21t
b25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7Ci0gICAgICAgIHNfY29tbW9u
RXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwotICAgICAgICBzX2NvbW1vbkVy
cm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7Ci0gICAgfQotICAgIEFTU0VSVChjb2Rl
ID49MCk7Ci0gICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19jb21tb25FcnJvcnMuc2l6ZSgp
KTsKLSAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlcnJvci0+
c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIGVycm9yLT5zZXRT
dHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwotICAgIEFTU0VSVChlcnJvcik7Ci0gICAg
aWYgKGRhdGEpCi0gICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJvcik7Ci0gICAgaWYgKGNhbGxJ
ZCkKLSAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpjYWxsSWQpOwotICAgIGVsc2UK
LSAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7
Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotICAgICAgICBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkcmVwb3J0UHJvdG9jb2xF
cnJvcik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUFyZ3VtZW50R2V0dGVycwotewotICAgIG15ICR0eXBl
ID0gc2hpZnQ7Ci0gICAgbXkgJGpzb24gPSB0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUiKTsK
LSAgICBteSAkdmFyaWFibGUgPSB0eXBlVHJhaXRzKCR0eXBlLCAidmFyaWFibGUiKTsKLSAgICBt
eSAkZGVmYXVsdFZhbHVlID0gdHlwZVRyYWl0cygkdHlwZSwgImRlZmF1bHRWYWx1ZSIpOwotICAg
IG15ICRyZXR1cm4gID0gdHlwZVRyYWl0cygkdHlwZSwgInJldHVybiIpID8gdHlwZVRyYWl0cygk
dHlwZSwgInJldHVybiIpIDogdHlwZVRyYWl0cygkdHlwZSwgInBhcmFtIik7Ci0KLSAgICBteSAk
dHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkdHlwZSk7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCAiICAgIHN0YXRpYyAkcmV0dXJuIGdldCR0eXBlU3RyaW5nKEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Iik7Ci0gICAgbXkgJGdldHRlckJvZHkgPSA8
PCAiRU9GIjsKLQotJHJldHVybiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JHR5cGVT
dHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQotewotICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7Ci0KLSAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgKnZhbHVl
Rm91bmQgPSBmYWxzZTsKLQotICAgICR2YXJpYWJsZSB2YWx1ZSA9ICRkZWZhdWx0VmFsdWU7Ci0K
LSAgICBpZiAoIW9iamVjdCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKLSAgICAgICAg
ICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCi0g
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3Bh
cmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJ1wlcycgd2l0aCB0
eXBlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKLSAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0KLSAgICBpZiAodmFsdWVJ
dGVyYXRvciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQotICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVz
JyB3aXRoIHR5cGUgJyRqc29uJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZUl0ZXJhdG9y
LT5zZWNvbmQtPmFzJGpzb24oJnZhbHVlKSkKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVzJyBoYXMgd3JvbmcgdHlwZS4gSXQg
bXVzdCBiZSAnJGpzb24nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAg
ICAgaWYgKHZhbHVlRm91bmQpCi0gICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7Ci0gICAg
cmV0dXJuIHZhbHVlOwotfQotRU9GCi0KLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGdldHRlckJv
ZHkpOwotfQotCi1zdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcgotewotICAgIG15IEBib2R5
OwotICAgIG15IEBtYXBFbnRyaWVzID0gbWFwKCIgICAgICAgICYke2JhY2tlbmRDbGFzc05hbWV9
OjokXywiLCBtYXAgKCRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3skX30sIEBiYWNrZW5kTWV0aG9k
cykpOwotICAgIG15ICRtYXBFbnRyaWVzID0gam9pbigiXG4iLCBAbWFwRW50cmllcyk7Ci0KLSAg
ICBteSAkYmFja2VuZERpc3BhdGNoZXJCb2R5ID0gPDwgIkVPRiI7Ci12b2lkICR7YmFja2VuZENs
YXNzTmFtZX06OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBSZWZQdHI8
JHtiYWNrZW5kQ2xhc3NOYW1lfT4gcHJvdGVjdCA9IHRoaXM7Ci0gICAgdHlwZWRlZiB2b2lkICgk
e2JhY2tlbmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JP
YmplY3QqIG1lc3NhZ2VPYmplY3QpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFw
LCBkaXNwYXRjaE1hcCwgKTsKLSAgICBsb25nIGNhbGxJZCA9IDA7Ci0KLSAgICBpZiAoZGlzcGF0
Y2hNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1td
ID0gewotJG1hcEVudHJpZXMKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNp
emVvZihjb21tYW5kTmFtZXMpIC8gc2l6ZW9mKGNvbW1hbmROYW1lc1swXSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1h
cC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tpXSk7Ci0gICAgfQotCi0gICAgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNP
TihtZXNzYWdlKTsKLSAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKLSAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigwLCBQYXJzZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW1l
c3NhZ2VPYmplY3QpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVx
dWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBt
ZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZSkgewotICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3
YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxJ
ZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KDAsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51
bWJlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgibWV0aG9kIik7Ci0gICAgaWYg
KCFtZXRob2RWYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
dmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWV0aG9kOwotICAgIGlmICghbWV0aG9kVmFs
dWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0
IGJlIHN0cmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7
Ci0gICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24n
dCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKml0LT5z
ZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7Ci19Ci1FT0YKLSAgICByZXR1cm4g
c3BsaXQoIlxuIiwgJGJhY2tlbmREaXNwYXRjaGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJh
Y2tlbmRNZXNzYWdlUGFyc2VyCi17Ci0gICAgbXkgJG1lc3NhZ2VQYXJzZXJCb2R5ID0gPDwgIkVP
RiI7Ci1ib29sICR7YmFja2VuZENsYXNzTmFtZX06OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCF2
YWx1ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJl
c3VsdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotRU9G
Ci0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRtZXNzYWdlUGFyc2VyQm9keSk7Ci19Ci0KLXN1YiBj
b2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0aW9ucwotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlm
dDsKLSAgICBteSBAZnVuY3Rpb25zID0gZ3JlcCghJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57ImV2ZW50In0sIEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRv
bWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1
bmN0aW9ucykgewotICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgICAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1
bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigK
LSAgICAgICAgICAgICIsIiwKLSAgICAgICAgICAgIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCI6
IHsiCi0gICAgICAgICAgICAgICAgLiAiXCJvcHRpb25hbFwiOiAiIC4gKCRfLT5leHRlbmRlZEF0
dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/ICJ0cnVlICIgOiAiZmFsc2UiKSAuICIsICIKLSAgICAg
ICAgICAgICAgICAuICJcInR5cGVcIjogXCIiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgIkpTVHlw
ZSIpIC4gIlwiIgotICAgICAgICAgICAgICAgIC4gIn0iLAotICAgICAgICAgICAgICAgICBAaW5B
cmdzKSk7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRKU1N0dWJzLCAiICAgIHRoaXMuX3JlZ2lzdGVy
RGVsZWdhdGUoJ3siIC4KLSAgICAgICAgICAgICJcIm1ldGhvZFwiOiBcIiRkb21haW4uJG5hbWVc
IiwgIiAuCi0gICAgICAgICAgICAoc2NhbGFyKEBpbkFyZ3MpID8gIlwicGFyYW1zXCI6IHskYXJn
dW1lbnROYW1lc30sICIgOiAiIikgLgotICAgICAgICAgICAgIlwiaWRcIjogMCIgLgotICAgICAg
ICAifScpOyIpOwotICAgIH0KLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzCi17
Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCRf
LT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9LCBAeyRpbnRlcmZhY2Ut
PmZ1bmN0aW9uc30pOwotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotCi0gICAg
Zm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKLSAgICAgICAgbXkgJG5hbWUgPSAk
ZG9tYWluIC4gIi4iIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBv
dXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1l
dGVyc30pOwotICAgICAgICBteSAkYXJndW1lbnROYW1lcyA9IGpvaW4oIiwiLCBtYXAoIlwiIiAu
ICRfLT5uYW1lIC4gIlwiIiAsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRKU0V2
ZW50cywgIiAgICB0aGlzLl9ldmVudEFyZ3NbXCIiIC4gJG5hbWUgLiAiXCJdID0gWyIgLiAkYXJn
dW1lbnROYW1lcyAuIl07Iik7Ci0gICAgfQotfQotCi1zdWIgZ2VuZXJhdGVCYWNrZW5kU3R1YkpT
Ci17Ci0gICAgbXkgJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycyA9IGpvaW4oIlxuIiwgbWFw
KCIgICAgdGhpcy5yZWdpc3RlciIgLiAkXyAuICJEaXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIiIC4gJF8gLiJcIik7IiwgQGZyb250ZW5kRG9t
YWlucykpOwotICAgIG15ICRKU1N0dWJzID0gam9pbigiXG4iLCBAYmFja2VuZEpTU3R1YnMpOwot
ICAgIG15ICRKU0V2ZW50cyA9IGpvaW4oIlxuIiwgQGJhY2tlbmRKU0V2ZW50cyk7Ci0gICAgbXkg
JGluc3BlY3RvckJhY2tlbmRTdHViSlMgPSA8PCAiRU9GIjsKLSRsaWNlbnNlVGVtcGxhdGUKLQot
SW5zcGVjdG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fbGFzdENhbGxi
YWNrSWQgPSAxOwotICAgIHRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCA9IDA7Ci0gICAgdGhp
cy5fY2FsbGJhY2tzID0ge307Ci0gICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMgPSB7fTsKLSAg
ICB0aGlzLl9ldmVudEFyZ3MgPSB7fTsKLSRKU1N0dWJzCi0kSlNFdmVudHMKLSRKU1JlZ2lzdGVy
RG9tYWluRGlzcGF0Y2hlcnMKLX0KLQotSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0g
ewotICAgIGR1bXBJbnNwZWN0b3JUaW1lU3RhdHM6IDAsCi0gICAgZHVtcEluc3BlY3RvclByb3Rv
Y29sTWVzc2FnZXM6IDAsCi0KLSAgICBfd3JhcDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewot
ICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7Ci0gICAgICAg
IHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307
Ci0gICAgICAgIHJldHVybiBjYWxsYmFja0lkOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEZWxl
Z2F0ZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZykKLSAgICB7Ci0gICAgICAgIHZhciBkb21haW5B
bmRGdW5jdGlvbiA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZykubWV0aG9kLnNwbGl0KCIuIik7
Ci0gICAgICAgIHZhciBhZ2VudE5hbWUgPSBkb21haW5BbmRGdW5jdGlvblswXSArICJBZ2VudCI7
Ci0gICAgICAgIGlmICghd2luZG93W2FnZW50TmFtZV0pCi0gICAgICAgICAgICB3aW5kb3dbYWdl
bnROYW1lXSA9IHt9OwotICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlv
blsxXV0gPSB0aGlzLl9zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJp
bmcpOwotICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV1bImlu
dm9rZSJdID0gdGhpcy5faW52b2tlLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZykKLSAgICB9LAot
Ci0gICAgX2ludm9rZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZywgYXJncywgY2FsbGJhY2spCi0g
ICAgewotICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZyk7Ci0g
ICAgICAgIHJlcXVlc3QucGFyYW1zID0gYXJnczsKLSAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNr
QW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBf
c2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBhcmdz
ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgdmFyIHJl
cXVlc3QgPSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7Ci0gICAgICAgIHZhciBjYWxsYmFjayA9
IChhcmdzLmxlbmd0aCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rp
b24iKSA/IGFyZ3MucG9wKCkgOiAwOwotICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVx
dWVzdC5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWlu
QW5kTWV0aG9kWzBdICsgIkFnZW50LiIgKyBkb21haW5BbmRNZXRob2RbMV07Ci0KLSAgICAgICAg
dmFyIGhhc1BhcmFtcyA9IGZhbHNlOwotICAgICAgICBpZiAocmVxdWVzdC5wYXJhbXMpIHsKLSAg
ICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFtcykgewotICAgICAgICAgICAg
ICAgIHZhciB0eXBlTmFtZSA9IHJlcXVlc3QucGFyYW1zW2tleV0udHlwZTsKLSAgICAgICAgICAg
ICAgICB2YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVzdC5wYXJhbXNba2V5XS5vcHRpb25hbDsKLQot
ICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZh
bGlkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicg
Y2FsbC4gSXQgbXVzdCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5
KHJlcXVlc3QucGFyYW1zKSArICInLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlm
dCgpOwotICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09
PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJh
bXNba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQg
dHlwZSBvZiBhcmd1bWVudCAnIiArIGtleSArICInIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhv
ZCArICInIGNhbGwuIEl0IG11c3QgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiAr
IHR5cGVvZiB2YWx1ZSArICInLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZh
bHVlOwotICAgICAgICAgICAgICAgIGhhc1BhcmFtcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpZiAoIWhhc1BhcmFtcykKLSAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVz
dC5wYXJhbXM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYg
IWNhbGxiYWNrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmlu
ZWQiKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9w
dGlvbmFsIGNhbGxiYWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICIn
IGNhbGwgbXVzdCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnIiArIHR5cGVvZiBhcmdz
WzBdICsgIicuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3Qo
cmVxdWVzdCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfd3JhcENhbGxiYWNrQW5kU2VuZE1l
c3NhZ2VPYmplY3Q6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QsIGNhbGxiYWNrKQotICAgIHsKLSAg
ICAgICAgbWVzc2FnZU9iamVjdC5pZCA9IHRoaXMuX3dyYXAoY2FsbGJhY2spOwotCi0gICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpIHsKLSAgICAgICAgICAgIHZhciB3cmFw
cGVkQ2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAg
ICAgICB3cmFwcGVkQ2FsbGJhY2subWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QubWV0aG9kOwot
ICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSA9IERhdGUubm93KCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNz
YWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5n
aWZ5KG1lc3NhZ2VPYmplY3QpKTsKLQotICAgICAgICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXND
b3VudDsKLSAgICAgICAgdGhpcy5zZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2Jq
ZWN0KTsKLSAgICB9LAotCi0gICAgc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9u
KG1lc3NhZ2VPYmplY3QpCi0gICAgewotICAgICAgICBjb25zb2xlLnRpbWVTdGFtcChtZXNzYWdl
T2JqZWN0Lm1ldGhvZCk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVz
c2FnZU9iamVjdCk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRv
QmFja2VuZChtZXNzYWdlKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
cjogZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9t
YWluRGlzcGF0Y2hlcnNbZG9tYWluXSA9IGRpc3BhdGNoZXI7Ci0gICAgfSwKLQotICAgIGRpc3Bh
dGNoOiBmdW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclByb3RvY29sTWVzc2FnZXMpCi0gICAgICAgICAgICBjb25zb2xlLmxvZygiYmFja2VuZDog
IiArICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlKSkpOwotCi0gICAgICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBt
ZXNzYWdlID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKLQot
ICAgICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBm
b3Igc29tZSByZXF1ZXN0Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvcikgewot
ICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QuZXJyb3IuX19wcm90b19fID0gewotICAgICAg
ICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogZnVuY3Rpb24oKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGhpcy5jb2RlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI3MDA6IHJldHVybiAiUGFyc2UgZXJyb3Ii
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAwOiByZXR1cm4gIkludmFs
aWQgUmVxdWVzdCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDE6IHJl
dHVybiAiTWV0aG9kIG5vdCBmb3VuZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAtMzI2MDI6IHJldHVybiAiSW52YWxpZCBwYXJhbXMiOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgLTMyNjAzOiByZXR1cm4gIkludGVybmFsIGVycm9yIjs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAtMzIwMDA6IHJldHVybiAiU2VydmVyIGVycm9yIjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAg
ICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSJVbmtub3duIGVycm9y
IGNvZGUiOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRp
b24oKSArICIoIiArIHRoaXMuY29kZSArICIpOiAiICsgdGhpcy5tZXNzYWdlICsgIi4iICsgKHRo
aXMuZGF0YSA/ICIgIiArIHRoaXMuZGF0YS5qb2luKCIgIikgOiAiIik7Ci0gICAgICAgICAgICAg
ICAgICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TWVzc2FnZTogZnVuY3Rpb24oKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5tZXNzYWdlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IuY29kZSAhPT0gLTMyMDAwKQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVj
dCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKLSAg
ICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnJlc3VsdCkgewotICAgICAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LnJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAg
YXJndW1lbnRzLnB1c2gobWVzc2FnZU9iamVjdC5yZXN1bHRba2V5XSk7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2Jq
ZWN0LmlkXTsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZh
ciBwcm9jZXNzaW5nU3RhcnRUaW1lOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNw
ZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAgICAgICAgICAgICAg
ICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLSAgICAgICAgICAgICAgICBh
cmd1bWVudHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAgICAgICAgICAgICAgICBj
YWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIC0tdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxs
YmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1w
SW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgY2FsbGJhY2subWV0aG9kTmFtZSAr
ICIgPSAiICsgKHByb2Nlc3NpbmdTdGFydFRpbWUgLSBjYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUp
ICsgIiArICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHRoaXMuX3NjcmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdS
ZXNwb25zZXNDb3VudCkKLSAgICAgICAgICAgICAgICB0aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3Bh
dGNoZXMoKTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgdmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmplY3QubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAg
ICAgICAgICB2YXIgZG9tYWluTmFtZSA9IG1ldGhvZFswXTsKLSAgICAgICAgICAgIHZhciBmdW5j
dGlvbk5hbWUgPSBtZXRob2RbMV07Ci0gICAgICAgICAgICBpZiAoIShkb21haW5OYW1lIGluIHRo
aXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAn
IiArIGRvbWFpbk5hbWUgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hl
cnNbZG9tYWluTmFtZV07Ci0gICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0
Y2hlcikpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
QXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICciICsgbWVzc2Fn
ZU9iamVjdC5tZXRob2QgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5t
ZXRob2RdKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6
IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bnNwZWNpZmllZCBtZXRob2QgJyIgKyBtZXNzYWdl
T2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICBpZiAobWVz
c2FnZU9iamVjdC5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1OYW1lcyA9IHRo
aXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF07Ci0gICAgICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMucHVzaChtZXNzYWdlT2JqZWN0LnBhcmFtc1twYXJhbU5hbWVzW2ldXSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOwotICAg
ICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAgICAg
ICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAgICAgZGlzcGF0
Y2hlcltmdW5jdGlvbk5hbWVdLmFwcGx5KGRpc3BhdGNoZXIsIHBhcmFtcyk7Ci0KLSAgICAgICAg
ICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCi0gICAgICAgICAgICAgICAgY29u
c29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICIgPSAiICsg
KERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7Ci0gICAgICAgIH0KLSAgICB9LAot
Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcjogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7
Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2Jq
ZWN0LmlkICsgIiBmYWlsZWQuICIgKyBtZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAgICB9LAotCi0g
ICAgcnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAg
ICAgICAgaWYgKCF0aGlzLl9zY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtd
OwotCi0gICAgICAgIGlmIChzY3JpcHQpCi0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2go
c2NyaXB0KTsKLQotICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkgewot
ICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzOwotICAgICAgICAgICAgdGhp
cy5fc2NyaXB0cyA9IFtdCi0gICAgICAgICAgICBmb3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0
cy5sZW5ndGg7ICsraWQpCi0gICAgICAgICAgICAgICAgIHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUluc3BlY3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9y
QmFja2VuZFN0dWIoKTsKLQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRpbnNwZWN0b3JC
YWNrZW5kU3R1YkpTKTsKLX0KLQotc3ViIGdlbmVyYXRlSGVhZGVyCi17Ci0gICAgbXkgJGNsYXNz
TmFtZSA9IHNoaWZ0OwotICAgIG15ICRjbGFzc0RlY2xhcmF0aW9uID0gc2hpZnQ7Ci0gICAgbXkg
JHR5cGVzID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0cnVjdG9yID0gc2hpZnQ7Ci0gICAgbXkgJGNv
bnN0YW50cyA9IHNoaWZ0OwotICAgIG15ICRtZXRob2RzID0gc2hpZnQ7Ci0gICAgbXkgJGZvb3Rl
ciA9IHNoaWZ0OwotCi0gICAgbXkgJGZvcndhcmRIZWFkZXJzID0gam9pbigiXG4iLCBzb3J0KG1h
cCgiI2luY2x1ZGUgPCIgLiB0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZEhlYWRlciIpIC4gIj4iLCBn
cmVwKHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIiksIGtleXMgJXskdHlwZXN9KSkpKTsK
LSAgICBteSAkZm9yd2FyZERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgc29ydChtYXAoImNsYXNz
ICIgLiB0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZCIpIC4gIjsiLCBncmVwKHR5cGVUcmFpdHMoJF8s
ICJmb3J3YXJkIiksIGtleXMgJXskdHlwZXN9KSkpKTsKLSAgICBteSAkY29uc3RhbnREZWNsYXJh
dGlvbnMgPSBqb2luKCJcbiIsIEB7JGNvbnN0YW50c30pOwotICAgIG15ICRtZXRob2RzRGVjbGFy
YXRpb25zID0gam9pbigiXG4iLCBAeyRtZXRob2RzfSk7Ci0KLSAgICBteSAkaGVhZGVyQm9keSA9
IDw8ICJFT0YiOwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLSNpZm5kZWYgJHtjbGFzc05hbWV9X2gKLSNkZWZpbmUgJHtjbGFzc05hbWV9
X2gKLQotJHtmb3J3YXJkSGVhZGVyc30KLQotbmFtZXNwYWNlICRuYW1lc3BhY2UgewotCi0kZm9y
d2FyZERlY2xhcmF0aW9ucwotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotY2xhc3Mg
JGNsYXNzRGVjbGFyYXRpb24gewotcHVibGljOgotJGNvbnN0cnVjdG9yCi0KLSRjb25zdGFudERl
Y2xhcmF0aW9ucwotJG1ldGhvZHNEZWNsYXJhdGlvbnMKLQotJGZvb3RlcgotfTsKLQotfSAvLyBu
YW1lc3BhY2UgJG5hbWVzcGFjZQotI2VuZGlmIC8vICFkZWZpbmVkKCR7Y2xhc3NOYW1lfV9oKQot
Ci1FT0YKLSAgICByZXR1cm4gJGhlYWRlckJvZHk7Ci19Ci0KLXN1YiBnZW5lcmF0ZVNvdXJjZQot
ewotICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAg
ICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLQotICAg
IG15IEBzb3VyY2VDb250ZW50ID0gc3BsaXQoIlxyIiwgJGxpY2Vuc2VUZW1wbGF0ZSk7Ci0gICAg
cHVzaChAc291cmNlQ29udGVudCwgIlxuI2luY2x1ZGUgXCJjb25maWcuaFwiIik7Ci0gICAgcHVz
aChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5oXCIiKTsKLSAgICBwdXNo
KEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPiIpOwotICAg
IHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAi
I2lmIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
Ci0gICAgbXkgJWhlYWRlcnM7Ci0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAleyR0eXBlc30p
IHsKLSAgICAgICAgJGhlYWRlcnN7IiNpbmNsdWRlIFwiIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJo
ZWFkZXIiKSAuICJcIiJ9ID0gMSBpZiAhdHlwZVRyYWl0cygkdHlwZSwgImhlYWRlciIpIGVxICAi
IjsKLSAgICB9Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgc29ydCBrZXlzICVoZWFkZXJzKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwg
Im5hbWVzcGFjZSAkbmFtZXNwYWNlIHsiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7
Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgam9pbigiXG4iLCBAeyRjb25zdGFudHN9KSk7Ci0g
ICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIEB7
JG1ldGhvZHN9KTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIn0gLy8gbmFtZXNwYWNlICRuYW1lc3BhY2UiKTsKLSAgICBwdXNoKEBzb3Vy
Y2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKSIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICByZXR1
cm4gQHNvdXJjZUNvbnRlbnQ7Ci19Ci0KLXN1YiB0eXBlVHJhaXRzCi17Ci0gICAgbXkgJHR5cGUg
PSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlmdDsKLSAgICByZXR1cm4gJHR5cGVUcmFuc2Zv
cm17JHR5cGV9LT57JHRyYWl0fTsKLX0KLQotc3ViIHBhcmFtVHlwZVRyYWl0cwotewotICAgIG15
ICRwYXJhbURlc2NyaXB0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJHRyYWl0ID0gc2hpZnQ7Ci0gICAg
aWYgKCRwYXJhbURlc2NyaXB0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkg
ewotICAgICAgICBteSAkb3B0aW9uYWxSZXN1bHQgPSB0eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0
aW9uLT50eXBlLCAib3B0aW9uYWxfIiAuICR0cmFpdCk7Ci0gICAgICAgIHJldHVybiAkb3B0aW9u
YWxSZXN1bHQgaWYgZGVmaW5lZCAkb3B0aW9uYWxSZXN1bHQ7Ci0gICAgfQotICAgIG15ICRyZXN1
bHQgPSB0eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0aW9uLT50eXBlLCAkdHJhaXQpOwotICAgIHJl
dHVybiBkZWZpbmVkICRyZXN1bHQgPyAkcmVzdWx0IDogIiI7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJh
Y2tlbmRBZ2VudEZpZWxkc0FuZENvbnN0cnVjdG9yCi17Ci0gICAgbXkgQGFyZ3VtZW50czsKLSAg
ICBteSBAZmllbGRJbml0aWFsaXplcnM7Ci0KLSAgICBwdXNoKEBhcmd1bWVudHMsICJJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCIpOwotICAgIHB1c2go
QGZpZWxkSW5pdGlhbGl6ZXJzLCAiICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBiYWNrZW5kRm9vdGVyLCAi
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
Iik7Ci0KLSAgICBmb3JlYWNoIG15ICRkb21haW4gKHNvcnQga2V5cyAlYmFja2VuZERvbWFpbnMp
IHsKLSAgICAgICAgIyBBZGQgYWdlbnQgZmllbGQgZGVjbGFyYXRpb24gdG8gdGhlIGZvb3Rlci4K
LSAgICAgICAgbXkgJGFnZW50Q2xhc3NOYW1lID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZm9yd2Fy
ZCIpOwotICAgICAgICBteSAkZmllbGQgPSB0eXBlVHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nl
c3NvciIpOwotICAgICAgICBwdXNoKEBiYWNrZW5kRm9vdGVyLCAiICAgICR7YWdlbnRDbGFzc05h
bWV9KiAke2ZpZWxkfTsiKTsKLQotICAgICAgICAjIEFkZCBhZ2VudCBwYXJhbWV0ZXIgYW5kIGlu
aXRpYWxpemVyLgotICAgICAgICBteSAkYXJnID0gc3Vic3RyKCRmaWVsZCwgMik7Ci0gICAgICAg
IHB1c2goQGZpZWxkSW5pdGlhbGl6ZXJzLCAiICAgICAgICAsICR7ZmllbGR9KCR7YXJnfSkiKTsK
LSAgICAgICAgcHVzaChAYXJndW1lbnRzLCAiJHthZ2VudENsYXNzTmFtZX0qICR7YXJnfSIpOwot
ICAgIH0KLQotICAgIG15ICRhcmd1bWVudFN0cmluZyA9IGpvaW4oIiwgIiwgQGFyZ3VtZW50cyk7
Ci0KLSAgICBteSBAYmFja2VuZEhlYWQ7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgJHti
YWNrZW5kQ2xhc3NOYW1lfSgke2FyZ3VtZW50U3RyaW5nfSkiKTsKLSAgICBwdXNoKEBiYWNrZW5k
SGVhZCwgQGZpZWxkSW5pdGlhbGl6ZXJzKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB7
IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSAwOyB9Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5k
SGVhZCwgIiAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhl
YWQsICIgICAgICAgIFBhcnNlRXJyb3IgPSAwLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAi
ICAgICAgICBJbnZhbGlkUmVxdWVzdCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAg
ICAgTWV0aG9kTm90Rm91bmQsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIElu
dmFsaWRQYXJhbXMsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludGVybmFs
RXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIFNlcnZlckVycm9yLCIp
OwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBMYXN0RW50cnksIik7Ci0gICAgcHVz
aChAYmFja2VuZEhlYWQsICIgICAgfTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwot
ICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25z
dCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIGNvbnN0OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVw
b3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGRhdGEpIGNvbnN0OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmlu
ZyogcmVzdWx0KTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJh
Y2tlbmRIZWFkLCAiICAgIGVudW0gTWV0aG9kTmFtZXMgeyIpOwotICAgICRiYWNrZW5kQ29uc3Ry
dWN0b3IgPSBqb2luKCJcbiIsIEBiYWNrZW5kSGVhZCk7Ci19Ci0KLXN1YiBmaW5pc2gKLXsKLSAg
ICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdl
bmVyYXRlQmFja2VuZERpc3BhdGNoZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBs
LCBnZW5lcmF0ZUJhY2tlbmRTZW5kUmVzcG9uc2UoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhv
ZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVycm9yKCkpOwotICAgIHVuc2hp
ZnQoQGZyb250ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlRnJvbnRlbmRDb25zdHJ1Y3RvckltcGwo
KSwgIiIpOwotCi0gICAgb3BlbihteSAkU09VUkNFLCAiPiRvdXRwdXREaXIvJGZyb250ZW5kQ2xh
c3NOYW1lLmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGZyb250
ZW5kQ2xhc3NOYW1lLmNwcCI7Ci0gICAgcHJpbnQgJFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRl
U291cmNlKCRmcm9udGVuZENsYXNzTmFtZSwgXCVmcm9udGVuZFR5cGVzLCBcQGZyb250ZW5kQ29u
c3RhbnREZWZpbml0aW9ucywgXEBmcm9udGVuZE1ldGhvZHNJbXBsKSk7Ci0gICAgY2xvc2UoJFNP
VVJDRSk7Ci0gICAgdW5kZWYoJFNPVVJDRSk7Ci0KLSAgICBvcGVuKG15ICRIRUFERVIsICI+JG91
dHB1dEhlYWRlcnNEaXIvJGZyb250ZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9w
ZW4gZmlsZSAkb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCI7Ci0gICAgcHJp
bnQgJEhFQURFUiBnZW5lcmF0ZUhlYWRlcigkZnJvbnRlbmRDbGFzc05hbWUsICRmcm9udGVuZENs
YXNzTmFtZSwgXCVmcm9udGVuZFR5cGVzLCAkZnJvbnRlbmRDb25zdHJ1Y3RvciwgXEBmcm9udGVu
ZENvbnN0YW50RGVjbGFyYXRpb25zLCBcQGZyb250ZW5kTWV0aG9kcywgam9pbigiXG4iLCBAZnJv
bnRlbmRGb290ZXIpKTsKLSAgICBjbG9zZSgkSEVBREVSKTsKLSAgICB1bmRlZigkSEVBREVSKTsK
LQotICAgIHVuc2hpZnQoQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiY29uc3QgY2hhciog
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lc1tdID0geyIpOwotICAgIHB1
c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9ucywgIiIpOwotCi0gICAgIyBNYWtlIGRpc3BhdGNoZXIgbWV0aG9k
cyBwcml2YXRlIG9uIHRoZSBiYWNrZW5kLgotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xh
cmF0aW9ucywgIn07Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAi
Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsiKTsgICAgCi0gICAgcHVzaChAYmFja2VuZENvbnN0
YW50RGVjbGFyYXRpb25zLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRp
b25zLCAicHJpdmF0ZToiKTsKLQotICAgIGZvcmVhY2ggbXkgJHR5cGUgKGtleXMgJWJhY2tlbmRU
eXBlcykgewotICAgICAgICBpZiAodHlwZVRyYWl0cygkdHlwZSwgIkpTT05UeXBlIikpIHsKLSAg
ICAgICAgICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVBcmd1bWVudEdldHRl
cnMoJHR5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFu
dERlY2xhcmF0aW9ucywgIiAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBp
bnZvY2F0aW9uRXJyb3IpOyIpOwotCi0gICAgZ2VuZXJhdGVCYWNrZW5kQWdlbnRGaWVsZHNBbmRD
b25zdHJ1Y3RvcigpOwotCi0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJh
Y2tlbmRNZXNzYWdlUGFyc2VyKCkpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgIiIp
OwotCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiIik7Ci0KLSAgICBv
cGVuKCRTT1VSQ0UsICI+JG91dHB1dERpci8kYmFja2VuZENsYXNzTmFtZS5jcHAiKSB8fCBkaWUg
IkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCI7Ci0g
ICAgcHJpbnQgJFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRlU291cmNlKCRiYWNrZW5kQ2xhc3NO
YW1lLCBcJWJhY2tlbmRUeXBlcywgXEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgXEBiYWNr
ZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNF
KTsKLQotICAgIG9wZW4oJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNz
TmFtZS5oIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGJh
Y2tlbmRDbGFzc05hbWUuaCI7Ci0gICAgcHJpbnQgJEhFQURFUiBqb2luKCJcbiIsIGdlbmVyYXRl
SGVhZGVyKCRiYWNrZW5kQ2xhc3NOYW1lLCAkYmFja2VuZENsYXNzRGVjbGFyYXRpb24sIFwlYmFj
a2VuZFR5cGVzLCAkYmFja2VuZENvbnN0cnVjdG9yLCBcQGJhY2tlbmRDb25zdGFudERlY2xhcmF0
aW9ucywgXEBiYWNrZW5kTWV0aG9kcywgam9pbigiXG4iLCBAYmFja2VuZEZvb3RlcikpKTsKLSAg
ICBjbG9zZSgkSEVBREVSKTsKLSAgICB1bmRlZigkSEVBREVSKTsKLQotICAgIG9wZW4obXkgJEpT
X1NUVUIsICI+JG91dHB1dERpci8kYmFja2VuZEpTU3R1Yk5hbWUuanMiKSB8fCBkaWUgIkNvdWxk
bid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyI7Ci0gICAgcHJp
bnQgJEpTX1NUVUIgam9pbigiXG4iLCBnZW5lcmF0ZUJhY2tlbmRTdHViSlMoKSk7Ci0gICAgY2xv
c2UoJEpTX1NUVUIpOwotICAgIHVuZGVmKCRKU19TVFVCKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGRlYzk4MzYzYmY2MDA1YWQwYTBlNmE2YTE2Y2ZiNmJmZTdiZjNhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CkBAIC0wLDAgKzEsMTQxNCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
YykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBv
cHRwYXJzZQoraW1wb3J0IGpzb24KK2Zyb20gc3RyaW5nIGltcG9ydCBqb2luCisKK2NtZGxpbmVf
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRp
b24oIi0tZGVmaW5lcyIpCitjbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF9oX2Rp
ciIpCitjbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF9jcHBfZGlyIikKKwordHJ5
OgorICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY21kbGluZV9wYXJzZXIucGFyc2VfYXJn
cygpCisgICAgaWYgKGxlbihhcmdfdmFsdWVzKSAhPSAxKToKKyAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJFeGFjdGx5IG9uZSBwbGFpbiBhcmd1bWVudCBleHBlY3RlZCAoZm91bmQgJXMpIiAlIGxl
bihhcmdfdmFsdWVzKSkKKyAgICBpbnB1dF9qc29uX2ZpbGVuYW1lID0gYXJnX3ZhbHVlc1swXQor
ICAgIG91dHB1dF9oZWFkZXJfZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1dF9oX2RpcgorICAg
IG91dHB1dF9jcHBfZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1dF9jcHBfZGlyCisgICAgaWYg
bm90IG91dHB1dF9oZWFkZXJfZGlybmFtZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRw
dXQgLmggZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICBpZiBub3Qgb3V0cHV0X2Nw
cF9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuY3BwIGRpcmVjdG9y
eSBtdXN0IGJlIHNwZWNpZmllZCIpCitleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgIHN5cy5zdGRl
cnIud3JpdGUoIkZhaWxlZCB0byBwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzOiAlc1xuXG4i
ICUgZSkKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogPHNjcmlwdD4gSW5zcGVjdG9yLmpz
b24gLS1vdXRwdXRfaF9kaXIgPG91dHB1dF9oZWFkZXJfZGlyPiAtLW91dHB1dF9jcHBfZGlyIDxv
dXRwdXRfY3BwX2Rpcj4gWy0tZGVmaW5lcyA8ZGVmaW5lcyBzdHJpbmc+XVxuIikKKyAgICBleGl0
KDEpCisKKworZGVmIHBhcnNlX2RlZmluZXMoc3RyKToKKyAgICBpZiBub3Qgc3RyOgorICAgICAg
ICByZXR1cm4ge30KKworICAgIGl0ZW1zID0gc3RyLnNwbGl0KCkKKyAgICByZXN1bHQgPSB7fQor
ICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICBpZiBpdGVtWzBdID09ICciJyBhbmQgaXRl
bVstMV0gPT0gJyInIGFuZCBsZW4oaXRlbSkgPj0gMjoKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVt
WzE6LTFdCisgICAgICAgIGlmIGl0ZW0uZW5kc3dpdGgoIj0wIik6CisgICAgICAgICAgICBrZXkg
PSBpdGVtWzotMl0KKyAgICAgICAgICAgIHZhbHVlID0gRmFsc2UKKyAgICAgICAgZWxpZiBpdGVt
LmVuZHN3aXRoKCI9MSIpOgorICAgICAgICAgICAga2V5ID0gaXRlbVs6LTJdCisgICAgICAgICAg
ICB2YWx1ZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleSA9IGl0ZW0KKyAg
ICAgICAgICAgIHZhbHVlID0gVHJ1ZQorICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAg
cmV0dXJuIHJlc3VsdAorCitkZWZpbmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMu
ZGVmaW5lcykKKworCitjbGFzcyBEb21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBkb21h
aW5fbmFtZSBpbiBjbHMuYWdlbnRfdHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1lX3Jl
cyA9IGNscy5hZ2VudF90eXBlX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGFnZW50X25hbWVfcmVzID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUK
KworICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6Cisg
ICAgICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21h
aW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9t
YWluX25hbWUubG93ZXIoKSArICJBZ2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToK
KyAgICAgICAgICAgIGFnZW50X3R5cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAg
ICBoaWRkZW4gPSBkb21haW5fbmFtZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAg
IHNraXBfanNfYmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucwor
ICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToK
KyAgICAgICAgICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuZG9tYWluX2RlZmluZV9uYW1l
X21hcDoKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5lX25hbWUgPSBjbHMuZG9tYWluX2RlZmlu
ZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgaWYgZGVmaW5lX25h
bWUgaW4gZGVmaW5lc19tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfdmFsdWUg
PSBkZWZpbmVzX21hcFtkZWZpbmVfbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5v
dCBkZWZpbmVfdmFsdWU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUK
KyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICByZXR1cm4gUmVzCisKKyAg
ICBza2lwX2pzX2JpbmRfZG9tYWlucyA9IHNldChbIlJ1bnRpbWUiLCAiQ1NTIiwgIkRPTURlYnVn
Z2VyIl0pCisgICAgaGlkZGVuX2RvbWFpbnMgPSBzZXQoWyJJbnNwZWN0b3IiXSkKKyAgICBhZ2Vu
dF90eXBlX21hcCA9IHsiTmV0d29yayI6ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50In0KKworICAg
ICMgVE9ETzogZ2V0IHJpZCBvZiB0aGlzLCBnZW5lcmF0ZSBuYW1lcyBpbnN0ZWFkLgorICAgIGFn
ZW50X2ZpZWxkX25hbWVfbWFwID0geworICAgICAgICAiUGFnZSI6ICJwYWdlQWdlbnQiLAorICAg
ICAgICAiUnVudGltZSI6ICJydW50aW1lQWdlbnQiLAorICAgICAgICAiQ29uc29sZSI6ICJjb25z
b2xlQWdlbnQiLAorICAgICAgICAiTmV0d29yayI6ICAicmVzb3VyY2VBZ2VudCIsCisgICAgICAg
ICJEYXRhYmFzZSI6ICAiZGF0YWJhc2VBZ2VudCIsCisgICAgICAgICJET01TdG9yYWdlIjogICJk
b21TdG9yYWdlQWdlbnQiLAorICAgICAgICAiQXBwbGljYXRpb25DYWNoZSI6ICAiYXBwbGljYXRp
b25DYWNoZUFnZW50IiwKKyAgICAgICAgIkRPTSI6ICAiZG9tQWdlbnQiLAorICAgICAgICAiQ1NT
IjogICJjc3NBZ2VudCIsCisgICAgICAgICJEZWJ1Z2dlciI6ICJkZWJ1Z2dlckFnZW50IiwKKyAg
ICAgICAgIkRPTURlYnVnZ2VyIjogImRvbURlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiUHJvZmls
ZXIiOiAicHJvZmlsZXJBZ2VudCIsCisgICAgICAgICJXb3JrZXIiOiAid29ya2VyQWdlbnQiLAor
ICAgIH0KKworICAgIGRvbWFpbl9kZWZpbmVfbmFtZV9tYXAgPSB7CisgICAgICAgICJEYXRhYmFz
ZSI6ICJFTkFCTEVfU1FMX0RBVEFCQVNFIiwKKyAgICAgICAgIkRPTVN0b3JhZ2UiOiAiRU5BQkxF
X0RPTV9TVE9SQUdFIiwKKyAgICAgICAgIkRlYnVnZ2VyIjogIkVOQUJMRV9KQVZBU0NSSVBUX0RF
QlVHR0VSIiwKKyAgICAgICAgIkRPTURlYnVnZ2VyIjogIkVOQUJMRV9KQVZBU0NSSVBUX0RFQlVH
R0VSIiwKKyAgICAgICAgIlByb2ZpbGVyIjogIkVOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSIiwK
KyAgICAgICAgIldvcmtlciI6ICJFTkFCTEVfV09SS0VSUyIsCisgICAgfQorCisKK2NsYXNzIENQ
YXJhbVR5cGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZSwgc2V0dGVyX2Zv
cm1hdD0iJXMiKToKKyAgICAgICAgc2VsZi50eXBlID0gdHlwZQorICAgICAgICBzZWxmLnNldHRl
cl9mb3JtYXQgPSBzZXR0ZXJfZm9ybWF0CisKKyAgICBkZWYgZ2V0X3RleHQoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLnR5cGUKKworICAgIGRlZiBnZXRfc2V0dGVyX2Zvcm1hdChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuc2V0dGVyX2Zvcm1hdAorCisKK2NsYXNzIFJhd1R5cGVzKG9i
amVjdCk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnZXQoanNvbl90eXBlKToKKyAgICAg
ICAgaWYganNvbl90eXBlID09ICJib29sZWFuIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBl
cy5Cb29sCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJzdHJpbmciOgorICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLlN0cmluZworICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXki
OgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5CisgICAgICAgIGVsaWYganNvbl90
eXBlID09ICJvYmplY3QiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAorICAg
ICAgICBlbGlmIGpzb25fdHlwZSA9PSAiaW50ZWdlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuSW50CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJudW1iZXIiOgorICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLk51bWJlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpzb25fdHlwZSkKKworICAgIGNsYXNz
IEJhc2VUeXBlKG9iamVjdCk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0
Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIHJldHVy
biBjbHMuZGVmYXVsdF9jX3BhcmFtX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4g
RmFsc2UKKworICAgIGNsYXNzIFN0cmluZyhCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhv
ZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToK
KyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJTdHJp
bmciCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAg
IHJldHVybiAiXCJcIiIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRK
c0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gInN0cmluZyIKKworICAgICAgICBfcGxh
aW5fY190eXBlID0gQ1BhcmFtVHlwZSgiU3RyaW5nIikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBD
UGFyYW1UeXBlKCJjb25zdCBTdHJpbmcmIikKKworICAgIGNsYXNzIEludChCYXNlVHlwZSk6Cisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAg
ICAgICAgIHJldHVybiAiSW50IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldFNldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAg
ICAgcmV0dXJuICIwIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpz
QmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAibnVtYmVyIgorCisgICAgICAgIGRlZmF1
bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgiaW50IikKKworICAgIGNsYXNzIE51bWJlcihC
YXNlVHlwZSk6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5h
bWUoKToKKyAgICAgICAgICAgIHJldHVybiAiT2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGdldFNldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiTnVt
YmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXpl
cigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgZGVmYXVsdF9jX3Bh
cmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJkb3VibGUiKQorCisgICAgY2xhc3MgQm9vbChCYXNlVHlw
ZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMs
IHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIChwYXJhbV90eXBlID09IFBh
cmFtVHlwZS5FVkVOVCk6CisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAg
ICAgcmV0dXJuICJCb29sZWFuIgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJO
YW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVy
KCk6CisgICAgICAgICAgICByZXR1cm4gImZhbHNlIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAiYm9vbGVh
biIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVj
a09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9j
X3R5cGUgPSBDUGFyYW1UeXBlKCJib29sIikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1U
eXBlKCJjb25zdCBib29sKiBjb25zdCIsICIqJXMiKQorCisgICAgY2xhc3MgT2JqZWN0KEJhc2VU
eXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQ
YXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5
cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6
CisgICAgICAgICAgICByZXR1cm4gIk9iamVjdCIKKworICAgICAgICBnZXRTZXR0ZXJOYW1lID0g
Z2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJ
bml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUo
KToKKyAgICAgICAgICAgIHJldHVybiAib2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQorCisgICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUpOgor
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJh
bV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlw
ZS5PVVRQVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAg
ICAgICAgICBlbGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLklOUFVUOgorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJBcnJheSIK
KworICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0
dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJvYmplY3Qi
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tP
cHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190
eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCisgICAgICAgIF9yZWZf
Y190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iKQorCisKK2Ns
YXNzIFBhcmFtVHlwZShvYmplY3QpOgorICAgIElOUFVUID0gImlucHV0IgorICAgIE9VVFBVVCA9
ICJvdXRwdXQiCisgICAgRVZFTlQgPSAiZXZlbnQiCisKKworY2xhc3MgVHlwZURhdGEob2JqZWN0
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbik6CisgICAg
ICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25fdHlwZQorICAgICAgICBzZWxmLmpzb25fZG9tYWlu
XyA9IGpzb25fZG9tYWluCisKKyAgICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZToKKyAgICAg
ICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KKyAgICAgICAgICAgIHJh
d190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorICAgICAgICBzZWxmLnJh
d190eXBlXyA9IHJhd190eXBlCisKKyAgICBkZWYgZ2V0UmF3VHlwZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYucmF3X3R5cGVfCisKKworY2xhc3MgVHlwZU1hcDoKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgYXBpKToKKyAgICAgICAgc2VsZi5tYXBfID0ge30KKyAgICAgICAgZm9yIGpzb25f
ZG9tYWluIGluIGFwaVsiZG9tYWlucyJdOgorICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29u
X2RvbWFpblsiZG9tYWluIl0KKworICAgICAgICAgICAgZG9tYWluX21hcCA9IHt9CisgICAgICAg
ICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0gZG9tYWluX21hcAorCisgICAgICAgICAgICBp
ZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX3R5cGUg
aW4ganNvbl9kb21haW5bInR5cGVzIl06CisgICAgICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9
IGpzb25fdHlwZVsiaWQiXQorICAgICAgICAgICAgICAgICAgICB0eXBlX2RhdGEgPSBUeXBlRGF0
YShqc29uX3R5cGUsIGpzb25fZG9tYWluKQorICAgICAgICAgICAgICAgICAgICBkb21haW5fbWFw
W3R5cGVfbmFtZV0gPSB0eXBlX2RhdGEKKworICAgIGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUs
IHR5cGVfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVf
bmFtZV0KKworCitkZWYgcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVf
ZG9tYWluX25hbWUpOgorICAgIGlmICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKKyAgICAgICAg
anNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCisgICAgICAgIHR5cGVfZGF0YSA9IGdl
dFJlZkRhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gdHlw
ZV9kYXRhLmdldFJhd1R5cGUoKQorICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVyOgor
ICAgICAgICBqc29uX3R5cGUgPSBqc29uX3BhcmFtZXRlclsidHlwZSJdCisgICAgICAgIHJldHVy
biBSYXdUeXBlcy5nZXQoanNvbl90eXBlKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiVW5rbm93biB0eXBlIikKKworCitkZWYgZ2V0UmVmRGF0YShqc29uX3JlZiwgc2NvcGVf
ZG9tYWluX25hbWUpOgorICAgIGRvdF9wb3MgPSBqc29uX3JlZi5maW5kKCIuIikKKyAgICBpZiBk
b3RfcG9zID09IC0xOgorICAgICAgICBkb21haW5fbmFtZSA9IHNjb3BlX2RvbWFpbl9uYW1lCisg
ICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmCisgICAgZWxzZToKKyAgICAgICAgZG9tYWluX25h
bWUgPSBqc29uX3JlZls6ZG90X3Bvc10KKyAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWZbZG90
X3BvcyArIDE6XQorCisgICAgcmV0dXJuIHR5cGVfbWFwLmdldChkb21haW5fbmFtZSwgdHlwZV9u
YW1lKQorCisKK2lucHV0X2ZpbGUgPSBvcGVuKGlucHV0X2pzb25fZmlsZW5hbWUsICJyIikKK2pz
b25fc3RyaW5nID0gaW5wdXRfZmlsZS5yZWFkKCkKK2pzb25fYXBpID0ganNvbi5sb2Fkcyhqc29u
X3N0cmluZykKKworCitjbGFzcyBUZW1wbGF0ZXM6CisgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNz
ID0gc3RyaW5nLlRlbXBsYXRlKAorIiIiICAgIGNsYXNzICRkb21haW5DbGFzc05hbWUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgJGRvbWFpbkNsYXNzTmFtZShJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorJHtmcm9udGVuZERvbWFpbk1ldGhvZERl
Y2xhcmF0aW9uc30gICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CisgICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KKyAgICBwcml2YXRlOgorICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OworICAgIH07CisKKyAgICAkZG9tYWluQ2xhc3NOYW1lKiAkZG9tYWluRmllbGROYW1lKCkgeyBy
ZXR1cm4gJm1fJGRvbWFpbkZpZWxkTmFtZTsgfQorCisiIiIpCisKKyAgICBiYWNrZW5kX21ldGhv
ZCA9IHN0cmluZy5UZW1wbGF0ZSgKKyIiInZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OiR7ZG9tYWluTmFtZX1fJG1ldGhvZE5hbWUobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCok
cmVxdWVzdE1lc3NhZ2VPYmplY3QpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgIGlmICghJGFnZW50
RmllbGQpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKCIke2RvbWFpbk5hbWV9
IGhhbmRsZXIgaXMgbm90IGF2YWlsYWJsZS4iKTsKKyRtZXRob2RPdXRDb2RlCisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CiskbWV0aG9kSW5Db2RlCitpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkKKyAgICAkYWdlbnRGaWVsZC0+JG1ldGhvZE5hbWUoJmVycm9yJGFnZW50Q2FsbFBhcmFtcyk7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworJHtyZXNwb25zZUNvb2t9c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIiRkb21haW5OYW1lLiRtZXRob2ROYW1lIiksIHByb3RvY29sRXJyb3JzLCBlcnJv
cik7Cit9CisiIiIpCisKKyAgICBmcm9udGVuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoIiIi
dm9pZCBJbnNwZWN0b3JGcm9udGVuZDo6JGRvbWFpbk5hbWU6OiRldmVudE5hbWUoJHBhcmFtZXRl
cnMpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gJHtldmVudE5hbWV9TWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgJHtldmVudE5hbWV9TWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiLCAiJGRvbWFpbk5hbWUuJGV2ZW50TmFtZSIpOworJGNvZGUgICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7ZXZlbnROYW1lfU1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKK30KKyIiIikKKworICAgIGZyb250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUo
IiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKyNpZm5kZWYgSW5zcGVjdG9yRnJvbnRlbmRfaAorI2RlZmluZSBJbnNwZWN0b3JGcm9udGVu
ZF9oCisKKyNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQXJyYXk7Citj
bGFzcyBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CisK
K3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Kik7CisKKworJGRvbWFpbkNsYXNzTGlzdAorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJHtmaWVsZERlY2xhcmF0aW9u
c319OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yRnJvbnRlbmRfaCkKKyIiIikKKworICAgIGJhY2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgi
IiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorI2lmbmRlZiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisjZGVmaW5lIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyX2gKKworI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFnZW50OworY2xhc3MgSW5zcGVj
dG9yT2JqZWN0OworY2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CisKKyRmb3J3YXJkRGVjbGFyYXRpb25zCisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjogcHVibGljIFJlZkNv
dW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCRjb25zdHJ1Y3RvclBhcmFtcykKKyAgICAgICAgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiskY29uc3RydWN0b3JJbml0
CisgICAgeyB9CisKKyAgICB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsID0gMDsgfQorCisgICAgZW51bSBDb21tb25FcnJvckNvZGUgeworICAgICAgICBQ
YXJzZUVycm9yID0gMCwKKyAgICAgICAgSW52YWxpZFJlcXVlc3QsCisgICAgICAgIE1ldGhvZE5v
dEZvdW5kLAorICAgICAgICBJbnZhbGlkUGFyYW1zLAorICAgICAgICBJbnRlcm5hbEVycm9yLAor
ICAgICAgICBTZXJ2ZXJFcnJvciwKKyAgICAgICAgTGFzdEVudHJ5LAorICAgIH07CisKKyAgICB2
b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25F
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKKyAgICB2b2lkIHJl
cG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBkYXRhKSBjb25zdDsKKyAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
CisgICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBT
dHJpbmcqIHJlc3VsdCk7CisKKyAgICBlbnVtIE1ldGhvZE5hbWVzIHsKKworJGVudW1Db25zdGFu
dHMKK307CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZE5hbWVzW107CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIGludCBnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzKTsKKyAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNw
ZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHZvaWQgc2VuZFJlc3BvbnNl
KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7CisKKyRtZXRob2REZWNsYXJhdGlv
bnMKKworICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7CiskZmllbGREZWNsYXJhdGlvbnMKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oKQorCisKKyIi
IikKKworICAgIGJhY2tlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAo
YykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2Ug
dGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckFnZW50Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKKyRpbmNsdWRlcworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpjb21tYW5kTmFtZXNbXSA9IHsKKyRtZXRob2ROYW1lRGVjbGFyYXRpb25zCit9OworCisK
KyRtZXRob2RzCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBwcm90ZWN0ID0gdGhpczsKKyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIG1l
c3NhZ2VPYmplY3QpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBE
aXNwYXRjaE1hcDsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRj
aE1hcCwgKTsKKyAgICBsb25nIGNhbGxJZCA9IDA7CisKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0geworJG1l
c3NhZ2VIYW5kbGVycworICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9m
KGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFk
ZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1l
c3NhZ2UpOworICAgIGlmICghcGFyc2VkTWVzc2FnZSkgeworICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2Fn
ZU9iamVjdCkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0
LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3Nh
Z2VPYmplY3QtPmdldCgiaWQiKTsKKyAgICBpZiAoIWNhbGxJZFZhbHVlKSB7CisgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBu
b3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY2FsbElkVmFs
dWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwg
SW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsKKyAgICBpZiAoIW1l
dGhvZFZhbHVlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxp
ZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFN0cmluZyBtZXRob2Q7CisgICAgaWYgKCFtZXRob2RWYWx1ZS0+
YXNTdHJpbmcoJm1ldGhvZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUg
c3RyaW5nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAg
ICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZv
dW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnNlY29u
ZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25F
cnJvcikKK3sKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBw
cm90b2NvbEVycm9ycyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGludm9jYXRp
b25FcnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVzdWx0
IiwgcmVzdWx0KTsKKyAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxsSWQp
OworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKK3sKKyAgICByZXBv
cnRQcm90b2NvbEVycm9yKGNhbGxJZCwgY29kZSwgZXJyb3JNZXNzYWdlLCAwKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBs
b25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKK3sKKyAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7CisgICAg
aWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5z
ZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJ
bnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1l
dGhvZE5vdEZvdW5kLCAtMzI2MDEpOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52
YWxpZFBhcmFtcywgLTMyNjAyKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVy
bmFsRXJyb3IsIC0zMjYwMyk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJF
cnJvciwgLTMyMDAwKTsKKyAgICB9CisgICAgQVNTRVJUKGNvZGUgPj0wKTsKKyAgICBBU1NFUlQo
KHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9ycy5zaXplKCkpOworICAgIEFTU0VSVChzX2Nv
bW1vbkVycm9yc1tjb2RlXSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBz
X2NvbW1vbkVycm9yc1tjb2RlXSk7CisgICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVy
cm9yTWVzc2FnZSk7CisgICAgQVNTRVJUKGVycm9yKTsKKyAgICBpZiAoZGF0YSkKKyAgICAgICAg
ZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbWVzc2FnZS0+c2V0
T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKKyAgICBpZiAoY2FsbElkKQorICAgICAgICBtZXNzYWdl
LT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7CisgICAgZWxzZQorICAgICAgICBtZXNzYWdlLT5z
ZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCitpbnQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlm
ICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgaW50IHZh
bHVlID0gMDsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkg
eworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNv
bnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAn
JXMnIHdpdGggdHlwZSAnTnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAg
IGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFy
YW1ldGVyICclcycgd2l0aCB0eXBlICdOdW1iZXInIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZh
bHVlSXRlcmF0b3ItPnNlY29uZC0+YXNOdW1iZXIoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9u
ZyB0eXBlLiBJdCBtdXN0IGJlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAg
IGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9
IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitTdHJpbmcgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
Cit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQor
ICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgU3RyaW5nIHZhbHVlID0gIiI7CisK
KyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAg
ICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3Bh
cmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5
cGUgJ1N0cmluZycuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJ
dGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMn
IHdpdGggdHlwZSAnU3RyaW5nJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9y
LT5zZWNvbmQtPmFzU3RyaW5nKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQg
bXVzdCBiZSAnU3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAg
ICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAg
IHJldHVybiB2YWx1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7CisgICAgQVNT
RVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAqdmFs
dWVGb3VuZCA9IGZhbHNlOworCisgICAgYm9vbCB2YWx1ZSA9IGZhbHNlOworCisgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1
aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVj
dCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdCb29sZWFu
Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBv
YmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09
IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBl
ICdCb29sZWFuJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQt
PmFzQm9vbGVhbigmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhT
dHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUg
J0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYg
KHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnMpCit7CisgICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5k
KQorICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmpl
Y3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJl
ZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBt
dXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVj
dC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJh
dG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5k
KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09i
amVjdCcgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc09i
amVjdCgmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ09iamVj
dCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVG
b3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCit7Cisg
ICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKKworICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAg
ICAqdmFsdWVGb3VuZCA9IGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAg
ICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVy
IGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWlu
IHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0
LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAg
IGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0FycmF5JyB3YXMgbm90
IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzQXJyYXkoJnZhbHVlKSkK
KyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdBcnJheScuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAg
ICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9Citib29sIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIFN0cmluZyogcmVzdWx0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUg
PSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVj
dCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdC0+Z2V0U3RyaW5nKCJtZXRob2QiLCByZXN1bHQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisg
ICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworCisKK0luc3BlY3RvckZyb250ZW5kOjpJbnNwZWN0b3JG
cm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkKKyAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKKyRjb25zdHJ1Y3RvckluaXR7Cit9CisKKyRtZXRob2RzCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBiYWNr
ZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKKworSW5zcGVjdG9yQmFja2VuZFN0dWIgPSBm
dW5jdGlvbigpCit7CisgICAgdGhpcy5fbGFzdENhbGxiYWNrSWQgPSAxOworICAgIHRoaXMuX3Bl
bmRpbmdSZXNwb25zZXNDb3VudCA9IDA7CisgICAgdGhpcy5fY2FsbGJhY2tzID0ge307CisgICAg
dGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMgPSB7fTsKKyAgICB0aGlzLl9ldmVudEFyZ3MgPSB7fTsK
KyRkZWxlZ2F0ZXMkZXZlbnRBcmdzJGRvbWFpbkRpc3BhdGNoZXJzICAgIH0KKworSW5zcGVjdG9y
QmFja2VuZFN0dWIucHJvdG90eXBlID0geworICAgIGR1bXBJbnNwZWN0b3JUaW1lU3RhdHM6IDAs
CisgICAgZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXM6IDAsCisKKyAgICBfd3JhcDogZnVu
Y3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMuX2xh
c3RDYWxsYmFja0lkKys7CisgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tjYWxsYmFja0lkXSA9IGNh
bGxiYWNrIHx8IGZ1bmN0aW9uKCkge307CisgICAgICAgIHJldHVybiBjYWxsYmFja0lkOworICAg
IH0sCisKKyAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZykKKyAg
ICB7CisgICAgICAgIHZhciBkb21haW5BbmRGdW5jdGlvbiA9IEpTT04ucGFyc2UocmVxdWVzdFN0
cmluZykubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE5hbWUgPSBkb21haW5B
bmRGdW5jdGlvblswXSArICJBZ2VudCI7CisgICAgICAgIGlmICghd2luZG93W2FnZW50TmFtZV0p
CisgICAgICAgICAgICB3aW5kb3dbYWdlbnROYW1lXSA9IHt9OworICAgICAgICB3aW5kb3dbYWdl
bnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV0gPSB0aGlzLl9zZW5kTWVzc2FnZVRvQmFja2Vu
ZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpOworICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtk
b21haW5BbmRGdW5jdGlvblsxXV1bImludm9rZSJdID0gdGhpcy5faW52b2tlLmJpbmQodGhpcywg
cmVxdWVzdFN0cmluZykKKyAgICB9LAorCisgICAgX2ludm9rZTogZnVuY3Rpb24ocmVxdWVzdFN0
cmluZywgYXJncywgY2FsbGJhY2spCisgICAgeworICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04u
cGFyc2UocmVxdWVzdFN0cmluZyk7CisgICAgICAgIHJlcXVlc3QucGFyYW1zID0gYXJnczsKKyAg
ICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2Fs
bGJhY2spOworICAgIH0sCisKKyAgICBfc2VuZE1lc3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9uKCkK
KyAgICB7CisgICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzKTsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7
CisgICAgICAgIHZhciBjYWxsYmFjayA9IChhcmdzLmxlbmd0aCAmJiB0eXBlb2YgYXJnc1thcmdz
Lmxlbmd0aCAtIDFdID09PSAiZnVuY3Rpb24iKSA/IGFyZ3MucG9wKCkgOiAwOworICAgICAgICB2
YXIgZG9tYWluQW5kTWV0aG9kID0gcmVxdWVzdC5tZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAg
dmFyIGFnZW50TWV0aG9kID0gZG9tYWluQW5kTWV0aG9kWzBdICsgIkFnZW50LiIgKyBkb21haW5B
bmRNZXRob2RbMV07CisKKyAgICAgICAgdmFyIGhhc1BhcmFtcyA9IGZhbHNlOworICAgICAgICBp
ZiAocmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0
LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhciB0eXBlTmFtZSA9IHJlcXVlc3QucGFyYW1z
W2tleV0udHlwZTsKKyAgICAgICAgICAgICAgICB2YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVzdC5w
YXJhbXNba2V5XS5vcHRpb25hbDsKKworICAgICAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG1ldGhv
ZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBoYXZlIHRoZSBuZXh0IGFyZ3Vt
ZW50cyAnIiArIEpTT04uc3RyaW5naWZ5KHJlcXVlc3QucGFyYW1zKSArICInLiIpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOworICAgICAgICAgICAgICAgIGlmIChvcHRpb25h
bEZsYWcgJiYgdHlwZW9mIHZhbHVlID09PSAidW5kZWZpbmVkIikgeworICAgICAgICAgICAgICAg
ICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5XTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2
YWx1ZSAhPT0gdHlwZU5hbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
UHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBvZiBhcmd1bWVudCAnIiArIGtleSArICInIGZv
ciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwuIEl0IG11c3QgYmUgJyIgKyB0eXBl
TmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVvZiB2YWx1ZSArICInLiIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
cmVxdWVzdC5wYXJhbXNba2V5XSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGhhc1BhcmFtcyA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhc1BhcmFtcykKKyAgICAg
ICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXM7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYXJncy5sZW5ndGggPT09IDEgJiYgIWNhbGxiYWNrKSB7CisgICAgICAgICAgICBpZiAodHlw
ZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5l
cnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFsIGNhbGxiYWNrIGFyZ3VtZW50IGZvciBtZXRo
b2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwgbXVzdCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMg
dHlwZSBpcyAnIiArIHR5cGVvZiBhcmdzWzBdICsgIicuIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fd3JhcENhbGxi
YWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOworICAgIH0sCisKKyAg
ICBfd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3Q6IGZ1bmN0aW9uKG1lc3NhZ2VPYmpl
Y3QsIGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgbWVzc2FnZU9iamVjdC5pZCA9IHRoaXMuX3dy
YXAoY2FsbGJhY2spOworCisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMp
IHsKKyAgICAgICAgICAgIHZhciB3cmFwcGVkQ2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVz
c2FnZU9iamVjdC5pZF07CisgICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2subWV0aG9kTmFtZSA9
IG1lc3NhZ2VPYmplY3QubWV0aG9kOworICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLnNlbmRS
ZXF1ZXN0VGltZSA9IERhdGUubm93KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5k
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJm
cm9udGVuZDogIiArIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpKTsKKworICAgICAgICAr
K3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKKyAgICAgICAgdGhpcy5zZW5kTWVzc2FnZU9i
amVjdFRvQmFja2VuZChtZXNzYWdlT2JqZWN0KTsKKyAgICB9LAorCisgICAgc2VuZE1lc3NhZ2VP
YmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAgeworICAgICAgICBj
b25zb2xlLnRpbWVTdGFtcChtZXNzYWdlT2JqZWN0Lm1ldGhvZCk7CisgICAgICAgIHZhciBtZXNz
YWdlID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCk7CisgICAgICAgIEluc3BlY3RvckZy
b250ZW5kSG9zdC5zZW5kTWVzc2FnZVRvQmFja2VuZChtZXNzYWdlKTsKKyAgICB9LAorCisgICAg
X3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcjogZnVuY3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9tYWluXSA9IGRpc3BhdGNo
ZXI7CisgICAgfSwKKworICAgIGRpc3BhdGNoOiBmdW5jdGlvbihtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMpCisgICAgICAgICAg
ICBjb25zb2xlLmxvZygiYmFja2VuZDogIiArICgodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmci
KSA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKSkpOworCisgICAgICAgIHZhciBt
ZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNl
KG1lc3NhZ2UpIDogbWVzc2FnZTsKKworICAgICAgICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0
KSB7IC8vIGp1c3QgYSByZXNwb25zZSBmb3Igc29tZSByZXF1ZXN0CisgICAgICAgICAgICBpZiAo
bWVzc2FnZU9iamVjdC5lcnJvcikgeworICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QuZXJy
b3IuX19wcm90b19fID0geworICAgICAgICAgICAgICAgICAgICBnZXREZXNjcmlwdGlvbjogZnVu
Y3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBz
d2l0Y2godGhpcy5jb2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI3
MDA6IHJldHVybiAiUGFyc2UgZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgLTMyNjAwOiByZXR1cm4gIkludmFsaWQgUmVxdWVzdCI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAtMzI2MDE6IHJldHVybiAiTWV0aG9kIG5vdCBmb3VuZCI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDI6IHJldHVybiAiSW52YWxpZCBwYXJhbXMi
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAzOiByZXR1cm4gIkludGVy
bmFsIGVycm9yIjs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzIwMDA6IHJl
dHVybiAiU2VydmVyIGVycm9yIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24o
KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVz
Y3JpcHRpb24gPSJVbmtub3duIGVycm9yIGNvZGUiOworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSArICIoIiArIHRoaXMuY29kZSArICIpOiAiICsg
dGhpcy5tZXNzYWdlICsgIi4iICsgKHRoaXMuZGF0YSA/ICIgIiArIHRoaXMuZGF0YS5qb2luKCIg
IikgOiAiIik7CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAg
Z2V0TWVzc2FnZTogZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3Qu
ZXJyb3IuY29kZSAhPT0gLTMyMDAwKQorICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFBy
b3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZhciBhcmd1bWVudHMgPSBbXTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnJlc3Vs
dCkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBtZXNzYWdlT2JqZWN0LnJlc3Vs
dCkKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLnB1c2gobWVzc2FnZU9iamVjdC5yZXN1
bHRba2V5XSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRo
aXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKyAgICAgICAgICAgIGlmIChjYWxsYmFj
aykgeworICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOworICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9k
TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93
KCk7CisKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVy
cm9yKTsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpOwor
ICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICAg
ICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07CisKKyAgICAg
ICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1l
dGhvZE5hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAi
ICsgY2FsbGJhY2subWV0aG9kTmFtZSArICIgPSAiICsgKHByb2Nlc3NpbmdTdGFydFRpbWUgLSBj
YWxsYmFjay5zZW5kUmVxdWVzdFRpbWUpICsgIiArICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3Np
bmdTdGFydFRpbWUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHRoaXMuX3Nj
cmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkKKyAgICAgICAgICAgICAgICB0
aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoKTsKKworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmplY3Qu
bWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgICAgICB2YXIgZG9tYWluTmFtZSA9IG1ldGhvZFsw
XTsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBtZXRob2RbMV07CisgICAgICAgICAg
ICBpZiAoIShkb21haW5OYW1lIGluIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzKSkgeworICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBm
b3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnIiArIGRvbWFpbk5hbWUgKyAiJyIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBkaXNwYXRjaGVy
ID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9tYWluTmFtZV07CisgICAgICAgICAgICBpZiAo
IShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0Y2hlcikpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xl
LmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVt
ZW50ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCF0aGlzLl9l
dmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdKSB7CisgICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bnNwZWNp
ZmllZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcGFyYW1zID0g
W107CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5wYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcGFyYW1OYW1lcyA9IHRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhv
ZF07CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChtZXNzYWdlT2JqZWN0LnBh
cmFtc1twYXJhbU5hbWVzW2ldXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBw
cm9jZXNzaW5nU3RhcnRUaW1lOworICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRp
bWVTdGF0cykKKyAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3co
KTsKKworICAgICAgICAgICAgZGlzcGF0Y2hlcltmdW5jdGlvbk5hbWVdLmFwcGx5KGRpc3BhdGNo
ZXIsIHBhcmFtcyk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3Rh
dHMpCisgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBtZXNzYWdl
T2JqZWN0Lm1ldGhvZCArICIgPSAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1l
KSk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcjogZnVuY3Rp
b24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVlc3Qg
d2l0aCBpZCA9ICIgKyBtZXNzYWdlT2JqZWN0LmlkICsgIiBmYWlsZWQuICIgKyBtZXNzYWdlT2Jq
ZWN0LmVycm9yKTsKKyAgICB9LAorCisgICAgcnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczogZnVu
Y3Rpb24oc2NyaXB0KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zY3JpcHRzKQorICAgICAg
ICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdOworCisgICAgICAgIGlmIChzY3JpcHQpCisgICAgICAg
ICAgICB0aGlzLl9zY3JpcHRzLnB1c2goc2NyaXB0KTsKKworICAgICAgICBpZiAoIXRoaXMuX3Bl
bmRpbmdSZXNwb25zZXNDb3VudCkgeworICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9z
Y3JpcHRzOworICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdCisgICAgICAgICAgICBmb3Ig
KHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0cy5sZW5ndGg7ICsraWQpCisgICAgICAgICAgICAgICAg
IHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0luc3BlY3Rv
ckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9yQmFja2VuZFN0dWIoKTsiIiIpCisKKyAgICBwYXJhbV9j
b250YWluZXJfYWNjZXNzX2NvZGUgPSAiIiIKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJwYXJhbXMi
KTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRh
aW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90
b2NvbEVycm9ycy5nZXQoKTsKKyIiIgorCisKK3R5cGVfbWFwID0gVHlwZU1hcChqc29uX2FwaSkK
KworCitjbGFzcyBHZW5lcmF0b3I6CisgICAgZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMgPSBb
XQorICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCisKKyAgICBtZXRob2RfbmFt
ZV9lbnVtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QgPSBb
XQorICAgIGJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQorICAgIGJhY2tl
bmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAgbWV0aG9kX2hhbmRsZXJf
bGlzdCA9IFtdCisgICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfanNf
aW5pdGlhbGl6ZXJfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19ldmVudF9saXN0ID0gW10KKyAg
ICBiYWNrZW5kX2pzX2RvbWFpbl9kaXNwYXRjaGVyX2xpc3QgPSBbXQorCisgICAgYmFja2VuZF9j
b25zdHJ1Y3Rvcl9wYXJhbV9saXN0ID0gW10KKyAgICBiYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRf
bGlzdCA9IFtdCisgICAgYmFja2VuZF9maWVsZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2Zvcndh
cmRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9pbmNsdWRlX2xpc3QgPSBbXQorICAgIGZyb250ZW5k
X2NvbnN0cnVjdG9yX2luaXRfbGlzdCA9IFtdCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IGdvKCk6CisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBqc29uX2FwaVsiZG9tYWlucyJdOgor
ICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKyAgICAgICAg
ICAgIGRvbWFpbl9uYW1lX2xvd2VyID0gZG9tYWluX25hbWUubG93ZXIoKQorCisgICAgICAgICAg
ICBkb21haW5fZGF0YSA9IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFt
ZSkKKworICAgICAgICAgICAgaWYgZG9tYWluX2RhdGEuaXNfZGlzYWJsZWQoZGVmaW5lc19tYXAp
OgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGFnZW50X2ZpZWxkX25h
bWUgPSBkb21haW5fZGF0YS5hZ2VudF9maWVsZF9uYW1lCisKKyAgICAgICAgICAgIGZyb250ZW5k
X21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyA9IFtdCisgICAgICAgICAgICBpZiAiZXZlbnRzIiBp
biBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl9ldmVudCBpbiBqc29uX2Rv
bWFpblsiZXZlbnRzIl06CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2V2
ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25f
bGluZXMpCisKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRf
bGluZXMuYXBwZW5kKCIgICAgJXMgbV8lcztcbiIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9uYW1l
X2xvd2VyKSkKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3RydWN0b3Jf
aW5pdF9saXN0LmFwcGVuZCgiICAgICwgbV8lcyhpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpXG4i
ICUgZG9tYWluX25hbWVfbG93ZXIpCisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5k
X2RvbWFpbl9jbGFzc19saW5lcy5hcHBlbmQoVGVtcGxhdGVzLmZyb250ZW5kX2RvbWFpbl9jbGFz
cy5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT1k
b21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluRmllbGROYW1lPWRvbWFpbl9u
YW1lX2xvd2VyLAorICAgICAgICAgICAgICAgICAgICBmcm9udGVuZERvbWFpbk1ldGhvZERlY2xh
cmF0aW9ucz1qb2luKGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcywgIiIpKSkKKyAg
ICAgICAgICAgIGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAg
Zm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMiXToKKyAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9u
YW1lLCBhZ2VudF9maWVsZF9uYW1lKQorCisgICAgICAgICAgICBpZiBub3QgZG9tYWluX2RhdGEu
c2tpcF9qc19iaW5kOgorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFp
bl9kaXNwYXRjaGVyX2xpc3QuYXBwZW5kKCIgICAgdGhpcy5yZWdpc3RlciVzRGlzcGF0Y2hlciA9
IHRoaXMuX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKHRoaXMsIFwiJXNcIik7XG4iICUg
KGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZSkpCisKKyAgICAgICAgc29ydGVkX2pzb25fZG9tYWlu
cyA9IGxpc3QoanNvbl9hcGlbImRvbWFpbnMiXSkKKyAgICAgICAgc29ydGVkX2pzb25fZG9tYWlu
cy5zb3J0KGtleT1sYW1iZGEgbzogb1siZG9tYWluIl0pCisKKyAgICAgICAgZm9yIGpzb25fZG9t
YWluIGluIHNvcnRlZF9qc29uX2RvbWFpbnM6CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpz
b25fZG9tYWluWyJkb21haW4iXQorCisgICAgICAgICAgICBkb21haW5fZGF0YSA9IERvbWFpbk5h
bWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFtZSkKKyAgICAgICAgICAgIGlmIGRvbWFp
bl9kYXRhLmlzX2Rpc2FibGVkKGRlZmluZXNfbWFwKToKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorCisgICAgICAgICAgICBpZiBkb21haW5fZGF0YS5oaWRkZW46CisgICAgICAgICAgICAgICAg
Y29udGludWUKKyAgICAgICAgICAgIGFnZW50X3R5cGVfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50
X3R5cGVfbmFtZQorICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9kYXRhLmFn
ZW50X2ZpZWxkX25hbWUKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9y
X3BhcmFtX2xpc3QuYXBwZW5kKCIsICVzKiAlcyIgJSAoYWdlbnRfdHlwZV9uYW1lLCBhZ2VudF9m
aWVsZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdC5hcHBlbmQoIiAgICAgICAgLCBtXyVzKCVzKSIgJSAoYWdlbnRfZmllbGRfbmFtZSwg
YWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9maWVsZF9s
aXN0LmFwcGVuZCgiICAgICVzKiBtXyVzOyIgJSAoYWdlbnRfdHlwZV9uYW1lLCBhZ2VudF9maWVs
ZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdC5hcHBl
bmQoImNsYXNzICVzOyIgJSBhZ2VudF90eXBlX25hbWUpCisgICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9pbmNsdWRlX2xpc3QuYXBwZW5kKCIjaW5jbHVkZSBcIiVzLmhcIiIgJSBhZ2VudF90
eXBlX25hbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfZXZlbnQoanNv
bl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6
CisgICAgICAgIGV2ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KKyAgICAgICAgcGFyYW1l
dGVyX2xpc3QgPSBbXQorICAgICAgICBtZXRob2RfbGluZV9saXN0ID0gW10KKyAgICAgICAgYmFj
a2VuZF9qc19ldmVudF9wYXJhbV9saXN0ID0gW10KKyAgICAgICAgaWYgInBhcmFtZXRlcnMiIGlu
IGpzb25fZXZlbnQ6CisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7XG4iKQorICAgICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fZXZlbnRb
InBhcmFtZXRlcnMiXToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25fcGFy
YW1ldGVyWyJuYW1lIl0KKworICAgICAgICAgICAgICAgIHJhd190eXBlID0gcmVzb2x2ZVBhcmFt
UmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgICAgICBq
c29uX29wdGlvbmFsID0gIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJh
bWV0ZXJbIm9wdGlvbmFsIl0KKworICAgICAgICAgICAgICAgIG9wdGlvbmFsX21hc2sgPSByYXdf
dHlwZS5pc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCkKKyAgICAgICAgICAgICAgICBjX3R5cGUg
PSByYXdfdHlwZS5nZXRDUGFyYW1UeXBlKFBhcmFtVHlwZS5FVkVOVCwganNvbl9vcHRpb25hbCkK
KworICAgICAgICAgICAgICAgIHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0U2V0dGVyTmFtZSgp
CisKKyAgICAgICAgICAgICAgICBvcHRpb25hbCA9IG9wdGlvbmFsX21hc2sgYW5kIGpzb25fb3B0
aW9uYWwKKworICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9saXN0LmFwcGVuZCgiJXMgJXMiICUg
KGNfdHlwZS5nZXRfdGV4dCgpLCBwYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgICAgICBz
ZXR0ZXJfYXJndW1lbnQgPSBjX3R5cGUuZ2V0X3NldHRlcl9mb3JtYXQoKSAlIHBhcmFtZXRlcl9u
YW1lCisKKyAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9ICIgICAgcGFyYW1zT2JqZWN0LT5z
ZXQlcyhcIiVzXCIsICVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIHBhcmFtZXRlcl9uYW1lLCBzZXR0
ZXJfYXJndW1lbnQpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYgKCVzKVxuICAgICIgJSBwYXJhbWV0ZXJfbmFt
ZSkgKyBzZXR0ZXJfY29kZQorICAgICAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5k
KHNldHRlcl9jb2RlKQorCisgICAgICAgICAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9s
aXN0LmFwcGVuZCgiXCIlc1wiIiAlIHBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgbWV0aG9k
X2xpbmVfbGlzdC5hcHBlbmQoIiAgICAlc01lc3NhZ2UtPnNldE9iamVjdChcInBhcmFtc1wiLCBw
YXJhbXNPYmplY3QpO1xuIiAlIGV2ZW50X25hbWUpCisgICAgICAgIGZyb250ZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoCisgICAgICAgICAgICAiICAgICAgICB2b2lkICVzKCVz
KTtcbiIgJSAoZXZlbnRfbmFtZSwgam9pbihwYXJhbWV0ZXJfbGlzdCwgIiwgIikpKQorCisgICAg
ICAgIEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmZyb250
ZW5kX21ldGhvZC5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFp
bl9uYW1lLCBldmVudE5hbWU9ZXZlbnRfbmFtZSwKKyAgICAgICAgICAgIHBhcmFtZXRlcnM9am9p
bihwYXJhbWV0ZXJfbGlzdCwgIiwgIiksCisgICAgICAgICAgICBjb2RlPWpvaW4obWV0aG9kX2xp
bmVfbGlzdCwgIiIpKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0
LmFwcGVuZCgiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiVzLiVzXCJdID0gWyVzXTtcbiIgJSAoCisg
ICAgICAgICAgICBkb21haW5fbmFtZSwgZXZlbnRfbmFtZSwgam9pbihiYWNrZW5kX2pzX2V2ZW50
X3BhcmFtX2xpc3QsICIsICIpKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vz
c19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpOgor
ICAgICAgICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25fY29tbWFuZFsibmFtZSJdCisgICAgICAg
IEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QuYXBwZW5kKCIgICAgICAgIGslc18lc0Nt
ZCwiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRbIm5hbWUiXSkpCisgICAgICAgIEdlbmVy
YXRvci5tZXRob2RfaGFuZGxlcl9saXN0LmFwcGVuZCgiICAgICAgICAmSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OiVzXyVzLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkK
KyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5k
KCIgICAgdm9pZCAlc18lcyhsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVz
c2FnZU9iamVjdCk7IiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorCisgICAg
ICAgIG1ldGhvZF9pbl9jb2RlID0gIiIKKyAgICAgICAgbWV0aG9kX291dF9jb2RlID0gIiIKKyAg
ICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0ID0gW10KKyAgICAgICAgcmVzcG9uc2VfY29va19s
aXN0ID0gW10KKyAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiIKKyAgICAgICAganNf
cGFyYW1ldGVyc190ZXh0ID0gIiIKKyAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fY29t
bWFuZDoKKyAgICAgICAgICAgIGpzb25fcGFyYW1zID0ganNvbl9jb21tYW5kWyJwYXJhbWV0ZXJz
Il0KKyAgICAgICAgICAgIG1ldGhvZF9pbl9jb2RlICs9IFRlbXBsYXRlcy5wYXJhbV9jb250YWlu
ZXJfYWNjZXNzX2NvZGUKKyAgICAgICAgICAgIHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIgcmVx
dWVzdE1lc3NhZ2VPYmplY3QiCisgICAgICAgICAgICBqc19wYXJhbV9saXN0ID0gW10KKworICAg
ICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgorICAgICAgICAgICAg
ICAgIGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KKyAgICAgICAgICAg
ICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVQYXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIs
IGRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICAgICAgdmFyX3R5cGUgPSBwYXJhbV9yYXdfdHlw
ZS5nZXRDUGFyYW1UeXBlKFBhcmFtVHlwZS5JTlBVVCwgTm9uZSkKKyAgICAgICAgICAgICAgICBn
ZXR0ZXJfbmFtZSA9IHBhcmFtX3Jhd190eXBlLmdldEdldHRlck5hbWUoKQorCisgICAgICAgICAg
ICAgICAgaWYgIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJb
Im9wdGlvbmFsIl06CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3Zh
bHVlRm91bmQgPSBmYWxzZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVz
IGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBcIiVzXCIsICYlc192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChq
c29uX3BhcmFtX25hbWUsIHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0
dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDogMCIgJSAoanNvbl9w
YXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgY29kZSA9ICgiICAgICVzIGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFp
bmVyUHRyLCBcIiVzXCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdl
dHRlcl9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9
ICIsIGluXyVzIiAlIGpzb25fcGFyYW1fbmFtZQorCisgICAgICAgICAgICAgICAgbWV0aG9kX2lu
X2NvZGUgKz0gY29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBl
bmQocGFyYW0pCisKKyAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlw
ZS5nZXRKc0JpbmRUeXBlKCkKKyAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIlwiJXNc
Ijoge1wib3B0aW9uYWxcIjogJXMsIFwidHlwZVwiOiBcIiVzXCJ9IiAlICgKKyAgICAgICAgICAg
ICAgICAgICAganNvbl9wYXJhbV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAoInRydWUiIGlm
ICgib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9u
YWwiXSkgZWxzZSAiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICAgICAganNfYmluZF90eXBlKQor
CisgICAgICAgICAgICAgICAganNfcGFyYW1fbGlzdC5hcHBlbmQoanNfcGFyYW1fdGV4dCkKKwor
ICAgICAgICAgICAganNfcGFyYW1ldGVyc190ZXh0ID0gIiwgXCJwYXJhbXNcIjogeyIgKyBqb2lu
KGpzX3BhcmFtX2xpc3QsICIsICIpICsgIn0iCisKKyAgICAgICAgcmVzcG9uc2VfY29va190ZXh0
ID0gIiIKKyAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKKyAgICAgICAgICAg
IG1ldGhvZF9vdXRfY29kZSArPSAiXG4iCisgICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4g
anNvbl9jb21tYW5kWyJyZXR1cm5zIl06CisKKyAgICAgICAgICAgICAgICBqc29uX3JldHVybl9u
YW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQorICAgICAgICAgICAgICAgIHJhd190eXBlID0gcmVz
b2x2ZVBhcmFtUmF3VHlwZShqc29uX3JldHVybiwgZG9tYWluX25hbWUpCisgICAgICAgICAgICAg
ICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKyAgICAgICAgICAgICAg
ICBpbml0aWFsaXplciA9IHJhd190eXBlLmdldENJbml0aWFsaXplcigpCisgICAgICAgICAgICAg
ICAgdmFyX3R5cGUgPSByYXdfdHlwZS5nZXRDUGFyYW1UeXBlKFBhcmFtVHlwZS5PVVRQVVQsIE5v
bmUpCisKKyAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXMgPSAlcztcbiIgJSAo
dmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9yZXR1cm5fbmFtZSwgaW5pdGlhbGl6ZXIpCisgICAg
ICAgICAgICAgICAgcGFyYW0gPSAiLCAmb3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKKyAgICAg
ICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhcIiVzXCIsIG91dF8lcyk7
XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBqc29uX3JldHVybl9uYW1lKQor
ICAgICAgICAgICAgICAgIGlmIHZhcl90eXBlLmdldF90ZXh0KCkgPT0gImJvb2wiIGFuZCAib3B0
aW9uYWwiIGluIGpzb25fcmV0dXJuIGFuZCBqc29uX3JldHVyblsib3B0aW9uYWwiXToKKyAgICAg
ICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAgICBpZiAob3V0XyVzKVxuICAgICIgJSBqc29u
X3JldHVybl9uYW1lKSArIGNvb2sKKworICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfY29kZSAr
PSBjb2RlCisgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJh
bSkKKyAgICAgICAgICAgICAgICByZXNwb25zZV9jb29rX2xpc3QuYXBwZW5kKGNvb2spCisgICAg
ICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkge1xuJXMgICAgfVxuIiAlIGpvaW4ocmVzcG9uc2Vf
Y29va19saXN0LCAiIikKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVt
ZW50YXRpb25fbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmJhY2tlbmRfbWV0aG9kLnN1YnN0aXR1dGUo
Tm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIG1ldGhvZE5hbWU9anNv
bl9jb21tYW5kX25hbWUsCisgICAgICAgICAgICBhZ2VudEZpZWxkPSJtXyIgKyBhZ2VudF9maWVs
ZF9uYW1lLAorICAgICAgICAgICAgbWV0aG9kSW5Db2RlPW1ldGhvZF9pbl9jb2RlLAorICAgICAg
ICAgICAgbWV0aG9kT3V0Q29kZT1tZXRob2Rfb3V0X2NvZGUsCisgICAgICAgICAgICBhZ2VudENh
bGxQYXJhbXM9am9pbihhZ2VudF9jYWxsX3BhcmFtX2xpc3QsICIiKSwKKyAgICAgICAgICAgIHJl
cXVlc3RNZXNzYWdlT2JqZWN0PXJlcXVlc3RfbWVzc2FnZV9wYXJhbSwKKyAgICAgICAgICAgIHJl
c3BvbnNlQ29vaz1yZXNwb25zZV9jb29rX3RleHQpKQorICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIFwiJXMuJXNcIiwiICUg
KGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgdGhpcy5fcmVnaXN0ZXJE
ZWxlZ2F0ZSgne1wibWV0aG9kXCI6IFwiJXMuJXNcIiVzLCBcImlkXCI6IDB9Jyk7XG4iICUgKGRv
bWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0KSkKKworCitH
ZW5lcmF0b3IuZ28oKQorCitiYWNrZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9kaXJu
YW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIiwgInciKQorYmFja2VuZF9jcHBf
ZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5jcHAiLCAidyIpCisKK2Zyb250ZW5kX2hfZmlsZSA9IG9wZW4ob3V0cHV0X2hlYWRlcl9k
aXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5oIiwgInciKQorZnJvbnRlbmRfY3BwX2ZpbGUg
PSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yRnJvbnRlbmQuY3BwIiwgInci
KQorCitiYWNrZW5kX2pzX2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVj
dG9yQmFja2VuZFN0dWIuanMiLCAidyIpCisKKworZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBs
YXRlcy5mcm9udGVuZF9oLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgIGZpZWxkRGVjbGFyYXRp
b25zPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLCAiIiksCisgICAg
ICAgICBkb21haW5DbGFzc0xpc3Q9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNz
X2xpbmVzLCAiIikpKQorCitiYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9o
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3IuYmFj
a2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QsICJcbiIpLAorICAgIGNvbnN0cnVjdG9yUGFyYW1z
PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCwgIiIpLAorICAg
IGVudW1Db25zdGFudHM9am9pbihHZW5lcmF0b3IubWV0aG9kX25hbWVfZW51bV9saXN0LCAiXG4i
KSwKKyAgICBtZXRob2REZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2Rf
ZGVjbGFyYXRpb25fbGlzdCwgIlxuIiksCisgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5l
cmF0b3IuYmFja2VuZF9maWVsZF9saXN0LCAiXG4iKSwKKyAgICBmb3J3YXJkRGVjbGFyYXRpb25z
PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LCAiXG4iKSkpCisKK2Zyb250ZW5k
X2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAor
ICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9p
bml0X2xpc3QsICIiKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhv
ZF9saXN0LCAiXG4iKSkpCisKK2JhY2tlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tl
bmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKKyAgICBtZXRob2ROYW1lRGVjbGFyYXRpb25zPWpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdCwgIlxuIiksCisg
ICAgaW5jbHVkZXM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9pbmNsdWRlX2xpc3QsICJcbiIpLAor
ICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25f
bGlzdCwgIlxuIiksCisgICAgbWVzc2FnZUhhbmRsZXJzPWpvaW4oR2VuZXJhdG9yLm1ldGhvZF9o
YW5kbGVyX2xpc3QsICJcbiIpKSkKKworYmFja2VuZF9qc19maWxlLndyaXRlKFRlbXBsYXRlcy5i
YWNrZW5kX2pzLnN1YnN0aXR1dGUoTm9uZSwKKyAgICBkZWxlZ2F0ZXM9am9pbihHZW5lcmF0b3Iu
YmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0LCAiIiksCisgICAgZXZlbnRBcmdzPWpvaW4oR2Vu
ZXJhdG9yLmJhY2tlbmRfanNfZXZlbnRfbGlzdCwgIiIpLAorICAgIGRvbWFpbkRpc3BhdGNoZXJz
PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdCwgIiIpKSkK
KworYmFja2VuZF9oX2ZpbGUuY2xvc2UoKQorYmFja2VuZF9jcHBfZmlsZS5jbG9zZSgpCisKK2Zy
b250ZW5kX2hfZmlsZS5jbG9zZSgpCitmcm9udGVuZF9jcHBfZmlsZS5jbG9zZSgpCisKK2JhY2tl
bmRfanNfZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
aW5kZXggOTZmMWYzZmYyNjliNjkwNmVjNDc1YWEyNzFjMTZiMTcyNjZiOGY4Ni4uZTM5NmU1NjQ0
ZjQzYjBlYzA0NWZjYmU1ZjA0NThjYzc0NjNhNzVlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbgpAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2Vzc2lvbiIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAi
VHJ1ZSBpbiBjYXNlIG9mIHNlc3Npb24gY29va2llLiIgfQogICAgICAgICAgICAgICAgIF0sCiAg
ICAgICAgICAgICAgICAgImhpZGRlbiI6IHRydWUKLSAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKICAgICAgICAgICAgIHsKQEAg
LTg0Niw3ICs4NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlzTG9jYWxT
dG9yYWdlIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGZvciBsb2Nh
bCBzdG9yYWdlLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICJ0eXBl
IjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJFbnRyeSBpZCBmb3IgZnVydGhlciByZWZlcmVu
Y2UuIiB9CiAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0K
ICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMThkZWQ2MTBiMjg2YmE1ZTY0ODBjYTlhZGEzZmRhZGY5MDZm
YmE3Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAorKysgL2Rldi9udWxs
CkBAIC0xLDE2MSArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChj
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMgCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0jIAotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
IyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3lzCi0KLXByb2dyYW1fbmFtZSA9IG9zLnBh
dGguYmFzZW5hbWUoX19maWxlX18pCi1pZiBsZW4oc3lzLmFyZ3YpIDwgNCBvciBzeXMuYXJndlsx
XSAhPSAiLW8iOgotICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiAlcyAtbyBPVVRQVVRfRklM
RSBJTlBVVF9GSUxFXG4iICUgcHJvZ3JhbV9uYW1lKQotICAgIGV4aXQoMSkKLQotb3V0cHV0X3Bh
dGggPSBzeXMuYXJndlsyXQotaW5wdXRfcGF0aCA9IHN5cy5hcmd2WzNdCi0KLWlucHV0X2ZpbGUg
PSBvcGVuKGlucHV0X3BhdGgsICJyIikKLWpzb25fc3RyaW5nID0gaW5wdXRfZmlsZS5yZWFkKCkK
LWpzb25fc3RyaW5nID0ganNvbl9zdHJpbmcucmVwbGFjZSgiOiB0cnVlIiwgIjogVHJ1ZSIpCi1q
c29uX3N0cmluZyA9IGpzb25fc3RyaW5nLnJlcGxhY2UoIjogZmFsc2UiLCAiOiBmYWxzZSIpCi1q
c29uX2FwaSA9IGV2YWwoanNvbl9zdHJpbmcpWyJkb21haW5zIl0KLQotb3V0cHV0X2ZpbGUgPSBv
cGVuKG91dHB1dF9wYXRoLCAidyIpCi1vdXRwdXRfZmlsZS53cml0ZSgiIiIvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSAKLW1vZHVsZSBjb3JlIHsiIiIpCi0K
LXR5cGVfdHJhaXRzID0gewotICAgICJzdHJpbmciOiAiU3RyaW5nIiwKLSAgICAiaW50ZWdlciI6
ICJpbnQiLAotICAgICJudW1iZXIiOiAiZG91YmxlIiwKLSAgICAiYm9vbGVhbiI6ICJib29sZWFu
IiwKLSAgICAiYXJyYXkiOiAiQXJyYXkiLAotICAgICJvYmplY3QiOiAiT2JqZWN0IgotfQotCi1y
ZWZfdHlwZXMgPSB7fQotCi1tYWNyb190cmFpdHMgPSB7Ci0gICAgIkRhdGFiYXNlIjogIlNRTF9E
QVRBQkFTRSIsCi0gICAgIkRPTVN0b3JhZ2UiOiAiRE9NX1NUT1JBR0UiLAotICAgICJEZWJ1Z2dl
ciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiRE9NRGVidWdnZXIiOiAiSkFWQVNDUklQ
VF9ERUJVR0dFUiIsCi0gICAgIlByb2ZpbGVyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAg
ICJXb3JrZXIiOiAiV09SS0VSUyIKLX0KLQotZGVmIGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9t
YWluX25hbWUsIHR5cGVfaWQpOgotICAgIGlmIHR5cGVfaWQuZmluZCgiLiIpID09IC0xOgotICAg
ICAgIHJldHVybiAiJXMuJXMiICUgKGRvbWFpbl9uYW1lLCB0eXBlX2lkKQotICAgIHJldHVybiB0
eXBlX2lkCi0gICAgCi0KLWRlZiBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBwYXJhbSk6Ci0gICAg
aWYgInR5cGUiIGluIHBhcmFtOgotICAgICAgICByZXR1cm4gdHlwZV90cmFpdHNbcGFyYW1bInR5
cGUiXV0KLSAgICBpZiAiJHJlZiIgaW4gcGFyYW06Ci0gICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1
YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCBwYXJhbVsiJHJlZiJdKQotICAgICAgICBpZiB0
eXBlX2lkIGluIHJlZl90eXBlczoKLSAgICAgICAgICAgIHJlZl90eXBlID0gcmVmX3R5cGVzW3R5
cGVfaWRdCi0gICAgICAgICAgICByZXR1cm4gdHlwZV90cmFpdHNbcmVmX3R5cGVbInR5cGUiXV0K
LSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCJUeXBlIG5vdCBmb3VuZDogIiArIHR5
cGVfaWQpCi0gICAgICAgICAgICByZXR1cm4gIiEhIFR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9p
ZAotCi1mb3IgZG9tYWluIGluIGpzb25fYXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJk
b21haW4iXQotICAgIGlmICJ0eXBlcyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgdHlwZSBpbiBk
b21haW5bInR5cGVzIl06Ci0gICAgICAgICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlw
ZV9pZChkb21haW5fbmFtZSwgdHlwZVsiaWQiXSkKLSAgICAgICAgICAgIHJlZl90eXBlc1t0eXBl
X2lkXSA9IHR5cGU7Ci0KLWZvciBkb21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUg
PSBkb21haW5bImRvbWFpbiJdCi0gICAgaWYgZG9tYWluX25hbWUgaW4gbWFjcm9fdHJhaXRzOgot
ICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4jaWYgZGVmaW5lZChFTkFCTEVfJXMpICYmIEVO
QUJMRV8lcyIgJSAobWFjcm9fdHJhaXRzW2RvbWFpbl9uYW1lXSwgbWFjcm9fdHJhaXRzW2RvbWFp
bl9uYW1lXSkpCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgIGludGVyZmFjZSBbQ29uZGl0
aW9uYWw9SU5TUEVDVE9SXSAlcyB7IiAlIGRvbWFpbl9uYW1lKQotCi0gICAgaWYgImNvbW1hbmRz
IiBpbiBkb21haW46Ci0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpblsiY29tbWFuZHMiXToK
LSAgICAgICAgICAgIHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRlcnMiIGlu
IGNvbW1hbmQpOgotICAgICAgICAgICAgICAgIGZvciBpbl9wYXJhbSBpbiBjb21tYW5kWyJwYXJh
bWV0ZXJzIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFt
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAg
ICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwg
PSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJpbiVzICVzICVzIiAlIChv
cHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsibmFt
ZSJdKSkKLSAgICAgICAgICAgIGlmICgicmV0dXJucyIgaW4gY29tbWFuZCk6Ci0gICAgICAgICAg
ICAgICAgZm9yIG91dF9wYXJhbSBpbiBjb21tYW5kWyJyZXR1cm5zIl06Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICgib3B0aW9uYWwiIGluIG91dF9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25hbCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmFwcGVuZCgib3V0JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRv
bWFpbl9uYW1lLCBvdXRfcGFyYW0pLCBvdXRfcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBv
dXRwdXRfZmlsZS53cml0ZSgiXG4gICAgICAgIHZvaWQgJXMoJXMpOyIgJSAoY29tbWFuZFsibmFt
ZSJdLCAiLCAiLmpvaW4ocGFyYW1zKSkpCi0KLSAgICBpZiAiZXZlbnRzIiBpbiBkb21haW46Ci0g
ICAgICAgIGZvciBldmVudCBpbiBkb21haW5bImV2ZW50cyJdOgotICAgICAgICAgICAgcGFyYW1z
ID0gW10KLSAgICAgICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4gZXZlbnQpOgotICAgICAgICAg
ICAgICAgIGZvciBpbl9wYXJhbSBpbiBldmVudFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIm9wdGlvbmFsIiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25hbCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmFwcGVuZCgib3V0JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRv
bWFpbl9uYW1lLCBpbl9wYXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgb3V0
cHV0X2ZpbGUud3JpdGUoIlxuICAgICAgICBbZXZlbnRdIHZvaWQgJXMoJXMpOyIgJSAoZXZlbnRb
Im5hbWUiXSwgIiwgIi5qb2luKHBhcmFtcykpKQotCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxu
ICAgIH07IikKLSAgICBpZiBkb21haW5bImRvbWFpbiJdIGluIG1hY3JvX3RyYWl0czoKLSAgICAg
ICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuI2VuZGlmIC8vIEVOQUJMRV8lcyIgJSBtYWNyb190cmFp
dHNbZG9tYWluWyJkb21haW4iXV0pCi1vdXRwdXRfZmlsZS53cml0ZSgiXG59XG4iKQotb3V0cHV0
X2ZpbGUuY2xvc2UoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110021</attachid>
            <date>2011-10-06 14:21:49 -0700</date>
            <delta_ts>2011-10-06 15:13:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111007012116.patch</filename>
            <type>text/plain</type>
            <size>121873</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTU0MmY0
YWNkZWIxOGY1ODIzZGJhN2IzY2VhNmE2NGRiNWFlNjAzNy4uZTc0MWRhNjA1NmJkOTNjZTFlNjNk
MjgyZTY4MTlkM2Y2Y2MwMWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTIsMTcgKzIy
MTIsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNWJkZjliMjMzY2UyOWQ2M2RmNGEyOGM3MjBlZGY5YjA1ODEwOWIxOC4u
ZDA2MzY3MTY1MTBmMGVmZmM3OGNkZDkxY2I1NjFiODgzM2M3YTg5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDExLTEwLTA0ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
OgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgor
CiAyMDExLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4ZXMgZm9yIGV2ZXJ5b25lLgpAQCAtMTA2MjQsNiArMTA2MzksMjAgQEAK
ICAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjYW5SZW1haW5BbGl2ZU9u
UmVtb3ZhbEZyb21UcmVlKToKICAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6
CiAKKzIwMTEtMTAtMDMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRl
bmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxpbmZl
cm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1YnkgYmFz
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKaW5kZXggNjMxOTM4MjdjY2QwMjZkY2JkZTdl
MTNjMGFjMWM3OTEwZDQ3ZDc5YS4uODU4MzQ1N2UxMGI4MDkyNDcwYTQ3ZjBhNzZkNjk5ZjdiNTA2
ZTNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQpAQCAtNjc2LDI5ICs2NzYsMTIgQEAg
aW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRUb1Nv
dXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAotaW5z
cGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQRUNU
T1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVj
dG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRlcGVu
ZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNP
Ti53a0FkZE91dHB1dFRvU291cmNlcyA9IGZhbHNlCitpbnNwZWN0b3JKU09OLndrU2NyaXB0ID0g
JCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKK2luc3BlY3RvckpTT04u
Y29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0ICQkUFdEL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJ
UiAtLW91dHB1dF9jcHBfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tZGVmaW5lcyBc
IiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiCitpbnNwZWN0b3JKU09OLmRlcGVuZHMg
PSAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9ySlNP
TikKLWluc3BlY3RvckpTT04udmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVUCi0K
LWluc3BlY3RvcklETC5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmNwcAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pTT05f
T1VUUFVUCi1pbnNwZWN0b3JJREwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL2dl
bmVyYXRlLWJpbmRpbmdzLnBsCi1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0Qv
YmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1Njcmlw
dCAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVyYXRv
ciBJbnNwZWN0b3IgLS1vdXRwdXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1wcmVw
cm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNwZWN0
b3JJREwuZGVwZW5kcyA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
IFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gXAot
ICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwKLSAg
ICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAgICAg
ICAgJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklETC53
a0V4dHJhU291cmNlcyA9ICQkaW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxlcihp
bnNwZWN0b3JJREwpCiAKIGluc3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRlZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0gSU5T
UEVDVE9SX0JBQ0tFTkRfU1RVQl9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IDA5ZDA3MDMwYThmZTAxMzMwZmJmZTc2NjlhYTllNzYyMjc3MmZhNTUuLjI0MWNjYjc0Yjg1YTNm
ZDQ0YWU3Y2FhYWQxNTY3ODkxYTUwNzAyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQpAQCAtODkzLDE1ICs4OTMsMTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgK
IEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkvaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3RvclBy
b3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAKLUlu
c3BlY3Rvci5pZGwgOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9y
LWlkbAotCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRs
IC1vIEluc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQog
YWxsIDogSW5zcGVjdG9yRnJvbnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMg
PSAkKEdFTkVSQVRFX1NDUklQVFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
CitJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQogCi1JbnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJTlNQ
RUNUT1JfR0VORVJBVE9SX1NDUklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChGRUFU
VVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAk
PAorSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dFTkVS
QVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3Bw
X2RpciAuIC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQi
CiAKIGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCAzZTA4ZGEwYjJlM2I2NjA5MTFmNzk2MTFhZjA0NGFiMGMwNTExODdiLi5iOWE4OTA0ODQ1Y2Rj
ZDk5ZTYwOTUzNGNjMDBmZGQ1OGE0MTJhMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjkw
LDExICs2OTAsOCBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmNwcCBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmg6ICQoV2ViQ29yZQogRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC12ZXJzaW9uCiAJJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNwZWN0
b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgog
Ci1EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgOiAkKFdlYkNvcmUpL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0
b3ItaWRsCi0JJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rv
ci1pZGwgLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9y
LmlkbCAkKFNDUklQVFNfQklORElOR1MpICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KLQkkKEFNX1ZfR0VOKSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdz
L3NjcmlwdHMgLUkkKFdlYkNvcmUpL2luc3BlY3RvciAkKFdlYkNvcmUpL2JpbmRpbmdzL3Njcmlw
dHMvZ2VuZXJhdGUtYmluZGluZ3MucGwgJChJRExfUEFUSDolPS0taW5jbHVkZSAiJSIpIC0tb3V0
cHV0RGlyICIkKEdFTlNPVVJDRVNfV0VCQ09SRSkiIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVND
UklQVD0xICQoRkVBVFVSRV9ERUZJTkVTKSIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yICQ8CitEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDogJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5ICQ8IC0tb3V0cHV0X2hfZGlyICQoR0VOU09VUkNFU19XRUJD
T1JFKSAtLW91dHB1dF9jcHBfZGlyICQoR0VOU09VUkNFU19XRUJDT1JFKSAtLWRlZmluZXMgIkxB
TkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUykiCiBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmg6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5k
LmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwogRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczogRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3ODI1NzMzNjIwYTdkZmI3Y2FiNmY3MGRiZGRhZTVl
MjA2MmJjNzEuLjdiNzFiNTk1M2QzZmU3NzIzYmI0MDM0MDNhMTFlMDdmNDExMzc1NGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0zMzUsMTcgKzMzNSwyNCBAQAog
ICB9LAogICAndGFyZ2V0cyc6IFsKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJh
dGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAorICAgICAgJ3RhcmdldF9uYW1lJzogJ2lu
c3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92
ZXJzaW9uJworICAgICAgXSwKICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgewotICAgICAg
ICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbicsCisg
ICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90
b2NvbFNvdXJjZXMnLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKKyAgICAgICAgICAg
ICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weScsCiAgICAgICAgICAgICAn
Li4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAgICdv
dXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAor
ICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVf
RElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCisgICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAorICAgICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2Vu
ZFN0dWIuanMnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAg
ICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzUzLDI4ICszNjAsMjggQEAK
ICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9u
JywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LXZlcnNpb24nLAotICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICc8QChfb3V0cHV0cykn
LAotICAgICAgICAgICAgJzxAKF9pbnB1dHMpJworICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24nLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2Rpcics
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLWRl
ZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAgICAg
ICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29s
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywK
LSAgICAgICAgfQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHBy
b3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgfSwKICAgICAgIF0K
ICAgICB9LAogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfaWRsJywKKyAg
ICAgICd0YXJnZXRfbmFtZSc6ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbics
CiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwotCi0gICAgICAgIHsK
LSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbElETCcs
CisgICAgICAgICB7CisgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9y
UHJvdG9jb2xWZXJzaW9uJywKICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJy4u
L2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsJywKKyAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAogICAgICAgICAgICAg
Jy4uL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbicsCiAgICAgICAgICAgXSwKICAgICAgICAgICAn
b3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJj
b3JlL0luc3BlY3Rvci5pZGwnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCiAgICAgICAgICAgXSwKICAg
ICAgICAgICAndmFyaWFibGVzJzogewogICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2Rp
cnMnOiBbCkBAIC0zODIsNjUgKzM4OSwxNiBAQAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2Fj
dGlvbic6IFsKICAgICAgICAgICAgICdweXRob24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAogICAgICAgICAgICAgJy1vJywKICAg
ICAgICAgICAgICc8QChfb3V0cHV0cyknLAogICAgICAgICAgICAgJzxAKF9pbnB1dHMpJwogICAg
ICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbnNwZWN0b3IgcHJv
dG9jb2wgc291cmNlcyBmcm9tIEluc3BlY3Rvci5pZGwnLAorICAgICAgICAgICdtZXNzYWdlJzog
J1ZhbGlkYXRlIGluc3BlY3RvciBwcm90b2NvbCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkg
YW5kIGdlbmVyYXRlIHZlcnNpb24gZmlsZScsCiAgICAgICAgIH0KICAgICAgIF0KICAgICB9LAog
ICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
Ci0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAg
ICdpbnNwZWN0b3JfaWRsJywKLSAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92
ZXJzaW9uJwotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xTb3VyY2VzJywKLSAg
ICAgICAgICAjIFRoZSBzZWNvbmQgaW5wdXQgaXRlbSB3aWxsIGJlIHVzZWQgYXMgaXRlbSBuYW1l
IGluIHZjcHJvai4KLSAgICAgICAgICAjIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgSW5zcGVj
dG9yLmlkbCB0aGVyZSBiZWNhdXNlCi0gICAgICAgICAgIyBhbGwgaWRsIGZpbGVzIGFyZSBtYXJr
aW5nIGFzIGV4Y2x1ZGVkIGJ5IGd5cCBnZW5lcmF0b3IuCi0gICAgICAgICAgJ2lucHV0cyc6IFsK
LSAgICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsJywK
LSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbScsCi0g
ICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtJywKLSAgICAg
ICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbScsCi0gICAgICAgICAgICAn
Li4vYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG0nLAotICAgICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgICAg
XSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCcsCi0gICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcycsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKLSAgICAg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRl
bmQuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAg
ICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICBdLAotICAgICAgICAg
IH0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24nLAotICAgICAg
ICAgICAgJ3NjcmlwdHMvcnVsZV9iaW5kaW5nLnB5JywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgICAgJzwo
U0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUnLAotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAg
ICAgJzxAKF9pbnB1dHMpJywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnLS1kZWZp
bmVzJywgJzwoZmVhdHVyZV9kZWZpbmVzKSBMQU5HVUFHRV9KQVZBU0NSSVBUJywKLSAgICAgICAg
ICAgICctLWdlbmVyYXRvcicsICdJbnNwZWN0b3InLAotICAgICAgICAgICAgJzxAKGdlbmVyYXRv
cl9pbmNsdWRlX2RpcnMpJwotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2Vu
ZXJhdGluZyBJbnNwZWN0b3IgcHJvdG9jb2wgc291cmNlcyBmcm9tIEluc3BlY3Rvci5pZGwnLAot
ICAgICAgICB9LAotICAgICAgXQotICAgIH0sCi0gICAgewogICAgICAgJ3RhcmdldF9uYW1lJzog
J2luamVjdGVkX3NjcmlwdF9zb3VyY2UnLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAn
YWN0aW9ucyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZTIxODNjMWYy
OWM0Njc5NTg5MjYwNTBjYmQ5ODRjYTkzOWNhMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMjM1ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXBhY2thZ2Ug
Q29kZUdlbmVyYXRvckluc3BlY3RvcjsKLQotdXNlIHN0cmljdDsKLQotdXNlIENsYXNzOjpTdHJ1
Y3Q7Ci11c2UgRmlsZTo6c3RhdDsKLQotbXkgJXR5cGVUcmFuc2Zvcm07Ci0kdHlwZVRyYW5zZm9y
bXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fYXBwbGljYXRpb25D
YWNoZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQ1NTIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JDU1NBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNTU0Fn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY3NzQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJDb25zb2xlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JDb25z
b2xlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9jb25zb2xlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJQYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQYWdlQWdlbnQiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vz
c29yIiA9PiAibV9wYWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEZWJ1Z2dlciJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kZWJ1Z2dlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NRGVidWdnZXIifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nl
c3NvciIgPT4gIm1fZG9tRGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRhdGFi
YXNlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50IiwKLSAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2RhdGFiYXNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET00ifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTUFnZW50IiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRE9NQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21B
Z2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTVN0b3JhZ2UifSA9IHsKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbVN0
b3JhZ2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkZpbGVTeXN0ZW0ifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJt
X2ZpbGVTeXN0ZW1BZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvciJ9ID0gewot
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckFnZW50
IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiTmV0d29yayJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9yZXNvdXJjZUFnZW50IiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvclByb2ZpbGVyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcHJvZmlsZXJBZ2VudCIsCi19
OwotJHR5cGVUcmFuc2Zvcm17IlJ1bnRpbWUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3Bl
Y3RvclJ1bnRpbWVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3J1bnRpbWVBZ2VudCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlRpbWVsaW5lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JU
aW1lbGluZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3RpbWVsaW5lQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJXb3JrZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvcldvcmtl
ckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yV29ya2VyQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV93b3JrZXJBZ2VudCIsCi19OwotCi0kdHlwZVRyYW5zZm9y
bXsiRnJvbnRlbmQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZyb250ZW5kIiwK
LSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmQuaCIsCi19OwotJHR5cGVUcmFuc2Zv
cm17IlBhc3NSZWZQdHIifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0Zi9QYXNzUmVm
UHRyLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJSZWZDb3VudGVkIn0gPSB7Ci0gICAgImZvcndh
cmRIZWFkZXIiID0+ICJ3dGYvUmVmQ291bnRlZC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ik9iamVjdCJ9ID0gewotICAgICJwYXJhbSIgPT4g
IlBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvck9iamVjdCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJPYmpl
Y3QiLAotICAgICJKU1R5cGUiID0+ICJvYmplY3QiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJBcnJh
eSJ9ID0gewotICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKLSAg
ICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKLSAgICAiZGVmYXVsdFZh
bHVlIiA9PiAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvckFycmF5IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAg
ICJKU09OVHlwZSIgPT4gIkFycmF5IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiVmFsdWUifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvclZhbHVl
PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvclZhbHVlOjpudWxsKCkiLAotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVmFsdWUiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiVmFsdWUiLAotICAgICJKU1R5cGUiID0+
ICIiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJTdHJpbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJj
b25zdCBTdHJpbmcmIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBTdHJpbmcqIGNv
bnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJs
ZSIgPT4gIlN0cmluZyIsCi0gICAgInJldHVybiIgPT4gIlN0cmluZyIsCi0gICAgImRlZmF1bHRW
YWx1ZSIgPT4gIlwiXCIiLAotICAgICJmb3J3YXJkSGVhZGVyIiA9PiAiUGxhdGZvcm1TdHJpbmcu
aCIsCi0gICAgImhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAgICJKU09OVHlwZSIg
PT4gIlN0cmluZyIsCi0gICAgIkpTVHlwZSIgPT4gInN0cmluZyIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsibG9uZyJ9ID0gewotICAgICJwYXJhbSIgPT4gImxvbmciLAotICAgICJvcHRpb25hbF9wYXJh
bSIgPT4gImNvbnN0IGxvbmcqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIg
PT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImxvbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICIwIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpT
T05UeXBlIiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBl
VHJhbnNmb3JteyJpbnQifSA9IHsKLSAgICAicGFyYW0iID0+ICJpbnQiLAotICAgICJvcHRpb25h
bF9wYXJhbSIgPT4gImNvbnN0IGludCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vz
c29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAiaW50IiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAg
ICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0k
dHlwZVRyYW5zZm9ybXsidW5zaWduZWQgbG9uZyJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2ln
bmVkIGxvbmciLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IHVuc2lnbmVkIGxvbmcq
IGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJp
YWJsZSIgPT4gInVuc2lnbmVkIGxvbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsidW5zaWduZWQgaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAidW5zaWduZWQgaW50IiwKLSAg
ICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBpbnQqIGNvbnN0IiwKLSAgICAi
b3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gInVuc2ln
bmVkIGludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjB1IiwKLSAgICAiZm9yd2FyZCIgPT4g
IiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAg
ICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJkb3VibGUifSA9IHsK
LSAgICAicGFyYW0iID0+ICJkb3VibGUiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0
IGRvdWJsZSogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0g
ICAgInZhcmlhYmxlIiA9PiAiZG91YmxlIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMC4wIiwK
LSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBl
IiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNm
b3JteyJib29sZWFuIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiYm9vbCIsCi0gICAgIm9wdGlvbmFs
X3BhcmFtIiA9PiAiY29uc3QgYm9vbCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vz
c29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIj0+ICJib29sIiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiZmFsc2UiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwK
LSAgICAiSlNPTlR5cGUiID0+ICJCb29sZWFuIiwKLSAgICAiSlNUeXBlIiA9PiAiYm9vbGVhbiIK
LX07Ci0kdHlwZVRyYW5zZm9ybXsidm9pZCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAg
ICAiaGVhZGVyIiA9PiAiIgotfTsKLSR0eXBlVHJhbnNmb3JteyJWZWN0b3IifSA9IHsKLSAgICAi
aGVhZGVyIiA9PiAid3RmL1ZlY3Rvci5oIgotfTsKLQotIyBEZWZhdWx0IExpY2Vuc2UgVGVtcGxh
dGVzCi0KLW15ICRsaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8vIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1FT0YKLQotbXkgJGNvZGVH
ZW5lcmF0b3I7Ci1teSAkb3V0cHV0RGlyOwotbXkgJG91dHB1dEhlYWRlcnNEaXI7Ci1teSAkd3Jp
dGVEZXBlbmRlbmNpZXM7Ci1teSAkdmVyYm9zZTsKLQotbXkgJG5hbWVzcGFjZTsKLQotbXkgJGJh
Y2tlbmRDbGFzc05hbWU7Ci1teSAkYmFja2VuZENsYXNzRGVjbGFyYXRpb247Ci1teSAkYmFja2Vu
ZEpTU3R1Yk5hbWU7Ci1teSAlYmFja2VuZFR5cGVzOwotbXkgQGJhY2tlbmRNZXRob2RzOwotbXkg
QGJhY2tlbmRNZXRob2RzSW1wbDsKLW15ICViYWNrZW5kTWV0aG9kU2lnbmF0dXJlczsKLW15ICRi
YWNrZW5kQ29uc3RydWN0b3I7Ci1teSBAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkg
QGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zOwotbXkgQGJhY2tlbmRGb290ZXI7Ci1teSBAYmFj
a2VuZEpTU3R1YnM7Ci1teSBAYmFja2VuZEpTRXZlbnRzOwotbXkgJWJhY2tlbmREb21haW5zOwot
Ci1teSAkZnJvbnRlbmRDbGFzc05hbWU7Ci1teSAlZnJvbnRlbmRUeXBlczsKLW15IEBmcm9udGVu
ZE1ldGhvZHM7Ci1teSBAZnJvbnRlbmRBZ2VudEZpZWxkczsKLW15IEBmcm9udGVuZE1ldGhvZHNJ
bXBsOwotbXkgJWZyb250ZW5kTWV0aG9kU2lnbmF0dXJlczsKLW15ICRmcm9udGVuZENvbnN0cnVj
dG9yOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnM7Ci1teSBAZnJvbnRlbmRDb25z
dGFudERlZmluaXRpb25zOwotbXkgQGZyb250ZW5kRm9vdGVyOwotbXkgQGZyb250ZW5kRG9tYWlu
czsKLQotIyBEZWZhdWx0IGNvbnN0cnVjdG9yCi1zdWIgbmV3Ci17Ci0gICAgbXkgJG9iamVjdCA9
IHNoaWZ0OwotICAgIG15ICRyZWZlcmVuY2UgPSB7IH07Ci0KLSAgICAkY29kZUdlbmVyYXRvciA9
IHNoaWZ0OwotICAgICRvdXRwdXREaXIgPSBzaGlmdDsKLSAgICAkb3V0cHV0SGVhZGVyc0RpciA9
IHNoaWZ0OwotICAgIHNoaWZ0OyAjICR1c2VMYXllck9uVG9wCi0gICAgc2hpZnQ7ICMgJHByZXBy
b2Nlc3NvcgotICAgICR3cml0ZURlcGVuZGVuY2llcyA9IHNoaWZ0OwotICAgICR2ZXJib3NlID0g
c2hpZnQ7Ci0KLSAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKLSAgICByZXR1cm4gJHJl
ZmVyZW5jZTsKLX0KLQotIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0Ci1zdWIgR2VuZXJh
dGVNb2R1bGUKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGRhdGFOb2RlID0g
c2hpZnQ7Ci0KLSAgICAkbmFtZXNwYWNlID0gJGRhdGFOb2RlLT5tb2R1bGU7Ci0gICAgJG5hbWVz
cGFjZSA9fiBzL2NvcmUvV2ViQ29yZS87Ci0KLSAgICAkZnJvbnRlbmRDbGFzc05hbWUgPSAiSW5z
cGVjdG9yRnJvbnRlbmQiOwotICAgICRmcm9udGVuZENvbnN0cnVjdG9yID0gIiAgICAke2Zyb250
ZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsiOwotICAgIHB1c2goQGZy
b250ZW5kRm9vdGVyLCAicHJpdmF0ZToiKTsKLSAgICBwdXNoKEBmcm9udGVuZEZvb3RlciwgIiAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyIp
OwotICAgICRmcm9udGVuZFR5cGVzeyJTdHJpbmcifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkZnJvbnRlbmRUeXBlc3siUGFz
c1JlZlB0ciJ9ID0gMTsKLQotICAgICRiYWNrZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyIjsKLSAgICAkYmFja2VuZENsYXNzRGVjbGFyYXRpb24gPSAiSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiI7Ci0gICAgJGJhY2tlbmRKU1N0dWJOYW1lID0gIkluc3BlY3RvckJhY2tlbmRTdHVi
IjsKLSAgICAkYmFja2VuZFR5cGVzeyJJbnNwZWN0b3IifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBl
c3siSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlBh
c3NSZWZQdHIifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siUmVmQ291bnRlZCJ9ID0gMTsKLSAg
ICAkYmFja2VuZFR5cGVzeyJPYmplY3QifSA9IDE7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1l
bnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlSW50ZXJmYWNlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNo
aWZ0OwotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkZGVmaW5lcyA9IHNoaWZ0
OwotCi0gICAgbXkgJWFnZW50ID0gKAotICAgICAgICBtZXRob2REZWNsYXJhdGlvbnMgPT4gW10s
Ci0gICAgICAgIG1ldGhvZFNpZ25hdHVyZXMgPT4ge30KLSAgICApOwotICAgIGdlbmVyYXRlRnVu
Y3Rpb25zKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwotICAgIGlmIChAeyRhZ2VudHttZXRob2REZWNs
YXJhdGlvbnN9fSkgewotICAgICAgICBwdXNoKEBmcm9udGVuZERvbWFpbnMsICRpbnRlcmZhY2Ut
Pm5hbWUpOwotICAgICAgICBnZW5lcmF0ZUFnZW50RGVjbGFyYXRpb24oJGludGVyZmFjZSwgXCVh
Z2VudCk7Ci0gICAgfQotfQotCi1zdWIgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uCi17Ci0gICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotICAgIG15ICRh
Z2VudE5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywg
IiAgICBjbGFzcyAke2FnZW50TmFtZX0geyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywg
IiAgICBwdWJsaWM6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICAke2Fn
ZW50TmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsIEB7JGFnZW50LT57bWV0aG9kRGVj
bGFyYXRpb25zfX0pOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0iKTsKLSAgICBwdXNo
KEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHJpdmF0ZToiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1l
dGhvZHMsICIgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIH07Iik7Ci0g
ICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiIik7Ci0KLSAgICBteSAkZ2V0dGVyTmFtZSA9IGxj
KCRhZ2VudE5hbWUpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAke2FnZW50TmFt
ZX0qICR7Z2V0dGVyTmFtZX0oKSB7IHJldHVybiAmbV8ke2dldHRlck5hbWV9OyB9Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRNZXRob2RzLCAiIik7Ci0KLSAgICBwdXNoKEBmcm9udGVuZEZvb3Rlciwg
IiAgICAke2FnZW50TmFtZX0gbV8ke2dldHRlck5hbWV9OyIpOwotCi0gICAgcHVzaChAZnJvbnRl
bmRBZ2VudEZpZWxkcywgIm1fJHtnZXR0ZXJOYW1lfSIpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9u
dGVuZENvbnN0cnVjdG9ySW1wbAotewotICAgIG15IEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsK
LSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwgIiR7ZnJvbnRlbmRDbGFzc05hbWV9
Ojoke2Zyb250ZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwg
IiAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkiKTsKLSAgICBmb3JlYWNoIG15ICRhZ2VudEZpZWxkIChAZnJvbnRlbmRBZ2VudEZpZWxkcykg
ewotICAgICAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwgIiAgICAsICR7YWdlbnRG
aWVsZH0oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIH0KLSAgICBwdXNoKEBmcm9u
dGVuZENvbnN0cnVjdG9ySW1wbCwgInsiKTsKLSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9y
SW1wbCwgIn0iKTsKLSAgICByZXR1cm4gQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsOwotfQotCi1z
dWIgZ2VuZXJhdGVGdW5jdGlvbnMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAg
bXkgJGFnZW50ID0gc2hpZnQ7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJm
YWNlLT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0pIHsKLSAgICAgICAgICAgIGdlbmVyYXRlRnJvbnRl
bmRGdW5jdGlvbigkaW50ZXJmYWNlLCAkZnVuY3Rpb24sICRhZ2VudCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbigkaW50ZXJmYWNlLCAkZnVu
Y3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29sbGVjdEJhY2tlbmRKU1N0dWJGdW5j
dGlvbnMoJGludGVyZmFjZSk7Ci0gICAgY29sbGVjdEJhY2tlbmRKU1N0dWJFdmVudHMoJGludGVy
ZmFjZSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KLXsKLSAgICBteSAkaW50
ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJGFnZW50
ID0gc2hpZnQ7Ci0KLSAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWU7Ci0KLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSBAYXJn
c0ZpbHRlcmVkID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pOyAjIGp1c3Qga2VlcCBvbmx5IG91dCBwYXJhbWV0ZXJzIGZvciBmcm9udGVuZCBp
bnRlcmZhY2UuCi0gICAgbWFwKCRmcm9udGVuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBhcmdzRmls
dGVyZWQpOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzLgotICAgIG15ICRhcmd1bWVudHMgPSBq
b2luKCIsICIsIG1hcChwYXJhbVR5cGVUcmFpdHMoJF8sICJwYXJhbSIpIC4gIiAiIC4gJF8tPm5h
bWUsIEBhcmdzRmlsdGVyZWQpKTsgIyBwcmVwYXJlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gc2ln
bmF0dXJlLgotCi0gICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgICAgIHZvaWQgJHtmdW5jdGlvbk5h
bWV9KCR7YXJndW1lbnRzfSk7IjsKLSAgICAhJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30tPnsk
c2lnbmF0dXJlfSB8fCBkaWUgIkR1cGxpY2F0ZSBmcm9udGVuZCBmdW5jdGlvbiB3YXMgZGV0ZWN0
ZWQgZm9yIHNpZ25hdHVyZSAnJHNpZ25hdHVyZScuIjsKLSAgICAkYWdlbnQtPnttZXRob2RTaWdu
YXR1cmVzfS0+eyRzaWduYXR1cmV9ID0gMTsKLSAgICBwdXNoKEB7JGFnZW50LT57bWV0aG9kRGVj
bGFyYXRpb25zfX0sICRzaWduYXR1cmUpOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAidm9pZCAke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtkb21haW59Ojoke2Z1bmN0
aW9uTmFtZX0oJHthcmd1bWVudHN9KSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ICR7ZnVuY3Rpb25O
YW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcIm1ldGhvZFwi
LCBcIiRkb21haW4uJGZ1bmN0aW9uTmFtZVwiKTsiKTsKLSAgICBpZiAoc2NhbGFyKEBhcmdzRmls
dGVyZWQpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0KLSAg
ICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAYXJnc0ZpbHRlcmVkKSB7Ci0gICAgICAgICAg
ICBteSAkb3B0aW9uYWwgPSAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9u
YWwifSA/ICJpZiAoIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKVxuICAgICAgICAiIDogIiI7Ci0g
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAiIC4gJG9wdGlvbmFsIC4gInBhcmFtc09i
amVjdC0+c2V0IiAuIHBhcmFtVHlwZVRyYWl0cygkcGFyYW1ldGVyLCAiSlNPTlR5cGUiKSAuICIo
XCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwgIiAuIHBhcmFtVHlwZVRyYWl0cygkcGFyYW1l
dGVyLCAidmFsdWVBY2Nlc3NvciIpIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpOyIpOwotICAgICAg
ICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2Ut
PnNldE9iamVjdChcInBhcmFtc1wiLCBwYXJhbXNPYmplY3QpOyIpOwotICAgIH0KLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGNh
bWVsQ2FzZQotewotICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwotICAgICR2YWx1ZSA9fiBzL1xiKFx3
KS9cVSQxL2c7ICMgbWFrZSBhIGNhbWVsLWNhc2UgbmFtZSBmb3IgdHlwZSBuYW1lCi0gICAgJHZh
bHVlID1+IHMvIC8vZzsKLSAgICByZXR1cm4gJHZhbHVlOwotfQotCi1zdWIgZ2VuZXJhdGVCYWNr
ZW5kRnVuY3Rpb24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGZ1bmN0
aW9uID0gc2hpZnQ7Ci0KLSAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUgPSAkaW50ZXJmYWNl
LT5uYW1lIC4gIl8iIC4gJGZ1bmN0aW9uTmFtZTsKLSAgICBteSAkZnVsbFF1YWxpZmllZEZ1bmN0
aW9uTmFtZURvdCA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAkZnVuY3Rpb25OYW1lOwotCi0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgICAgICBrJHtmdWxsUXVh
bGlmaWVkRnVuY3Rpb25OYW1lfUNtZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZp
bml0aW9ucywgIiAgICBcIiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdH1cIiwiKTsKLQot
ICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKLSAgICBteSBAaW5BcmdzID0gZ3JlcCgk
Xy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgbXkg
QG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfSk7Ci0gICAgCi0gICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bGxRdWFs
aWZpZWRGdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsiOwotICAgICEkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWduYXR1
cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5jdGlvbiB3YXMgZGV0ZWN0ZWQgZm9yIHNpZ25hdHVy
ZSAnJHNpZ25hdHVyZScuIjsKLSAgICAkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWduYXR1
cmV9fSA9ICIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZSI7Ci0gICAgcHVzaChAYmFja2VuZE1l
dGhvZHMsICR7c2lnbmF0dXJlfSk7Ci0KLSAgICBteSBAZnVuY3Rpb247Ci0gICAgbXkgJHJlcXVl
c3RNZXNzYWdlT2JqZWN0ID0gc2NhbGFyKEBpbkFyZ3MpID8gIiByZXF1ZXN0TWVzc2FnZU9iamVj
dCIgOiAiIjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
JHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAi
Iik7Ci0KLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZG9tYWlu
QWNjZXNzb3IgPSB0eXBlVHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nlc3NvciIpOwotICAgICRi
YWNrZW5kVHlwZXN7JGRvbWFpbn0gPSAxOwotICAgICRiYWNrZW5kRG9tYWluc3skZG9tYWlufSA9
IDE7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCEkZG9tYWluQWNjZXNzb3IpIik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFwi
JGRvbWFpbiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0KLSAgICAjIGRlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGZvciBvdXQgYXJndW1l
bnRzLgotICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCBtYXAoIiAgICAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgInZhcmlhYmxlIikgLiAiIG91dF8i
IC4gJF8tPm5hbWUgLiAiID0gIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJkZWZhdWx0VmFsdWUi
KSAuICI7IiwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICB9
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgRXJyb3JTdHJpbmcgZXJyb3I7Iik7Ci0gICAgcHVz
aChAZnVuY3Rpb24sICIiKTsKLQotICAgIG15ICRpbmRlbnQgPSAiIjsKLSAgICBpZiAoc2NhbGFy
KEBpbkFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoXCJwYXJhbXNcIik7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOyIpOwot
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsiKTsKLQotICAgICAgICBmb3JlYWNoIG15ICRw
YXJhbWV0ZXIgKEBpbkFyZ3MpIHsKLSAgICAgICAgICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+
bmFtZTsKLSAgICAgICAgICAgIG15ICR0eXBlID0gJHBhcmFtZXRlci0+dHlwZTsKLSAgICAgICAg
ICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCRwYXJhbWV0ZXItPnR5cGUpOwotICAgICAg
ICAgICAgbXkgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIjAiOwotICAgICAgICAgICAgaWYgKCRw
YXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgYm9vbCAke25hbWV9X3ZhbHVlRm91bmQgPSBmYWxz
ZTsiKTsKLSAgICAgICAgICAgICAgICAkb3B0aW9uYWxGbGFnQXJndW1lbnQgPSAiJiR7bmFtZX1f
dmFsdWVGb3VuZCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAiIC4gdHlwZVRyYWl0cygkdHlwZSwgInZhcmlhYmxlIikgLiAiIGluXyRuYW1lID0gZ2V0
JHR5cGVTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBcIiRuYW1lXCIsICRvcHRpb25hbEZsYWdB
cmd1bWVudCwgcHJvdG9jb2xFcnJvcnNQdHIpOyIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiIik7Ci0gICAgICAgICRpbmRlbnQgPSAiICAgICI7Ci0gICAgfQotCi0gICAg
bXkgJGFyZ3MgPSBqb2luKCIsICIsCi0gICAgICAgICAgICAgICAgICAgICgiJmVycm9yIiwKLSAg
ICAgICAgICAgICAgICAgICAgIG1hcCgoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25h
bCJ9ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJF8tPm5hbWUgLiAiX3ZhbHVlRm91bmQg
PyAmaW5fIiAuICRfLT5uYW1lIC4gIiA6IDAiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ImluXyIgLiAkXy0+bmFtZSksIEBpbkFyZ3MpLAotICAgICAgICAgICAgICAgICAgICAgbWFwKCIm
b3V0XyIgLiAkXy0+bmFtZSwgQG91dEFyZ3MpKSk7Ci0KLSAgICBwdXNoKEBmdW5jdGlvbiwgJGlu
ZGVudCAuICJpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgJGluZGVudCAuICIgICAgJGRvbWFpbkFjY2Vzc29yLT4kZnVuY3Rpb25OYW1lKCRhcmdz
KTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Iik7Ci0gICAgaWYgKHNjYWxhcihAb3V0QXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7Iik7Ci0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQG91dEFyZ3MpIHsKLSAgICAg
ICAgICAgIG15ICRvZmZzZXQgPSAiICAgICAgICAiOwotICAgICAgICAgICAgIyBEb24ndCBhZGQg
b3B0aW9uYWwgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gdGhlIHJlc3VsdCB1bmxlc3MgaXQgaXMgInRy
dWUiCi0gICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9w
dGlvbmFsIn0gJiYgJHBhcmFtZXRlci0+dHlwZSBlcSAiYm9vbGVhbiIpIHsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJpZiAob3V0XyIgLiAkcGFyYW1ldGVyLT5u
YW1lIC4gIikiKTsKLSAgICAgICAgICAgICAgICAkb2Zmc2V0IC49ICIgICAgIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAkb2Zmc2V0IC4gInJlc3VsdC0+c2V0
IiAuIHR5cGVUcmFpdHMoJHBhcmFtZXRlci0+dHlwZSwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiXCIsIG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpOyIpOwot
ICAgICAgICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKLSAgICB9Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdChcIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZFwiLCBcIiRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90XCIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwotICAgIHB1c2goQGZ1bmN0aW9u
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24pOwotfQotCi1z
dWIgZ2VuZXJhdGVCYWNrZW5kU2VuZFJlc3BvbnNlCi17Ci0gICAgbXkgJHNlbmRSZXNwb25zZSA9
IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnNlbmRSZXNwb25zZShsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
LCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCi17Ci0gICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFs
aWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19ICAgIAotRU9GCi0g
ICAgcmV0dXJuIHNwbGl0KCJcbiIsICRzZW5kUmVzcG9uc2UpOwotfQotCi1zdWIgZ2VuZXJhdGVC
YWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJvcgotewotICAgIG15ICRyZXBvcnRQcm90b2NvbEVycm9y
ID0gPDwgIkVPRiI7Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgY29kZSwgZXJyb3JNZXNzYWdlLCAwKTsKLX0KLQotdm9pZCAke2JhY2tlbmRDbGFz
c05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
VmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKLSAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNp
emUoKSkgewotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAw
KTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAtMzI2MDAp
OwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7
Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwot
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwgLTMyNjAzKTsKLSAg
ICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOwotICAgIH0K
LSAgICBBU1NFUlQoY29kZSA+PTApOwotICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29t
bW9uRXJyb3JzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsK
LSAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKLSAgICBBU1NF
UlQoZXJyb3IpOwotICAgIGlmIChkYXRhKQotICAgICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEi
LCBkYXRhKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3Ip
OwotICAgIGlmIChjYWxsSWQpCi0gICAgICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2Fs
bElkKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJpZCIsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCkpOwotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAg
ICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwg
JHJlcG9ydFByb3RvY29sRXJyb3IpOwotfQotCi1zdWIgZ2VuZXJhdGVBcmd1bWVudEdldHRlcnMK
LXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICRqc29uID0gdHlwZVRyYWl0cygkdHlw
ZSwgIkpTT05UeXBlIik7Ci0gICAgbXkgJHZhcmlhYmxlID0gdHlwZVRyYWl0cygkdHlwZSwgInZh
cmlhYmxlIik7Ci0gICAgbXkgJGRlZmF1bHRWYWx1ZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJkZWZh
dWx0VmFsdWUiKTsKLSAgICBteSAkcmV0dXJuICA9IHR5cGVUcmFpdHMoJHR5cGUsICJyZXR1cm4i
KSA/IHR5cGVUcmFpdHMoJHR5cGUsICJyZXR1cm4iKSA6IHR5cGVUcmFpdHMoJHR5cGUsICJwYXJh
bSIpOwotCi0gICAgbXkgJHR5cGVTdHJpbmcgPSBjYW1lbENhc2UoJHR5cGUpOwotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICBzdGF0aWMgJHJldHVybiBnZXQkdHlw
ZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOyIpOwotICAgIG15
ICRnZXR0ZXJCb2R5ID0gPDwgIkVPRiI7Ci0KLSRyZXR1cm4gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldCR0eXBlU3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKLXsKLSAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwotCi0gICAgaWYgKHZhbHVlRm91bmQp
Ci0gICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAkdmFyaWFibGUgdmFsdWUgPSAk
ZGVmYXVsdFZhbHVlOwotCi0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZv
dW5kKSB7Ci0gICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJh
bXMgY29udGFpbmVyLgotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1l
dGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7Ci0gICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwot
Ci0gICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3Vu
ZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJ1wlcycgd2l0aCB0eXBlICckanNvbicgd2FzIG5vdCBmb3VuZC4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIGlm
ICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hcyRqc29uKCZ2YWx1ZSkpCi0gICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJ1wlcycgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICBlbHNlCi0gICAgICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAgICAgICAgKnZhbHVlRm91
bmQgPSB0cnVlOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLUVPRgotCi0gICAgcmV0dXJuIHNwbGl0
KCJcbiIsICRnZXR0ZXJCb2R5KTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIK
LXsKLSAgICBteSBAYm9keTsKLSAgICBteSBAbWFwRW50cmllcyA9IG1hcCgiICAgICAgICAmJHti
YWNrZW5kQ2xhc3NOYW1lfTo6JF8sIiwgbWFwICgkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JF99
LCBAYmFja2VuZE1ldGhvZHMpKTsKLSAgICBteSAkbWFwRW50cmllcyA9IGpvaW4oIlxuIiwgQG1h
cEVudHJpZXMpOwotCi0gICAgbXkgJGJhY2tlbmREaXNwYXRjaGVyQm9keSA9IDw8ICJFT0YiOwot
dm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgUmVmUHRyPCR7YmFja2VuZENsYXNzTmFtZX0+IHByb3RlY3QgPSB0aGlzOwotICAg
IHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5kbGVyKShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7Ci0gICAgbG9uZyBjYWxsSWQgPSAwOwot
Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBzdGF0aWMgQ2FsbEhh
bmRsZXIgaGFuZGxlcnNbXSA9IHsKLSRtYXBFbnRyaWVzCi0gICAgICAgIH07Ci0gICAgICAgIHNp
emVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFuZE5hbWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNb
MF0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmROYW1lc1tpXSwgaGFuZGxlcnNbaV0pOwotICAg
IH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBi
ZSBpbiBKU09OIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0
KCk7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOwotICAgIGlmICghY2FsbElk
VmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwg
IidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJv
cGVydHkgbXVzdCBiZSBudW1iZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1l
dGhvZCIpOwotICAgIGlmICghbWV0aG9kVmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBm
b3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIG1ldGhvZDsKLSAg
ICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygmbWV0aG9kKSkgewotICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhv
ZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hN
YXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBt
ZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
ICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwotfQot
RU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkpOwotfQot
Ci1zdWIgZ2VuZXJhdGVCYWNrZW5kTWVzc2FnZVBhcnNlcgotewotICAgIG15ICRtZXNzYWdlUGFy
c2VyQm9keSA9IDw8ICJFT0YiOwotYm9vbCAke2JhY2tlbmRDbGFzc05hbWV9OjpnZXRDb21tYW5k
TmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KQotewotICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3Nh
Z2UpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOwotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW9iamVjdC0+Z2V0U3Ry
aW5nKCJtZXRob2QiLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkbWVzc2FnZVBhcnNlckJv
ZHkpOwotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJGdW5jdGlvbnMKLXsKLSAgICBteSAk
aW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9IGdyZXAoISRfLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9LCBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9u
c30pOwotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotCi0gICAgZm9yZWFjaCBt
eSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKLSAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVjdGlv
biBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgICAgICBteSAkYXJndW1l
bnROYW1lcyA9IGpvaW4oCi0gICAgICAgICAgICAiLCIsCi0gICAgICAgICAgICBtYXAoIlwiIiAu
ICRfLT5uYW1lIC4gIlwiOiB7IgotICAgICAgICAgICAgICAgIC4gIlwib3B0aW9uYWxcIjogIiAu
ICgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAidHJ1ZSAiIDogImZhbHNl
IikgLiAiLCAiCi0gICAgICAgICAgICAgICAgLiAiXCJ0eXBlXCI6IFwiIiAuIHR5cGVUcmFpdHMo
JF8tPnR5cGUsICJKU1R5cGUiKSAuICJcIiIKLSAgICAgICAgICAgICAgICAuICJ9IiwKLSAgICAg
ICAgICAgICAgICAgQGluQXJncykpOwotICAgICAgICBwdXNoKEBiYWNrZW5kSlNTdHVicywgIiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7IiAuCi0gICAgICAgICAgICAiXCJtZXRob2RcIjog
XCIkZG9tYWluLiRuYW1lXCIsICIgLgotICAgICAgICAgICAgKHNjYWxhcihAaW5BcmdzKSA/ICJc
InBhcmFtc1wiOiB7JGFyZ3VtZW50TmFtZXN9LCAiIDogIiIpIC4KLSAgICAgICAgICAgICJcImlk
XCI6IDAiIC4KLSAgICAgICAgIn0nKTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBjb2xsZWN0QmFja2Vu
ZEpTU3R1YkV2ZW50cwotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSBAZnVu
Y3Rpb25zID0gZ3JlcCgkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQi
fSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFj
ZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAg
ICAgIG15ICRuYW1lID0gJGRvbWFpbiAuICIuIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgICAgICBteSBAb3V0QXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2lu
KCIsIiwgbWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIiIgLCBAb3V0QXJncykpOwotICAgICAgICBw
dXNoKEBiYWNrZW5kSlNFdmVudHMsICIgICAgdGhpcy5fZXZlbnRBcmdzW1wiIiAuICRuYW1lIC4g
IlwiXSA9IFsiIC4gJGFyZ3VtZW50TmFtZXMgLiJdOyIpOwotICAgIH0KLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFN0dWJKUwotewotICAgIG15ICRKU1JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcnMg
PSBqb2luKCJcbiIsIG1hcCgiICAgIHRoaXMucmVnaXN0ZXIiIC4gJF8gLiAiRGlzcGF0Y2hlciA9
IHRoaXMuX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKHRoaXMsIFwiIiAuICRfIC4iXCIp
OyIsIEBmcm9udGVuZERvbWFpbnMpKTsKLSAgICBteSAkSlNTdHVicyA9IGpvaW4oIlxuIiwgQGJh
Y2tlbmRKU1N0dWJzKTsKLSAgICBteSAkSlNFdmVudHMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNF
dmVudHMpOwotICAgIG15ICRpbnNwZWN0b3JCYWNrZW5kU3R1YkpTID0gPDwgIkVPRiI7Ci0kbGlj
ZW5zZVRlbXBsYXRlCi0KLUluc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQotewotICAg
IHRoaXMuX2xhc3RDYWxsYmFja0lkID0gMTsKLSAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291
bnQgPSAwOwotICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OwotICAgIHRoaXMuX2RvbWFpbkRpc3Bh
dGNoZXJzID0ge307Ci0gICAgdGhpcy5fZXZlbnRBcmdzID0ge307Ci0kSlNTdHVicwotJEpTRXZl
bnRzCi0kSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzCi19Ci0KLUluc3BlY3RvckJhY2tlbmRT
dHViLnByb3RvdHlwZSA9IHsKLSAgICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAotICAgIGR1
bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzOiAwLAotCi0gICAgX3dyYXA6IGZ1bmN0aW9uKGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJh
Y2tJZCsrOwotICAgICAgICB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8
fCBmdW5jdGlvbigpIHt9OwotICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKLSAgICB9LAotCi0g
ICAgX3JlZ2lzdGVyRGVsZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCi0gICAgewotICAg
ICAgICB2YXIgZG9tYWluQW5kRnVuY3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1l
dGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rp
b25bMF0gKyAiQWdlbnQiOwotICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQotICAgICAg
ICAgICAgd2luZG93W2FnZW50TmFtZV0gPSB7fTsKLSAgICAgICAgd2luZG93W2FnZW50TmFtZV1b
ZG9tYWluQW5kRnVuY3Rpb25bMV1dID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0
aGlzLCByZXF1ZXN0U3RyaW5nKTsKLSAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5k
RnVuY3Rpb25bMV1dWyJpbnZva2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RT
dHJpbmcpCi0gICAgfSwKLQotICAgIF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFy
Z3MsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJl
cXVlc3RTdHJpbmcpOwotICAgICAgICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7Ci0gICAgICAgIHRo
aXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsK
LSAgICB9LAotCi0gICAgX3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7
Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOwotICAgICAg
ICB2YXIgY2FsbGJhY2sgPSAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGgg
LSAxXSA9PT0gImZ1bmN0aW9uIikgPyBhcmdzLnBvcCgpIDogMDsKLSAgICAgICAgdmFyIGRvbWFp
bkFuZE1ldGhvZCA9IHJlcXVlc3QubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgIHZhciBhZ2Vu
dE1ldGhvZCA9IGRvbWFpbkFuZE1ldGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9k
WzFdOwotCi0gICAgICAgIHZhciBoYXNQYXJhbXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlcXVl
c3QucGFyYW1zKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5
cGU7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tl
eV0ub3B0aW9uYWw7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYg
IW9wdGlvbmFsRmxhZykgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBh
Z2VudE1ldGhvZCArICInIGNhbGwuIEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIg
KyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LnBhcmFtcykgKyAiJy4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYm
IHR5cGVvZiB2YWx1ZSA9PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHJlcXVlc3QucGFyYW1zW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09
IHR5cGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29s
IEVycm9yOiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9k
ICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAi
JyBidXQgaXQgaXMgJyIgKyB0eXBlb2YgdmFsdWUgKyAiJy4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJlcXVlc3Qu
cGFyYW1zW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFoYXNQYXJhbXMpCi0gICAgICAgICAgICAg
ICAgZGVsZXRlIHJlcXVlc3QucGFyYW1zOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3Mu
bGVuZ3RoID09PSAxICYmICFjYWxsYmFjaykgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdz
WzBdICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b3RvY29sIEVycm9yOiBPcHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsg
YWdlbnRNZXRob2QgKyAiJyBjYWxsIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMg
JyIgKyB0eXBlb2YgYXJnc1swXSArICInLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNl
bmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX3dyYXBD
YWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxi
YWNrKTsKLQotICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7Ci0gICAg
ICAgICAgICB2YXIgd3JhcHBlZENhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmpl
Y3QuaWRdOwotICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdl
T2JqZWN0Lm1ldGhvZDsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRp
bWUgPSBEYXRlLm5vdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclByb3RvY29sTWVzc2FnZXMpCi0gICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6
ICIgKyBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KSk7Ci0KLSAgICAgICAgKyt0aGlzLl9w
ZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0Jh
Y2tlbmQobWVzc2FnZU9iamVjdCk7Ci0gICAgfSwKLQotICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9C
YWNrZW5kOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29sZS50
aW1lU3RhbXAobWVzc2FnZU9iamVjdC5tZXRob2QpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IEpT
T04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIF9yZWdpc3Rl
ckRvbWFpbkRpc3BhdGNoZXI6IGZ1bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOwotICAg
IH0sCi0KLSAgICBkaXNwYXRjaDogZnVuY3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29s
ZS5sb2coImJhY2tlbmQ6ICIgKyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNz
YWdlIDogSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpKTsKLQotICAgICAgICB2YXIgbWVzc2FnZU9i
amVjdCA9ICh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdl
KSA6IG1lc3NhZ2U7Ci0KLSAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBq
dXN0IGEgcmVzcG9uc2UgZm9yIHNvbWUgcmVxdWVzdAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VP
YmplY3QuZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJv
dG9fXyA9IHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRo
aXMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1
cm4gIlBhcnNlIGVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYw
MDogcmV0dXJuICJJbnZhbGlkIFJlcXVlc3QiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgLTMyNjAxOiByZXR1cm4gIk1ldGhvZCBub3QgZm91bmQiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgLTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJv
ciI7OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNl
cnZlciBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9u
ID0iVW5rbm93biBlcnJvciBjb2RlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmdldERlc2NyaXB0aW9uKCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVz
c2FnZSArICIuIiArICh0aGlzLmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIp
OwotICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIGdldE1lc3Nh
Z2U6IGZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNv
ZGUgIT09IC0zMjAwMCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVy
cm9yKG1lc3NhZ2VPYmplY3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgYXJn
dW1lbnRzID0gW107Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxs
YmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCi0g
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0g
ICAgICAgICAgICAgICAgYXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgICAgICAtLXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1l
KQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxi
YWNrLm1ldGhvZE5hbWUgKyAiID0gIiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2su
c2VuZFJlcXVlc3RUaW1lKSArICIgKyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRU
aW1lKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYm
ICF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5ydW5B
ZnRlclBlbmRpbmdEaXNwYXRjaGVzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5z
cGxpdCgiLiIpOwotICAgICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07Ci0gICAg
ICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOwotICAgICAgICAgICAgaWYgKCEo
ZG9tYWluTmFtZSBpbiB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKLSAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1l
eGlzdGluZyBkb21haW4gJyIgKyBkb21haW5OYW1lICsgIiciKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMu
X2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbk5hbWVdOwotICAgICAgICAgICAgaWYgKCEoZnVuY3Rp
b25OYW1lIGluIGRpc3BhdGNoZXIpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
UHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1l
dGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdz
W21lc3NhZ2VPYmplY3QubWV0aG9kXSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0
aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwotICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHBhcmFtTmFtZXMgPSB0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFy
YW1OYW1lc1tpXV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcHJvY2Vzc2lu
Z1N0YXJ0VGltZTsKLSAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMp
Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLSAg
ICAgICAgICAgIGRpc3BhdGNoZXJbZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJh
bXMpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAg
ICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5t
ZXRob2QgKyAiID0gIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3Nh
Z2VPYmplY3QpCi0gICAgewotICAgICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQg
PSAiICsgbWVzc2FnZU9iamVjdC5pZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJv
cik7Ci0gICAgfSwKLQotICAgIHJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNj
cmlwdCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2NyaXB0cykKLSAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMgPSBbXTsKLQotICAgICAgICBpZiAoc2NyaXB0KQotICAgICAgICAgICAgdGhp
cy5fc2NyaXB0cy5wdXNoKHNjcmlwdCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVz
cG9uc2VzQ291bnQpIHsKLSAgICAgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsK
LSAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMgPSBbXQotICAgICAgICAgICAgZm9yICh2YXIgaWQg
PSAwOyBpZCA8IHNjcmlwdHMubGVuZ3RoOyArK2lkKQotICAgICAgICAgICAgICAgICBzY3JpcHRz
W2lkXS5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbnNwZWN0b3JCYWNrZW5k
ID0gbmV3IEluc3BlY3RvckJhY2tlbmRTdHViKCk7Ci0KLUVPRgotICAgIHJldHVybiBzcGxpdCgi
XG4iLCAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUhlYWRlcgot
ewotICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKLSAgICBteSAkY2xhc3NEZWNsYXJhdGlvbiA9
IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNoaWZ0OwotICAgIG15ICRjb25zdHJ1Y3RvciA9IHNo
aWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0
OwotICAgIG15ICRmb290ZXIgPSBzaGlmdDsKLQotICAgIG15ICRmb3J3YXJkSGVhZGVycyA9IGpv
aW4oIlxuIiwgc29ydChtYXAoIiNpbmNsdWRlIDwiIC4gdHlwZVRyYWl0cygkXywgImZvcndhcmRI
ZWFkZXIiKSAuICI+IiwgZ3JlcCh0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZEhlYWRlciIpLCBrZXlz
ICV7JHR5cGVzfSkpKSk7Ci0gICAgbXkgJGZvcndhcmREZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIs
IHNvcnQobWFwKCJjbGFzcyAiIC4gdHlwZVRyYWl0cygkXywgImZvcndhcmQiKSAuICI7IiwgZ3Jl
cCh0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZCIpLCBrZXlzICV7JHR5cGVzfSkpKSk7Ci0gICAgbXkg
JGNvbnN0YW50RGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBAeyRjb25zdGFudHN9KTsKLSAgICBt
eSAkbWV0aG9kc0RlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskbWV0aG9kc30pOwotCi0gICAg
bXkgJGhlYWRlckJvZHkgPSA8PCAiRU9GIjsKLS8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jaWZuZGVmICR7Y2xhc3NOYW1lfV9oCi0jZGVm
aW5lICR7Y2xhc3NOYW1lfV9oCi0KLSR7Zm9yd2FyZEhlYWRlcnN9Ci0KLW5hbWVzcGFjZSAkbmFt
ZXNwYWNlIHsKLQotJGZvcndhcmREZWNsYXJhdGlvbnMKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLWNsYXNzICRjbGFzc0RlY2xhcmF0aW9uIHsKLXB1YmxpYzoKLSRjb25zdHJ1Y3Rv
cgotCi0kY29uc3RhbnREZWNsYXJhdGlvbnMKLSRtZXRob2RzRGVjbGFyYXRpb25zCi0KLSRmb290
ZXIKLX07Ci0KLX0gLy8gbmFtZXNwYWNlICRuYW1lc3BhY2UKLSNlbmRpZiAvLyAhZGVmaW5lZCgk
e2NsYXNzTmFtZX1faCkKLQotRU9GCi0gICAgcmV0dXJuICRoZWFkZXJCb2R5OwotfQotCi1zdWIg
Z2VuZXJhdGVTb3VyY2UKLXsKLSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJHR5
cGVzID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0YW50cyA9IHNoaWZ0OwotICAgIG15ICRtZXRob2Rz
ID0gc2hpZnQ7Ci0KLSAgICBteSBAc291cmNlQ29udGVudCA9IHNwbGl0KCJcciIsICRsaWNlbnNl
VGVtcGxhdGUpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICJcbiNpbmNsdWRlIFwiY29uZmln
LmhcIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSBcIiRjbGFzc05hbWUu
aFwiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4iKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4iKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChA
c291cmNlQ29udGVudCwgIiNpZiBFTkFCTEUoSU5TUEVDVE9SKSIpOwotICAgIHB1c2goQHNvdXJj
ZUNvbnRlbnQsICIiKTsKLQotICAgIG15ICVoZWFkZXJzOwotICAgIGZvcmVhY2ggbXkgJHR5cGUg
KGtleXMgJXskdHlwZXN9KSB7Ci0gICAgICAgICRoZWFkZXJzeyIjaW5jbHVkZSBcIiIgLiB0eXBl
VHJhaXRzKCR0eXBlLCAiaGVhZGVyIikgLiAiXCIifSA9IDEgaWYgIXR5cGVUcmFpdHMoJHR5cGUs
ICJoZWFkZXIiKSBlcSAgIiI7Ci0gICAgfQotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIHNvcnQg
a2V5cyAlaGVhZGVycyk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2go
QHNvdXJjZUNvbnRlbnQsICJuYW1lc3BhY2UgJG5hbWVzcGFjZSB7Iik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIGpvaW4oIlxuIiwgQHsk
Y29uc3RhbnRzfSkpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBz
b3VyY2VDb250ZW50LCBAeyRtZXRob2RzfSk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIp
OwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICJ9IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlIik7
Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQs
ICIjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiIik7Ci0gICAgcmV0dXJuIEBzb3VyY2VDb250ZW50OwotfQotCi1zdWIgdHlwZVRyYWl0cwot
ewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJHRyYWl0ID0gc2hpZnQ7Ci0gICAgcmV0
dXJuICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyR0cmFpdH07Ci19Ci0KLXN1YiBwYXJhbVR5cGVU
cmFpdHMKLXsKLSAgICBteSAkcGFyYW1EZXNjcmlwdGlvbiA9IHNoaWZ0OwotICAgIG15ICR0cmFp
dCA9IHNoaWZ0OwotICAgIGlmICgkcGFyYW1EZXNjcmlwdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Im9wdGlvbmFsIn0pIHsKLSAgICAgICAgbXkgJG9wdGlvbmFsUmVzdWx0ID0gdHlwZVRyYWl0
cygkcGFyYW1EZXNjcmlwdGlvbi0+dHlwZSwgIm9wdGlvbmFsXyIgLiAkdHJhaXQpOwotICAgICAg
ICByZXR1cm4gJG9wdGlvbmFsUmVzdWx0IGlmIGRlZmluZWQgJG9wdGlvbmFsUmVzdWx0OwotICAg
IH0KLSAgICBteSAkcmVzdWx0ID0gdHlwZVRyYWl0cygkcGFyYW1EZXNjcmlwdGlvbi0+dHlwZSwg
JHRyYWl0KTsKLSAgICByZXR1cm4gZGVmaW5lZCAkcmVzdWx0ID8gJHJlc3VsdCA6ICIiOwotfQot
Ci1zdWIgZ2VuZXJhdGVCYWNrZW5kQWdlbnRGaWVsZHNBbmRDb25zdHJ1Y3RvcgotewotICAgIG15
IEBhcmd1bWVudHM7Ci0gICAgbXkgQGZpZWxkSW5pdGlhbGl6ZXJzOwotCi0gICAgcHVzaChAYXJn
dW1lbnRzLCAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwiKTsKLSAgICBwdXNoKEBmaWVsZEluaXRpYWxpemVycywgIiAgICAgICAgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChA
YmFja2VuZEZvb3RlciwgIiAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyIpOwotCi0gICAgZm9yZWFjaCBteSAkZG9tYWluIChzb3J0IGtleXMg
JWJhY2tlbmREb21haW5zKSB7Ci0gICAgICAgICMgQWRkIGFnZW50IGZpZWxkIGRlY2xhcmF0aW9u
IHRvIHRoZSBmb290ZXIuCi0gICAgICAgIG15ICRhZ2VudENsYXNzTmFtZSA9IHR5cGVUcmFpdHMo
JGRvbWFpbiwgImZvcndhcmQiKTsKLSAgICAgICAgbXkgJGZpZWxkID0gdHlwZVRyYWl0cygkZG9t
YWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEZvb3RlciwgIiAg
ICAke2FnZW50Q2xhc3NOYW1lfSogJHtmaWVsZH07Iik7Ci0KLSAgICAgICAgIyBBZGQgYWdlbnQg
cGFyYW1ldGVyIGFuZCBpbml0aWFsaXplci4KLSAgICAgICAgbXkgJGFyZyA9IHN1YnN0cigkZmll
bGQsIDIpOwotICAgICAgICBwdXNoKEBmaWVsZEluaXRpYWxpemVycywgIiAgICAgICAgLCAke2Zp
ZWxkfSgke2FyZ30pIik7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50cywgIiR7YWdlbnRDbGFzc05h
bWV9KiAke2FyZ30iKTsKLSAgICB9Ci0KLSAgICBteSAkYXJndW1lbnRTdHJpbmcgPSBqb2luKCIs
ICIsIEBhcmd1bWVudHMpOwotCi0gICAgbXkgQGJhY2tlbmRIZWFkOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiICAgICR7YmFja2VuZENsYXNzTmFtZX0oJHthcmd1bWVudFN0cmluZ30pIik7Ci0g
ICAgcHVzaChAYmFja2VuZEhlYWQsIEBmaWVsZEluaXRpYWxpemVycyk7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgeyB9Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIiKTsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gMDsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0g
ICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBDb21tb25FcnJvckNvZGUgeyIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBQYXJzZUVycm9yID0gMCwiKTsKLSAgICBwdXNo
KEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFJlcXVlc3QsIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgICAgIE1ldGhvZE5vdEZvdW5kLCIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgICAgICBJbnZhbGlkUGFyYW1zLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAi
ICAgICAgICBJbnRlcm5hbEVycm9yLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAg
ICBTZXJ2ZXJFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgTGFzdEVu
dHJ5LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIH07Iik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIHJlcG9ydFBy
b3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElk
LCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Iik7Ci0gICAgcHVzaChA
YmFja2VuZEhlYWQsICIgICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCk7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIi
KTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBlbnVtIE1ldGhvZE5hbWVzIHsiKTsKLSAg
ICAkYmFja2VuZENvbnN0cnVjdG9yID0gam9pbigiXG4iLCBAYmFja2VuZEhlYWQpOwotfQotCi1z
dWIgZmluaXNoCi17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotCi0gICAgcHVzaChAYmFja2Vu
ZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyKCkpOwotICAgIHB1c2goQGJh
Y2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kU2VuZFJlc3BvbnNlKCkpOwotICAgIHB1
c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJv
cigpKTsKLSAgICB1bnNoaWZ0KEBmcm9udGVuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUZyb250ZW5k
Q29uc3RydWN0b3JJbXBsKCksICIiKTsKLQotICAgIG9wZW4obXkgJFNPVVJDRSwgIj4kb3V0cHV0
RGlyLyRmcm9udGVuZENsYXNzTmFtZS5jcHAiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAk
b3V0cHV0RGlyLyRmcm9udGVuZENsYXNzTmFtZS5jcHAiOwotICAgIHByaW50ICRTT1VSQ0Ugam9p
bigiXG4iLCBnZW5lcmF0ZVNvdXJjZSgkZnJvbnRlbmRDbGFzc05hbWUsIFwlZnJvbnRlbmRUeXBl
cywgXEBmcm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzSW1wbCkp
OwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3Blbiht
eSAkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIikgfHwg
ZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGZyb250ZW5kQ2xhc3NO
YW1lLmgiOwotICAgIHByaW50ICRIRUFERVIgZ2VuZXJhdGVIZWFkZXIoJGZyb250ZW5kQ2xhc3NO
YW1lLCAkZnJvbnRlbmRDbGFzc05hbWUsIFwlZnJvbnRlbmRUeXBlcywgJGZyb250ZW5kQ29uc3Ry
dWN0b3IsIFxAZnJvbnRlbmRDb25zdGFudERlY2xhcmF0aW9ucywgXEBmcm9udGVuZE1ldGhvZHMs
IGpvaW4oIlxuIiwgQGZyb250ZW5kRm9vdGVyKSk7Ci0gICAgY2xvc2UoJEhFQURFUik7Ci0gICAg
dW5kZWYoJEhFQURFUik7Ci0KLSAgICB1bnNoaWZ0KEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9u
cywgImNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kTmFtZXNb
XSA9IHsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgIn07Iik7Ci0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICIiKTsKLQotICAgICMgTWFrZSBk
aXNwYXRjaGVyIG1ldGhvZHMgcHJpdmF0ZSBvbiB0aGUgYmFja2VuZC4KLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICJ9OyIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFu
dERlY2xhcmF0aW9ucywgIiIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9u
cywgIiAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZE5hbWVzW107Iik7ICAgIAotICAgIHB1
c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiIpOwotICAgIHB1c2goQGJhY2tlbmRD
b25zdGFudERlY2xhcmF0aW9ucywgInByaXZhdGU6Iik7Ci0KLSAgICBmb3JlYWNoIG15ICR0eXBl
IChrZXlzICViYWNrZW5kVHlwZXMpIHsKLSAgICAgICAgaWYgKHR5cGVUcmFpdHMoJHR5cGUsICJK
U09OVHlwZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVy
YXRlQXJndW1lbnRHZXR0ZXJzKCR0eXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdXNo
KEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9u
ZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsiKTsKLQotICAgIGdlbmVyYXRlQmFja2Vu
ZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IoKTsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kTWVzc2FnZVBhcnNlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5k
TWV0aG9kc0ltcGwsICIiKTsKLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9u
cywgIiIpOwotCi0gICAgb3BlbigkU09VUkNFLCAiPiRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05h
bWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kYmFja2VuZENs
YXNzTmFtZS5jcHAiOwotICAgIHByaW50ICRTT1VSQ0Ugam9pbigiXG4iLCBnZW5lcmF0ZVNvdXJj
ZSgkYmFja2VuZENsYXNzTmFtZSwgXCViYWNrZW5kVHlwZXMsIFxAYmFja2VuZENvbnN0YW50RGVm
aW5pdGlvbnMsIFxAYmFja2VuZE1ldGhvZHNJbXBsKSk7Ci0gICAgY2xvc2UoJFNPVVJDRSk7Ci0g
ICAgdW5kZWYoJFNPVVJDRSk7Ci0KLSAgICBvcGVuKCRIRUFERVIsICI+JG91dHB1dEhlYWRlcnNE
aXIvJGJhY2tlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRw
dXRIZWFkZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgiOwotICAgIHByaW50ICRIRUFERVIgam9p
bigiXG4iLCBnZW5lcmF0ZUhlYWRlcigkYmFja2VuZENsYXNzTmFtZSwgJGJhY2tlbmRDbGFzc0Rl
Y2xhcmF0aW9uLCBcJWJhY2tlbmRUeXBlcywgJGJhY2tlbmRDb25zdHJ1Y3RvciwgXEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsIFxAYmFja2VuZE1ldGhvZHMsIGpvaW4oIlxuIiwgQGJhY2tl
bmRGb290ZXIpKSk7Ci0gICAgY2xvc2UoJEhFQURFUik7Ci0gICAgdW5kZWYoJEhFQURFUik7Ci0K
LSAgICBvcGVuKG15ICRKU19TVFVCLCAiPiRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpz
IikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kYmFja2VuZEpTU3R1Yk5h
bWUuanMiOwotICAgIHByaW50ICRKU19TVFVCIGpvaW4oIlxuIiwgZ2VuZXJhdGVCYWNrZW5kU3R1
YkpTKCkpOwotICAgIGNsb3NlKCRKU19TVFVCKTsKLSAgICB1bmRlZigkSlNfU1RVQik7Ci19Ci0K
LTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjVmM2U4MWE4ZjlhYmFkYzVlNjQ3NmI5ODMyZTViMDJkZDFkYmNl
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQpAQCAtMCwwICsxLDE0MTggQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQg
c3RyaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBqc29uCitmcm9tIHN0cmluZyBpbXBvcnQg
am9pbgorCitjbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCitjbWRsaW5l
X3BhcnNlci5hZGRfb3B0aW9uKCItLWRlZmluZXMiKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlv
bigiLS1vdXRwdXRfaF9kaXIiKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRf
Y3BwX2RpciIpCisKK3RyeToKKyAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNtZGxpbmVf
cGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgIT0gMSk6CisgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiRXhhY3RseSBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQg
KGZvdW5kICVzKSIgJSBsZW4oYXJnX3ZhbHVlcykpCisgICAgaW5wdXRfanNvbl9maWxlbmFtZSA9
IGFyZ192YWx1ZXNbMF0KKyAgICBvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5v
dXRwdXRfaF9kaXIKKyAgICBvdXRwdXRfY3BwX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5vdXRwdXRf
Y3BwX2RpcgorICAgIGlmIG5vdCBvdXRwdXRfaGVhZGVyX2Rpcm5hbWU6CisgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiT3V0cHV0IC5oIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAg
aWYgbm90IG91dHB1dF9jcHBfZGlybmFtZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRw
dXQgLmNwcCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorZXhjZXB0IEV4Y2VwdGlvbiwg
ZToKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFy
Z3VtZW50czogJXNcblxuIiAlIGUpCisgICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6IDxzY3Jp
cHQ+IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIDxvdXRwdXRfaGVhZGVyX2Rpcj4gLS1v
dXRwdXRfY3BwX2RpciA8b3V0cHV0X2NwcF9kaXI+IFstLWRlZmluZXMgPGRlZmluZXMgc3RyaW5n
Pl1cbiIpCisgICAgZXhpdCgxKQorCisKK2RlZiBwYXJzZV9kZWZpbmVzKHN0cik6CisgICAgaWYg
bm90IHN0cjoKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBpdGVtcyA9IHN0ci5zcGxpdCgpCisg
ICAgcmVzdWx0ID0ge30KKyAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgaWYgaXRlbVsw
XSA9PSAnIicgYW5kIGl0ZW1bLTFdID09ICciJyBhbmQgbGVuKGl0ZW0pID49IDI6CisgICAgICAg
ICAgICBpdGVtID0gaXRlbVsxOi0xXQorICAgICAgICBlcV9wb3MgPSBpdGVtLmZpbmQoIj0iKQor
ICAgICAgICBpZiBlcV9wb3MgPT0gLTE6CisgICAgICAgICAgICBrZXkgPSBpdGVtCisgICAgICAg
ICAgICB2YWx1ZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleSA9IGl0ZW1b
OmVxX3Bvc10KKyAgICAgICAgICAgIHZhbHVlX3N0ciA9IGl0ZW1bZXFfcG9zICsgMTpdCisgICAg
ICAgICAgICBpZiB2YWx1ZV9zdHIgPT0gIjAiOgorICAgICAgICAgICAgICAgIHZhbHVlID0gRmFs
c2UKKyAgICAgICAgICAgIGVsaWYgdmFsdWVfc3RyID09ICIxIjoKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbnJlY29nbml6ZWQgZGVmaW5lIHZhbHVlOiAnJXMnIChrZXk6ICclcycpIiAlICh2
YWx1ZV9zdHIsIGtleSkpCisgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAgICByZXR1cm4g
cmVzdWx0CisKK2RlZmluZXNfbWFwID0gcGFyc2VfZGVmaW5lcyhhcmdfb3B0aW9ucy5kZWZpbmVz
KQorCisKK2NsYXNzIERvbWFpbk5hbWVGaXhlczoKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
Z2V0X2ZpeGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6CisgICAgICAgIGlmIGRvbWFpbl9uYW1l
IGluIGNscy5hZ2VudF90eXBlX21hcDoKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gY2xz
LmFnZW50X3R5cGVfbWFwW2RvbWFpbl9uYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
YWdlbnRfbmFtZV9yZXMgPSAiSW5zcGVjdG9yJXNBZ2VudCIgJSBkb21haW5fbmFtZQorCisgICAg
ICAgIGlmIGRvbWFpbl9uYW1lIGluIGNscy5hZ2VudF9maWVsZF9uYW1lX21hcDoKKyAgICAgICAg
ICAgIGZpZWxkX25hbWVfcmVzID0gY2xzLmFnZW50X2ZpZWxkX25hbWVfbWFwW2RvbWFpbl9uYW1l
XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRfbmFtZV9yZXMgPSBkb21haW5fbmFt
ZS5sb3dlcigpICsgIkFnZW50IgorCisgICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgorICAgICAg
ICAgICAgYWdlbnRfdHlwZV9uYW1lID0gYWdlbnRfbmFtZV9yZXMKKyAgICAgICAgICAgIGhpZGRl
biA9IGRvbWFpbl9uYW1lIGluIGNscy5oaWRkZW5fZG9tYWlucworICAgICAgICAgICAgc2tpcF9q
c19iaW5kID0gZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCisgICAgICAg
ICAgICBhZ2VudF9maWVsZF9uYW1lID0gZmllbGRfbmFtZV9yZXMKKworICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGlzX2Rpc2FibGVkKGRlZmluZXMpOgorICAgICAg
ICAgICAgICAgIGlmIGRvbWFpbl9uYW1lIGluIGNscy5kb21haW5fZGVmaW5lX25hbWVfbWFwOgor
ICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbmFtZSA9IGNscy5kb21haW5fZGVmaW5lX25hbWVf
bWFwW2RvbWFpbl9uYW1lXQorICAgICAgICAgICAgICAgICAgICBpZiBkZWZpbmVfbmFtZSBpbiBk
ZWZpbmVzX21hcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV92YWx1ZSA9IGRlZmlu
ZXNfbWFwW2RlZmluZV9uYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRlZmlu
ZV92YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHJldHVybiBSZXMKKworICAgIHNraXBf
anNfYmluZF9kb21haW5zID0gc2V0KFsiUnVudGltZSIsICJDU1MiLCAiRE9NRGVidWdnZXIiXSkK
KyAgICBoaWRkZW5fZG9tYWlucyA9IHNldChbIkluc3BlY3RvciJdKQorICAgIGFnZW50X3R5cGVf
bWFwID0geyJOZXR3b3JrIjogIkluc3BlY3RvclJlc291cmNlQWdlbnQifQorCisgICAgIyBUT0RP
OiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVyYXRlIG5hbWVzIGluc3RlYWQuCisgICAgYWdlbnRfZmll
bGRfbmFtZV9tYXAgPSB7CisgICAgICAgICJQYWdlIjogInBhZ2VBZ2VudCIsCisgICAgICAgICJS
dW50aW1lIjogInJ1bnRpbWVBZ2VudCIsCisgICAgICAgICJDb25zb2xlIjogImNvbnNvbGVBZ2Vu
dCIsCisgICAgICAgICJOZXR3b3JrIjogICJyZXNvdXJjZUFnZW50IiwKKyAgICAgICAgIkRhdGFi
YXNlIjogICJkYXRhYmFzZUFnZW50IiwKKyAgICAgICAgIkRPTVN0b3JhZ2UiOiAgImRvbVN0b3Jh
Z2VBZ2VudCIsCisgICAgICAgICJBcHBsaWNhdGlvbkNhY2hlIjogICJhcHBsaWNhdGlvbkNhY2hl
QWdlbnQiLAorICAgICAgICAiRE9NIjogICJkb21BZ2VudCIsCisgICAgICAgICJDU1MiOiAgImNz
c0FnZW50IiwKKyAgICAgICAgIkRlYnVnZ2VyIjogImRlYnVnZ2VyQWdlbnQiLAorICAgICAgICAi
RE9NRGVidWdnZXIiOiAiZG9tRGVidWdnZXJBZ2VudCIsCisgICAgICAgICJQcm9maWxlciI6ICJw
cm9maWxlckFnZW50IiwKKyAgICAgICAgIldvcmtlciI6ICJ3b3JrZXJBZ2VudCIsCisgICAgfQor
CisgICAgZG9tYWluX2RlZmluZV9uYW1lX21hcCA9IHsKKyAgICAgICAgIkRhdGFiYXNlIjogIkVO
QUJMRV9TUUxfREFUQUJBU0UiLAorICAgICAgICAiRE9NU3RvcmFnZSI6ICJFTkFCTEVfRE9NX1NU
T1JBR0UiLAorICAgICAgICAiRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIi
LAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAor
ICAgICAgICAiUHJvZmlsZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAg
ICAiV29ya2VyIjogIkVOQUJMRV9XT1JLRVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlw
ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIl
cyIpOgorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1h
dCA9IHNldHRlcl9mb3JtYXQKKworICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0
dXJuIHNlbGYudHlwZQorCisgICAgZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5zZXR0ZXJfZm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBq
c29uX3R5cGUgPT0gImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wK
KyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAg
ICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0g
Im9iamVjdCI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVs
aWYganNvbl90eXBlID09ICJpbnRlZ2VyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5J
bnQKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuTnVtYmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVua25vd24gdHlwZTogJXMiICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5
cGUob2JqZWN0KToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1U
eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5k
ZWZhdWx0X2NfcGFyYW1fdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgY2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAg
ICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKwor
ICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJu
ICJcIlwiIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5
cGUoKToKKyAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9wbGFpbl9jX3R5
cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5
cGUoImNvbnN0IFN0cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAg
cmV0dXJuICJJbnQiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0U2V0
dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1
cm4gIjAiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlw
ZSgpOgorICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAgICAgICAgZGVmYXVsdF9jX3Bh
cmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBl
KToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgor
ICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlw
ZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCisKKyAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKKyAg
ICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1f
dHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBl
LkVWRU5UKToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1
cm4gIkJvb2xlYW4iCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKwor
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAg
ICAgICAgICAgIHJldHVybiAiZmFsc2UiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9u
YWwoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9
IENQYXJhbVR5cGUoImJvb2wiKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNv
bnN0IGJvb2wqIGNvbnN0IiwgIiolcyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgor
ICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJh
bV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlw
ZS5FVkVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAg
ICAgICAgIHJldHVybiAiT2JqZWN0IgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0
ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxp
emVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCisK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAg
ICAgICAgICAgcmV0dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CisgICAgICAg
IEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUs
IG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLk9VVFBV
VDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAg
IGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkFycmF5IgorCisgICAg
ICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIklu
c3BlY3RvckFycmF5OjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFs
KCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBD
UGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKyAgICAgICAgX3JlZl9jX3R5cGUg
PSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCisKKworY2xhc3MgUGFy
YW1UeXBlKG9iamVjdCk6CisgICAgSU5QVVQgPSAiaW5wdXQiCisgICAgT1VUUFVUID0gIm91dHB1
dCIKKyAgICBFVkVOVCA9ICJldmVudCIKKworCitjbGFzcyBUeXBlRGF0YShvYmplY3QpOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToKKyAgICAgICAgc2Vs
Zi5qc29uX3R5cGVfID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNv
bl9kb21haW4KKworICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlOgorICAgICAgICAgICAg
anNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAgICAgICAgcmF3X3R5cGUg
PSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCisgICAgICAgIHNlbGYucmF3X3R5cGVf
ID0gcmF3X3R5cGUKKworICAgIGRlZiBnZXRSYXdUeXBlKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5yYXdfdHlwZV8KKworCitjbGFzcyBUeXBlTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBhcGkpOgorICAgICAgICBzZWxmLm1hcF8gPSB7fQorICAgICAgICBmb3IganNvbl9kb21haW4g
aW4gYXBpWyJkb21haW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWlu
WyJkb21haW4iXQorCisgICAgICAgICAgICBkb21haW5fbWFwID0ge30KKyAgICAgICAgICAgIHNl
bGYubWFwX1tkb21haW5fbmFtZV0gPSBkb21haW5fbWFwCisKKyAgICAgICAgICAgIGlmICJ0eXBl
cyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29u
X2RvbWFpblsidHlwZXMiXToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90
eXBlWyJpZCJdCisgICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25f
dHlwZSwganNvbl9kb21haW4pCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9u
YW1lXSA9IHR5cGVfZGF0YQorCisgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9u
YW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQor
CisKK2RlZiByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5f
bmFtZSk6CisgICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3Jl
ZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KKyAgICAgICAgdHlwZV9kYXRhID0gZ2V0UmVmRGF0
YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiB0eXBlX2RhdGEu
Z2V0UmF3VHlwZSgpCisgICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAg
IGpzb25fdHlwZSA9IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLmdldChqc29uX3R5cGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJV
bmtub3duIHR5cGUiKQorCisKK2RlZiBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5f
bmFtZSk6CisgICAgZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKQorICAgIGlmIGRvdF9wb3Mg
PT0gLTE6CisgICAgICAgIGRvbWFpbl9uYW1lID0gc2NvcGVfZG9tYWluX25hbWUKKyAgICAgICAg
dHlwZV9uYW1lID0ganNvbl9yZWYKKyAgICBlbHNlOgorICAgICAgICBkb21haW5fbmFtZSA9IGpz
b25fcmVmWzpkb3RfcG9zXQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZltkb3RfcG9zICsg
MTpdCisKKyAgICByZXR1cm4gdHlwZV9tYXAuZ2V0KGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpCisK
KworaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwgInIiKQoranNvbl9zdHJp
bmcgPSBpbnB1dF9maWxlLnJlYWQoKQoranNvbl9hcGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5n
KQorCisKK2NsYXNzIFRlbXBsYXRlczoKKyAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJp
bmcuVGVtcGxhdGUoCisiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CisgICAgcHVibGlj
OgorICAgICAgICAkZG9tYWluQ2xhc3NOYW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ciske2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRp
b25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KKyAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisgICAg
fTsKKworICAgICRkb21haW5DbGFzc05hbWUqICRkb21haW5GaWVsZE5hbWUoKSB7IHJldHVybiAm
bV8kZG9tYWluRmllbGROYW1lOyB9CisKKyIiIikKKworICAgIGJhY2tlbmRfbWV0aG9kID0gc3Ry
aW5nLlRlbXBsYXRlKAorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21h
aW5OYW1lfV8kbWV0aG9kTmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0
TWVzc2FnZU9iamVjdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCEkYWdlbnRGaWVsZCkK
KyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9tYWluTmFtZX0gaGFuZGxl
ciBpcyBub3QgYXZhaWxhYmxlLiIpOworJG1ldGhvZE91dENvZGUKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyRtZXRob2RJbkNvZGUKK2lmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQorICAg
ICRhZ2VudEZpZWxkLT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1zKTsKKworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ciske3Jlc3BvbnNlQ29va31zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiJGRvbWFpbk5hbWUuJG1ldGhvZE5hbWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKK30K
KyIiIikKKworICAgIGZyb250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgiIiJ2b2lkIElu
c3BlY3RvckZyb250ZW5kOjokZG9tYWluTmFtZTo6JGV2ZW50TmFtZSgkcGFyYW1ldGVycykKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2V2ZW50TmFtZX1NZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAke2V2ZW50TmFtZX1NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCIsICIkZG9tYWluTmFtZS4kZXZlbnROYW1lIik7CiskY29kZSAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoJHtldmVudE5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworfQorIiIiKQorCisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBD
b3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lm
bmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKKwor
I2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKK3B1Ymxp
YzoKKyAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKwor
CiskZG9tYWluQ2xhc3NMaXN0Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ciske2ZpZWxkRGVjbGFyYXRpb25zfX07CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9u
dGVuZF9oKQorIiIiKQorCisgICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZu
ZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJfaAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JPYmpl
Y3Q7CitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKKworJGZvcndhcmREZWNsYXJhdGlvbnMKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4geworcHVibGljOgorICAgIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsJGNvbnN0cnVjdG9yUGFyYW1zKQorICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyRjb25zdHJ1Y3RvckluaXQKKyAgICB7
IH0KKworICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwgPSAwOyB9CisKKyAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7CisgICAgICAgIFBhcnNlRXJy
b3IgPSAwLAorICAgICAgICBJbnZhbGlkUmVxdWVzdCwKKyAgICAgICAgTWV0aG9kTm90Rm91bmQs
CisgICAgICAgIEludmFsaWRQYXJhbXMsCisgICAgICAgIEludGVybmFsRXJyb3IsCisgICAgICAg
IFNlcnZlckVycm9yLAorICAgICAgICBMYXN0RW50cnksCisgICAgfTsKKworICAgIHZvaWQgcmVw
b3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OworICAgIHZvaWQgcmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEp
IGNvbnN0OworICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBz
dGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyog
cmVzdWx0KTsKKworICAgIGVudW0gTWV0aG9kTmFtZXMgeworCiskZW51bUNvbnN0YW50cworfTsK
KworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMp
OworICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBj
YWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywg
RXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsKKworJG1ldGhvZERlY2xhcmF0aW9ucworCisg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
KyRmaWVsZERlY2xhcmF0aW9ucworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gpCisKKworIiIiKQorCisg
ICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEw
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorJGluY2x1ZGVzCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmROYW1lc1tdID0geworJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKK307CisKKworJG1ldGhv
ZHMKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QgPSB0aGlzOworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9i
amVjdCk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNo
TWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAp
OworICAgIGxvbmcgY2FsbElkID0gMDsKKworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7CiskbWVzc2FnZUhh
bmRsZXJzCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFu
ZE5hbWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1h
bmROYW1lc1tpXSwgaGFuZGxlcnNbaV0pOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7
CisgICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
MCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9i
amVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0
KSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNz
YWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVj
dC0+Z2V0KCJpZCIpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNO
dW1iZXIoJmNhbGxJZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlk
UmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9k
VmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAgIGlmICghbWV0aG9kVmFs
dWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVz
dCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmlu
ZygmbWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFs
aWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmci
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFu
ZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChp
dCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBtZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxs
SWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQor
eworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29s
RXJyb3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW52b2NhdGlvbkVycm9y
Lmxlbmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVy
RXJyb3IsIGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1
bHQpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CisgICAg
aWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQ
cm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1lc3NhZ2UsIDApOworfQorCit2b2lkIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNz
YWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAoreworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoVmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKKyAgICBpZiAoIXNf
Y29tbW9uRXJyb3JzLnNpemUoKSkgeworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFy
c2VFcnJvciwgLTMyNzAwKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRS
ZXF1ZXN0LCAtMzI2MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90
Rm91bmQsIC0zMjYwMSk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFy
YW1zLCAtMzI2MDIpOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJv
ciwgLTMyNjAzKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAt
MzIwMDApOworICAgIH0KKyAgICBBU1NFUlQoY29kZSA+PTApOworICAgIEFTU0VSVCgodW5zaWdu
ZWQpY29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7CisgICAgQVNTRVJUKHNfY29tbW9uRXJy
b3JzW2NvZGVdKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9u
RXJyb3JzW2NvZGVdKTsKKyAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNz
YWdlKTsKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIGlmIChkYXRhKQorICAgICAgICBlcnJvci0+
c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3Qo
ImVycm9yIiwgZXJyb3IpOworICAgIGlmIChjYWxsSWQpCisgICAgICAgIG1lc3NhZ2UtPnNldE51
bWJlcigiaWQiLCAqY2FsbElkKTsKKyAgICBlbHNlCisgICAgICAgIG1lc3NhZ2UtPnNldFZhbHVl
KCJpZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK2ludCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVl
Rm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBpbnQgdmFsdWUgPSAw
OworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAg
ICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVy
LgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0
aCB0eXBlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9p
dGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZh
bHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIg
JyVzJyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVy
YXRvci0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUu
IEl0IG11c3QgYmUgJ051bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQor
ICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAg
ICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAg
ICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBTdHJpbmcgdmFsdWUgPSAiIjsKKworICAgIGlm
ICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8g
UmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAg
ICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3Ry
aW5nJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFs
dWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9y
ID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0
eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAg
ICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29u
ZC0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJl
ICdTdHJpbmcnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYg
KHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJu
IHZhbHVlOworfQorCitib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFu
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJv
dG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5k
ID0gZmFsc2U7CisKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdCkg
eworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBh
cmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3Qg
Y29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+
ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9y
ID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7
CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xl
YW4nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNCb29s
ZWFuKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnQm9vbGVh
bicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVG
b3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7
Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sK
KyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAg
ICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFt
ZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29u
dGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcuIiwgbmFtZS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQo
KTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBv
YmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAg
ICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3
YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzT2JqZWN0KCZ2
YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnT2JqZWN0Jy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQor
ICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NF
UlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1
ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlz
c2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hT
dHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWly
ZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQo
bmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91bmQu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNBcnJheSgmdmFsdWUpKQorICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZh
bHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KK2Jvb2wgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3Ry
aW5nKiByZXN1bHQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3Bl
Y3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBmcm9u
dGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisKKworSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5k
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAg
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQor
JGNvbnN0cnVjdG9ySW5pdHsKK30KKworJG1ldGhvZHMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGJhY2tlbmRfanMg
PSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCitJbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9u
KCkKK3sKKyAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50ID0gMDsKKyAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLl9k
b21haW5EaXNwYXRjaGVycyA9IHt9OworICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OworJGRlbGVn
YXRlcyRldmVudEFyZ3MkZG9tYWluRGlzcGF0Y2hlcnMgICAgfQorCitJbnNwZWN0b3JCYWNrZW5k
U3R1Yi5wcm90b3R5cGUgPSB7CisgICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKKyAgICBk
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKKworICAgIF93cmFwOiBmdW5jdGlvbihj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxi
YWNrSWQrKzsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sg
fHwgZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7CisgICAgfSwKKwor
ICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQorICAgIHsKKyAg
ICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5t
ZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0
aW9uWzBdICsgIkFnZW50IjsKKyAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKKyAgICAg
ICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVd
W2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQo
dGhpcywgcmVxdWVzdFN0cmluZyk7CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFu
ZEZ1bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0
U3RyaW5nKQorICAgIH0sCisKKyAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBh
cmdzLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShy
ZXF1ZXN0U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOworICAgICAgICB0
aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7
CisgICAgfSwKKworICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMp
OworICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKKyAgICAg
ICAgdmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3Ro
IC0gMV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7CisgICAgICAgIHZhciBkb21h
aW5BbmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICB2YXIgYWdl
bnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhv
ZFsxXTsKKworICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7CisgICAgICAgIGlmIChyZXF1
ZXN0LnBhcmFtcykgeworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1z
KSB7CisgICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50
eXBlOworICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1tr
ZXldLm9wdGlvbmFsOworCisgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYm
ICFvcHRpb25hbEZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJv
dG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsg
YWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICci
ICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIg
dmFsdWUgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAm
JiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSByZXF1ZXN0LnBhcmFtc1trZXldOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9
PSB0eXBlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhv
ZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsg
IicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXF1ZXN0
LnBhcmFtc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQorICAgICAgICAgICAg
ICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdz
Lmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYXJn
c1swXSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQ
cm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiAr
IGFnZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlz
ICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRT
ZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF93cmFw
Q2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2Fs
bGJhY2spCisgICAgeworICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxs
YmFjayk7CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgeworICAg
ICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2Jq
ZWN0LmlkXTsKKyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2Fn
ZU9iamVjdC5tZXRob2Q7CisgICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RU
aW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNw
ZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5k
OiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOworCisgICAgICAgICsrdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9C
YWNrZW5kKG1lc3NhZ2VPYmplY3QpOworICAgIH0sCisKKyAgICBzZW5kTWVzc2FnZU9iamVjdFRv
QmFja2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUu
dGltZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBK
U09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0
ZXJEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCisgICAgewor
ICAgICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKKyAg
ICB9LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICBp
ZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVz
c2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7CisKKyAgICAgICAgdmFyIG1lc3NhZ2VP
YmplY3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2Fn
ZSkgOiBtZXNzYWdlOworCisgICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8g
anVzdCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKKyAgICAgICAgICAgIGlmIChtZXNzYWdl
T2JqZWN0LmVycm9yKSB7CisgICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3By
b3RvX18gPSB7CisgICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0
aGlzLmNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0
dXJuICJQYXJzZSBlcnJvciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2
MDA6IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJy
b3IiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJT
ZXJ2ZXIgZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAg
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlv
biA9IlVua25vd24gZXJyb3IgY29kZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpcy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1l
c3NhZ2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIi
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBnZXRNZXNz
YWdlOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5j
b2RlICE9PSAtMzIwMDApCisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xF
cnJvcihtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGFy
Z3VtZW50cyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQorICAg
ICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXld
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2Fs
bGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgICAgICAgICAg
aWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQor
ICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKwor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwor
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAg
ICAgICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKworICAgICAgICAgICAg
ICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxs
YmFjay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNr
LnNlbmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0
VGltZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAm
JiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQorICAgICAgICAgICAgICAgIHRoaXMucnVu
QWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Qu
c3BsaXQoIi4iKTsKKyAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOworICAg
ICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKKyAgICAgICAgICAgIGlmICgh
KGRvbWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7CisgICAgICAgICAgICAg
ICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24t
ZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlz
Ll9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKKyAgICAgICAgICAgIGlmICghKGZ1bmN0
aW9uTmFtZSBpbiBkaXNwYXRjaGVyKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBt
ZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJn
c1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1l
dGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAg
ICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZh
ciBwYXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKKyAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kp
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3Bh
cmFtTmFtZXNbaV1dKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHByb2Nlc3Np
bmdTdGFydFRpbWU7CisgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRz
KQorICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisg
ICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFy
YW1zKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAg
ICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3Qu
bWV0aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAg
ICAgICAgfQorICAgIH0sCisKKyAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNz
YWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlk
ID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJy
b3IpOworICAgIH0sCisKKyAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihz
Y3JpcHQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCisgICAgICAgICAgICB0
aGlzLl9zY3JpcHRzID0gW107CisKKyAgICAgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOworCisgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7
CisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KKyAgICAgICAgICAgIGZvciAodmFyIGlk
ID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKKyAgICAgICAgICAgICAgICAgc2NyaXB0
c1tpZF0uY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW5zcGVjdG9yQmFja2Vu
ZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOyIiIikKKworICAgIHBhcmFtX2NvbnRhaW5l
cl9hY2Nlc3NfY29kZSA9ICIiIgorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOworICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOworIiIiCisKKwordHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpKQorCisKK2Ns
YXNzIEdlbmVyYXRvcjoKKyAgICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtdCisgICAg
ZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KKworICAgIG1ldGhvZF9uYW1lX2VudW1f
bGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAg
YmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRo
b2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBtZXRob2RfaGFuZGxlcl9saXN0ID0g
W10KKyAgICBmcm9udGVuZF9tZXRob2RfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19pbml0aWFs
aXplcl9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2V2ZW50X2xpc3QgPSBbXQorICAgIGJhY2tl
bmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdCA9IFtdCisKKyAgICBiYWNrZW5kX2NvbnN0cnVj
dG9yX3BhcmFtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0g
W10KKyAgICBiYWNrZW5kX2ZpZWxkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZm9yd2FyZF9saXN0
ID0gW10KKyAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfY29uc3Ry
dWN0b3JfaW5pdF9saXN0ID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ28oKToK
KyAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CisgICAgICAg
ICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorICAgICAgICAgICAgZG9t
YWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCisKKyAgICAgICAgICAgIGRvbWFp
bl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorCisg
ICAgICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZpbmVzX21hcCk6CisgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRv
bWFpbl9kYXRhLmFnZW50X2ZpZWxkX25hbWUKKworICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9k
X2RlY2xhcmF0aW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGlmICJldmVudHMiIGluIGpzb25f
ZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJl
dmVudHMiXToKKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNv
bl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykK
KworICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5h
cHBlbmQoIiAgICAlcyBtXyVzO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIp
KQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xp
c3QuYXBwZW5kKCIgICAgLCBtXyVzKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbClcbiIgJSBkb21h
aW5fbmFtZV9sb3dlcikKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWlu
X2NsYXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0
aXR1dGUoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluQ2xhc3NOYW1lPWRvbWFpbl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICBkb21haW5GaWVsZE5hbWU9ZG9tYWluX25hbWVfbG93
ZXIsCisgICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25z
PWpvaW4oZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLCAiIikpKQorICAgICAgICAg
ICAgaWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNv
bl9jb21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgorICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFn
ZW50X2ZpZWxkX25hbWUpCisKKyAgICAgICAgICAgIGlmIG5vdCBkb21haW5fZGF0YS5za2lwX2pz
X2JpbmQ6CisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3Bh
dGNoZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNEaXNwYXRjaGVyID0gdGhpcy5f
cmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIlc1wiKTtcbiIgJSAoZG9tYWlu
X25hbWUsIGRvbWFpbl9uYW1lKSkKKworICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zID0gbGlz
dChqc29uX2FwaVsiZG9tYWlucyJdKQorICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zLnNvcnQo
a2V5PWxhbWJkYSBvOiBvWyJkb21haW4iXSkKKworICAgICAgICBmb3IganNvbl9kb21haW4gaW4g
c29ydGVkX2pzb25fZG9tYWluczoKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21h
aW5bImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluTmFtZUZpeGVz
LmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAgICAgICAgICAgaWYgZG9tYWluX2RhdGEu
aXNfZGlzYWJsZWQoZGVmaW5lc19tYXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAg
ICAgICAgICAgIGlmIGRvbWFpbl9kYXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9u
YW1lCisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmll
bGRfbmFtZQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1f
bGlzdC5hcHBlbmQoIiwgJXMqICVzIiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25h
bWUpKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0
LmFwcGVuZCgiICAgICAgICAsIG1fJXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9m
aWVsZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBw
ZW5kKCIgICAgJXMqIG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUp
KQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xh
c3MgJXM7IiAlIGFnZW50X3R5cGVfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2luY2x1ZGVfbGlzdC5hcHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFt
ZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50
LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAg
ICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlz
dCA9IFtdCisgICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pz
X2V2ZW50X3BhcmFtX2xpc3QgPSBbXQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9l
dmVudDoKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtc
biIpCisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1l
dGVycyJdOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJb
Im5hbWUiXQorCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBl
KGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0
aW9uYWwgPSAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsi
b3B0aW9uYWwiXQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlz
RXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190
eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAg
ICAgICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAg
ICAgICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAor
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBl
LmdldF90ZXh0KCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9h
cmd1bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwi
JXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1
bWVudCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAg
c2V0dGVyX2NvZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNl
dHRlcl9jb2RlCisgICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVy
X2NvZGUpCisKKyAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBw
ZW5kKCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9s
aXN0LmFwcGVuZCgiICAgICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09i
amVjdCk7XG4iICUgZXZlbnRfbmFtZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0
aW9uX2xpbmVzLmFwcGVuZCgKKyAgICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAl
IChldmVudF9uYW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2Vu
ZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0
aG9kLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUs
IGV2ZW50TmFtZT1ldmVudF9uYW1lLAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFt
ZXRlcl9saXN0LCAiLCAiKSwKKyAgICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0
LCAiIikpKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5k
KCIgICAgdGhpcy5fZXZlbnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAg
ICAgIGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1f
bGlzdCwgIiwgIikpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1h
bmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAg
IGpzb25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJh
dG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAo
ZG9tYWluX25hbWUsIGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1l
dGhvZF9oYW5kbGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2
b2lkICVzXyVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0KTsiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0
aG9kX2luX2NvZGUgPSAiIgorICAgICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBh
Z2VudF9jYWxsX3BhcmFtX2xpc3QgPSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBb
XQorICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0
ZXJzX3RleHQgPSAiIgorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgor
ICAgICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAg
ICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nl
c3NfY29kZQorICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVz
c2FnZU9iamVjdCIKKyAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAg
ICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNv
bl9wYXJhbV9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBh
cmFtX3Jhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWlu
X25hbWUpCisKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQ
YXJhbVR5cGUoUGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9u
YW1lID0gcGFyYW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBp
ZiAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9u
YWwiXToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3Vu
ZCA9IGZhbHNlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMg
PSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFy
YW1fbmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFt
ZSwganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAg
ICBwYXJhbSA9ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25h
bWUsIGpzb25fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIs
IFwiJXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25h
bWUsIGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5f
JXMiICUganNvbl9wYXJhbV9uYW1lCisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSAr
PSBjb2RlCisgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJh
bSkKKworICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpz
QmluZFR5cGUoKQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJv
cHRpb25hbFwiOiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAg
ICBqc29uX3BhcmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRp
b25hbCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBl
bHNlICJmYWxzZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAg
ICAgICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAg
ICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFy
YW1fbGlzdCwgIiwgIikgKyAifSIKKworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgor
ICAgICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9k
X291dF9jb2RlICs9ICJcbiIKKyAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2Nv
bW1hbmRbInJldHVybnMiXToKKworICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBq
c29uX3JldHVyblsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFy
YW1SYXdUeXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0
ZXJfdHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRp
YWxpemVyID0gcmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJf
dHlwZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKwor
ICAgICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlw
ZS5nZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAg
ICAgICBwYXJhbSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAg
ICAgIGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAo
c2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAg
ICAgICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIg
aW4ganNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAg
ICAgICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJu
X25hbWUpICsgY29vaworCisgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUK
KyAgICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAg
ICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAg
IHJlc3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkg
JiYgIWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xp
c3QsICIiKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlv
bl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAor
ICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1h
bmRfbmFtZSwKKyAgICAgICAgICAgIGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUs
CisgICAgICAgICAgICBtZXRob2RJbkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBt
ZXRob2RPdXRDb2RlPW1ldGhvZF9vdXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFt
cz1qb2luKGFnZW50X2NhbGxfcGFyYW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1l
c3NhZ2VPYmplY3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VD
b29rPXJlc3BvbnNlX2Nvb2tfdGV4dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhv
ZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWlu
X25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9q
c19pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRl
KCd7XCJtZXRob2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25h
bWUsIGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRv
ci5nbygpCisKK2JhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAi
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0g
b3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCIsICJ3IikKKworZnJvbnRlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUg
KyAiL0luc3BlY3RvckZyb250ZW5kLmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4o
b3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2Jh
Y2tlbmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcyIsICJ3IikKKworCitmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZy
b250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRv
bWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMs
ICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3Rp
dHV0ZShOb25lLAorICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2Nv
bnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihH
ZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgZW51bUNv
bnN0YW50cz1qb2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIpLAorICAg
IG1ldGhvZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJh
dGlvbl9saXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5i
YWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9am9pbihH
ZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRfY3BwX2Zp
bGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29u
c3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlz
dCwgIiIpLAorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3Qs
ICJcbiIpKSkKKworYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAu
c3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0
b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBpbmNs
dWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiksCisgICAgbWV0
aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCAi
XG4iKSwKKyAgICBtZXNzYWdlSGFuZGxlcnM9am9pbihHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJf
bGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRf
anMuc3Vic3RpdHV0ZShOb25lLAorICAgIGRlbGVnYXRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2pzX2luaXRpYWxpemVyX2xpc3QsICIiKSwKKyAgICBldmVudEFyZ3M9am9pbihHZW5lcmF0b3Iu
YmFja2VuZF9qc19ldmVudF9saXN0LCAiIiksCisgICAgZG9tYWluRGlzcGF0Y2hlcnM9am9pbihH
ZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LCAiIikpKQorCitiYWNr
ZW5kX2hfZmlsZS5jbG9zZSgpCitiYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKKworZnJvbnRlbmRf
aF9maWxlLmNsb3NlKCkKK2Zyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKKworYmFja2VuZF9qc19m
aWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA5
NmYxZjNmZjI2OWI2OTA2ZWM0NzVhYTI3MWMxNmIxNzI2NmI4Zjg2Li5lMzk2ZTU2NDRmNDNiMGVj
MDQ1ZmNiZTVmMDQ1OGNjNzQ2M2E3NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzZXNzaW9uIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlu
IGNhc2Ugb2Ygc2Vzc2lvbiBjb29raWUuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAiaGlkZGVuIjogdHJ1ZQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0KICAg
ICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAgewpAQCAtODQ2LDcg
Kzg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNMb2NhbFN0b3JhZ2Ui
LCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIGxvY2FsIHN0b3Jh
Z2UuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgInR5cGUiOiAibnVt
YmVyIiwgImRlc2NyaXB0aW9uIjogIkVudHJ5IGlkIGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4iIH0K
ICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAg
ICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAxOGRlZDYxMGIyODZiYTVlNjQ4MGNhOWFkYTNmZGFkZjkwNmZiYTdjLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCisrKyAvZGV2L251bGwKQEAgLTEs
MTYxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQot
aW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotcHJvZ3JhbV9uYW1lID0gb3MucGF0aC5iYXNl
bmFtZShfX2ZpbGVfXykKLWlmIGxlbihzeXMuYXJndikgPCA0IG9yIHN5cy5hcmd2WzFdICE9ICIt
byI6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6ICVzIC1vIE9VVFBVVF9GSUxFIElOUFVU
X0ZJTEVcbiIgJSBwcm9ncmFtX25hbWUpCi0gICAgZXhpdCgxKQotCi1vdXRwdXRfcGF0aCA9IHN5
cy5hcmd2WzJdCi1pbnB1dF9wYXRoID0gc3lzLmFyZ3ZbM10KLQotaW5wdXRfZmlsZSA9IG9wZW4o
aW5wdXRfcGF0aCwgInIiKQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9z
dHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IHRydWUiLCAiOiBUcnVlIikKLWpzb25fc3Ry
aW5nID0ganNvbl9zdHJpbmcucmVwbGFjZSgiOiBmYWxzZSIsICI6IGZhbHNlIikKLWpzb25fYXBp
ID0gZXZhbChqc29uX3N0cmluZylbImRvbWFpbnMiXQotCi1vdXRwdXRfZmlsZSA9IG9wZW4ob3V0
cHV0X3BhdGgsICJ3IikKLW91dHB1dF9maWxlLndyaXRlKCIiIi8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAotbW9kdWxlIGNvcmUgeyIiIikKLQotdHlwZV90
cmFpdHMgPSB7Ci0gICAgInN0cmluZyI6ICJTdHJpbmciLAotICAgICJpbnRlZ2VyIjogImludCIs
Ci0gICAgIm51bWJlciI6ICJkb3VibGUiLAotICAgICJib29sZWFuIjogImJvb2xlYW4iLAotICAg
ICJhcnJheSI6ICJBcnJheSIsCi0gICAgIm9iamVjdCI6ICJPYmplY3QiCi19Ci0KLXJlZl90eXBl
cyA9IHt9Ci0KLW1hY3JvX3RyYWl0cyA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFCQVNF
IiwKLSAgICAiRE9NU3RvcmFnZSI6ICJET01fU1RPUkFHRSIsCi0gICAgIkRlYnVnZ2VyIjogIkpB
VkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJET01EZWJ1Z2dlciI6ICJKQVZBU0NSSVBUX0RFQlVH
R0VSIiwKLSAgICAiUHJvZmlsZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIldvcmtl
ciI6ICJXT1JLRVJTIgotfQotCi1kZWYgZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFt
ZSwgdHlwZV9pZCk6Ci0gICAgaWYgdHlwZV9pZC5maW5kKCIuIikgPT0gLTE6Ci0gICAgICAgcmV0
dXJuICIlcy4lcyIgJSAoZG9tYWluX25hbWUsIHR5cGVfaWQpCi0gICAgcmV0dXJuIHR5cGVfaWQK
LSAgICAKLQotZGVmIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIHBhcmFtKToKLSAgICBpZiAidHlw
ZSIgaW4gcGFyYW06Ci0gICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1twYXJhbVsidHlwZSJdXQot
ICAgIGlmICIkcmVmIiBpbiBwYXJhbToKLSAgICAgICAgdHlwZV9pZCA9IGZ1bGxfcXVhbGlmaWVk
X3R5cGVfaWQoZG9tYWluX25hbWUsIHBhcmFtWyIkcmVmIl0pCi0gICAgICAgIGlmIHR5cGVfaWQg
aW4gcmVmX3R5cGVzOgotICAgICAgICAgICAgcmVmX3R5cGUgPSByZWZfdHlwZXNbdHlwZV9pZF0K
LSAgICAgICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1tyZWZfdHlwZVsidHlwZSJdXQotICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIlR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZCkK
LSAgICAgICAgICAgIHJldHVybiAiISEgVHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkCi0KLWZv
ciBkb21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUgPSBkb21haW5bImRvbWFpbiJd
Ci0gICAgaWYgInR5cGVzIiBpbiBkb21haW46Ci0gICAgICAgIGZvciB0eXBlIGluIGRvbWFpblsi
dHlwZXMiXToKLSAgICAgICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRv
bWFpbl9uYW1lLCB0eXBlWyJpZCJdKQotICAgICAgICAgICAgcmVmX3R5cGVzW3R5cGVfaWRdID0g
dHlwZTsKLQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAgICBkb21haW5fbmFtZSA9IGRvbWFp
blsiZG9tYWluIl0KLSAgICBpZiBkb21haW5fbmFtZSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAg
IG91dHB1dF9maWxlLndyaXRlKCJcbiNpZiBkZWZpbmVkKEVOQUJMRV8lcykgJiYgRU5BQkxFXyVz
IiAlIChtYWNyb190cmFpdHNbZG9tYWluX25hbWVdLCBtYWNyb190cmFpdHNbZG9tYWluX25hbWVd
KSkKLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1J
TlNQRUNUT1JdICVzIHsiICUgZG9tYWluX25hbWUpCi0KLSAgICBpZiAiY29tbWFuZHMiIGluIGRv
bWFpbjoKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAg
ICAgICAgcGFyYW1zID0gW10KLSAgICAgICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4gY29tbWFu
ZCk6Ci0gICAgICAgICAgICAgICAgZm9yIGluX3BhcmFtIGluIGNvbW1hbmRbInBhcmFtZXRlcnMi
XToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0pOgotICAg
ICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoImluJXMgJXMgJXMiICUgKG9wdGlvbmFs
LCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBpbl9wYXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQot
ICAgICAgICAgICAgaWYgKCJyZXR1cm5zIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBm
b3Igb3V0X3BhcmFtIGluIGNvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCJvcHRpb25hbCIgaW4gb3V0X3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25h
bWUsIG91dF9wYXJhbSksIG91dF9wYXJhbVsibmFtZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9m
aWxlLndyaXRlKCJcbiAgICAgICAgdm9pZCAlcyglcyk7IiAlIChjb21tYW5kWyJuYW1lIl0sICIs
ICIuam9pbihwYXJhbXMpKSkKLQotICAgIGlmICJldmVudHMiIGluIGRvbWFpbjoKLSAgICAgICAg
Zm9yIGV2ZW50IGluIGRvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQot
ICAgICAgICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBldmVudCk6Ci0gICAgICAgICAgICAgICAg
Zm9yIGluX3BhcmFtIGluIGV2ZW50WyJwYXJhbWV0ZXJzIl06Ci0gICAgICAgICAgICAgICAgICAg
IGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25h
bWUsIGluX3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBvdXRwdXRfZmls
ZS53cml0ZSgiXG4gICAgICAgIFtldmVudF0gdm9pZCAlcyglcyk7IiAlIChldmVudFsibmFtZSJd
LCAiLCAiLmpvaW4ocGFyYW1zKSkpCi0KLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgfTsi
KQotICAgIGlmIGRvbWFpblsiZG9tYWluIl0gaW4gbWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRw
dXRfZmlsZS53cml0ZSgiXG4jZW5kaWYgLy8gRU5BQkxFXyVzIiAlIG1hY3JvX3RyYWl0c1tkb21h
aW5bImRvbWFpbiJdXSkKLW91dHB1dF9maWxlLndyaXRlKCJcbn1cbiIpCi1vdXRwdXRfZmlsZS5j
bG9zZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110041</attachid>
            <date>2011-10-06 15:14:09 -0700</date>
            <delta_ts>2011-10-07 09:53:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111007021406.patch</filename>
            <type>text/plain</type>
            <size>122028</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY2NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTU0MmY0
YWNkZWIxOGY1ODIzZGJhN2IzY2VhNmE2NGRiNWFlNjAzNy4uZTc0MWRhNjA1NmJkOTNjZTFlNjNk
MjgyZTY4MTlkM2Y2Y2MwMWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTIsMTcgKzIy
MTIsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNWJkZjliMjMzY2UyOWQ2M2RmNGEyOGM3MjBlZGY5YjA1ODEwOWIxOC4u
ZDA2MzY3MTY1MTBmMGVmZmM3OGNkZDkxY2I1NjFiODgzM2M3YTg5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDExLTEwLTA0ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
OgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgor
CiAyMDExLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQnVpbGQgZml4ZXMgZm9yIGV2ZXJ5b25lLgpAQCAtMTA2MjQsNiArMTA2MzksMjAgQEAK
ICAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjYW5SZW1haW5BbGl2ZU9u
UmVtb3ZhbEZyb21UcmVlKToKICAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6
CiAKKzIwMTEtMTAtMDMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRl
bmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weTogQWRkZWQuCisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxpbmZl
cm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1YnkgYmFz
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKaW5kZXggNjMxOTM4MjdjY2QwMjZkY2JkZTdl
MTNjMGFjMWM3OTEwZDQ3ZDc5YS4uODU4MzQ1N2UxMGI4MDkyNDcwYTQ3ZjBhNzZkNjk5ZjdiNTA2
ZTNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQpAQCAtNjc2LDI5ICs2NzYsMTIgQEAg
aW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRUb1Nv
dXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAotaW5z
cGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQRUNU
T1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVj
dG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRlcGVu
ZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNP
Ti53a0FkZE91dHB1dFRvU291cmNlcyA9IGZhbHNlCitpbnNwZWN0b3JKU09OLndrU2NyaXB0ID0g
JCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKK2luc3BlY3RvckpTT04u
Y29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0ICQkUFdEL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJ
UiAtLW91dHB1dF9jcHBfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tZGVmaW5lcyBc
IiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiCitpbnNwZWN0b3JKU09OLmRlcGVuZHMg
PSAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9ySlNP
TikKLWluc3BlY3RvckpTT04udmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVUCi0K
LWluc3BlY3RvcklETC5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmNwcAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pTT05f
T1VUUFVUCi1pbnNwZWN0b3JJREwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL2dl
bmVyYXRlLWJpbmRpbmdzLnBsCi1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0Qv
YmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1Njcmlw
dCAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVyYXRv
ciBJbnNwZWN0b3IgLS1vdXRwdXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1wcmVw
cm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNwZWN0
b3JJREwuZGVwZW5kcyA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
IFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0gXAot
ICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBcCi0g
ICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwKLSAg
ICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAgICAg
ICAgJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklETC53
a0V4dHJhU291cmNlcyA9ICQkaW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxlcihp
bnNwZWN0b3JJREwpCiAKIGluc3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRlZC9J
bnNwZWN0b3JCYWNrZW5kU3R1Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0gSU5T
UEVDVE9SX0JBQ0tFTkRfU1RVQl9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IDA5ZDA3MDMwYThmZTAxMzMwZmJmZTc2NjlhYTllNzYyMjc3MmZhNTUuLjI0MWNjYjc0Yjg1YTNm
ZDQ0YWU3Y2FhYWQxNTY3ODkxYTUwNzAyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQpAQCAtODkzLDE1ICs4OTMsMTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgK
IEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkvaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3RvclBy
b3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAKLUlu
c3BlY3Rvci5pZGwgOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9y
LWlkbAotCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRs
IC1vIEluc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQog
YWxsIDogSW5zcGVjdG9yRnJvbnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMg
PSAkKEdFTkVSQVRFX1NDUklQVFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBt
CitJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQogCi1JbnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJTlNQ
RUNUT1JfR0VORVJBVE9SX1NDUklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChGRUFU
VVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAk
PAorSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dFTkVS
QVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3Bw
X2RpciAuIC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQi
CiAKIGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCAzZTA4ZGEwYjJlM2I2NjA5MTFmNzk2MTFhZjA0NGFiMGMwNTExODdiLi5iOWE4OTA0ODQ1Y2Rj
ZDk5ZTYwOTUzNGNjMDBmZGQ1OGE0MTJhMTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNjkw
LDExICs2OTAsOCBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmNwcCBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmg6ICQoV2ViQ29yZQogRGVyaXZlZFNvdXJjZXMvV2Vi
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC12ZXJzaW9uCiAJJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNwZWN0
b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgog
Ci1EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgOiAkKFdlYkNvcmUpL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0
b3ItaWRsCi0JJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rv
ci1pZGwgLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9y
LmlkbCAkKFNDUklQVFNfQklORElOR1MpICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KLQkkKEFNX1ZfR0VOKSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdz
L3NjcmlwdHMgLUkkKFdlYkNvcmUpL2luc3BlY3RvciAkKFdlYkNvcmUpL2JpbmRpbmdzL3Njcmlw
dHMvZ2VuZXJhdGUtYmluZGluZ3MucGwgJChJRExfUEFUSDolPS0taW5jbHVkZSAiJSIpIC0tb3V0
cHV0RGlyICIkKEdFTlNPVVJDRVNfV0VCQ09SRSkiIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVND
UklQVD0xICQoRkVBVFVSRV9ERUZJTkVTKSIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yICQ8CitEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDogJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5ICQ8IC0tb3V0cHV0X2hfZGlyICQoR0VOU09VUkNFU19XRUJD
T1JFKSAtLW91dHB1dF9jcHBfZGlyICQoR0VOU09VUkNFU19XRUJDT1JFKSAtLWRlZmluZXMgIkxB
TkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUykiCiBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmg6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yRnJvbnRlbmQuY3BwCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5k
LmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwogRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczogRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3ODI1NzMzNjIwYTdkZmI3Y2FiNmY3MGRiZGRhZTVl
MjA2MmJjNzEuLjdiNzFiNTk1M2QzZmU3NzIzYmI0MDM0MDNhMTFlMDdmNDExMzc1NGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0zMzUsMTcgKzMzNSwyNCBAQAog
ICB9LAogICAndGFyZ2V0cyc6IFsKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJh
dGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAorICAgICAgJ3RhcmdldF9uYW1lJzogJ2lu
c3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92
ZXJzaW9uJworICAgICAgXSwKICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgewotICAgICAg
ICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbicsCisg
ICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90
b2NvbFNvdXJjZXMnLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKKyAgICAgICAgICAg
ICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weScsCiAgICAgICAgICAgICAn
Li4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAgICdv
dXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtp
dC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAor
ICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVf
RElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCisgICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAorICAgICAg
ICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2Vu
ZFN0dWIuanMnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAg
ICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzUzLDI4ICszNjAsMjggQEAK
ICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9u
JywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LXZlcnNpb24nLAotICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICc8QChfb3V0cHV0cykn
LAotICAgICAgICAgICAgJzxAKF9pbnB1dHMpJworICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5z
cGVjdG9yLmpzb24nLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lO
VEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2Rpcics
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLWRl
ZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAgICAg
ICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29s
IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywK
LSAgICAgICAgfQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHBy
b3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgfSwKICAgICAgIF0K
ICAgICB9LAogICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfaWRsJywKKyAg
ICAgICd0YXJnZXRfbmFtZSc6ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbics
CiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwotCi0gICAgICAgIHsK
LSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbElETCcs
CisgICAgICAgICB7CisgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9y
UHJvdG9jb2xWZXJzaW9uJywKICAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJy4u
L2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsJywKKyAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAogICAgICAgICAgICAg
Jy4uL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbicsCiAgICAgICAgICAgXSwKICAgICAgICAgICAn
b3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJj
b3JlL0luc3BlY3Rvci5pZGwnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmtpdC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCiAgICAgICAgICAgXSwKICAg
ICAgICAgICAndmFyaWFibGVzJzogewogICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2Rp
cnMnOiBbCkBAIC0zODIsNjUgKzM4OSwxNiBAQAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2Fj
dGlvbic6IFsKICAgICAgICAgICAgICdweXRob24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAogICAgICAgICAgICAgJy1vJywKICAg
ICAgICAgICAgICc8QChfb3V0cHV0cyknLAogICAgICAgICAgICAgJzxAKF9pbnB1dHMpJwogICAg
ICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2VuZXJhdGluZyBJbnNwZWN0b3IgcHJv
dG9jb2wgc291cmNlcyBmcm9tIEluc3BlY3Rvci5pZGwnLAorICAgICAgICAgICdtZXNzYWdlJzog
J1ZhbGlkYXRlIGluc3BlY3RvciBwcm90b2NvbCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkg
YW5kIGdlbmVyYXRlIHZlcnNpb24gZmlsZScsCiAgICAgICAgIH0KICAgICAgIF0KICAgICB9LAog
ICAgIHsKLSAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
Ci0gICAgICAndHlwZSc6ICdub25lJywKLSAgICAgICdkZXBlbmRlbmNpZXMnOiBbCi0gICAgICAg
ICdpbnNwZWN0b3JfaWRsJywKLSAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92
ZXJzaW9uJwotICAgICAgXSwKLSAgICAgICdhY3Rpb25zJzogWwotICAgICAgICB7Ci0gICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xTb3VyY2VzJywKLSAg
ICAgICAgICAjIFRoZSBzZWNvbmQgaW5wdXQgaXRlbSB3aWxsIGJlIHVzZWQgYXMgaXRlbSBuYW1l
IGluIHZjcHJvai4KLSAgICAgICAgICAjIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgSW5zcGVj
dG9yLmlkbCB0aGVyZSBiZWNhdXNlCi0gICAgICAgICAgIyBhbGwgaWRsIGZpbGVzIGFyZSBtYXJr
aW5nIGFzIGV4Y2x1ZGVkIGJ5IGd5cCBnZW5lcmF0b3IuCi0gICAgICAgICAgJ2lucHV0cyc6IFsK
LSAgICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsJywK
LSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbScsCi0g
ICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtJywKLSAgICAg
ICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbScsCi0gICAgICAgICAgICAn
Li4vYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG0nLAotICAgICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgICAg
XSwKLSAgICAgICAgICAnb3V0cHV0cyc6IFsKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCcsCi0gICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qcycsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKLSAgICAg
ICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRl
bmQuaCcsCi0gICAgICAgICAgXSwKLSAgICAgICAgICAndmFyaWFibGVzJzogewotICAgICAgICAg
ICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCi0gICAgICAgICAgICBdLAotICAgICAgICAg
IH0sCi0gICAgICAgICAgJ2FjdGlvbic6IFsKLSAgICAgICAgICAgICdweXRob24nLAotICAgICAg
ICAgICAgJ3NjcmlwdHMvcnVsZV9iaW5kaW5nLnB5JywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgICAgJzwo
U0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUnLAotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAg
ICAgJzxAKF9pbnB1dHMpJywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnLS1kZWZp
bmVzJywgJzwoZmVhdHVyZV9kZWZpbmVzKSBMQU5HVUFHRV9KQVZBU0NSSVBUJywKLSAgICAgICAg
ICAgICctLWdlbmVyYXRvcicsICdJbnNwZWN0b3InLAotICAgICAgICAgICAgJzxAKGdlbmVyYXRv
cl9pbmNsdWRlX2RpcnMpJwotICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnR2Vu
ZXJhdGluZyBJbnNwZWN0b3IgcHJvdG9jb2wgc291cmNlcyBmcm9tIEluc3BlY3Rvci5pZGwnLAot
ICAgICAgICB9LAotICAgICAgXQotICAgIH0sCi0gICAgewogICAgICAgJ3RhcmdldF9uYW1lJzog
J2luamVjdGVkX3NjcmlwdF9zb3VyY2UnLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAn
YWN0aW9ucyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZTIxODNjMWYy
OWM0Njc5NTg5MjYwNTBjYmQ5ODRjYTkzOWNhMTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucG0KKysrIC9kZXYvbnVsbApAQCAtMSwxMjM1ICswLDAgQEAKLSMgQ29weXJp
Z2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCi0jIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0KLXBhY2thZ2Ug
Q29kZUdlbmVyYXRvckluc3BlY3RvcjsKLQotdXNlIHN0cmljdDsKLQotdXNlIENsYXNzOjpTdHJ1
Y3Q7Ci11c2UgRmlsZTo6c3RhdDsKLQotbXkgJXR5cGVUcmFuc2Zvcm07Ci0kdHlwZVRyYW5zZm9y
bXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fYXBwbGljYXRpb25D
YWNoZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQ1NTIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JDU1NBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckNTU0Fn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY3NzQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJDb25zb2xlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JDb25z
b2xlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9jb25zb2xlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJQYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQYWdlQWdlbnQiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vz
c29yIiA9PiAibV9wYWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEZWJ1Z2dlciJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGVidWdnZXJBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kZWJ1Z2dlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NRGVidWdnZXIifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nl
c3NvciIgPT4gIm1fZG9tRGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRhdGFi
YXNlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JEYXRhYmFzZUFnZW50IiwKLSAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2RhdGFiYXNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET00ifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRPTUFnZW50IiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRE9NQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21B
Z2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTVN0b3JhZ2UifSA9IHsKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbVN0
b3JhZ2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkZpbGVTeXN0ZW0ifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudCIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvckZpbGVTeXN0ZW1BZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJt
X2ZpbGVTeXN0ZW1BZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvciJ9ID0gewot
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckFnZW50
IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiTmV0d29yayJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJlc291
cmNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9yZXNvdXJjZUFnZW50IiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiUHJvZmlsZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvclByb2ZpbGVyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JQcm9maWxl
ckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcHJvZmlsZXJBZ2VudCIsCi19
OwotJHR5cGVUcmFuc2Zvcm17IlJ1bnRpbWUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3Bl
Y3RvclJ1bnRpbWVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3J1bnRpbWVBZ2VudCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlRpbWVsaW5lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JU
aW1lbGluZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3RpbWVsaW5lQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJXb3JrZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvcldvcmtl
ckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yV29ya2VyQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV93b3JrZXJBZ2VudCIsCi19OwotCi0kdHlwZVRyYW5zZm9y
bXsiRnJvbnRlbmQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZyb250ZW5kIiwK
LSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmQuaCIsCi19OwotJHR5cGVUcmFuc2Zv
cm17IlBhc3NSZWZQdHIifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0Zi9QYXNzUmVm
UHRyLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJSZWZDb3VudGVkIn0gPSB7Ci0gICAgImZvcndh
cmRIZWFkZXIiID0+ICJ3dGYvUmVmQ291bnRlZC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ik9iamVjdCJ9ID0gewotICAgICJwYXJhbSIgPT4g
IlBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rvck9iamVjdCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJPYmpl
Y3QiLAotICAgICJKU1R5cGUiID0+ICJvYmplY3QiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJBcnJh
eSJ9ID0gewotICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKLSAg
ICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IiwKLSAgICAiZGVmYXVsdFZh
bHVlIiA9PiAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIklu
c3BlY3RvckFycmF5IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAg
ICJKU09OVHlwZSIgPT4gIkFycmF5IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiVmFsdWUifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvclZhbHVl
PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvclZhbHVlOjpudWxsKCkiLAotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVmFsdWUiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiVmFsdWUiLAotICAgICJKU1R5cGUiID0+
ICIiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJTdHJpbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJj
b25zdCBTdHJpbmcmIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBTdHJpbmcqIGNv
bnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJs
ZSIgPT4gIlN0cmluZyIsCi0gICAgInJldHVybiIgPT4gIlN0cmluZyIsCi0gICAgImRlZmF1bHRW
YWx1ZSIgPT4gIlwiXCIiLAotICAgICJmb3J3YXJkSGVhZGVyIiA9PiAiUGxhdGZvcm1TdHJpbmcu
aCIsCi0gICAgImhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAgICJKU09OVHlwZSIg
PT4gIlN0cmluZyIsCi0gICAgIkpTVHlwZSIgPT4gInN0cmluZyIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsibG9uZyJ9ID0gewotICAgICJwYXJhbSIgPT4gImxvbmciLAotICAgICJvcHRpb25hbF9wYXJh
bSIgPT4gImNvbnN0IGxvbmcqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIg
PT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImxvbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICIwIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpT
T05UeXBlIiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBl
VHJhbnNmb3JteyJpbnQifSA9IHsKLSAgICAicGFyYW0iID0+ICJpbnQiLAotICAgICJvcHRpb25h
bF9wYXJhbSIgPT4gImNvbnN0IGludCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vz
c29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAiaW50IiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAg
ICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0k
dHlwZVRyYW5zZm9ybXsidW5zaWduZWQgbG9uZyJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2ln
bmVkIGxvbmciLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IHVuc2lnbmVkIGxvbmcq
IGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJp
YWJsZSIgPT4gInVuc2lnbmVkIGxvbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsidW5zaWduZWQgaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAidW5zaWduZWQgaW50IiwKLSAg
ICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBpbnQqIGNvbnN0IiwKLSAgICAi
b3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gInVuc2ln
bmVkIGludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjB1IiwKLSAgICAiZm9yd2FyZCIgPT4g
IiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAg
ICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJkb3VibGUifSA9IHsK
LSAgICAicGFyYW0iID0+ICJkb3VibGUiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0
IGRvdWJsZSogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0g
ICAgInZhcmlhYmxlIiA9PiAiZG91YmxlIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMC4wIiwK
LSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBl
IiA9PiAiTnVtYmVyIiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNm
b3JteyJib29sZWFuIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiYm9vbCIsCi0gICAgIm9wdGlvbmFs
X3BhcmFtIiA9PiAiY29uc3QgYm9vbCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vz
c29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIj0+ICJib29sIiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiZmFsc2UiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwK
LSAgICAiSlNPTlR5cGUiID0+ICJCb29sZWFuIiwKLSAgICAiSlNUeXBlIiA9PiAiYm9vbGVhbiIK
LX07Ci0kdHlwZVRyYW5zZm9ybXsidm9pZCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAg
ICAiaGVhZGVyIiA9PiAiIgotfTsKLSR0eXBlVHJhbnNmb3JteyJWZWN0b3IifSA9IHsKLSAgICAi
aGVhZGVyIiA9PiAid3RmL1ZlY3Rvci5oIgotfTsKLQotIyBEZWZhdWx0IExpY2Vuc2UgVGVtcGxh
dGVzCi0KLW15ICRsaWNlbnNlVGVtcGxhdGUgPSA8PCAiRU9GIjsKLS8vIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi1FT0YKLQotbXkgJGNvZGVH
ZW5lcmF0b3I7Ci1teSAkb3V0cHV0RGlyOwotbXkgJG91dHB1dEhlYWRlcnNEaXI7Ci1teSAkd3Jp
dGVEZXBlbmRlbmNpZXM7Ci1teSAkdmVyYm9zZTsKLQotbXkgJG5hbWVzcGFjZTsKLQotbXkgJGJh
Y2tlbmRDbGFzc05hbWU7Ci1teSAkYmFja2VuZENsYXNzRGVjbGFyYXRpb247Ci1teSAkYmFja2Vu
ZEpTU3R1Yk5hbWU7Ci1teSAlYmFja2VuZFR5cGVzOwotbXkgQGJhY2tlbmRNZXRob2RzOwotbXkg
QGJhY2tlbmRNZXRob2RzSW1wbDsKLW15ICViYWNrZW5kTWV0aG9kU2lnbmF0dXJlczsKLW15ICRi
YWNrZW5kQ29uc3RydWN0b3I7Ci1teSBAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkg
QGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zOwotbXkgQGJhY2tlbmRGb290ZXI7Ci1teSBAYmFj
a2VuZEpTU3R1YnM7Ci1teSBAYmFja2VuZEpTRXZlbnRzOwotbXkgJWJhY2tlbmREb21haW5zOwot
Ci1teSAkZnJvbnRlbmRDbGFzc05hbWU7Ci1teSAlZnJvbnRlbmRUeXBlczsKLW15IEBmcm9udGVu
ZE1ldGhvZHM7Ci1teSBAZnJvbnRlbmRBZ2VudEZpZWxkczsKLW15IEBmcm9udGVuZE1ldGhvZHNJ
bXBsOwotbXkgJWZyb250ZW5kTWV0aG9kU2lnbmF0dXJlczsKLW15ICRmcm9udGVuZENvbnN0cnVj
dG9yOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnM7Ci1teSBAZnJvbnRlbmRDb25z
dGFudERlZmluaXRpb25zOwotbXkgQGZyb250ZW5kRm9vdGVyOwotbXkgQGZyb250ZW5kRG9tYWlu
czsKLQotIyBEZWZhdWx0IGNvbnN0cnVjdG9yCi1zdWIgbmV3Ci17Ci0gICAgbXkgJG9iamVjdCA9
IHNoaWZ0OwotICAgIG15ICRyZWZlcmVuY2UgPSB7IH07Ci0KLSAgICAkY29kZUdlbmVyYXRvciA9
IHNoaWZ0OwotICAgICRvdXRwdXREaXIgPSBzaGlmdDsKLSAgICAkb3V0cHV0SGVhZGVyc0RpciA9
IHNoaWZ0OwotICAgIHNoaWZ0OyAjICR1c2VMYXllck9uVG9wCi0gICAgc2hpZnQ7ICMgJHByZXBy
b2Nlc3NvcgotICAgICR3cml0ZURlcGVuZGVuY2llcyA9IHNoaWZ0OwotICAgICR2ZXJib3NlID0g
c2hpZnQ7Ci0KLSAgICBibGVzcygkcmVmZXJlbmNlLCAkb2JqZWN0KTsKLSAgICByZXR1cm4gJHJl
ZmVyZW5jZTsKLX0KLQotIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0Ci1zdWIgR2VuZXJh
dGVNb2R1bGUKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGRhdGFOb2RlID0g
c2hpZnQ7Ci0KLSAgICAkbmFtZXNwYWNlID0gJGRhdGFOb2RlLT5tb2R1bGU7Ci0gICAgJG5hbWVz
cGFjZSA9fiBzL2NvcmUvV2ViQ29yZS87Ci0KLSAgICAkZnJvbnRlbmRDbGFzc05hbWUgPSAiSW5z
cGVjdG9yRnJvbnRlbmQiOwotICAgICRmcm9udGVuZENvbnN0cnVjdG9yID0gIiAgICAke2Zyb250
ZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsiOwotICAgIHB1c2goQGZy
b250ZW5kRm9vdGVyLCAicHJpdmF0ZToiKTsKLSAgICBwdXNoKEBmcm9udGVuZEZvb3RlciwgIiAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyIp
OwotICAgICRmcm9udGVuZFR5cGVzeyJTdHJpbmcifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkZnJvbnRlbmRUeXBlc3siUGFz
c1JlZlB0ciJ9ID0gMTsKLQotICAgICRiYWNrZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyIjsKLSAgICAkYmFja2VuZENsYXNzRGVjbGFyYXRpb24gPSAiSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiI7Ci0gICAgJGJhY2tlbmRKU1N0dWJOYW1lID0gIkluc3BlY3RvckJhY2tlbmRTdHVi
IjsKLSAgICAkYmFja2VuZFR5cGVzeyJJbnNwZWN0b3IifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBl
c3siSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlBh
c3NSZWZQdHIifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siUmVmQ291bnRlZCJ9ID0gMTsKLSAg
ICAkYmFja2VuZFR5cGVzeyJPYmplY3QifSA9IDE7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1l
bnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlSW50ZXJmYWNlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNo
aWZ0OwotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkZGVmaW5lcyA9IHNoaWZ0
OwotCi0gICAgbXkgJWFnZW50ID0gKAotICAgICAgICBtZXRob2REZWNsYXJhdGlvbnMgPT4gW10s
Ci0gICAgICAgIG1ldGhvZFNpZ25hdHVyZXMgPT4ge30KLSAgICApOwotICAgIGdlbmVyYXRlRnVu
Y3Rpb25zKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwotICAgIGlmIChAeyRhZ2VudHttZXRob2REZWNs
YXJhdGlvbnN9fSkgewotICAgICAgICBwdXNoKEBmcm9udGVuZERvbWFpbnMsICRpbnRlcmZhY2Ut
Pm5hbWUpOwotICAgICAgICBnZW5lcmF0ZUFnZW50RGVjbGFyYXRpb24oJGludGVyZmFjZSwgXCVh
Z2VudCk7Ci0gICAgfQotfQotCi1zdWIgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uCi17Ci0gICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotICAgIG15ICRh
Z2VudE5hbWUgPSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywg
IiAgICBjbGFzcyAke2FnZW50TmFtZX0geyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywg
IiAgICBwdWJsaWM6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICAke2Fn
ZW50TmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsIEB7JGFnZW50LT57bWV0aG9kRGVj
bGFyYXRpb25zfX0pOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIg
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0iKTsKLSAgICBwdXNo
KEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHJpdmF0ZToiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1l
dGhvZHMsICIgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIH07Iik7Ci0g
ICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiIik7Ci0KLSAgICBteSAkZ2V0dGVyTmFtZSA9IGxj
KCRhZ2VudE5hbWUpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAke2FnZW50TmFt
ZX0qICR7Z2V0dGVyTmFtZX0oKSB7IHJldHVybiAmbV8ke2dldHRlck5hbWV9OyB9Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRNZXRob2RzLCAiIik7Ci0KLSAgICBwdXNoKEBmcm9udGVuZEZvb3Rlciwg
IiAgICAke2FnZW50TmFtZX0gbV8ke2dldHRlck5hbWV9OyIpOwotCi0gICAgcHVzaChAZnJvbnRl
bmRBZ2VudEZpZWxkcywgIm1fJHtnZXR0ZXJOYW1lfSIpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9u
dGVuZENvbnN0cnVjdG9ySW1wbAotewotICAgIG15IEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsK
LSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwgIiR7ZnJvbnRlbmRDbGFzc05hbWV9
Ojoke2Zyb250ZW5kQ2xhc3NOYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwg
IiAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkiKTsKLSAgICBmb3JlYWNoIG15ICRhZ2VudEZpZWxkIChAZnJvbnRlbmRBZ2VudEZpZWxkcykg
ewotICAgICAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbCwgIiAgICAsICR7YWdlbnRG
aWVsZH0oaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIH0KLSAgICBwdXNoKEBmcm9u
dGVuZENvbnN0cnVjdG9ySW1wbCwgInsiKTsKLSAgICBwdXNoKEBmcm9udGVuZENvbnN0cnVjdG9y
SW1wbCwgIn0iKTsKLSAgICByZXR1cm4gQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsOwotfQotCi1z
dWIgZ2VuZXJhdGVGdW5jdGlvbnMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAg
bXkgJGFnZW50ID0gc2hpZnQ7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskaW50ZXJm
YWNlLT5mdW5jdGlvbnN9KSB7Ci0gICAgICAgIGlmICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0pIHsKLSAgICAgICAgICAgIGdlbmVyYXRlRnJvbnRl
bmRGdW5jdGlvbigkaW50ZXJmYWNlLCAkZnVuY3Rpb24sICRhZ2VudCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbigkaW50ZXJmYWNlLCAkZnVu
Y3Rpb24pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29sbGVjdEJhY2tlbmRKU1N0dWJGdW5j
dGlvbnMoJGludGVyZmFjZSk7Ci0gICAgY29sbGVjdEJhY2tlbmRKU1N0dWJFdmVudHMoJGludGVy
ZmFjZSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24KLXsKLSAgICBteSAkaW50
ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJGFnZW50
ID0gc2hpZnQ7Ci0KLSAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUt
Pm5hbWU7Ci0KLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSBAYXJn
c0ZpbHRlcmVkID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pOyAjIGp1c3Qga2VlcCBvbmx5IG91dCBwYXJhbWV0ZXJzIGZvciBmcm9udGVuZCBp
bnRlcmZhY2UuCi0gICAgbWFwKCRmcm9udGVuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEBhcmdzRmls
dGVyZWQpOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzLgotICAgIG15ICRhcmd1bWVudHMgPSBq
b2luKCIsICIsIG1hcChwYXJhbVR5cGVUcmFpdHMoJF8sICJwYXJhbSIpIC4gIiAiIC4gJF8tPm5h
bWUsIEBhcmdzRmlsdGVyZWQpKTsgIyBwcmVwYXJlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gc2ln
bmF0dXJlLgotCi0gICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgICAgIHZvaWQgJHtmdW5jdGlvbk5h
bWV9KCR7YXJndW1lbnRzfSk7IjsKLSAgICAhJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30tPnsk
c2lnbmF0dXJlfSB8fCBkaWUgIkR1cGxpY2F0ZSBmcm9udGVuZCBmdW5jdGlvbiB3YXMgZGV0ZWN0
ZWQgZm9yIHNpZ25hdHVyZSAnJHNpZ25hdHVyZScuIjsKLSAgICAkYWdlbnQtPnttZXRob2RTaWdu
YXR1cmVzfS0+eyRzaWduYXR1cmV9ID0gMTsKLSAgICBwdXNoKEB7JGFnZW50LT57bWV0aG9kRGVj
bGFyYXRpb25zfX0sICRzaWduYXR1cmUpOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAidm9pZCAke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtkb21haW59Ojoke2Z1bmN0
aW9uTmFtZX0oJHthcmd1bWVudHN9KSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ICR7ZnVuY3Rpb25O
YW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnNldFN0cmluZyhcIm1ldGhvZFwi
LCBcIiRkb21haW4uJGZ1bmN0aW9uTmFtZVwiKTsiKTsKLSAgICBpZiAoc2NhbGFyKEBhcmdzRmls
dGVyZWQpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0KLSAg
ICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAYXJnc0ZpbHRlcmVkKSB7Ci0gICAgICAgICAg
ICBteSAkb3B0aW9uYWwgPSAkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9u
YWwifSA/ICJpZiAoIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKVxuICAgICAgICAiIDogIiI7Ci0g
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAiIC4gJG9wdGlvbmFsIC4gInBhcmFtc09i
amVjdC0+c2V0IiAuIHBhcmFtVHlwZVRyYWl0cygkcGFyYW1ldGVyLCAiSlNPTlR5cGUiKSAuICIo
XCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwgIiAuIHBhcmFtVHlwZVRyYWl0cygkcGFyYW1l
dGVyLCAidmFsdWVBY2Nlc3NvciIpIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpOyIpOwotICAgICAg
ICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2Ut
PnNldE9iamVjdChcInBhcmFtc1wiLCBwYXJhbXNPYmplY3QpOyIpOwotICAgIH0KLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQoJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGNh
bWVsQ2FzZQotewotICAgIG15ICR2YWx1ZSA9IHNoaWZ0OwotICAgICR2YWx1ZSA9fiBzL1xiKFx3
KS9cVSQxL2c7ICMgbWFrZSBhIGNhbWVsLWNhc2UgbmFtZSBmb3IgdHlwZSBuYW1lCi0gICAgJHZh
bHVlID1+IHMvIC8vZzsKLSAgICByZXR1cm4gJHZhbHVlOwotfQotCi1zdWIgZ2VuZXJhdGVCYWNr
ZW5kRnVuY3Rpb24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGZ1bmN0
aW9uID0gc2hpZnQ7Ci0KLSAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUgPSAkaW50ZXJmYWNl
LT5uYW1lIC4gIl8iIC4gJGZ1bmN0aW9uTmFtZTsKLSAgICBteSAkZnVsbFF1YWxpZmllZEZ1bmN0
aW9uTmFtZURvdCA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiLiIgLiAkZnVuY3Rpb25OYW1lOwotCi0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgICAgICBrJHtmdWxsUXVh
bGlmaWVkRnVuY3Rpb25OYW1lfUNtZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZp
bml0aW9ucywgIiAgICBcIiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdH1cIiwiKTsKLQot
ICAgIG1hcCgkYmFja2VuZFR5cGVzeyRfLT50eXBlfSA9IDEsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzfSk7ICMgcmVnaXN0ZXIgcmVxdWlyZWQgdHlwZXMKLSAgICBteSBAaW5BcmdzID0gZ3JlcCgk
Xy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgbXkg
QG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzfSk7Ci0gICAgCi0gICAgbXkgJHNpZ25hdHVyZSA9ICIgICAgdm9pZCAke2Z1bGxRdWFs
aWZpZWRGdW5jdGlvbk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RN
ZXNzYWdlT2JqZWN0KTsiOwotICAgICEkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWduYXR1
cmV9fSB8fCBkaWUgIkR1cGxpY2F0ZSBmdW5jdGlvbiB3YXMgZGV0ZWN0ZWQgZm9yIHNpZ25hdHVy
ZSAnJHNpZ25hdHVyZScuIjsKLSAgICAkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JHtzaWduYXR1
cmV9fSA9ICIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZSI7Ci0gICAgcHVzaChAYmFja2VuZE1l
dGhvZHMsICR7c2lnbmF0dXJlfSk7Ci0KLSAgICBteSBAZnVuY3Rpb247Ci0gICAgbXkgJHJlcXVl
c3RNZXNzYWdlT2JqZWN0ID0gc2NhbGFyKEBpbkFyZ3MpID8gIiByZXF1ZXN0TWVzc2FnZU9iamVj
dCIgOiAiIjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
JHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAi
Iik7Ci0KLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBteSAkZG9tYWlu
QWNjZXNzb3IgPSB0eXBlVHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nlc3NvciIpOwotICAgICRi
YWNrZW5kVHlwZXN7JGRvbWFpbn0gPSAxOwotICAgICRiYWNrZW5kRG9tYWluc3skZG9tYWlufSA9
IDE7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKCEkZG9tYWluQWNjZXNzb3IpIik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFwi
JGRvbWFpbiBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuXCIpOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0KLSAgICAjIGRlY2xhcmUgbG9jYWwgdmFyaWFibGVzIGZvciBvdXQgYXJndW1l
bnRzLgotICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCBtYXAoIiAgICAiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgInZhcmlhYmxlIikgLiAiIG91dF8i
IC4gJF8tPm5hbWUgLiAiID0gIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJkZWZhdWx0VmFsdWUi
KSAuICI7IiwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICB9
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgRXJyb3JTdHJpbmcgZXJyb3I7Iik7Ci0gICAgcHVz
aChAZnVuY3Rpb24sICIiKTsKLQotICAgIG15ICRpbmRlbnQgPSAiIjsKLSAgICBpZiAoc2NhbGFy
KEBpbkFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoXCJwYXJhbXNcIik7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOyIpOwot
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJv
cnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsiKTsKLQotICAgICAgICBmb3JlYWNoIG15ICRw
YXJhbWV0ZXIgKEBpbkFyZ3MpIHsKLSAgICAgICAgICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+
bmFtZTsKLSAgICAgICAgICAgIG15ICR0eXBlID0gJHBhcmFtZXRlci0+dHlwZTsKLSAgICAgICAg
ICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCRwYXJhbWV0ZXItPnR5cGUpOwotICAgICAg
ICAgICAgbXkgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIjAiOwotICAgICAgICAgICAgaWYgKCRw
YXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgICAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgYm9vbCAke25hbWV9X3ZhbHVlRm91bmQgPSBmYWxz
ZTsiKTsKLSAgICAgICAgICAgICAgICAkb3B0aW9uYWxGbGFnQXJndW1lbnQgPSAiJiR7bmFtZX1f
dmFsdWVGb3VuZCI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAiIC4gdHlwZVRyYWl0cygkdHlwZSwgInZhcmlhYmxlIikgLiAiIGluXyRuYW1lID0gZ2V0
JHR5cGVTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBcIiRuYW1lXCIsICRvcHRpb25hbEZsYWdB
cmd1bWVudCwgcHJvdG9jb2xFcnJvcnNQdHIpOyIpOwotICAgICAgICB9Ci0gICAgICAgIHB1c2go
QGZ1bmN0aW9uLCAiIik7Ci0gICAgICAgICRpbmRlbnQgPSAiICAgICI7Ci0gICAgfQotCi0gICAg
bXkgJGFyZ3MgPSBqb2luKCIsICIsCi0gICAgICAgICAgICAgICAgICAgICgiJmVycm9yIiwKLSAg
ICAgICAgICAgICAgICAgICAgIG1hcCgoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25h
bCJ9ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgJF8tPm5hbWUgLiAiX3ZhbHVlRm91bmQg
PyAmaW5fIiAuICRfLT5uYW1lIC4gIiA6IDAiIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ImluXyIgLiAkXy0+bmFtZSksIEBpbkFyZ3MpLAotICAgICAgICAgICAgICAgICAgICAgbWFwKCIm
b3V0XyIgLiAkXy0+bmFtZSwgQG91dEFyZ3MpKSk7Ci0KLSAgICBwdXNoKEBmdW5jdGlvbiwgJGlu
ZGVudCAuICJpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkiKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgJGluZGVudCAuICIgICAgJGRvbWFpbkFjY2Vzc29yLT4kZnVuY3Rpb25OYW1lKCRhcmdz
KTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Iik7Ci0gICAgaWYgKHNjYWxhcihAb3V0QXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgp
KSB7Iik7Ci0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQG91dEFyZ3MpIHsKLSAgICAg
ICAgICAgIG15ICRvZmZzZXQgPSAiICAgICAgICAiOwotICAgICAgICAgICAgIyBEb24ndCBhZGQg
b3B0aW9uYWwgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gdGhlIHJlc3VsdCB1bmxlc3MgaXQgaXMgInRy
dWUiCi0gICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9w
dGlvbmFsIn0gJiYgJHBhcmFtZXRlci0+dHlwZSBlcSAiYm9vbGVhbiIpIHsKLSAgICAgICAgICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJpZiAob3V0XyIgLiAkcGFyYW1ldGVyLT5u
YW1lIC4gIikiKTsKLSAgICAgICAgICAgICAgICAkb2Zmc2V0IC49ICIgICAgIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAkb2Zmc2V0IC4gInJlc3VsdC0+c2V0
IiAuIHR5cGVUcmFpdHMoJHBhcmFtZXRlci0+dHlwZSwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiXCIsIG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpOyIpOwot
ICAgICAgICB9Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIH0iKTsKLSAgICB9Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgc2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LCBTdHJpbmc6
OmZvcm1hdChcIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZFwiLCBcIiRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90XCIpLCBwcm90b2NvbEVycm9ycywg
ZXJyb3IpOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAifSIpOwotICAgIHB1c2goQGZ1bmN0aW9u
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBAZnVuY3Rpb24pOwotfQotCi1z
dWIgZ2VuZXJhdGVCYWNrZW5kU2VuZFJlc3BvbnNlCi17Ci0gICAgbXkgJHNlbmRSZXNwb25zZSA9
IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnNlbmRSZXNwb25zZShsb25n
IGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
LCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCi17Ci0gICAgaWYgKHByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFs
aWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcmVzcG9uc2VN
ZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdl
LT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19ICAgIAotRU9GCi0g
ICAgcmV0dXJuIHNwbGl0KCJcbiIsICRzZW5kUmVzcG9uc2UpOwotfQotCi1zdWIgZ2VuZXJhdGVC
YWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJvcgotewotICAgIG15ICRyZXBvcnRQcm90b2NvbEVycm9y
ID0gPDwgIkVPRiI7Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25z
dCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICByZXBvcnRQcm90b2NvbEVycm9y
KGNhbGxJZCwgY29kZSwgZXJyb3JNZXNzYWdlLCAwKTsKLX0KLQotdm9pZCAke2JhY2tlbmRDbGFz
c05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
VmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKLSAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNp
emUoKSkgewotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAw
KTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAtMzI2MDAp
OwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7
Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwot
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwgLTMyNjAzKTsKLSAg
ICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOwotICAgIH0K
LSAgICBBU1NFUlQoY29kZSA+PTApOwotICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29t
bW9uRXJyb3JzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsK
LSAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKLSAgICBBU1NF
UlQoZXJyb3IpOwotICAgIGlmIChkYXRhKQotICAgICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEi
LCBkYXRhKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3Ip
OwotICAgIGlmIChjYWxsSWQpCi0gICAgICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2Fs
bElkKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJpZCIsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCkpOwotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAg
ICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwg
JHJlcG9ydFByb3RvY29sRXJyb3IpOwotfQotCi1zdWIgZ2VuZXJhdGVBcmd1bWVudEdldHRlcnMK
LXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICRqc29uID0gdHlwZVRyYWl0cygkdHlw
ZSwgIkpTT05UeXBlIik7Ci0gICAgbXkgJHZhcmlhYmxlID0gdHlwZVRyYWl0cygkdHlwZSwgInZh
cmlhYmxlIik7Ci0gICAgbXkgJGRlZmF1bHRWYWx1ZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJkZWZh
dWx0VmFsdWUiKTsKLSAgICBteSAkcmV0dXJuICA9IHR5cGVUcmFpdHMoJHR5cGUsICJyZXR1cm4i
KSA/IHR5cGVUcmFpdHMoJHR5cGUsICJyZXR1cm4iKSA6IHR5cGVUcmFpdHMoJHR5cGUsICJwYXJh
bSIpOwotCi0gICAgbXkgJHR5cGVTdHJpbmcgPSBjYW1lbENhc2UoJHR5cGUpOwotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICBzdGF0aWMgJHJldHVybiBnZXQkdHlw
ZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOyIpOwotICAgIG15
ICRnZXR0ZXJCb2R5ID0gPDwgIkVPRiI7Ci0KLSRyZXR1cm4gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldCR0eXBlU3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
cykKLXsKLSAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwotCi0gICAgaWYgKHZhbHVlRm91bmQp
Ci0gICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7Ci0KLSAgICAkdmFyaWFibGUgdmFsdWUgPSAk
ZGVmYXVsdFZhbHVlOwotCi0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZv
dW5kKSB7Ci0gICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJh
bXMgY29udGFpbmVyLgotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1l
dGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBJbnNwZWN0b3JPYmpl
Y3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7Ci0gICAgSW5zcGVjdG9yT2Jq
ZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOwot
Ci0gICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3Vu
ZCkKLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0
KCJQYXJhbWV0ZXIgJ1wlcycgd2l0aCB0eXBlICckanNvbicgd2FzIG5vdCBmb3VuZC4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIGlm
ICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hcyRqc29uKCZ2YWx1ZSkpCi0gICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJ1wlcycgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICBlbHNlCi0gICAgICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAgICAgICAgKnZhbHVlRm91
bmQgPSB0cnVlOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLUVPRgotCi0gICAgcmV0dXJuIHNwbGl0
KCJcbiIsICRnZXR0ZXJCb2R5KTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZERpc3BhdGNoZXIK
LXsKLSAgICBteSBAYm9keTsKLSAgICBteSBAbWFwRW50cmllcyA9IG1hcCgiICAgICAgICAmJHti
YWNrZW5kQ2xhc3NOYW1lfTo6JF8sIiwgbWFwICgkYmFja2VuZE1ldGhvZFNpZ25hdHVyZXN7JF99
LCBAYmFja2VuZE1ldGhvZHMpKTsKLSAgICBteSAkbWFwRW50cmllcyA9IGpvaW4oIlxuIiwgQG1h
cEVudHJpZXMpOwotCi0gICAgbXkgJGJhY2tlbmREaXNwYXRjaGVyQm9keSA9IDw8ICJFT0YiOwot
dm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgUmVmUHRyPCR7YmFja2VuZENsYXNzTmFtZX0+IHByb3RlY3QgPSB0aGlzOwotICAg
IHR5cGVkZWYgdm9pZCAoJHtiYWNrZW5kQ2xhc3NOYW1lfTo6KkNhbGxIYW5kbGVyKShsb25nIGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVGSU5FX1NUQVRJQ19M
T0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7Ci0gICAgbG9uZyBjYWxsSWQgPSAwOwot
Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBzdGF0aWMgQ2FsbEhh
bmRsZXIgaGFuZGxlcnNbXSA9IHsKLSRtYXBFbnRyaWVzCi0gICAgICAgIH07Ci0gICAgICAgIHNp
emVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFuZE5hbWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNb
MF0pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmROYW1lc1tpXSwgaGFuZGxlcnNbaV0pOwotICAg
IH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7Ci0g
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBi
ZSBpbiBKU09OIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0
KCk7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOwotICAgIGlmICghY2FsbElk
VmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwg
IidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJv
cGVydHkgbXVzdCBiZSBudW1iZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1l
dGhvZCIpOwotICAgIGlmICghbWV0aG9kVmFsdWUpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBm
b3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIG1ldGhvZDsKLSAg
ICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygmbWV0aG9kKSkgewotICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhv
ZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hN
YXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBt
ZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
ICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOwotfQot
RU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkpOwotfQot
Ci1zdWIgZ2VuZXJhdGVCYWNrZW5kTWVzc2FnZVBhcnNlcgotewotICAgIG15ICRtZXNzYWdlUGFy
c2VyQm9keSA9IDw8ICJFT0YiOwotYm9vbCAke2JhY2tlbmRDbGFzc05hbWV9OjpnZXRDb21tYW5k
TmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KQotewotICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3Nh
Z2UpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOwotICAgIGlmICgh
b2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW9iamVjdC0+Z2V0U3Ry
aW5nKCJtZXRob2QiLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkbWVzc2FnZVBhcnNlckJv
ZHkpOwotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJGdW5jdGlvbnMKLXsKLSAgICBteSAk
aW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9IGdyZXAoISRfLT5zaWduYXR1
cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9LCBAeyRpbnRlcmZhY2UtPmZ1bmN0aW9u
c30pOwotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotCi0gICAgZm9yZWFjaCBt
eSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKLSAgICAgICAgbXkgJG5hbWUgPSAkZnVuY3Rpb24t
PnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVjdGlv
biBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgICAgICBteSAkYXJndW1l
bnROYW1lcyA9IGpvaW4oCi0gICAgICAgICAgICAiLCIsCi0gICAgICAgICAgICBtYXAoIlwiIiAu
ICRfLT5uYW1lIC4gIlwiOiB7IgotICAgICAgICAgICAgICAgIC4gIlwib3B0aW9uYWxcIjogIiAu
ICgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAidHJ1ZSAiIDogImZhbHNl
IikgLiAiLCAiCi0gICAgICAgICAgICAgICAgLiAiXCJ0eXBlXCI6IFwiIiAuIHR5cGVUcmFpdHMo
JF8tPnR5cGUsICJKU1R5cGUiKSAuICJcIiIKLSAgICAgICAgICAgICAgICAuICJ9IiwKLSAgICAg
ICAgICAgICAgICAgQGluQXJncykpOwotICAgICAgICBwdXNoKEBiYWNrZW5kSlNTdHVicywgIiAg
ICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7IiAuCi0gICAgICAgICAgICAiXCJtZXRob2RcIjog
XCIkZG9tYWluLiRuYW1lXCIsICIgLgotICAgICAgICAgICAgKHNjYWxhcihAaW5BcmdzKSA/ICJc
InBhcmFtc1wiOiB7JGFyZ3VtZW50TmFtZXN9LCAiIDogIiIpIC4KLSAgICAgICAgICAgICJcImlk
XCI6IDAiIC4KLSAgICAgICAgIn0nKTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBjb2xsZWN0QmFja2Vu
ZEpTU3R1YkV2ZW50cwotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSBAZnVu
Y3Rpb25zID0gZ3JlcCgkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQi
fSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFj
ZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAg
ICAgIG15ICRuYW1lID0gJGRvbWFpbiAuICIuIiAuICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgICAgICBteSBAb3V0QXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2lu
KCIsIiwgbWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIiIgLCBAb3V0QXJncykpOwotICAgICAgICBw
dXNoKEBiYWNrZW5kSlNFdmVudHMsICIgICAgdGhpcy5fZXZlbnRBcmdzW1wiIiAuICRuYW1lIC4g
IlwiXSA9IFsiIC4gJGFyZ3VtZW50TmFtZXMgLiJdOyIpOwotICAgIH0KLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFN0dWJKUwotewotICAgIG15ICRKU1JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcnMg
PSBqb2luKCJcbiIsIG1hcCgiICAgIHRoaXMucmVnaXN0ZXIiIC4gJF8gLiAiRGlzcGF0Y2hlciA9
IHRoaXMuX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKHRoaXMsIFwiIiAuICRfIC4iXCIp
OyIsIEBmcm9udGVuZERvbWFpbnMpKTsKLSAgICBteSAkSlNTdHVicyA9IGpvaW4oIlxuIiwgQGJh
Y2tlbmRKU1N0dWJzKTsKLSAgICBteSAkSlNFdmVudHMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNF
dmVudHMpOwotICAgIG15ICRpbnNwZWN0b3JCYWNrZW5kU3R1YkpTID0gPDwgIkVPRiI7Ci0kbGlj
ZW5zZVRlbXBsYXRlCi0KLUluc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQotewotICAg
IHRoaXMuX2xhc3RDYWxsYmFja0lkID0gMTsKLSAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291
bnQgPSAwOwotICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OwotICAgIHRoaXMuX2RvbWFpbkRpc3Bh
dGNoZXJzID0ge307Ci0gICAgdGhpcy5fZXZlbnRBcmdzID0ge307Ci0kSlNTdHVicwotJEpTRXZl
bnRzCi0kSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzCi19Ci0KLUluc3BlY3RvckJhY2tlbmRT
dHViLnByb3RvdHlwZSA9IHsKLSAgICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAotICAgIGR1
bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzOiAwLAotCi0gICAgX3dyYXA6IGZ1bmN0aW9uKGNh
bGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJh
Y2tJZCsrOwotICAgICAgICB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8
fCBmdW5jdGlvbigpIHt9OwotICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKLSAgICB9LAotCi0g
ICAgX3JlZ2lzdGVyRGVsZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCi0gICAgewotICAg
ICAgICB2YXIgZG9tYWluQW5kRnVuY3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1l
dGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rp
b25bMF0gKyAiQWdlbnQiOwotICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQotICAgICAg
ICAgICAgd2luZG93W2FnZW50TmFtZV0gPSB7fTsKLSAgICAgICAgd2luZG93W2FnZW50TmFtZV1b
ZG9tYWluQW5kRnVuY3Rpb25bMV1dID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0
aGlzLCByZXF1ZXN0U3RyaW5nKTsKLSAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5k
RnVuY3Rpb25bMV1dWyJpbnZva2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RT
dHJpbmcpCi0gICAgfSwKLQotICAgIF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFy
Z3MsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJl
cXVlc3RTdHJpbmcpOwotICAgICAgICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7Ci0gICAgICAgIHRo
aXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsK
LSAgICB9LAotCi0gICAgX3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCi0gICAgewot
ICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7
Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOwotICAgICAg
ICB2YXIgY2FsbGJhY2sgPSAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGgg
LSAxXSA9PT0gImZ1bmN0aW9uIikgPyBhcmdzLnBvcCgpIDogMDsKLSAgICAgICAgdmFyIGRvbWFp
bkFuZE1ldGhvZCA9IHJlcXVlc3QubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgIHZhciBhZ2Vu
dE1ldGhvZCA9IGRvbWFpbkFuZE1ldGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9k
WzFdOwotCi0gICAgICAgIHZhciBoYXNQYXJhbXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKHJlcXVl
c3QucGFyYW1zKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMp
IHsKLSAgICAgICAgICAgICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5
cGU7Ci0gICAgICAgICAgICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tl
eV0ub3B0aW9uYWw7Ci0KLSAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYg
IW9wdGlvbmFsRmxhZykgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogSW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBh
Z2VudE1ldGhvZCArICInIGNhbGwuIEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIg
KyBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LnBhcmFtcykgKyAiJy4iKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciB2
YWx1ZSA9IGFyZ3Muc2hpZnQoKTsKLSAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYm
IHR5cGVvZiB2YWx1ZSA9PT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHJlcXVlc3QucGFyYW1zW2tleV07Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09
IHR5cGVOYW1lKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29s
IEVycm9yOiBJbnZhbGlkIHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9k
ICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAi
JyBidXQgaXQgaXMgJyIgKyB0eXBlb2YgdmFsdWUgKyAiJy4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHJlcXVlc3Qu
cGFyYW1zW2tleV0gPSB2YWx1ZTsKLSAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFoYXNQYXJhbXMpCi0gICAgICAgICAgICAg
ICAgZGVsZXRlIHJlcXVlc3QucGFyYW1zOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFyZ3Mu
bGVuZ3RoID09PSAxICYmICFjYWxsYmFjaykgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdz
WzBdICE9PSAidW5kZWZpbmVkIikgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b3RvY29sIEVycm9yOiBPcHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsg
YWdlbnRNZXRob2QgKyAiJyBjYWxsIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMg
JyIgKyB0eXBlb2YgYXJnc1swXSArICInLiIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNl
bmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKLSAgICB9LAotCi0gICAgX3dyYXBD
YWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxi
YWNrKTsKLQotICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7Ci0gICAg
ICAgICAgICB2YXIgd3JhcHBlZENhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmpl
Y3QuaWRdOwotICAgICAgICAgICAgd3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdl
T2JqZWN0Lm1ldGhvZDsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRp
bWUgPSBEYXRlLm5vdygpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclByb3RvY29sTWVzc2FnZXMpCi0gICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6
ICIgKyBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KSk7Ci0KLSAgICAgICAgKyt0aGlzLl9w
ZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0Jh
Y2tlbmQobWVzc2FnZU9iamVjdCk7Ci0gICAgfSwKLQotICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9C
YWNrZW5kOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29sZS50
aW1lU3RhbXAobWVzc2FnZU9iamVjdC5tZXRob2QpOwotICAgICAgICB2YXIgbWVzc2FnZSA9IEpT
T04uc3RyaW5naWZ5KG1lc3NhZ2VPYmplY3QpOwotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhv
c3Quc2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2FnZSk7Ci0gICAgfSwKLQotICAgIF9yZWdpc3Rl
ckRvbWFpbkRpc3BhdGNoZXI6IGZ1bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOwotICAg
IH0sCi0KLSAgICBkaXNwYXRjaDogZnVuY3Rpb24obWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29s
ZS5sb2coImJhY2tlbmQ6ICIgKyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNz
YWdlIDogSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpKTsKLQotICAgICAgICB2YXIgbWVzc2FnZU9i
amVjdCA9ICh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdl
KSA6IG1lc3NhZ2U7Ci0KLSAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBq
dXN0IGEgcmVzcG9uc2UgZm9yIHNvbWUgcmVxdWVzdAotICAgICAgICAgICAgaWYgKG1lc3NhZ2VP
YmplY3QuZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJv
dG9fXyA9IHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRo
aXMuY29kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1
cm4gIlBhcnNlIGVycm9yIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYw
MDogcmV0dXJuICJJbnZhbGlkIFJlcXVlc3QiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgLTMyNjAxOiByZXR1cm4gIk1ldGhvZCBub3QgZm91bmQiOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgLTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJv
ciI7OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNl
cnZlciBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0sCi0KLSAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9u
ID0iVW5rbm93biBlcnJvciBjb2RlIjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLmdldERlc2NyaXB0aW9uKCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVz
c2FnZSArICIuIiArICh0aGlzLmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIp
OwotICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIGdldE1lc3Nh
Z2U6IGZ1bmN0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNv
ZGUgIT09IC0zMjAwMCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVy
cm9yKG1lc3NhZ2VPYmplY3QpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgYXJn
dW1lbnRzID0gW107Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0p
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxs
YmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKLSAgICAgICAgICAgICAgICBp
ZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCi0g
ICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0g
ICAgICAgICAgICAgICAgYXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7Ci0g
ICAgICAgICAgICAgICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKLSAgICAgICAg
ICAgICAgICAtLXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKLSAgICAgICAgICAgICAgICBk
ZWxldGUgdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwotCi0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1l
KQotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxi
YWNrLm1ldGhvZE5hbWUgKyAiID0gIiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2su
c2VuZFJlcXVlc3RUaW1lKSArICIgKyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRU
aW1lKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYm
ICF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpCi0gICAgICAgICAgICAgICAgdGhpcy5ydW5B
ZnRlclBlbmRpbmdEaXNwYXRjaGVzKCk7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5z
cGxpdCgiLiIpOwotICAgICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07Ci0gICAg
ICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOwotICAgICAgICAgICAgaWYgKCEo
ZG9tYWluTmFtZSBpbiB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKLSAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1l
eGlzdGluZyBkb21haW4gJyIgKyBkb21haW5OYW1lICsgIiciKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMu
X2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbk5hbWVdOwotICAgICAgICAgICAgaWYgKCEoZnVuY3Rp
b25OYW1lIGluIGRpc3BhdGNoZXIpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
UHJvdG9jb2wgRXJyb3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1l
dGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdz
W21lc3NhZ2VPYmplY3QubWV0aG9kXSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3Io
IlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0
aG9kICciICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOwotICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IHBhcmFtTmFtZXMgPSB0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFy
YW1OYW1lc1tpXV0pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2YXIgcHJvY2Vzc2lu
Z1N0YXJ0VGltZTsKLSAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMp
Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLSAg
ICAgICAgICAgIGRpc3BhdGNoZXJbZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJh
bXMpOwotCi0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAg
ICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5t
ZXRob2QgKyAiID0gIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwotICAg
ICAgICB9Ci0gICAgfSwKLQotICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3Nh
Z2VPYmplY3QpCi0gICAgewotICAgICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQg
PSAiICsgbWVzc2FnZU9iamVjdC5pZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJv
cik7Ci0gICAgfSwKLQotICAgIHJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNj
cmlwdCkKLSAgICB7Ci0gICAgICAgIGlmICghdGhpcy5fc2NyaXB0cykKLSAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMgPSBbXTsKLQotICAgICAgICBpZiAoc2NyaXB0KQotICAgICAgICAgICAgdGhp
cy5fc2NyaXB0cy5wdXNoKHNjcmlwdCk7Ci0KLSAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVz
cG9uc2VzQ291bnQpIHsKLSAgICAgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsK
LSAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMgPSBbXQotICAgICAgICAgICAgZm9yICh2YXIgaWQg
PSAwOyBpZCA8IHNjcmlwdHMubGVuZ3RoOyArK2lkKQotICAgICAgICAgICAgICAgICBzY3JpcHRz
W2lkXS5jYWxsKHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbnNwZWN0b3JCYWNrZW5k
ID0gbmV3IEluc3BlY3RvckJhY2tlbmRTdHViKCk7Ci0KLUVPRgotICAgIHJldHVybiBzcGxpdCgi
XG4iLCAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUhlYWRlcgot
ewotICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKLSAgICBteSAkY2xhc3NEZWNsYXJhdGlvbiA9
IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNoaWZ0OwotICAgIG15ICRjb25zdHJ1Y3RvciA9IHNo
aWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0
OwotICAgIG15ICRmb290ZXIgPSBzaGlmdDsKLQotICAgIG15ICRmb3J3YXJkSGVhZGVycyA9IGpv
aW4oIlxuIiwgc29ydChtYXAoIiNpbmNsdWRlIDwiIC4gdHlwZVRyYWl0cygkXywgImZvcndhcmRI
ZWFkZXIiKSAuICI+IiwgZ3JlcCh0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZEhlYWRlciIpLCBrZXlz
ICV7JHR5cGVzfSkpKSk7Ci0gICAgbXkgJGZvcndhcmREZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIs
IHNvcnQobWFwKCJjbGFzcyAiIC4gdHlwZVRyYWl0cygkXywgImZvcndhcmQiKSAuICI7IiwgZ3Jl
cCh0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZCIpLCBrZXlzICV7JHR5cGVzfSkpKSk7Ci0gICAgbXkg
JGNvbnN0YW50RGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBAeyRjb25zdGFudHN9KTsKLSAgICBt
eSAkbWV0aG9kc0RlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskbWV0aG9kc30pOwotCi0gICAg
bXkgJGhlYWRlckJvZHkgPSA8PCAiRU9GIjsKLS8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0jaWZuZGVmICR7Y2xhc3NOYW1lfV9oCi0jZGVm
aW5lICR7Y2xhc3NOYW1lfV9oCi0KLSR7Zm9yd2FyZEhlYWRlcnN9Ci0KLW5hbWVzcGFjZSAkbmFt
ZXNwYWNlIHsKLQotJGZvcndhcmREZWNsYXJhdGlvbnMKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KLWNsYXNzICRjbGFzc0RlY2xhcmF0aW9uIHsKLXB1YmxpYzoKLSRjb25zdHJ1Y3Rv
cgotCi0kY29uc3RhbnREZWNsYXJhdGlvbnMKLSRtZXRob2RzRGVjbGFyYXRpb25zCi0KLSRmb290
ZXIKLX07Ci0KLX0gLy8gbmFtZXNwYWNlICRuYW1lc3BhY2UKLSNlbmRpZiAvLyAhZGVmaW5lZCgk
e2NsYXNzTmFtZX1faCkKLQotRU9GCi0gICAgcmV0dXJuICRoZWFkZXJCb2R5OwotfQotCi1zdWIg
Z2VuZXJhdGVTb3VyY2UKLXsKLSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJHR5
cGVzID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0YW50cyA9IHNoaWZ0OwotICAgIG15ICRtZXRob2Rz
ID0gc2hpZnQ7Ci0KLSAgICBteSBAc291cmNlQ29udGVudCA9IHNwbGl0KCJcciIsICRsaWNlbnNl
VGVtcGxhdGUpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICJcbiNpbmNsdWRlIFwiY29uZmln
LmhcIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSBcIiRjbGFzc05hbWUu
aFwiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4iKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4iKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChA
c291cmNlQ29udGVudCwgIiNpZiBFTkFCTEUoSU5TUEVDVE9SKSIpOwotICAgIHB1c2goQHNvdXJj
ZUNvbnRlbnQsICIiKTsKLQotICAgIG15ICVoZWFkZXJzOwotICAgIGZvcmVhY2ggbXkgJHR5cGUg
KGtleXMgJXskdHlwZXN9KSB7Ci0gICAgICAgICRoZWFkZXJzeyIjaW5jbHVkZSBcIiIgLiB0eXBl
VHJhaXRzKCR0eXBlLCAiaGVhZGVyIikgLiAiXCIifSA9IDEgaWYgIXR5cGVUcmFpdHMoJHR5cGUs
ICJoZWFkZXIiKSBlcSAgIiI7Ci0gICAgfQotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIHNvcnQg
a2V5cyAlaGVhZGVycyk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2go
QHNvdXJjZUNvbnRlbnQsICJuYW1lc3BhY2UgJG5hbWVzcGFjZSB7Iik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIGpvaW4oIlxuIiwgQHsk
Y29uc3RhbnRzfSkpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBz
b3VyY2VDb250ZW50LCBAeyRtZXRob2RzfSk7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIp
OwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICJ9IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlIik7
Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQs
ICIjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiIik7Ci0gICAgcmV0dXJuIEBzb3VyY2VDb250ZW50OwotfQotCi1zdWIgdHlwZVRyYWl0cwot
ewotICAgIG15ICR0eXBlID0gc2hpZnQ7Ci0gICAgbXkgJHRyYWl0ID0gc2hpZnQ7Ci0gICAgcmV0
dXJuICR0eXBlVHJhbnNmb3JteyR0eXBlfS0+eyR0cmFpdH07Ci19Ci0KLXN1YiBwYXJhbVR5cGVU
cmFpdHMKLXsKLSAgICBteSAkcGFyYW1EZXNjcmlwdGlvbiA9IHNoaWZ0OwotICAgIG15ICR0cmFp
dCA9IHNoaWZ0OwotICAgIGlmICgkcGFyYW1EZXNjcmlwdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57Im9wdGlvbmFsIn0pIHsKLSAgICAgICAgbXkgJG9wdGlvbmFsUmVzdWx0ID0gdHlwZVRyYWl0
cygkcGFyYW1EZXNjcmlwdGlvbi0+dHlwZSwgIm9wdGlvbmFsXyIgLiAkdHJhaXQpOwotICAgICAg
ICByZXR1cm4gJG9wdGlvbmFsUmVzdWx0IGlmIGRlZmluZWQgJG9wdGlvbmFsUmVzdWx0OwotICAg
IH0KLSAgICBteSAkcmVzdWx0ID0gdHlwZVRyYWl0cygkcGFyYW1EZXNjcmlwdGlvbi0+dHlwZSwg
JHRyYWl0KTsKLSAgICByZXR1cm4gZGVmaW5lZCAkcmVzdWx0ID8gJHJlc3VsdCA6ICIiOwotfQot
Ci1zdWIgZ2VuZXJhdGVCYWNrZW5kQWdlbnRGaWVsZHNBbmRDb25zdHJ1Y3RvcgotewotICAgIG15
IEBhcmd1bWVudHM7Ci0gICAgbXkgQGZpZWxkSW5pdGlhbGl6ZXJzOwotCi0gICAgcHVzaChAYXJn
dW1lbnRzLCAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwiKTsKLSAgICBwdXNoKEBmaWVsZEluaXRpYWxpemVycywgIiAgICAgICAgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChA
YmFja2VuZEZvb3RlciwgIiAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyIpOwotCi0gICAgZm9yZWFjaCBteSAkZG9tYWluIChzb3J0IGtleXMg
JWJhY2tlbmREb21haW5zKSB7Ci0gICAgICAgICMgQWRkIGFnZW50IGZpZWxkIGRlY2xhcmF0aW9u
IHRvIHRoZSBmb290ZXIuCi0gICAgICAgIG15ICRhZ2VudENsYXNzTmFtZSA9IHR5cGVUcmFpdHMo
JGRvbWFpbiwgImZvcndhcmQiKTsKLSAgICAgICAgbXkgJGZpZWxkID0gdHlwZVRyYWl0cygkZG9t
YWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEZvb3RlciwgIiAg
ICAke2FnZW50Q2xhc3NOYW1lfSogJHtmaWVsZH07Iik7Ci0KLSAgICAgICAgIyBBZGQgYWdlbnQg
cGFyYW1ldGVyIGFuZCBpbml0aWFsaXplci4KLSAgICAgICAgbXkgJGFyZyA9IHN1YnN0cigkZmll
bGQsIDIpOwotICAgICAgICBwdXNoKEBmaWVsZEluaXRpYWxpemVycywgIiAgICAgICAgLCAke2Zp
ZWxkfSgke2FyZ30pIik7Ci0gICAgICAgIHB1c2goQGFyZ3VtZW50cywgIiR7YWdlbnRDbGFzc05h
bWV9KiAke2FyZ30iKTsKLSAgICB9Ci0KLSAgICBteSAkYXJndW1lbnRTdHJpbmcgPSBqb2luKCIs
ICIsIEBhcmd1bWVudHMpOwotCi0gICAgbXkgQGJhY2tlbmRIZWFkOwotICAgIHB1c2goQGJhY2tl
bmRIZWFkLCAiICAgICR7YmFja2VuZENsYXNzTmFtZX0oJHthcmd1bWVudFN0cmluZ30pIik7Ci0g
ICAgcHVzaChAYmFja2VuZEhlYWQsIEBmaWVsZEluaXRpYWxpemVycyk7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgeyB9Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIiKTsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIGNsZWFyRnJvbnRlbmQoKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gMDsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0g
ICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBDb21tb25FcnJvckNvZGUgeyIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBQYXJzZUVycm9yID0gMCwiKTsKLSAgICBwdXNo
KEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFJlcXVlc3QsIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgICAgIE1ldGhvZE5vdEZvdW5kLCIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgICAgICBJbnZhbGlkUGFyYW1zLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAi
ICAgICAgICBJbnRlcm5hbEVycm9yLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAg
ICBTZXJ2ZXJFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgTGFzdEVu
dHJ5LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIH07Iik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB2b2lkIHJlcG9ydFBy
b3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElk
LCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdDsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Iik7Ci0gICAgcHVzaChA
YmFja2VuZEhlYWQsICIgICAgc3RhdGljIGJvb2wgZ2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCk7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIi
KTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBlbnVtIE1ldGhvZE5hbWVzIHsiKTsKLSAg
ICAkYmFja2VuZENvbnN0cnVjdG9yID0gam9pbigiXG4iLCBAYmFja2VuZEhlYWQpOwotfQotCi1z
dWIgZmluaXNoCi17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotCi0gICAgcHVzaChAYmFja2Vu
ZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyKCkpOwotICAgIHB1c2goQGJh
Y2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kU2VuZFJlc3BvbnNlKCkpOwotICAgIHB1
c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kUmVwb3J0UHJvdG9jb2xFcnJv
cigpKTsKLSAgICB1bnNoaWZ0KEBmcm9udGVuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUZyb250ZW5k
Q29uc3RydWN0b3JJbXBsKCksICIiKTsKLQotICAgIG9wZW4obXkgJFNPVVJDRSwgIj4kb3V0cHV0
RGlyLyRmcm9udGVuZENsYXNzTmFtZS5jcHAiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAk
b3V0cHV0RGlyLyRmcm9udGVuZENsYXNzTmFtZS5jcHAiOwotICAgIHByaW50ICRTT1VSQ0Ugam9p
bigiXG4iLCBnZW5lcmF0ZVNvdXJjZSgkZnJvbnRlbmRDbGFzc05hbWUsIFwlZnJvbnRlbmRUeXBl
cywgXEBmcm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzSW1wbCkp
OwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3Blbiht
eSAkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIikgfHwg
ZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGZyb250ZW5kQ2xhc3NO
YW1lLmgiOwotICAgIHByaW50ICRIRUFERVIgZ2VuZXJhdGVIZWFkZXIoJGZyb250ZW5kQ2xhc3NO
YW1lLCAkZnJvbnRlbmRDbGFzc05hbWUsIFwlZnJvbnRlbmRUeXBlcywgJGZyb250ZW5kQ29uc3Ry
dWN0b3IsIFxAZnJvbnRlbmRDb25zdGFudERlY2xhcmF0aW9ucywgXEBmcm9udGVuZE1ldGhvZHMs
IGpvaW4oIlxuIiwgQGZyb250ZW5kRm9vdGVyKSk7Ci0gICAgY2xvc2UoJEhFQURFUik7Ci0gICAg
dW5kZWYoJEhFQURFUik7Ci0KLSAgICB1bnNoaWZ0KEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9u
cywgImNvbnN0IGNoYXIqIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kTmFtZXNb
XSA9IHsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgIn07Iik7Ci0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICIiKTsKLQotICAgICMgTWFrZSBk
aXNwYXRjaGVyIG1ldGhvZHMgcHJpdmF0ZSBvbiB0aGUgYmFja2VuZC4KLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICJ9OyIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFu
dERlY2xhcmF0aW9ucywgIiIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9u
cywgIiAgICBzdGF0aWMgY29uc3QgY2hhciogY29tbWFuZE5hbWVzW107Iik7ICAgIAotICAgIHB1
c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiIpOwotICAgIHB1c2goQGJhY2tlbmRD
b25zdGFudERlY2xhcmF0aW9ucywgInByaXZhdGU6Iik7Ci0KLSAgICBmb3JlYWNoIG15ICR0eXBl
IChrZXlzICViYWNrZW5kVHlwZXMpIHsKLSAgICAgICAgaWYgKHR5cGVUcmFpdHMoJHR5cGUsICJK
U09OVHlwZSIpKSB7Ci0gICAgICAgICAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVy
YXRlQXJndW1lbnRHZXR0ZXJzKCR0eXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdXNo
KEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9u
ZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsiKTsKLQotICAgIGdlbmVyYXRlQmFja2Vu
ZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IoKTsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kTWVzc2FnZVBhcnNlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5k
TWV0aG9kc0ltcGwsICIiKTsKLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9u
cywgIiIpOwotCi0gICAgb3BlbigkU09VUkNFLCAiPiRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05h
bWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kYmFja2VuZENs
YXNzTmFtZS5jcHAiOwotICAgIHByaW50ICRTT1VSQ0Ugam9pbigiXG4iLCBnZW5lcmF0ZVNvdXJj
ZSgkYmFja2VuZENsYXNzTmFtZSwgXCViYWNrZW5kVHlwZXMsIFxAYmFja2VuZENvbnN0YW50RGVm
aW5pdGlvbnMsIFxAYmFja2VuZE1ldGhvZHNJbXBsKSk7Ci0gICAgY2xvc2UoJFNPVVJDRSk7Ci0g
ICAgdW5kZWYoJFNPVVJDRSk7Ci0KLSAgICBvcGVuKCRIRUFERVIsICI+JG91dHB1dEhlYWRlcnNE
aXIvJGJhY2tlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRw
dXRIZWFkZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgiOwotICAgIHByaW50ICRIRUFERVIgam9p
bigiXG4iLCBnZW5lcmF0ZUhlYWRlcigkYmFja2VuZENsYXNzTmFtZSwgJGJhY2tlbmRDbGFzc0Rl
Y2xhcmF0aW9uLCBcJWJhY2tlbmRUeXBlcywgJGJhY2tlbmRDb25zdHJ1Y3RvciwgXEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsIFxAYmFja2VuZE1ldGhvZHMsIGpvaW4oIlxuIiwgQGJhY2tl
bmRGb290ZXIpKSk7Ci0gICAgY2xvc2UoJEhFQURFUik7Ci0gICAgdW5kZWYoJEhFQURFUik7Ci0K
LSAgICBvcGVuKG15ICRKU19TVFVCLCAiPiRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpz
IikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kYmFja2VuZEpTU3R1Yk5h
bWUuanMiOwotICAgIHByaW50ICRKU19TVFVCIGpvaW4oIlxuIiwgZ2VuZXJhdGVCYWNrZW5kU3R1
YkpTKCkpOwotICAgIGNsb3NlKCRKU19TVFVCKTsKLSAgICB1bmRlZigkSlNfU1RVQik7Ci19Ci0K
LTE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI3NDJhMmFmODVhOWUyY2QxOTA2ZDQxNjcyZWEyMTY4NjQ5ZjI5
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQpAQCAtMCwwICsxLDE0MjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3lzCitpbXBvcnQg
c3RyaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBqc29uCitmcm9tIHN0cmluZyBpbXBvcnQg
am9pbgorCitjbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcigpCitjbWRsaW5l
X3BhcnNlci5hZGRfb3B0aW9uKCItLWRlZmluZXMiKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlv
bigiLS1vdXRwdXRfaF9kaXIiKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRf
Y3BwX2RpciIpCisKK3RyeToKKyAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNtZGxpbmVf
cGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgIT0gMSk6CisgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiRXhhY3RseSBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQg
KGZvdW5kICVzKSIgJSBsZW4oYXJnX3ZhbHVlcykpCisgICAgaW5wdXRfanNvbl9maWxlbmFtZSA9
IGFyZ192YWx1ZXNbMF0KKyAgICBvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5v
dXRwdXRfaF9kaXIKKyAgICBvdXRwdXRfY3BwX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5vdXRwdXRf
Y3BwX2RpcgorICAgIGlmIG5vdCBvdXRwdXRfaGVhZGVyX2Rpcm5hbWU6CisgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiT3V0cHV0IC5oIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAg
aWYgbm90IG91dHB1dF9jcHBfZGlybmFtZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRw
dXQgLmNwcCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorZXhjZXB0IEV4Y2VwdGlvbiwg
ZToKKyAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFy
Z3VtZW50czogJXNcblxuIiAlIGUpCisgICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6IDxzY3Jp
cHQ+IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIDxvdXRwdXRfaGVhZGVyX2Rpcj4gLS1v
dXRwdXRfY3BwX2RpciA8b3V0cHV0X2NwcF9kaXI+IFstLWRlZmluZXMgPGRlZmluZXMgc3RyaW5n
Pl1cbiIpCisgICAgZXhpdCgxKQorCisKK2RlZiBwYXJzZV9kZWZpbmVzKHN0cik6CisgICAgaWYg
bm90IHN0cjoKKyAgICAgICAgcmV0dXJuIHt9CisKKyAgICBpdGVtcyA9IHN0ci5zcGxpdCgpCisg
ICAgcmVzdWx0ID0ge30KKyAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgaWYgaXRlbVsw
XSA9PSAnIicgYW5kIGl0ZW1bLTFdID09ICciJyBhbmQgbGVuKGl0ZW0pID49IDI6CisgICAgICAg
ICAgICBpdGVtID0gaXRlbVsxOi0xXQorICAgICAgICBlcV9wb3MgPSBpdGVtLmZpbmQoIj0iKQor
ICAgICAgICBpZiBlcV9wb3MgPT0gLTE6CisgICAgICAgICAgICBrZXkgPSBpdGVtCisgICAgICAg
ICAgICB2YWx1ZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGtleSA9IGl0ZW1b
OmVxX3Bvc10KKyAgICAgICAgICAgIHZhbHVlX3N0ciA9IGl0ZW1bZXFfcG9zICsgMTpdCisgICAg
ICAgICAgICBpZiB2YWx1ZV9zdHIgPT0gIjAiOgorICAgICAgICAgICAgICAgIHZhbHVlID0gRmFs
c2UKKyAgICAgICAgICAgIGVsaWYgdmFsdWVfc3RyID09ICIxIjoKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTaG91bGQg
d2Ugc3VwcG9ydCBvdGhlciB2YWx1ZXM/CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJVbnJlY29nbml6ZWQgZGVmaW5lIHZhbHVlOiAnJXMnIChrZXk6ICclcycpIiAlICh2YWx1ZV9z
dHIsIGtleSkpCisgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUKKyAgICByZXR1cm4gcmVzdWx0
CisKK2RlZmluZXNfbWFwID0gcGFyc2VfZGVmaW5lcyhhcmdfb3B0aW9ucy5kZWZpbmVzKQorCisK
K2NsYXNzIERvbWFpbk5hbWVGaXhlczoKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2Zp
eGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6CisgICAgICAgIGlmIGRvbWFpbl9uYW1lIGluIGNs
cy5hZ2VudF90eXBlX21hcDoKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gY2xzLmFnZW50
X3R5cGVfbWFwW2RvbWFpbl9uYW1lXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWdlbnRf
bmFtZV9yZXMgPSAiSW5zcGVjdG9yJXNBZ2VudCIgJSBkb21haW5fbmFtZQorCisgICAgICAgIGlm
IGRvbWFpbl9uYW1lIGluIGNscy5hZ2VudF9maWVsZF9uYW1lX21hcDoKKyAgICAgICAgICAgIGZp
ZWxkX25hbWVfcmVzID0gY2xzLmFnZW50X2ZpZWxkX25hbWVfbWFwW2RvbWFpbl9uYW1lXQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRfbmFtZV9yZXMgPSBkb21haW5fbmFtZS5sb3dl
cigpICsgIkFnZW50IgorCisgICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgorICAgICAgICAgICAg
YWdlbnRfdHlwZV9uYW1lID0gYWdlbnRfbmFtZV9yZXMKKyAgICAgICAgICAgIGhpZGRlbiA9IGRv
bWFpbl9uYW1lIGluIGNscy5oaWRkZW5fZG9tYWlucworICAgICAgICAgICAgc2tpcF9qc19iaW5k
ID0gZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCisgICAgICAgICAgICBh
Z2VudF9maWVsZF9uYW1lID0gZmllbGRfbmFtZV9yZXMKKworICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgZGVmIGlzX2Rpc2FibGVkKGRlZmluZXMpOgorICAgICAgICAgICAg
ICAgIGlmIG5vdCBkb21haW5fbmFtZSBpbiBjbHMuZG9tYWluX2RlZmluZV9uYW1lX21hcDoKKyAg
ICAgICAgICAgICAgICAgICAgIyBIYXMgbm90IGNvcnJlc3BvbmRpbmcgcHJlcHJvY2Vzc29yIHN5
bWJvbC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICAg
ICBkZWZpbmVfbmFtZSA9IGNscy5kb21haW5fZGVmaW5lX25hbWVfbWFwW2RvbWFpbl9uYW1lXQor
CisgICAgICAgICAgICAgICAgaWYgbm90IGRlZmluZV9uYW1lIGluIGRlZmluZXM6CisgICAgICAg
ICAgICAgICAgICAgICMgRGlzYWJsZWQgd2hlbiBub3QgbWVudGlvbmVkCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgICAgICBkZWZpbmVfdmFsdWUgPSBkZWZp
bmVzW2RlZmluZV9uYW1lXQorICAgICAgICAgICAgICAgIHJldHVybiBub3QgYm9vbChkZWZpbmVf
dmFsdWUpCisKKyAgICAgICAgcmV0dXJuIFJlcworCisgICAgc2tpcF9qc19iaW5kX2RvbWFpbnMg
PSBzZXQoWyJSdW50aW1lIiwgIkNTUyIsICJET01EZWJ1Z2dlciJdKQorICAgIGhpZGRlbl9kb21h
aW5zID0gc2V0KFsiSW5zcGVjdG9yIl0pCisgICAgYWdlbnRfdHlwZV9tYXAgPSB7Ik5ldHdvcmsi
OiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCJ9CisKKyAgICAjIFRPRE86IGdldCByaWQgb2YgdGhp
cywgZ2VuZXJhdGUgbmFtZXMgaW5zdGVhZC4KKyAgICBhZ2VudF9maWVsZF9uYW1lX21hcCA9IHsK
KyAgICAgICAgIlBhZ2UiOiAicGFnZUFnZW50IiwKKyAgICAgICAgIlJ1bnRpbWUiOiAicnVudGlt
ZUFnZW50IiwKKyAgICAgICAgIkNvbnNvbGUiOiAiY29uc29sZUFnZW50IiwKKyAgICAgICAgIk5l
dHdvcmsiOiAgInJlc291cmNlQWdlbnQiLAorICAgICAgICAiRGF0YWJhc2UiOiAgImRhdGFiYXNl
QWdlbnQiLAorICAgICAgICAiRE9NU3RvcmFnZSI6ICAiZG9tU3RvcmFnZUFnZW50IiwKKyAgICAg
ICAgIkFwcGxpY2F0aW9uQ2FjaGUiOiAgImFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCisgICAgICAg
ICJET00iOiAgImRvbUFnZW50IiwKKyAgICAgICAgIkNTUyI6ICAiY3NzQWdlbnQiLAorICAgICAg
ICAiRGVidWdnZXIiOiAiZGVidWdnZXJBZ2VudCIsCisgICAgICAgICJET01EZWJ1Z2dlciI6ICJk
b21EZWJ1Z2dlckFnZW50IiwKKyAgICAgICAgIlByb2ZpbGVyIjogInByb2ZpbGVyQWdlbnQiLAor
ICAgICAgICAiV29ya2VyIjogIndvcmtlckFnZW50IiwKKyAgICB9CisKKyAgICBkb21haW5fZGVm
aW5lX25hbWVfbWFwID0geworICAgICAgICAiRGF0YWJhc2UiOiAiRU5BQkxFX1NRTF9EQVRBQkFT
RSIsCisgICAgICAgICJET01TdG9yYWdlIjogIkVOQUJMRV9ET01fU1RPUkFHRSIsCisgICAgICAg
ICJEZWJ1Z2dlciI6ICJFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiIsCisgICAgICAgICJET01E
ZWJ1Z2dlciI6ICJFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiIsCisgICAgICAgICJQcm9maWxl
ciI6ICJFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUiIsCisgICAgICAgICJXb3JrZXIiOiAiRU5B
QkxFX1dPUktFUlMiLAorICAgIH0KKworCitjbGFzcyBDUGFyYW1UeXBlKG9iamVjdCk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHR5cGUsIHNldHRlcl9mb3JtYXQ9IiVzIik6CisgICAgICAgIHNl
bGYudHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5zZXR0ZXJfZm9ybWF0ID0gc2V0dGVyX2Zvcm1h
dAorCisgICAgZGVmIGdldF90ZXh0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50eXBlCisK
KyAgICBkZWYgZ2V0X3NldHRlcl9mb3JtYXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnNl
dHRlcl9mb3JtYXQKKworCitjbGFzcyBSYXdUeXBlcyhvYmplY3QpOgorICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgZ2V0KGpzb25fdHlwZSk6CisgICAgICAgIGlmIGpzb25fdHlwZSA9PSAiYm9v
bGVhbiI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQm9vbAorICAgICAgICBlbGlmIGpz
b25fdHlwZSA9PSAic3RyaW5nIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcK
KyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gImFycmF5IjoKKyAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5BcnJheQorICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAib2JqZWN0IjoKKyAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0g
ImludGVnZXIiOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAorICAgICAgICBlbGlm
IGpzb25fdHlwZSA9PSAibnVtYmVyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5OdW1i
ZXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0
eXBlOiAlcyIgJSBqc29uX3R5cGUpCisKKyAgICBjbGFzcyBCYXNlVHlwZShvYmplY3QpOgorICAg
ICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90
eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICByZXR1cm4gY2xzLmRlZmF1bHRfY19wYXJhbV90
eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hl
Y2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBjbGFzcyBTdHJp
bmcoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJh
bVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90
eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZf
Y190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Bs
YWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRl
ck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIgorCisgICAgICAgIGdldFNldHRl
ck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIlwiXCIiCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAg
ICAgcmV0dXJuICJzdHJpbmciCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUo
IlN0cmluZyIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgU3RyaW5n
JiIpCisKKyAgICBjbGFzcyBJbnQoQmFzZVR5cGUpOgorICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkludCIKKwor
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0ZXJOYW1lKCk6CisgICAg
ICAgICAgICByZXR1cm4gIk51bWJlciIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiMCIKKworICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAg
ICByZXR1cm4gIm51bWJlciIKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJh
bVR5cGUoImludCIpCisKKyAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgorICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1
cm4gIk9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRTZXR0
ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIk51bWJlciIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5z
dXBwb3J0ZWQiKQorCisgICAgICAgIGRlZmF1bHRfY19wYXJhbV90eXBlID0gQ1BhcmFtVHlwZSgi
ZG91YmxlIikKKworICAgIGNsYXNzIEJvb2woQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRo
b2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6
CisgICAgICAgICAgICBpZiAocGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQpOgorICAgICAg
ICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9y
ZWZfY190eXBlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIKKwor
ICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJu
ICJmYWxzZSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRU
eXBlKCk6CisgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAg
ICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiYm9v
bCIpCisgICAgICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiY29uc3QgYm9vbCogY29uc3Qi
LCAiKiVzIikKKworICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21l
dGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFs
KToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJP
YmplY3QiCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAg
ICAgIHJldHVybiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4g
Im9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFy
YW1DaGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9w
bGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisgICAg
ICAgIF9yZWZfY190eXBlID0gQ1BhcmFtVHlwZSgiUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IikKKworICAgIGNsYXNzIEFycmF5KEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAg
ICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuT1VUUFVUOgorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxpZiBwYXJhbV90eXBl
ID09IFBhcmFtVHlwZS5JTlBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9j
X3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVm
X2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5h
bWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQXJyYXkiCisKKyAgICAgICAgZ2V0U2V0dGVyTmFt
ZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5
cGUoKToKKyAgICAgICAgICAgIHJldHVybiAib2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoIlJlZlB0
cjxJbnNwZWN0b3JBcnJheT4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKworCitjbGFzcyBQYXJhbVR5cGUob2JqZWN0KToK
KyAgICBJTlBVVCA9ICJpbnB1dCIKKyAgICBPVVRQVVQgPSAib3V0cHV0IgorICAgIEVWRU5UID0g
ImV2ZW50IgorCisKK2NsYXNzIFR5cGVEYXRhKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGpzb25fdHlwZSwganNvbl9kb21haW4pOgorICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBq
c29uX3R5cGUKKyAgICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29uX2RvbWFpbgorCisgICAg
ICAgIGlmICJ0eXBlIiBpbiBqc29uX3R5cGU6CisgICAgICAgICAgICBqc29uX3R5cGVfbmFtZSA9
IGpzb25fdHlwZVsidHlwZSJdCisgICAgICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChq
c29uX3R5cGVfbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiVW5rbm93biB0eXBlIikKKyAgICAgICAgc2VsZi5yYXdfdHlwZV8gPSByYXdfdHlwZQorCisg
ICAgZGVmIGdldFJhd1R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXwor
CisKK2NsYXNzIFR5cGVNYXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSk6CisgICAgICAg
IHNlbGYubWFwXyA9IHt9CisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMi
XToKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisKKyAg
ICAgICAgICAgIGRvbWFpbl9tYXAgPSB7fQorICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFpbl9u
YW1lXSA9IGRvbWFpbl9tYXAKKworICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFp
bjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJd
OgorICAgICAgICAgICAgICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFp
bikKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRh
CisKKyAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBlX25hbWVdCisKKworZGVmIHJlc29sdmVQ
YXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBpZiAi
JHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0
ZXJbIiRyZWYiXQorICAgICAgICB0eXBlX2RhdGEgPSBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29w
ZV9kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuIHR5cGVfZGF0YS5nZXRSYXdUeXBlKCkKKyAg
ICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFtZXRlcjoKKyAgICAgICAganNvbl90eXBlID0ganNv
bl9wYXJhbWV0ZXJbInR5cGUiXQorICAgICAgICByZXR1cm4gUmF3VHlwZXMuZ2V0KGpzb25fdHlw
ZSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCisK
KworZGVmIGdldFJlZkRhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBkb3Rf
cG9zID0ganNvbl9yZWYuZmluZCgiLiIpCisgICAgaWYgZG90X3BvcyA9PSAtMToKKyAgICAgICAg
ZG9tYWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQorICAgICAgICB0eXBlX25hbWUgPSBqc29u
X3JlZgorICAgIGVsc2U6CisgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9wb3Nd
CisgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KKworICAgIHJldHVy
biB0eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKKworCitpbnB1dF9maWxlID0g
b3BlbihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCitqc29uX3N0cmluZyA9IGlucHV0X2ZpbGUu
cmVhZCgpCitqc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCisKKworY2xhc3MgVGVt
cGxhdGVzOgorICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgKKyIi
IiAgICBjbGFzcyAkZG9tYWluQ2xhc3NOYW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgICRkb21h
aW5DbGFzc05hbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IH0KKyR7ZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnN9ICAgICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyAgICB9OworCisgICAgJGRvbWFp
bkNsYXNzTmFtZSogJGRvbWFpbkZpZWxkTmFtZSgpIHsgcmV0dXJuICZtXyRkb21haW5GaWVsZE5h
bWU7IH0KKworIiIiKQorCisgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoCisi
IiJ2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRtZXRob2RO
YW1lKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisKKyAgICBpZiAoISRhZ2VudEZpZWxkKQorICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZygiJHtkb21haW5OYW1lfSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFi
bGUuIik7CiskbWV0aG9kT3V0Q29kZQorICAgIEVycm9yU3RyaW5nIGVycm9yOworJG1ldGhvZElu
Q29kZQoraWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgJGFnZW50RmllbGQtPiRt
ZXRob2ROYW1lKCZlcnJvciRhZ2VudENhbGxQYXJhbXMpOworCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7cmVzcG9uc2VD
b29rfXNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIkZG9tYWluTmFtZS4k
bWV0aG9kTmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOworfQorIiIiKQorCisgICAgZnJv
bnRlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKCIiInZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6
OiRkb21haW5OYW1lOjokZXZlbnROYW1lKCRwYXJhbWV0ZXJzKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+ICR7ZXZlbnROYW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICR7ZXZlbnROYW1lfU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIiRkb21h
aW5OYW1lLiRldmVudE5hbWUiKTsKKyRjb2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9G
cm9udGVuZCgke2V2ZW50TmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisiIiIpCisK
KyAgICBmcm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAx
MCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3RvckZy
b250ZW5kX2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRfaAorCisjaW5jbHVkZSA8UGxhdGZv
cm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgeworcHVibGljOgorICAgIEluc3BlY3Rv
ckZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOworCisKKyRkb21haW5DbGFzc0xp
c3QKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKKyR7ZmllbGREZWNsYXJhdGlvbnN9fTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCisiIiIpCisK
KyAgICBiYWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEw
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisK
KyNpbmNsdWRlIDxQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3Bl
Y3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworCiskZm9yd2FyZERl
Y2xhcmF0aW9ucworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyPiB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwkY29uc3RydWN0
b3JQYXJhbXMpCisgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5pdAorICAgIHsgfQorCisgICAgdm9pZCBj
bGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KKworICAg
IGVudW0gQ29tbW9uRXJyb3JDb2RlIHsKKyAgICAgICAgUGFyc2VFcnJvciA9IDAsCisgICAgICAg
IEludmFsaWRSZXF1ZXN0LAorICAgICAgICBNZXRob2ROb3RGb3VuZCwKKyAgICAgICAgSW52YWxp
ZFBhcmFtcywKKyAgICAgICAgSW50ZXJuYWxFcnJvciwKKyAgICAgICAgU2VydmVyRXJyb3IsCisg
ICAgICAgIExhc3RFbnRyeSwKKyAgICB9OworCisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9y
KGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSkgY29uc3Q7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0
IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisgICAgdm9p
ZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHN0YXRpYyBib29sIGdldENv
bW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOworCisgICAg
ZW51bSBNZXRob2ROYW1lcyB7CisKKyRlbnVtQ29uc3RhbnRzCit9OworCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZ2V0
SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFN0
cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAg
ICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3Qo
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZv
Y2F0aW9uRXJyb3IpOworCiskbWV0aG9kRGVjbGFyYXRpb25zCisKKyAgICBJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJGZpZWxkRGVjbGFyYXRp
b25zCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaCkKKworCisiIiIpCisKKyAgICBiYWNrZW5kX2NwcCA9
IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZh
bHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmgiCiskaW5jbHVkZXMKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
b25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7
CiskbWV0aG9kTmFtZURlY2xhcmF0aW9ucworfTsKKworCiskbWV0aG9kcwordm9pZCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7Cisg
ICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVy
KShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBjYWxs
SWQgPSAwOworCisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0
aWMgQ2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKKyRtZXNzYWdlSGFuZGxlcnMKKyAgICAgICAg
fTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihjb21tYW5kTmFtZXMpIC8gc2l6ZW9m
KGNvbW1hbmROYW1lc1swXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5k
bGVyc1tpXSk7CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNz
YWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXBhcnNl
ZE1lc3NhZ2UpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9yLCAi
TWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVz
c2FnZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpT
T05pZmllZCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7Cisg
ICAgaWYgKCFjYWxsSWRWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkg
eworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5
cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VP
YmplY3QtPmdldCgibWV0aG9kIik7CisgICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJv
cGVydHkgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJp
bmcgbWV0aG9kOworICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7Cisg
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJUaGUg
dHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3Ig
aXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFw
LmVuZCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90
Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVj
dC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNw
b25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCit7CisgICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKKyAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlv
bkVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
cmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CisgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKKyAgICBpZiAobV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5k
TWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21t
b25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChW
ZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOworICAgIGlmICghc19jb21tb25FcnJvcnMuc2l6
ZSgpKSB7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3MDAp
OworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7
CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsK
KyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7Cisg
ICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOworICAg
ICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7CisgICAgfQor
ICAgIEFTU0VSVChjb2RlID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19jb21t
b25FcnJvcnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0pOwor
ICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOworICAgIEFTU0VS
VChlcnJvcik7CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIs
IGRhdGEpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJvcik7
CisgICAgaWYgKGNhbGxJZCkKKyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpjYWxs
SWQpOworICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9y
VmFsdWU6Om51bGwoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAg
ICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworaW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAg
IEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAg
KnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAgIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAoIW9i
amVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVp
cmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0
IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2Jq
ZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRl
cmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBl
bmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAn
TnVtYmVyJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFz
TnVtYmVyKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnTnVt
YmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1
ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1
ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcoSW5z
cGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2Nv
bEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBm
YWxzZTsKKworICAgIFN0cmluZyB2YWx1ZSA9ICIiOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAg
ICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0
ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJv
cnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRh
aW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7
CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2Jq
ZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAg
ICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycgd2Fz
IG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
OworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFs
dWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAg
ICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK2Jv
b2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisK
KyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAg
IGJvb2wgdmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICgh
dmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Np
bmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVk
IHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQo
bmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5n
Ojpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicgd2FzIG5vdCBmb3Vu
ZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKSkKKyAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRl
ciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4iLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAg
ICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQg
PSBmYWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFs
dWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Npbmcg
cGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBh
cmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1l
KTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVl
Rm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnIHdhcyBub3QgZm91bmQuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKKyAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEo
KSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFs
dWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9y
cyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsK
KworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsK
KyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250
YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlm
ICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJ
dGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3Jz
LT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlw
ZS4gSXQgbXVzdCBiZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UK
KyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7
CisgICAgcmV0dXJuIHZhbHVlOworfQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNl
SlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFvYmpl
Y3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGZyb250ZW5kX2NwcCA9IHN0cmlu
Zy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KworCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiskY29uc3RydWN0b3JJbml0
eworfQorCiskbWV0aG9kcworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0
ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorCisKK0luc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMu
X2xhc3RDYWxsYmFja0lkID0gMTsKKyAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQgPSAw
OworICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OworICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJz
ID0ge307CisgICAgdGhpcy5fZXZlbnRBcmdzID0ge307CiskZGVsZWdhdGVzJGV2ZW50QXJncyRk
b21haW5EaXNwYXRjaGVycyAgICB9CisKK0luc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9
IHsKKyAgICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAorICAgIGR1bXBJbnNwZWN0b3JQcm90
b2NvbE1lc3NhZ2VzOiAwLAorCisgICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJhY2tJZCsrOworICAgICAg
ICB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9
OworICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRGVs
ZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgZG9tYWlu
QW5kRnVuY3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgiLiIp
OworICAgICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQi
OworICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQorICAgICAgICAgICAgd2luZG93W2Fn
ZW50TmFtZV0gPSB7fTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rp
b25bMV1dID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0U3Ry
aW5nKTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dWyJp
bnZva2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpCisgICAgfSwK
KworICAgIF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFyZ3MsIGNhbGxiYWNrKQor
ICAgIHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpOwor
ICAgICAgICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFj
a0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAg
X3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYXJn
cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZhciBy
ZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICB2YXIgY2FsbGJhY2sg
PSAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0
aW9uIikgPyBhcmdzLnBvcCgpIDogMDsKKyAgICAgICAgdmFyIGRvbWFpbkFuZE1ldGhvZCA9IHJl
cXVlc3QubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE1ldGhvZCA9IGRvbWFp
bkFuZE1ldGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9kWzFdOworCisgICAgICAg
IHZhciBoYXNQYXJhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7Cisg
ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5cGU7CisgICAgICAgICAg
ICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7CisK
KyAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbmFsRmxhZykg
eworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52
YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICIn
IGNhbGwuIEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lm
eShyZXF1ZXN0LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Muc2hp
ZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1ZSA9
PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFy
YW1zW2tleV07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlk
IHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRo
b2QgKyAiJyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIg
KyB0eXBlb2YgdmFsdWUgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1zW2tleV0gPSB2
YWx1ZTsKKyAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFoYXNQYXJhbXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVl
c3QucGFyYW1zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYm
ICFjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZp
bmVkIikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBP
cHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAi
JyBjYWxsIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIgKyB0eXBlb2YgYXJn
c1swXSArICInLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0
KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3dyYXBDYWxsYmFja0FuZFNlbmRN
ZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxsYmFjaykKKyAgICB7Cisg
ICAgICAgIG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxiYWNrKTsKKworICAgICAg
ICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7CisgICAgICAgICAgICB2YXIgd3Jh
cHBlZENhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAg
ICAgICAgd3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZDsK
KyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUgPSBEYXRlLm5vdygp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29sTWVz
c2FnZXMpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlT2JqZWN0KSk7CisKKyAgICAgICAgKyt0aGlzLl9wZW5kaW5nUmVzcG9uc2Vz
Q291bnQ7CisgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQobWVzc2FnZU9i
amVjdCk7CisgICAgfSwKKworICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kOiBmdW5jdGlv
bihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS50aW1lU3RhbXAobWVzc2Fn
ZU9iamVjdC5tZXRob2QpOworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG1l
c3NhZ2VPYmplY3QpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VU
b0JhY2tlbmQobWVzc2FnZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXI6IGZ1bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2Rv
bWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOworICAgIH0sCisKKyAgICBkaXNw
YXRjaDogZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNw
ZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImJhY2tlbmQ6
ICIgKyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNzYWdlIDogSlNPTi5zdHJp
bmdpZnkobWVzc2FnZSkpKTsKKworICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0eXBlb2Yg
bWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7CisK
KyAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBqdXN0IGEgcmVzcG9uc2Ug
Zm9yIHNvbWUgcmVxdWVzdAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJvdG9fXyA9IHsKKyAgICAg
ICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuY29kZSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1cm4gIlBhcnNlIGVycm9y
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMDogcmV0dXJuICJJbnZh
bGlkIFJlcXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAxOiBy
ZXR1cm4gIk1ldGhvZCBub3QgZm91bmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
c2UgLTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJvciI7OworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNlcnZlciBlcnJvciI7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAg
ICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0iVW5rbm93biBlcnJv
ciBjb2RlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0
aW9uKCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVzc2FnZSArICIuIiArICh0
aGlzLmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIpOworICAgICAgICAgICAg
ICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldE1lc3NhZ2U6IGZ1bmN0aW9uKCkK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMubWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkK
KyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmpl
Y3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107Cisg
ICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCisgICAgICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0pOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9i
amVjdC5pZF07CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2
YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5z
cGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAg
ICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgICAgICAgICAgICAg
YXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAtLXRoaXMu
X3BlbmRpbmdSZXNwb25zZXNDb3VudDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2Fs
bGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVt
cEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAgICAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxiYWNrLm1ldGhvZE5hbWUg
KyAiID0gIiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2suc2VuZFJlcXVlc3RUaW1l
KSArICIgKyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5kaW5n
UmVzcG9uc2VzQ291bnQpCisgICAgICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNw
YXRjaGVzKCk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAg
ICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07CisgICAgICAgICAgICB2YXIgZnVu
Y3Rpb25OYW1lID0gbWV0aG9kWzFdOworICAgICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBpbiB0
aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4g
JyIgKyBkb21haW5OYW1lICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3BhdGNo
ZXJzW2RvbWFpbk5hbWVdOworICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb25OYW1lIGluIGRpc3Bh
dGNoZXIpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6
IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1ldGhvZCAnIiArIG1lc3Nh
Z2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3Qu
bWV0aG9kXSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9y
OiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0aG9kICciICsgbWVzc2Fn
ZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgaWYgKG1l
c3NhZ2VPYmplY3QucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFtTmFtZXMgPSB0
aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOworICAgICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFyYW1OYW1lc1tpXV0pOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAg
ICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAgICAg
ICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgIGRpc3Bh
dGNoZXJbZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJhbXMpOworCisgICAgICAg
ICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiID0gIiAr
IChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAgICB9CisgICAgfSwK
KworICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAg
eworICAgICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2FnZU9i
amVjdC5pZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgfSwKKwor
ICAgIHJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNjcmlwdCkKKyAgICB7Cisg
ICAgICAgIGlmICghdGhpcy5fc2NyaXB0cykKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMgPSBb
XTsKKworICAgICAgICBpZiAoc2NyaXB0KQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cy5wdXNo
KHNjcmlwdCk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpIHsK
KyAgICAgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsKKyAgICAgICAgICAgIHRo
aXMuX3NjcmlwdHMgPSBbXQorICAgICAgICAgICAgZm9yICh2YXIgaWQgPSAwOyBpZCA8IHNjcmlw
dHMubGVuZ3RoOyArK2lkKQorICAgICAgICAgICAgICAgICBzY3JpcHRzW2lkXS5jYWxsKHRoaXMp
OworICAgICAgICB9CisgICAgfQorfQorCitJbnNwZWN0b3JCYWNrZW5kID0gbmV3IEluc3BlY3Rv
ckJhY2tlbmRTdHViKCk7IiIiKQorCisgICAgcGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlID0g
IiIiCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVz
dE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CisgICAgSW5zcGVjdG9yT2JqZWN0
KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisiIiIK
KworCit0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCisKKworY2xhc3MgR2VuZXJhdG9yOgor
ICAgIGZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzID0gW10KKyAgICBmcm9udGVuZF9kb21haW5f
Y2xhc3NfbGluZXMgPSBbXQorCisgICAgbWV0aG9kX25hbWVfZW51bV9saXN0ID0gW10KKyAgICBi
YWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9p
bXBsZW1lbnRhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0
aW9uX2xpc3QgPSBbXQorICAgIG1ldGhvZF9oYW5kbGVyX2xpc3QgPSBbXQorICAgIGZyb250ZW5k
X21ldGhvZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QgPSBbXQor
ICAgIGJhY2tlbmRfanNfZXZlbnRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19kb21haW5fZGlz
cGF0Y2hlcl9saXN0ID0gW10KKworICAgIGJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCA9
IFtdCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQorICAgIGJhY2tlbmRf
ZmllbGRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9mb3J3YXJkX2xpc3QgPSBbXQorICAgIGJhY2tl
bmRfaW5jbHVkZV9saXN0ID0gW10KKyAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3Qg
PSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnbygpOgorICAgICAgICBmb3IganNv
bl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9uYW1l
ID0ganNvbl9kb21haW5bImRvbWFpbiJdCisgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dlciA9
IGRvbWFpbl9uYW1lLmxvd2VyKCkKKworICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5O
YW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIGlmIGRv
bWFpbl9kYXRhLmlzX2Rpc2FibGVkKGRlZmluZXNfbWFwKToKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorCisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRf
ZmllbGRfbmFtZQorCisgICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlu
ZXMgPSBbXQorICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAgICAg
ICAgICAgICAgZm9yIGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5f
bmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQorCisgICAgICAgICAgICAg
ICAgR2VuZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLmFwcGVuZCgiICAgICVzIG1f
JXM7XG4iICUgKGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZV9sb3dlcikpCisgICAgICAgICAgICAg
ICAgR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdC5hcHBlbmQoIiAgICAs
IG1fJXMoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKVxuIiAlIGRvbWFpbl9uYW1lX2xvd2VyKQor
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMuYXBw
ZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9kb21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAorICAg
ICAgICAgICAgICAgICAgICBkb21haW5DbGFzc05hbWU9ZG9tYWluX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbkZpZWxkTmFtZT1kb21haW5fbmFtZV9sb3dlciwKKyAgICAgICAgICAg
ICAgICAgICAgZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnM9am9pbihmcm9udGVuZF9t
ZXRob2RfZGVjbGFyYXRpb25fbGluZXMsICIiKSkpCisgICAgICAgICAgICBpZiAiY29tbWFuZHMi
IGluIGpzb25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2NvbW1hbmQgaW4ganNv
bl9kb21haW5bImNvbW1hbmRzIl06CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9j
ZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkK
KworICAgICAgICAgICAgaWYgbm90IGRvbWFpbl9kYXRhLnNraXBfanNfYmluZDoKKyAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LmFwcGVu
ZCgiICAgIHRoaXMucmVnaXN0ZXIlc0Rpc3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRp
c3BhdGNoZXIuYmluZCh0aGlzLCBcIiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25h
bWUpKQorCisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMgPSBsaXN0KGpzb25fYXBpWyJkb21h
aW5zIl0pCisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMuc29ydChrZXk9bGFtYmRhIG86IG9b
ImRvbWFpbiJdKQorCisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBzb3J0ZWRfanNvbl9kb21h
aW5zOgorICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKwor
ICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEo
ZG9tYWluX25hbWUpCisgICAgICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZp
bmVzX21hcCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZG9t
YWluX2RhdGEuaGlkZGVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBh
Z2VudF90eXBlX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF90eXBlX25hbWUKKyAgICAgICAgICAg
IGFnZW50X2ZpZWxkX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF9maWVsZF9uYW1lCisgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LmFwcGVuZCgiLCAl
cyogJXMiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAgICAg
ICwgbV8lcyglcykiICUgKGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdC5hcHBlbmQoIiAgICAlcyogbV8l
czsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QuYXBwZW5kKCJjbGFzcyAlczsiICUgYWdlbnRf
dHlwZV9uYW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9saXN0LmFw
cGVuZCgiI2luY2x1ZGUgXCIlcy5oXCIiICUgYWdlbnRfdHlwZV9uYW1lKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBm
cm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICBldmVudF9uYW1lID0g
anNvbl9ldmVudFsibmFtZSJdCisgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gW10KKyAgICAgICAg
bWV0aG9kX2xpbmVfbGlzdCA9IFtdCisgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlz
dCA9IFtdCisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgorICAgICAgICAg
ICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKKyAgICAgICAgICAg
IGZvciBqc29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCisKKyAgICAg
ICAgICAgICAgICByYXdfdHlwZSA9IHJlc29sdmVQYXJhbVJhd1R5cGUoanNvbl9wYXJhbWV0ZXIs
IGRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICAgICAganNvbl9vcHRpb25hbCA9ICJvcHRpb25h
bCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdCisKKyAg
ICAgICAgICAgICAgICBvcHRpb25hbF9tYXNrID0gcmF3X3R5cGUuaXNFdmVudFBhcmFtQ2hlY2tP
cHRpb25hbCgpCisgICAgICAgICAgICAgICAgY190eXBlID0gcmF3X3R5cGUuZ2V0Q1BhcmFtVHlw
ZShQYXJhbVR5cGUuRVZFTlQsIGpzb25fb3B0aW9uYWwpCisKKyAgICAgICAgICAgICAgICBzZXR0
ZXJfdHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorCisgICAgICAgICAgICAgICAgb3B0
aW9uYWwgPSBvcHRpb25hbF9tYXNrIGFuZCBqc29uX29wdGlvbmFsCisKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAlIChjX3R5cGUuZ2V0X3RleHQoKSwgcGFy
YW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gY190eXBl
LmdldF9zZXR0ZXJfZm9ybWF0KCkgJSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICAgICAg
c2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+c2V0JXMoXCIlc1wiLCAlcyk7XG4iICUg
KHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3VtZW50KQorICAgICAgICAg
ICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9ICgi
ICAgIGlmICglcylcbiAgICAiICUgcGFyYW1ldGVyX25hbWUpICsgc2V0dGVyX2NvZGUKKyAgICAg
ICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZChzZXR0ZXJfY29kZSkKKworICAgICAg
ICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBw
YXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAg
JXNNZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTtcbiIgJSBldmVu
dF9uYW1lKQorICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMuYXBwZW5k
KAorICAgICAgICAgICAgIiAgICAgICAgdm9pZCAlcyglcyk7XG4iICUgKGV2ZW50X25hbWUsIGpv
aW4ocGFyYW1ldGVyX2xpc3QsICIsICIpKSkKKworICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRf
bWV0aG9kX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9tZXRob2Quc3Vic3RpdHV0ZShO
b25lLAorICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgZXZlbnROYW1lPWV2ZW50
X25hbWUsCisgICAgICAgICAgICBwYXJhbWV0ZXJzPWpvaW4ocGFyYW1ldGVyX2xpc3QsICIsICIp
LAorICAgICAgICAgICAgY29kZT1qb2luKG1ldGhvZF9saW5lX2xpc3QsICIiKSkpCisKKyAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZXZlbnRfbGlzdC5hcHBlbmQoIiAgICB0aGlzLl9ldmVu
dEFyZ3NbXCIlcy4lc1wiXSA9IFslc107XG4iICUgKAorICAgICAgICAgICAgZG9tYWluX25hbWUs
IGV2ZW50X25hbWUsIGpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LCAiLCAiKSkpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQs
IGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKKyAgICAgICAganNvbl9jb21tYW5kX25h
bWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQorICAgICAgICBHZW5lcmF0b3IubWV0aG9kX25hbWVf
ZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNfJXNDbWQsIiAlIChkb21haW5fbmFtZSwganNv
bl9jb21tYW5kWyJuYW1lIl0pKQorICAgICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlz
dC5hcHBlbmQoIiAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolc18lcywiICUg
KGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIHZvaWQgJXNfJXMobG9uZyBj
YWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyIgJSAoZG9tYWlu
X25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBtZXRob2RfaW5fY29kZSA9ICIi
CisgICAgICAgIG1ldGhvZF9vdXRfY29kZSA9ICIiCisgICAgICAgIGFnZW50X2NhbGxfcGFyYW1f
bGlzdCA9IFtdCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdCA9IFtdCisgICAgICAgIHJlcXVl
c3RfbWVzc2FnZV9wYXJhbSA9ICIiCisgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9ICIiCisg
ICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6CisgICAgICAgICAgICBqc29u
X3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCisgICAgICAgICAgICBtZXRob2Rf
aW5fY29kZSArPSBUZW1wbGF0ZXMucGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlCisgICAgICAg
ICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIHJlcXVlc3RNZXNzYWdlT2JqZWN0IgorICAg
ICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCisKKyAgICAgICAgICAgIGZvciBqc29uX3BhcmFt
ZXRlciBpbiBqc29uX3BhcmFtczoKKyAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25hbWUgPSBq
c29uX3BhcmFtZXRlclsibmFtZSJdCisgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSBy
ZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAg
ICAgICAgICAgIHZhcl90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0Q1BhcmFtVHlwZShQYXJhbVR5
cGUuSU5QVVQsIE5vbmUpCisgICAgICAgICAgICAgICAgZ2V0dGVyX25hbWUgPSBwYXJhbV9yYXdf
dHlwZS5nZXRHZXR0ZXJOYW1lKCkKKworICAgICAgICAgICAgICAgIGlmICJvcHRpb25hbCIgaW4g
anNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdOgorICAgICAgICAg
ICAgICAgICAgICBjb2RlID0gKCIgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0Nv
bnRhaW5lclB0ciwgXCIlc1wiLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xu
IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1lLCB2YXJfdHlw
ZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29uX3BhcmFtX25h
bWUsIGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNf
dmFsdWVGb3VuZCA/ICZpbl8lcyA6IDAiICUgKGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9u
YW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAo
IiAgICAlcyBpbl8lcyA9IGdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIlc1wiLCAwLCBwcm90
b2NvbEVycm9yc1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFyX3R5
cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9u
YW1lKSkKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCBpbl8lcyIgJSBqc29uX3BhcmFt
X25hbWUKKworICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9jb2RlICs9IGNvZGUKKyAgICAgICAg
ICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorCisgICAgICAgICAg
ICAgICAganNfYmluZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0SnNCaW5kVHlwZSgpCisgICAg
ICAgICAgICAgICAganNfcGFyYW1fdGV4dCA9ICJcIiVzXCI6IHtcIm9wdGlvbmFsXCI6ICVzLCBc
InR5cGVcIjogXCIlc1wifSIgJSAoCisgICAgICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgKCJ0cnVlIiBpZiAoIm9wdGlvbmFsIiBpbiBqc29uX3Bh
cmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl0pIGVsc2UgImZhbHNlIiksCisg
ICAgICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSkKKworICAgICAgICAgICAgICAgIGpzX3Bh
cmFtX2xpc3QuYXBwZW5kKGpzX3BhcmFtX3RleHQpCisKKyAgICAgICAgICAgIGpzX3BhcmFtZXRl
cnNfdGV4dCA9ICIsIFwicGFyYW1zXCI6IHsiICsgam9pbihqc19wYXJhbV9saXN0LCAiLCAiKSAr
ICJ9IgorCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCA9ICIiCisgICAgICAgIGlmICJyZXR1
cm5zIiBpbiBqc29uX2NvbW1hbmQ6CisgICAgICAgICAgICBtZXRob2Rfb3V0X2NvZGUgKz0gIlxu
IgorICAgICAgICAgICAgZm9yIGpzb25fcmV0dXJuIGluIGpzb25fY29tbWFuZFsicmV0dXJucyJd
OgorCisgICAgICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpzb25fcmV0dXJuWyJuYW1l
Il0KKyAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJlc29sdmVQYXJhbVJhd1R5cGUoanNvbl9y
ZXR1cm4sIGRvbWFpbl9uYW1lKQorICAgICAgICAgICAgICAgIHNldHRlcl90eXBlID0gcmF3X3R5
cGUuZ2V0U2V0dGVyTmFtZSgpCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSByYXdfdHlw
ZS5nZXRDSW5pdGlhbGl6ZXIoKQorICAgICAgICAgICAgICAgIHZhcl90eXBlID0gcmF3X3R5cGUu
Z2V0Q1BhcmFtVHlwZShQYXJhbVR5cGUuT1VUUFVULCBOb25lKQorCisgICAgICAgICAgICAgICAg
Y29kZSA9ICIgICAgJXMgb3V0XyVzID0gJXM7XG4iICUgKHZhcl90eXBlLmdldF90ZXh0KCksIGpz
b25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQorICAgICAgICAgICAgICAgIHBhcmFtID0gIiwg
Jm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCisgICAgICAgICAgICAgICAgY29vayA9ICIgICAg
ICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRfJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNv
bl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFtZSkKKyAgICAgICAgICAgICAgICBpZiB2YXJf
dHlwZS5nZXRfdGV4dCgpID09ICJib29sIiBhbmQgIm9wdGlvbmFsIiBpbiBqc29uX3JldHVybiBh
bmQganNvbl9yZXR1cm5bIm9wdGlvbmFsIl06CisgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAo
IiAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisK
KyAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X2NvZGUgKz0gY29kZQorICAgICAgICAgICAgICAg
IGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCisgICAgICAgICAgICAgICAgcmVz
cG9uc2VfY29va19saXN0LmFwcGVuZChjb29rKQorICAgICAgICAgICAgcmVzcG9uc2VfY29va190
ZXh0ID0gIiAgICBpZiAoIXByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3Ro
KCkpIHtcbiVzICAgIH1cbiIgJSBqb2luKHJlc3BvbnNlX2Nvb2tfbGlzdCwgIiIpCisKKyAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKFRl
bXBsYXRlcy5iYWNrZW5kX21ldGhvZC5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICBkb21h
aW5OYW1lPWRvbWFpbl9uYW1lLCBtZXRob2ROYW1lPWpzb25fY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgYWdlbnRGaWVsZD0ibV8iICsgYWdlbnRfZmllbGRfbmFtZSwKKyAgICAgICAgICAgIG1l
dGhvZEluQ29kZT1tZXRob2RfaW5fY29kZSwKKyAgICAgICAgICAgIG1ldGhvZE91dENvZGU9bWV0
aG9kX291dF9jb2RlLAorICAgICAgICAgICAgYWdlbnRDYWxsUGFyYW1zPWpvaW4oYWdlbnRfY2Fs
bF9wYXJhbV9saXN0LCAiIiksCisgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZU9iamVjdD1yZXF1
ZXN0X21lc3NhZ2VfcGFyYW0sCisgICAgICAgICAgICByZXNwb25zZUNvb2s9cmVzcG9uc2VfY29v
a190ZXh0KSkKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRp
b25fbGlzdC5hcHBlbmQoIiAgICBcIiVzLiVzXCIsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21t
YW5kX25hbWUpKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xp
c3QuYXBwZW5kKCIgICAgICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3tcIm1ldGhvZFwiOiBc
IiVzLiVzXCIlcywgXCJpZFwiOiAwfScpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5k
X25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCkpCisKKworR2VuZXJhdG9yLmdvKCkKKworYmFja2Vu
ZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCIsICJ3IikKK2JhY2tlbmRfY3BwX2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBf
ZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIiwgInciKQorCitmcm9u
dGVuZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVjdG9yRnJv
bnRlbmQuaCIsICJ3IikKK2Zyb250ZW5kX2NwcF9maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5h
bWUgKyAiL0luc3BlY3RvckZyb250ZW5kLmNwcCIsICJ3IikKKworYmFja2VuZF9qc19maWxlID0g
b3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInci
KQorCisKK2Zyb250ZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0
dXRlKE5vbmUsCisgICAgICAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5mcm9u
dGVuZF9jbGFzc19maWVsZF9saW5lcywgIiIpLAorICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpv
aW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcywgIiIpKSkKKworYmFja2Vu
ZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCisgICAg
Y29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9s
aXN0LCAiXG4iKSwKKyAgICBjb25zdHJ1Y3RvclBhcmFtcz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2NvbnN0cnVjdG9yX3BhcmFtX2xpc3QsICIiKSwKKyAgICBlbnVtQ29uc3RhbnRzPWpvaW4oR2Vu
ZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdCwgIlxuIiksCisgICAgbWV0aG9kRGVjbGFyYXRp
b25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIp
LAorICAgIGZpZWxkRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlz
dCwgIlxuIiksCisgICAgZm9yd2FyZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2ZvcndhcmRfbGlzdCwgIlxuIikpKQorCitmcm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0
ZXMuZnJvbnRlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKKyAgICBjb25zdHJ1Y3RvckluaXQ9am9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiIiksCisgICAgbWV0
aG9kcz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIikpKQorCitiYWNr
ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUs
CisgICAgbWV0aG9kTmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhv
ZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGluY2x1ZGVzPWpvaW4oR2VuZXJh
dG9yLmJhY2tlbmRfaW5jbHVkZV9saXN0LCAiXG4iKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJh
dG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsICJcbiIpLAorICAgIG1lc3Nh
Z2VIYW5kbGVycz1qb2luKEdlbmVyYXRvci5tZXRob2RfaGFuZGxlcl9saXN0LCAiXG4iKSkpCisK
K2JhY2tlbmRfanNfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9qcy5zdWJzdGl0dXRlKE5v
bmUsCisgICAgZGVsZWdhdGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJf
bGlzdCwgIiIpLAorICAgIGV2ZW50QXJncz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50
X2xpc3QsICIiKSwKKyAgICBkb21haW5EaXNwYXRjaGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2pzX2RvbWFpbl9kaXNwYXRjaGVyX2xpc3QsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLmNsb3Nl
KCkKK2JhY2tlbmRfY3BwX2ZpbGUuY2xvc2UoKQorCitmcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQor
ZnJvbnRlbmRfY3BwX2ZpbGUuY2xvc2UoKQorCitiYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDk2ZjFmM2ZmMjY5YjY5MDZl
YzQ3NWFhMjcxYzE2YjE3MjY2YjhmODYuLmUzOTZlNTY0NGY0M2IwZWMwNDVmY2JlNWYwNDU4Y2M3
NDYzYTc1ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
anNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0
MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAi
dHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgaW4gY2FzZSBvZiBzZXNzaW9u
IGNvb2tpZS4iIH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4i
OiB0cnVlCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAg
ICAiY29tbWFuZHMiOiBbCiAgICAgICAgICAgICB7CkBAIC04NDYsNyArODQ2LDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpc0xvY2FsU3RvcmFnZSIsICJ0eXBlIjogImJvb2xl
YW4iLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBmb3IgbG9jYWwgc3RvcmFnZS4iIH0sCiAgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRp
b24iOiAiRW50cnkgaWQgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlLiIgfQogICAgICAgICAgICAgICAg
IF0KLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJj
b21tYW5kcyI6IFsKICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE4
ZGVkNjEwYjI4NmJhNWU2NDgwY2E5YWRhM2ZkYWRmOTA2ZmJhN2MuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1pZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6
Ci0jIAotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAot
aW1wb3J0IHN5cwotCi1wcm9ncmFtX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKQot
aWYgbGVuKHN5cy5hcmd2KSA8IDQgb3Igc3lzLmFyZ3ZbMV0gIT0gIi1vIjoKLSAgICBzeXMuc3Rk
ZXJyLndyaXRlKCJVc2FnZTogJXMgLW8gT1VUUFVUX0ZJTEUgSU5QVVRfRklMRVxuIiAlIHByb2dy
YW1fbmFtZSkKLSAgICBleGl0KDEpCi0KLW91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0KLWlucHV0
X3BhdGggPSBzeXMuYXJndlszXQotCi1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoLCAiciIp
Ci1qc29uX3N0cmluZyA9IGlucHV0X2ZpbGUucmVhZCgpCi1qc29uX3N0cmluZyA9IGpzb25fc3Ry
aW5nLnJlcGxhY2UoIjogdHJ1ZSIsICI6IFRydWUiKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmlu
Zy5yZXBsYWNlKCI6IGZhbHNlIiwgIjogZmFsc2UiKQotanNvbl9hcGkgPSBldmFsKGpzb25fc3Ry
aW5nKVsiZG9tYWlucyJdCi0KLW91dHB1dF9maWxlID0gb3BlbihvdXRwdXRfcGF0aCwgInciKQot
b3V0cHV0X2ZpbGUud3JpdGUoIiIiLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0gCi1tb2R1bGUgY29yZSB7IiIiKQotCi10eXBlX3RyYWl0cyA9IHsKLSAgICAi
c3RyaW5nIjogIlN0cmluZyIsCi0gICAgImludGVnZXIiOiAiaW50IiwKLSAgICAibnVtYmVyIjog
ImRvdWJsZSIsCi0gICAgImJvb2xlYW4iOiAiYm9vbGVhbiIsCi0gICAgImFycmF5IjogIkFycmF5
IiwKLSAgICAib2JqZWN0IjogIk9iamVjdCIKLX0KLQotcmVmX3R5cGVzID0ge30KLQotbWFjcm9f
dHJhaXRzID0gewotICAgICJEYXRhYmFzZSI6ICJTUUxfREFUQUJBU0UiLAotICAgICJET01TdG9y
YWdlIjogIkRPTV9TVE9SQUdFIiwKLSAgICAiRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dF
UiIsCi0gICAgIkRPTURlYnVnZ2VyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJQcm9m
aWxlciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiV29ya2VyIjogIldPUktFUlMiCi19
Ci0KLWRlZiBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlX2lkKToKLSAg
ICBpZiB0eXBlX2lkLmZpbmQoIi4iKSA9PSAtMToKLSAgICAgICByZXR1cm4gIiVzLiVzIiAlIChk
b21haW5fbmFtZSwgdHlwZV9pZCkKLSAgICByZXR1cm4gdHlwZV9pZAotICAgIAotCi1kZWYgcGFy
YW1fdHlwZShkb21haW5fbmFtZSwgcGFyYW0pOgotICAgIGlmICJ0eXBlIiBpbiBwYXJhbToKLSAg
ICAgICAgcmV0dXJuIHR5cGVfdHJhaXRzW3BhcmFtWyJ0eXBlIl1dCi0gICAgaWYgIiRyZWYiIGlu
IHBhcmFtOgotICAgICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5f
bmFtZSwgcGFyYW1bIiRyZWYiXSkKLSAgICAgICAgaWYgdHlwZV9pZCBpbiByZWZfdHlwZXM6Ci0g
ICAgICAgICAgICByZWZfdHlwZSA9IHJlZl90eXBlc1t0eXBlX2lkXQotICAgICAgICAgICAgcmV0
dXJuIHR5cGVfdHJhaXRzW3JlZl90eXBlWyJ0eXBlIl1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBwcmludCgiVHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkKQotICAgICAgICAgICAgcmV0
dXJuICIhISBUeXBlIG5vdCBmb3VuZDogIiArIHR5cGVfaWQKLQotZm9yIGRvbWFpbiBpbiBqc29u
X2FwaToKLSAgICBkb21haW5fbmFtZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiAidHlwZXMi
IGluIGRvbWFpbjoKLSAgICAgICAgZm9yIHR5cGUgaW4gZG9tYWluWyJ0eXBlcyJdOgotICAgICAg
ICAgICAgdHlwZV9pZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5cGVb
ImlkIl0pCi0gICAgICAgICAgICByZWZfdHlwZXNbdHlwZV9pZF0gPSB0eXBlOwotCi1mb3IgZG9t
YWluIGluIGpzb25fYXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAg
IGlmIGRvbWFpbl9uYW1lIGluIG1hY3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2ZpbGUud3Jp
dGUoIlxuI2lmIGRlZmluZWQoRU5BQkxFXyVzKSAmJiBFTkFCTEVfJXMiICUgKG1hY3JvX3RyYWl0
c1tkb21haW5fbmFtZV0sIG1hY3JvX3RyYWl0c1tkb21haW5fbmFtZV0pKQotICAgIG91dHB1dF9m
aWxlLndyaXRlKCJcbiAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gJXMgeyIg
JSBkb21haW5fbmFtZSkKLQotICAgIGlmICJjb21tYW5kcyIgaW4gZG9tYWluOgotICAgICAgICBm
b3IgY29tbWFuZCBpbiBkb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBb
XQotICAgICAgICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAg
ICAgICBmb3IgaW5fcGFyYW0gaW4gY29tbWFuZFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAg
ICAgICAgICBpZiAoIm9wdGlvbmFsIiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25hbCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmFwcGVuZCgiaW4lcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9t
YWluX25hbWUsIGluX3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBpZiAo
InJldHVybnMiIGluIGNvbW1hbmQpOgotICAgICAgICAgICAgICAgIGZvciBvdXRfcGFyYW0gaW4g
Y29tbWFuZFsicmV0dXJucyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFsIiBp
biBvdXRfcGFyYW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRp
b25hbF0iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVz
ICVzICVzIiAlIChvcHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgb3V0X3BhcmFtKSwg
b3V0X3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAg
ICAgICB2b2lkICVzKCVzKTsiICUgKGNvbW1hbmRbIm5hbWUiXSwgIiwgIi5qb2luKHBhcmFtcykp
KQotCi0gICAgaWYgImV2ZW50cyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9t
YWluWyJldmVudHMiXToKLSAgICAgICAgICAgIHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAo
InBhcmFtZXRlcnMiIGluIGV2ZW50KToKLSAgICAgICAgICAgICAgICBmb3IgaW5fcGFyYW0gaW4g
ZXZlbnRbInBhcmFtZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIg
aW4gaW5fcGFyYW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRp
b25hbF0iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcHRpb25hbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVz
ICVzICVzIiAlIChvcHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBp
bl9wYXJhbVsibmFtZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAg
ICAgW2V2ZW50XSB2b2lkICVzKCVzKTsiICUgKGV2ZW50WyJuYW1lIl0sICIsICIuam9pbihwYXJh
bXMpKSkKLQotICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICB9OyIpCi0gICAgaWYgZG9tYWlu
WyJkb21haW4iXSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJc
biNlbmRpZiAvLyBFTkFCTEVfJXMiICUgbWFjcm9fdHJhaXRzW2RvbWFpblsiZG9tYWluIl1dKQot
b3V0cHV0X2ZpbGUud3JpdGUoIlxufVxuIikKLW91dHB1dF9maWxlLmNsb3NlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110162</attachid>
            <date>2011-10-07 09:53:57 -0700</date>
            <delta_ts>2011-10-11 09:22:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111007205354.patch</filename>
            <type>text/plain</type>
            <size>122905</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWVhZjcz
MTFhYTU0YThmNGRmZDAxM2VkNjg5Yzc5NjM3ZTE5NGNhYy4uMjU0OGM0Zjg0NTQzOWIxYTAyMDlj
OTdjMDJlYzIzYjNhNGUwZTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTQsMTcgKzIy
MTQsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMTViMjg5MjRlOTUxNmVhNDU3ZjkzYzBkZmQ3NDZhN2Y2N2ViOWVkMi4u
MWE1ZmI1ZjNmZmFlZjU4YThlZDQwNjcxZTA2NmE2ZGQ2MGQwMWZhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDExLTEwLTA3ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBDb2RlR2Vu
ZXJhdG9ycy5wcmk6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgorCiAyMDExLTEwLTA3ICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSB3ZWJraXR3ZWJz
cmM6IGF2b2lkIEdTVF9CT0lMRVJQTEFURV9GVUxMCkBAIC0zMTU4LDYgKzMxNzUsMjEgQEAKICAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW06CiAgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6U2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIpOgogCisyMDExLTEwLTA0ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdt
YWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBi
YWNrZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uOgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVk
LgorCiAyMDExLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4ZXMgZm9yIGV2ZXJ5b25lLgpAQCAtMTM3ODQsNiArMTM4MTYsMjAg
QEAKICAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjYW5SZW1haW5BbGl2
ZU9uUmVtb3ZhbEZyb21UcmVlKToKICAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
Lmg6CiAKKzIwMTEtMTAtMDMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJv
bnRlbmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weTogQWRkZWQuCisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxp
bmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1Ynkg
YmFzZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkgYi9T
b3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKaW5kZXggZjE1ZTM5ZWVjMjJlZTIxNjhm
YjkyMTk0NzEyOTNjMzlmZjhhZGQ4MS4uYjBjZTJmNTBkODYxNTJmZDNlNmY5ZTg4OGM5MTkxNDU0
NjJmODgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQpAQCAtNjc3LDI5ICs2NzcsMTIg
QEAgaW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRU
b1NvdXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAot
aW5zcGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQ
RUNUT1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5z
cGVjdG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRl
cGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9y
SlNPTi53a0FkZE91dHB1dFRvU291cmNlcyA9IGZhbHNlCitpbnNwZWN0b3JKU09OLndrU2NyaXB0
ID0gJCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKK2luc3BlY3RvckpT
T04uY29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0ICQkUFdEL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUiAtLW91dHB1dF9jcHBfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tZGVmaW5l
cyBcIiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiCitpbnNwZWN0b3JKU09OLmRlcGVu
ZHMgPSAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9y
SlNPTikKLWluc3BlY3RvckpTT04udmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVU
Ci0KLWluc3BlY3RvcklETC5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0lu
c3BlY3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pT
T05fT1VUUFVUCi1pbnNwZWN0b3JJREwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsCi1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQ
V0QvYmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1Nj
cmlwdCAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVy
YXRvciBJbnNwZWN0b3IgLS1vdXRwdXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1w
cmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNw
ZWN0b3JJREwuZGVwZW5kcyA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bSBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtIFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0g
XAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwK
LSAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAg
ICAgICAgJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklE
TC53a0V4dHJhU291cmNlcyA9ICQkaW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxl
cihpbnNwZWN0b3JJREwpCiAKIGluc3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRl
ZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0g
SU5TUEVDVE9SX0JBQ0tFTkRfU1RVQl9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDVlYTA0ZGUxNTA4MWZiMWZlNGI1MGZkOTc2ODc2MGVkZGI3MTNjN2UuLmVkZDlkMWNhZDFm
MDQ1Njc3YjA5MDYyNjRiNjVkOTJlMTFjZjM3Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtODk0LDE1ICs4OTQsMTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9u
LmgKIEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkv
aW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3Rv
clByb3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAK
LUluc3BlY3Rvci5pZGwgOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVj
dG9yLWlkbAotCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
aWRsIC1vIEluc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
LQogYWxsIDogSW5zcGVjdG9yRnJvbnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMgPSAkKEdFTkVSQVRFX1NDUklQVFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCitJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQogCi1JbnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElO
U1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJ
TlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChG
RUFUVVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3Rv
ciAkPAorSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dF
TkVSQVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRwdXRf
Y3BwX2RpciAuIC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJ
UFQiCiAKIGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpp
bmRleCAxNDQ0YjRlNDI3ZjBmZDNhZTYxZmE4MDViM2ZjZjM1YjAyY2U2NWE4Li4wMWYyMWUzMTA3
MWQyMWM1ZTZmYzgxZWRjYjE4YjI2NDMxOTE3OTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAt
NzAwLDExICs3MDAsOCBAQCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmNwcCBEZXJp
dmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmg6ICQoV2ViQ29yZQogRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6ICQoV2ViQ29yZSkvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC12ZXJzaW9uCiAJJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vICQoR0VOU09VUkNFU19XRUJDT1JFKS9JbnNw
ZWN0b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgogCi1EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgOiAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItaWRsCi0JJChQWVRIT04pICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3Bl
Y3Rvci1pZGwgLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0luc3BlY3Rvci5pZGwgJChXZWJDb3Jl
KS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yLmlkbCAkKFNDUklQVFNfQklORElOR1MpICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KLQkkKEFNX1ZfR0VOKSQoUEVSTCkgLUkkKFdlYkNvcmUpL2JpbmRp
bmdzL3NjcmlwdHMgLUkkKFdlYkNvcmUpL2luc3BlY3RvciAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwgJChJRExfUEFUSDolPS0taW5jbHVkZSAiJSIpIC0t
b3V0cHV0RGlyICIkKEdFTlNPVVJDRVNfV0VCQ09SRSkiIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFW
QVNDUklQVD0xICQoRkVBVFVSRV9ERUZJTkVTKSIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yICQ8CitE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDogJChX
ZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCSQoUFlUSE9OKSAkKFdlYkNvcmUpL2luc3BlY3Rvci9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICQ8IC0tb3V0cHV0X2hfZGlyICQoR0VOU09VUkNFU19X
RUJDT1JFKSAtLW91dHB1dF9jcHBfZGlyICQoR0VOU09VUkNFU19XRUJDT1JFKSAtLWRlZmluZXMg
IkxBTkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUykiCiBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmg6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5z
cGVjdG9yRnJvbnRlbmQuY3BwCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250
ZW5kLmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcwog
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qczogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3ODI1NzMzNjIwYTdkZmI3Y2FiNmY3MGRiZGRh
ZTVlMjA2MmJjNzEuLmJkZTVkYTg4ZGY0Y2Q2NjQwMjk0ZmQ3NzRmZGE5YzkxMTg0YmExNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0zMzUsMTcgKzMzNSwyNCBA
QAogICB9LAogICAndGFyZ2V0cyc6IFsKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnZ2Vu
ZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAorICAgICAgJ3RhcmdldF9uYW1lJzog
J2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKICAgICAgICd0eXBlJzogJ25vbmUnLAorICAg
ICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2Nv
bF92ZXJzaW9uJworICAgICAgXSwKICAgICAgICdhY3Rpb25zJzogWwotICAgICAgICAgewotICAg
ICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbics
CisgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQ
cm90b2NvbFNvdXJjZXMnLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4v
aW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKKyAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weScsCiAgICAgICAgICAg
ICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAg
ICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dl
YmtpdC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCisgICAgICAgICAgICAnPChTSEFSRURf
SU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAn
LAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCisgICAgICAgICAgICAnPChT
SEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAorICAg
ICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFj
a2VuZFN0dWIuanMnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAg
ICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzUzLDI4ICszNjAsMjgg
QEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0
aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLXZlcnNpb24nLAotICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICc8QChfb3V0cHV0
cyknLAotICAgICAgICAgICAgJzxAKF9pbnB1dHMpJworICAgICAgICAgICAgJy4uL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24nLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2Rp
cicsICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICct
LWRlZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAg
ICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3Rv
Y29sIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxl
JywKLSAgICAgICAgfQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9y
IHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuanNvbicsCisgICAgICAgIH0sCiAgICAg
ICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX2lkbCcs
CisgICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNp
b24nLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQotICAgICAg
ICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xJ
REwnLAorICAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3Bl
Y3RvclByb3RvY29sVmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAg
ICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4v
aW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2ViY29yZS9JbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElB
VEVfRElSKS93ZWJraXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAgICAgIF0s
CiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVk
ZV9kaXJzJzogWwpAQCAtMzgyLDY1ICszODksMTYgQEAKICAgICAgICAgICB9LAogICAgICAgICAg
ICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICctbycs
CiAgICAgICAgICAgICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScK
ICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9y
IHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAnbWVzc2Fn
ZSc6ICdWYWxpZGF0ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmls
aXR5IGFuZCBnZW5lcmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBdCiAgICAg
fSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJj
ZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAg
ICAgICAnaW5zcGVjdG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9j
b2xfdmVyc2lvbicKLSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAg
ICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycs
Ci0gICAgICAgICAgIyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFzIGl0ZW0g
bmFtZSBpbiB2Y3Byb2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IElu
c3BlY3Rvci5pZGwgdGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxlcyBhcmUg
bWFya2luZyBhcyBleGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdpbnB1dHMn
OiBbCi0gICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5w
bCcsCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0n
LAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbScsCi0g
ICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAgICAgICAg
ICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAg
ICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5U
RVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAot
ICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9y
QmFja2VuZFN0dWIuanMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmtpdC9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCi0g
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZy
b250ZW5kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAg
ICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwKLSAgICAg
ICAgICB9LAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywKLSAg
ICAgICAgICAgICdzY3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywKLSAgICAg
ICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJy0t
ZGVmaW5lcycsICc8KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCi0gICAg
ICAgICAgICAnLS1nZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8QChnZW5l
cmF0b3JfaW5jbHVkZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzog
J0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRs
JywKLSAgICAgICAgfSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJnZXRfbmFt
ZSc6ICdpbmplY3RlZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAg
ICAgJ2FjdGlvbnMnOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyMTgz
YzFmMjljNDY3OTU4OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0jIENv
cHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1wYWNr
YWdlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBDbGFzczo6
U3RydWN0OwotdXNlIEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5cGVUcmFu
c2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2FwcGxpY2F0
aW9uQ2FjaGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAgICJmb3J3
YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JD
U1NBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
Q29uc29sZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50Lmgi
LAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0kdHlwZVRy
YW5zZm9ybXsiUGFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVidWdnZXIi
fSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3Nv
ciIgPT4gIm1fZGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURlYnVnZ2Vy
In0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IiwKLSAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWlu
QWNjZXNzb3IiID0+ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJE
YXRhYmFzZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAgImRvbWFp
bkFjY2Vzc29yIiA9PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9N
In0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1f
ZG9tQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0gICAgImZv
cndhcmQiID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9k
b21TdG9yYWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0gPSB7Ci0g
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9maWxlU3lzdGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JB
Z2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9yd2FyZCIg
PT4gIkluc3BlY3RvclJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3VyY2VBZ2Vu
dCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVyQWdlbnQi
LAotfTsKLSR0eXBlVHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JSdW50aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSdW50aW1l
QWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQiLAotfTsK
LSR0eXBlVHJhbnNmb3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVj
dG9yVGltZWxpbmVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JX
b3JrZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50LmgiLAot
ICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5cGVUcmFu
c2Zvcm17IkZyb250ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVu
ZCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0eXBlVHJh
bnNmb3JteyJQYXNzUmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFz
c1JlZlB0ci5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewotICAgICJm
b3J3YXJkSGVhZGVyIiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAicGFyYW0i
ID0+ICJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAi
T2JqZWN0IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsi
QXJyYXkifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIs
Ci0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgImRlZmF1
bHRWYWx1ZSIgPT4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JBcnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwK
LSAgICAiSlNPTlR5cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19
OwotJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwK
LSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yVmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBl
IiA9PiAiIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBhcmFtIiA9
PiAiY29uc3QgU3RyaW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgU3RyaW5n
KiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFy
aWFibGUiID0+ICJTdHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAgICJkZWZh
dWx0VmFsdWUiID0+ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRmb3JtU3Ry
aW5nLmgiLAotICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJTdHJpbmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5cGVUcmFu
c2Zvcm17ImxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0aW9uYWxf
cGFyYW0iID0+ICJjb25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNz
b3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAg
ICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0k
dHlwZVRyYW5zZm9ybXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAgICAib3B0
aW9uYWxfcGFyYW0iID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVB
Y2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRlZmF1bHRW
YWx1ZSIgPT4gIjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwK
LSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19
OwotJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1
bnNpZ25lZCBsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBs
b25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAi
dmFyaWFibGUiID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUi
LAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFu
c2Zvcm17InVuc2lnbmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIs
Ci0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25zdCIsCi0g
ICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1
bnNpZ25lZCBpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZvcndhcmQi
ID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIs
Ci0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91YmxlIn0g
PSB7Ci0gICAgInBhcmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJj
b25zdCBkb3VibGUqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioi
LAotICAgICJ2YXJpYWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAu
MCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09O
VHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRy
YW5zZm9ybXsiYm9vbGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAgICJvcHRp
b25hbF9wYXJhbSIgPT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVB
Y2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRlZmF1bHRW
YWx1ZSIgPT4gImZhbHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4g
IiIsCi0gICAgIkpTT05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4gImJvb2xl
YW4iCi19OwotJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIiIs
Ci0gICAgImhlYWRlciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0gPSB7Ci0g
ICAgImhlYWRlciIgPT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNlbnNlIFRl
bXBsYXRlcwotCi1teSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQg
KGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0KLW15ICRj
b2RlR2VuZXJhdG9yOwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGlyOwotbXkg
JHdyaXRlRGVwZW5kZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7Ci0KLW15
ICRiYWNrZW5kQ2xhc3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwotbXkgJGJh
Y2tlbmRKU1N0dWJOYW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0aG9kczsK
LW15IEBiYWNrZW5kTWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVyZXM7Ci1t
eSAkYmFja2VuZENvbnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9uczsK
LW15IEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVyOwotbXkg
QGJhY2tlbmRKU1N0dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5kRG9tYWlu
czsKLQotbXkgJGZyb250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1teSBAZnJv
bnRlbmRNZXRob2RzOwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRlbmRNZXRo
b2RzSW1wbDsKLW15ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRlbmRDb25z
dHJ1Y3RvcjsKLW15IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZyb250ZW5k
Q29uc3RhbnREZWZpbml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9udGVuZERv
bWFpbnM7Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmpl
Y3QgPSBzaGlmdDsKLSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0
b3IgPSBzaGlmdDsKLSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhlYWRlcnNE
aXIgPSBzaGlmdDsKLSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRw
cmVwcm9jZXNzb3IKLSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAkdmVyYm9z
ZSA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAgcmV0dXJu
ICRyZWZlcmVuY2U7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAotc3ViIEdl
bmVyYXRlTW9kdWxlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRkYXRhTm9k
ZSA9IHNoaWZ0OwotCi0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwotICAgICRu
YW1lc3BhY2UgPX4gcy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NOYW1lID0g
Ikluc3BlY3RvckZyb250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIgICAgJHtm
cm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAgICBwdXNo
KEBmcm9udGVuZEZvb3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIs
ICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsiKTsKLSAgICAkZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9udGVuZFR5
cGVzeyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7
IlBhc3NSZWZQdHIifSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0gIkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4iOwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5k
U3R1YiI7Ci0gICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRiYWNrZW5k
VHlwZXN7Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVz
eyJQYXNzUmVmUHRyIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQifSA9IDE7
Ci0gICAgJGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczogJ2lkbERv
Y3VtZW50JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRvYmplY3Qg
PSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmluZXMgPSBz
aGlmdDsKLQotICAgIG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRpb25zID0+
IFtdLAotICAgICAgICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBnZW5lcmF0
ZUZ1bmN0aW9ucygkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7bWV0aG9k
RGVjbGFyYXRpb25zfX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAkaW50ZXJm
YWNlLT5uYW1lKTsKLSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRlcmZhY2Us
IFwlYWdlbnQpOwotICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbgotewot
ICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLSAgICBt
eSAkYWdlbnROYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhv
ZHMsICIgICAgY2xhc3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhv
ZHMsICIgICAgcHVibGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAg
JHthZ2VudE5hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+e21ldGhv
ZERlY2xhcmF0aW9uc319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2Rz
LCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICB9OyIp
OwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRlck5hbWUg
PSBsYygkYWdlbnROYW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgJHthZ2Vu
dE5hbWV9KiAke2dldHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsgfSIpOwot
ICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRlbmRGb290
ZXIsICIgICAgJHthZ2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1c2goQGZy
b250ZW5kQWdlbnRGaWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdlbmVyYXRl
RnJvbnRlbmRDb25zdHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1Y3Rvcklt
cGw7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5kQ2xhc3NO
YW1lfTo6JHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3Rvcklt
cGwsICIgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIik7Ci0gICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdlbnRGaWVs
ZHMpIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgLCAke2Fn
ZW50RmllbGR9KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAgcHVzaChA
ZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1
Y3RvckltcGwsICJ9Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsKLX0K
LQotc3ViIGdlbmVyYXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0Owot
ICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGlu
dGVyZmFjZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUZy
b250ZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVyZmFjZSwg
JGZ1bmN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHVi
RnVuY3Rpb25zKCRpbnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzKCRp
bnRlcmZhY2UpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0gICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAgIG15ICRh
Z2VudCA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkg
QGFyZ3NGaWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24t
PnBhcmFtZXRlcnN9KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3IgZnJvbnRl
bmQgaW50ZXJmYWNlLgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAYXJn
c0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJndW1lbnRz
ID0gam9pbigiLCAiLCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIgIiAuICRf
LT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9u
IHNpZ25hdHVyZS4KLQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7ZnVuY3Rp
b25OYW1lfSgke2FyZ3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9
LT57JHNpZ25hdHVyZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24gd2FzIGRl
dGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57bWV0aG9k
U2lnbmF0dXJlc30tPnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+e21ldGhv
ZERlY2xhcmF0aW9uc319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlufTo6JHtm
dW5jdGlvbk5hbWV9KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsK
LSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0
aW9uTmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRo
b2RcIiwgXCIkZG9tYWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxhcihAYXJn
c0ZpbHRlcmVkKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwot
Ci0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewotICAgICAg
ICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9w
dGlvbmFsIn0gPyAiaWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAgIiA6ICIi
OwotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAuICJwYXJh
bXNPYmplY3QtPnNldCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05UeXBlIikg
LiAiKFwiIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFpdHMoJHBh
cmFtZXRlciwgInZhbHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAg
ICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNz
YWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9Ci0gICAg
cHVzaChAZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwot
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1
YiBjYW1lbENhc2UKLXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUgPX4gcy9c
YihcdykvXFUkMS9nOyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFtZQotICAg
ICR2YWx1ZSA9fiBzLyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdlbmVyYXRl
QmFja2VuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRm
dW5jdGlvbiA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2ln
bmF0dXJlLT5uYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0gJGludGVy
ZmFjZS0+bmFtZSAuICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRG
dW5jdGlvbk5hbWVEb3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uTmFtZTsK
LQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAgayR7ZnVs
bFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50
RGVmaW5pdGlvbnMsICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCIsIik7
Ci0KLSAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFy
YW1ldGVyc30pOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdy
ZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAg
IG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+
cGFyYW1ldGVyc30pOwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdWxs
UXVhbGlmaWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1
ZXN0TWVzc2FnZU9iamVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2ln
bmF0dXJlfX0gfHwgZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWdu
YXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2ln
bmF0dXJlfX0gPSAiJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2goQGJhY2tl
bmRNZXRob2RzLCAke3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIG15ICRy
ZXF1ZXN0TWVzc2FnZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VP
YmplY3QiIDogIiI7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFt
ZX06OiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9i
amVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRv
bWFpbkFjY2Vzc29yID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAg
ICAkYmFja2VuZFR5cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFp
bn0gPSAxOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIp
OwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhcIiRkb21haW4gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiIpOwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFy
Z3VtZW50cy4KLSAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgbWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIpIC4gIiBv
dXRfIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZh
bHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0g
ICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIpOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAgaWYgKHNj
YWxhcihAaW5BcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0
T2JqZWN0KFwicGFyYW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNw
ZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsi
KTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9yZWFjaCBt
eSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0
ZXItPm5hbWU7Ci0gICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAg
ICAgICAgICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBlKTsKLSAg
ICAgICAgICAgIG15ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAgICAgIGlm
ICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAg
ICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZvdW5kID0g
ZmFsc2U7Iik7Ci0gICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIiYke25h
bWV9X3ZhbHVlRm91bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rp
b24sICIgICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8kbmFtZSA9
IGdldCR0eXBlU3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0aW9uYWxG
bGFnQXJndW1lbnQsIHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAgICAgICBw
dXNoKEBmdW5jdGlvbiwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAgIH0KLQot
ICAgIG15ICRhcmdzID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZlcnJvciIs
Ci0gICAgICAgICAgICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0
aW9uYWwifSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92YWx1ZUZv
dW5kID8gJmluXyIgLiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbl8iIC4gJF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAgICAgIG1h
cCgiJm91dF8iIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVuY3Rpb24s
ICRpbmRlbnQgLiAiaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICRpbmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgk
YXJncyk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOyIpOwotICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5n
dGgoKSkgeyIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdzKSB7Ci0g
ICAgICAgICAgICBteSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMgRG9uJ3Qg
YWRkIG9wdGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlz
ICJ0cnVlIgotICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+
eyJvcHRpb25hbCJ9ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBhcmFtZXRl
ci0+bmFtZSAuICIpIik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJyZXN1bHQt
PnNldCIgLiB0eXBlVHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIg
LiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsi
KTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0gICAgfQot
ICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3Ry
aW5nOjpmb3JtYXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWRcIiwgXCIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9jb2xFcnJv
cnMsIGVycm9yKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5j
dGlvbiwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0K
LQotc3ViIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5kUmVzcG9u
c2UgPSA8PCAiRU9GIjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVzcG9uc2Uo
bG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJv
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3BvbnNlTWVz
c2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3Nh
Z2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAgICAKLUVP
RgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJvdG9jb2xF
cnJvciA9IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3Rv
Y29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHtiYWNrZW5k
Q2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQs
IENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1vbkVycm9y
cy5zaXplKCkpIHsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0z
MjcwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMy
NjAwKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2
MDEpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAy
KTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7
Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKLSAg
ICB9Ci0gICAgQVNTRVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBz
X2NvbW1vbkVycm9ycy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2Rl
XSk7Ci0gICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7Ci0gICAg
QVNTRVJUKGVycm9yKTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KCJk
YXRhIiwgZGF0YSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVy
cm9yKTsKLSAgICBpZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwg
KmNhbGxJZCk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
Ci0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJc
biIsICRyZXBvcnRQcm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1lbnRHZXR0
ZXJzCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVUcmFpdHMo
JHR5cGUsICJKU09OVHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMoJHR5cGUs
ICJ2YXJpYWJsZSIpOwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0eXBlLCAi
ZGVmYXVsdFZhbHVlIik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBlLCAicmV0
dXJuIikgPyB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0eXBlLCAi
cGFyYW0iKTsKLQotICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsKLSAgICBw
dXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1cm4gZ2V0
JHR5cGVTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsiKTsKLSAg
ICBteSAkZ2V0dGVyQm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpCi17Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZv
dW5kKQotICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxlIHZhbHVl
ID0gJGRlZmF1bHRWYWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFs
dWVGb3VuZCkgewotICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Npbmcg
cGFyYW1zIGNvbnRhaW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5n
KFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBh
cmFtZXRlciAnXCVzJyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5zcGVjdG9y
T2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1l
KTsKLQotICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAoIXZhbHVl
Rm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7Ci0gICAgZWxzZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAgICp2YWx1
ZUZvdW5kID0gdHJ1ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJldHVybiBz
cGxpdCgiXG4iLCAkZ2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRj
aGVyCi17Ci0gICAgbXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAgICAgICAg
JiR7YmFja2VuZENsYXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWduYXR1cmVz
eyRffSwgQGJhY2tlbmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIs
IEBtYXBFbnRyaWVzKTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9G
IjsKLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQotewotICAgIFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0gdGhpczsK
LSAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlwZWRlZiBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklORV9TVEFU
SUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2FsbElkID0g
MDsKLQotICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIENh
bGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9OwotICAgICAg
ICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5h
bWVzWzBdKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNw
ZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVzc2FnZSkg
ewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11
c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09i
amVjdCgpOwotICAgIGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9i
amVjdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBpZiAoIWNh
bGxJZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVl
c3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQn
IHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0
KCJtZXRob2QiKTsKLSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNu
J3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2Q7
Ci0gICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdt
ZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3Bh
dGNoTWFwLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsK
LSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIici
ICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsK
LX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsK
LX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAkbWVzc2Fn
ZVBhcnNlckJvZHkgPSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29t
bWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTiht
ZXNzYWdlKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKLSAgICBp
ZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmplY3QtPmdl
dFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3NhZ2VQYXJz
ZXJCb2R5KTsKLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17Ci0gICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEkXy0+c2ln
bmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNlLT5mdW5j
dGlvbnN9KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAgIGZvcmVh
Y2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0gJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJl
Y3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFy
Z3VtZW50TmFtZXMgPSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgbWFwKCJc
IiIgLiAkXy0+bmFtZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlvbmFsXCI6
ICIgLiAoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUgIiA6ICJm
YWxzZSIpIC4gIiwgIgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0eXBlVHJh
aXRzKCRfLT50eXBlLCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAifSIsCi0g
ICAgICAgICAgICAgICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMs
ICIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwibWV0aG9k
XCI6IFwiJGRvbWFpbi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykg
PyAiXCJwYXJhbXNcIjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAgICAgICAi
XCJpZFwiOiAwIiAuCi0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29sbGVjdEJh
Y2tlbmRKU1N0dWJFdmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkg
QGZ1bmN0aW9ucyA9IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2
ZW50In0sIEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRl
cmZhY2UtPm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewot
ICAgICAgICBteSAkbmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+
bmFtZTsKLSAgICAgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIs
IEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0g
am9pbigiLCIsIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsKLSAgICAg
ICAgcHVzaChAYmFja2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIgLiAkbmFt
ZSAuICJcIl0gPSBbIiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBn
ZW5lcmF0ZUJhY2tlbmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXJzID0gam9pbigiXG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRpc3BhdGNo
ZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIgLiAkXyAu
IlwiKTsiLCBAZnJvbnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIs
IEBiYWNrZW5kSlNTdHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBAYmFja2Vu
ZEpTRXZlbnRzKTsKLSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwot
JGxpY2Vuc2VUZW1wbGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKLXsK
LSAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNl
c0NvdW50ID0gMDsKLSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9kb21haW5E
aXNwYXRjaGVycyA9IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1YnMKLSRK
U0V2ZW50cwotJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5wcm90b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKLSAg
ICBkdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBmdW5jdGlv
bihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENh
bGxiYWNrSWQrKzsKLSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJh
Y2sgfHwgZnVuY3Rpb24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0gICAgfSwK
LQotICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQotICAgIHsK
LSAgICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5n
KS5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1
bmN0aW9uWzBdICsgIkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKLSAg
ICAgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5h
bWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJp
bmQodGhpcywgcmVxdWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFp
bkFuZEZ1bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1
ZXN0U3RyaW5nKQotICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5n
LCBhcmdzLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJz
ZShyZXF1ZXN0U3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwotICAgICAg
ICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFj
ayk7Ci0gICAgfSwKLQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMpOwotICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKLSAg
ICAgICAgdmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVu
Z3RoIC0gMV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAgIHZhciBk
b21haW5BbmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIg
YWdlbnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1l
dGhvZFsxXTsKLQotICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAgIGlmIChy
ZXF1ZXN0LnBhcmFtcykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFy
YW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5
XS50eXBlOwotICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFt
c1trZXldLm9wdGlvbmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAw
ICYmICFvcHRpb25hbEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
UHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICci
ICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRz
ICciICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2
YXIgdmFsdWUgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxh
ZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlbGV0ZSByZXF1ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVl
ICE9PSB0eXBlTmFtZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1l
dGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1l
ICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXF1
ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAgICAgICAg
ICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChh
cmdzLmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
YXJnc1swXSAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9y
KCJQcm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAn
IiArIGFnZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBl
IGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tB
bmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF93
cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwg
Y2FsbGJhY2spCi0gICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChj
YWxsYmFjayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgewot
ICAgICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdl
T2JqZWN0LmlkXTsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVz
c2FnZU9iamVjdC5tZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVl
c3RUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJ
bnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250
ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAgICsrdGhp
cy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0
VG9CYWNrZW5kKG1lc3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2FnZU9iamVj
dFRvQmFja2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNv
bGUudGltZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1lc3NhZ2Ug
PSBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfcmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCi0gICAg
ewotICAgICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsK
LSAgICB9LAotCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAg
ICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNv
bnNvbGUubG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8g
bWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFyIG1lc3Nh
Z2VPYmplY3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVz
c2FnZSkgOiBtZXNzYWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsg
Ly8ganVzdCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNz
YWdlT2JqZWN0LmVycm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5f
X3Byb3RvX18gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlv
bigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCh0aGlzLmNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDog
cmV0dXJuICJQYXJzZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAt
MzI2MDA6IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwg
ZXJyb3IiOzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJu
ICJTZXJ2ZXIgZXJyb3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlw
dGlvbiA9IlVua25vd24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdGhpcy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlz
Lm1lc3NhZ2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6
ICIiKTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICBnZXRN
ZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJv
ci5jb2RlICE9PSAtMzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9j
b2xFcnJvcihtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFy
IGFyZ3VtZW50cyA9IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7
Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQot
ICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtr
ZXldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5f
Y2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICAg
ICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1l
KQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsK
LQotICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3Ip
OwotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAg
ICAgICAgICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgICAgICAg
ICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAgICAgICAg
ICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9k
TmFtZSkKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBj
YWxsYmFjay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxi
YWNrLnNlbmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0
YXJ0VGltZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0
cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAgIHRoaXMu
cnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRo
b2Quc3BsaXQoIi4iKTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOwot
ICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAgICAgIGlm
ICghKGRvbWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBu
b24tZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0
aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlmICghKGZ1
bmN0aW9uTmFtZSBpbiBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJy
b3IoIlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRl
ZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50
QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVk
IG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsK
LSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAgICAgICAg
IHZhciBwYXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsK
LSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1z
W3BhcmFtTmFtZXNbaV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHByb2Nl
c3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0
YXRzKQotICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwot
Ci0gICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwg
cGFyYW1zKTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykK
LSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmpl
Y3QubWV0aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsK
LSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbiht
ZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRo
IGlkID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3Qu
ZXJyb3IpOwotICAgIH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlv
bihzY3JpcHQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAg
ICB0aGlzLl9zY3JpcHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAg
IHRoaXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGlu
Z1Jlc3BvbnNlc0NvdW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3Njcmlw
dHM7Ci0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFy
IGlkID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2Ny
aXB0c1tpZF0uY2FsbCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVjdG9yQmFj
a2VuZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1cm4gc3Bs
aXQoIlxuIiwgJGluc3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJhdGVIZWFk
ZXIKLXsKLSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVjbGFyYXRp
b24gPSBzaGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RydWN0b3Ig
PSBzaGlmdDsKLSAgICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBz
aGlmdDsKLSAgICBteSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhlYWRlcnMg
PSBqb2luKCJcbiIsIHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3
YXJkSGVhZGVyIikgLiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFkZXIiKSwg
a2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0gam9pbigi
XG4iLCBzb3J0KG1hcCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikgLiAiOyIs
IGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAg
IG15ICRjb25zdGFudERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRzfSk7Ci0g
ICAgbXkgJG1ldGhvZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9KTsKLQot
ICAgIG15ICRoZWFkZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFtZX1faAot
I2RlZmluZSAke2NsYXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1lc3BhY2Ug
JG5hbWVzcGFjZSB7Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCi1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0kY29uc3Ry
dWN0b3IKLQotJGNvbnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9ucwotCi0k
Zm9vdGVyCi19OwotCi19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8gIWRlZmlu
ZWQoJHtjbGFzc05hbWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsKLX0KLQot
c3ViIGdlbmVyYXRlU291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15
ICR0eXBlcyA9IHNoaWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0
aG9kcyA9IHNoaWZ0OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIiLCAkbGlj
ZW5zZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVkZSBcImNv
bmZpZy5oXCIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIkY2xhc3NO
YW1lLmhcIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1
c2goQHNvdXJjZUNvbnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBz
b3VyY2VDb250ZW50LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNoIG15ICR0
eXBlIChrZXlzICV7JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUgXCIiIC4g
dHlwZVRyYWl0cygkdHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJhaXRzKCR0
eXBlLCAiaGVhZGVyIikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBz
b3J0IGtleXMgJWhlYWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAgIHB1c2go
QHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2luKCJcbiIs
IEB7JGNvbnN0YW50c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVz
aChAc291cmNlQ29udGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQs
ICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFj
ZSIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250
ZW50LCAiI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgIiIpOwotICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5cGVUcmFp
dHMKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0OwotICAg
IHJldHVybiAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIgcGFyYW1U
eXBlVHJhaXRzCi17Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAgICBteSAk
dHJhaXQgPSBzaGlmdDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9IHR5cGVU
cmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0KTsKLSAg
ICAgICAgcmV0dXJuICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJlc3VsdDsK
LSAgICB9Ci0gICAgbXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5
cGUsICR0cmFpdCk7Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQgOiAiIjsK
LX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IKLXsKLSAg
ICBteSBAYXJndW1lbnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAgIHB1c2go
QGFyZ3VtZW50cywgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsIik7Ci0gICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1
c2goQGJhY2tlbmRGb290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc29ydCBr
ZXlzICViYWNrZW5kRG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBkZWNsYXJh
dGlvbiB0byB0aGUgZm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0eXBlVHJh
aXRzKCRkb21haW4sICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVUcmFpdHMo
JGRvbWFpbiwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRGb290ZXIs
ICIgICAgJHthZ2VudENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMgQWRkIGFn
ZW50IHBhcmFtZXRlciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBzdWJzdHIo
JGZpZWxkLCAyKTsKLSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgICwg
JHtmaWVsZH0oJHthcmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2FnZW50Q2xh
c3NOYW1lfSogJHthcmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9p
bigiLCAiLCBAYXJndW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBwdXNoKEBi
YWNrZW5kSGVhZCwgIiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJpbmd9KSIp
OwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0g
ICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIp
OwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7Ci0gICAg
cHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVh
ZCwgIiAgICAgICAgSW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAgICAgU2VydmVyRXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIExh
c3RFbnRyeSwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNh
bGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhl
YWQsICIgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwotICAgIHB1
c2goQGJhY2tlbmRIZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1lcyB7Iik7
Ci0gICAgJGJhY2tlbmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFkKTsKLX0K
LQotc3ViIGZpbmlzaAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1c2goQGJh
Y2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAgICBwdXNo
KEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgpKTsKLSAg
ICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29s
RXJyb3IoKSk7Ci0gICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVGcm9u
dGVuZENvbnN0cnVjdG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0UsICI+JG91
dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZp
bGUgJG91dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNF
IGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5k
VHlwZXMsIFxAZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0lt
cGwpKTsKLSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9w
ZW4obXkgJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIp
IHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENs
YXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9udGVuZENs
YXNzTmFtZSwgJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9udGVuZENv
bnN0cnVjdG9yLCBcQGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRlbmRNZXRo
b2RzLCBqb2luKCJcbiIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFERVIpOwot
ICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50RGVmaW5p
dGlvbnMsICJjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5h
bWVzW10gPSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJ9OyIp
OwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAgICAjIE1h
a2UgZGlzcGF0Y2hlciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAgcHVzaChA
YmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29u
c3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsICIgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAgICAKLSAg
ICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFjaCBteSAk
dHlwZSAoa2V5cyAlYmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRzKCR0eXBl
LCAiSlNPTlR5cGUiKSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBn
ZW5lcmF0ZUFyZ3VtZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJlc3BvbnNl
KGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5lcmF0ZUJh
Y2tlbmRBZ2VudEZpZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0
aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVzaChAYmFj
a2VuZE1ldGhvZHNJbXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsICIiKTsKLQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xh
c3NOYW1lLmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tl
bmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVT
b3VyY2UoJGJhY2tlbmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRDb25zdGFu
dERlZmluaXRpb25zLCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRTT1VSQ0Up
OwotICAgIHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRwdXRIZWFk
ZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAk
b3V0cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVS
IGpvaW4oIlxuIiwgZ2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNrZW5kQ2xh
c3NEZWNsYXJhdGlvbiwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3IsIFxAYmFj
a2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBi
YWNrZW5kRm9vdGVyKSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIp
OwotCi0gICAgb3BlbihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFt
ZS5qcyIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRKU1N0
dWJOYW1lLmpzIjsKLSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRlQmFja2Vu
ZFN0dWJKUygpKTsKLSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NUVUIpOwot
fQotCi0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2FmNjY5NDRhMzljNjMxOGY0NzFmZWY0ZTYwZGI1OTAw
ZmM5MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTAsMCArMSwxNDI0IEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1w
b3J0IHN0cmluZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJpbmcgaW1w
b3J0IGpvaW4KKworY21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorY21k
bGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1kZWZpbmVzIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9v
cHRpb24oIi0tb3V0cHV0X2hfZGlyIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0
cHV0X2NwcF9kaXIiKQorCit0cnk6CisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRs
aW5lX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpICE9IDEpOgor
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIkV4YWN0bHkgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVj
dGVkIChmb3VuZCAlcykiICUgbGVuKGFyZ192YWx1ZXMpKQorICAgIGlucHV0X2pzb25fZmlsZW5h
bWUgPSBhcmdfdmFsdWVzWzBdCisgICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlv
bnMub3V0cHV0X2hfZGlyCisgICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0
cHV0X2NwcF9kaXIKKyAgICBpZiBub3Qgb3V0cHV0X2hlYWRlcl9kaXJuYW1lOgorICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIk91dHB1dCAuaCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQor
ICAgIGlmIG5vdCBvdXRwdXRfY3BwX2Rpcm5hbWU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
T3V0cHV0IC5jcHAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKK2V4Y2VwdCBFeGNlcHRp
b24sIGU6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGlu
ZSBhcmd1bWVudHM6ICVzXG5cbiIgJSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8
c2NyaXB0PiBJbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+
IC0tb3V0cHV0X2NwcF9kaXIgPG91dHB1dF9jcHBfZGlyPiBbLS1kZWZpbmVzIDxkZWZpbmVzIHN0
cmluZz5dXG4iKQorICAgIGV4aXQoMSkKKworCitkZWYgcGFyc2VfZGVmaW5lcyhzdHIpOgorICAg
IGlmIG5vdCBzdHI6CisgICAgICAgIHJldHVybiB7fQorCisgICAgaXRlbXMgPSBzdHIuc3BsaXQo
KQorICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGl0
ZW1bMF0gPT0gJyInIGFuZCBpdGVtWy0xXSA9PSAnIicgYW5kIGxlbihpdGVtKSA+PSAyOgorICAg
ICAgICAgICAgaXRlbSA9IGl0ZW1bMTotMV0KKyAgICAgICAgZXFfcG9zID0gaXRlbS5maW5kKCI9
IikKKyAgICAgICAgaWYgZXFfcG9zID09IC0xOgorICAgICAgICAgICAga2V5ID0gaXRlbQorICAg
ICAgICAgICAgdmFsdWUgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXkgPSBp
dGVtWzplcV9wb3NdCisgICAgICAgICAgICB2YWx1ZV9zdHIgPSBpdGVtW2VxX3BvcyArIDE6XQor
ICAgICAgICAgICAgaWYgdmFsdWVfc3RyID09ICIwIjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IEZhbHNlCisgICAgICAgICAgICBlbGlmIHZhbHVlX3N0ciA9PSAiMSI6CisgICAgICAgICAgICAg
ICAgdmFsdWUgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2hv
dWxkIHdlIHN1cHBvcnQgb3RoZXIgdmFsdWVzPworICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiVW5yZWNvZ25pemVkIGRlZmluZSB2YWx1ZTogJyVzJyAoa2V5OiAnJXMnKSIgJSAodmFs
dWVfc3RyLCBrZXkpKQorICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIHJl
c3VsdAorCitkZWZpbmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykK
KworCitjbGFzcyBEb21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdl
dF9maXhlZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBkb21haW5fbmFtZSBp
biBjbHMuYWdlbnRfdHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1lX3JlcyA9IGNscy5h
Z2VudF90eXBlX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFn
ZW50X25hbWVfcmVzID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUKKworICAgICAg
ICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAg
ICBmaWVsZF9uYW1lX3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0K
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUu
bG93ZXIoKSArICJBZ2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAg
ICAgIGFnZW50X3R5cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4g
PSBkb21haW5fbmFtZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNf
YmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucworICAgICAgICAg
ICAgYWdlbnRfZmllbGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToKKyAgICAgICAg
ICAgICAgICBpZiBub3QgZG9tYWluX25hbWUgaW4gY2xzLmRvbWFpbl9kZWZpbmVfbmFtZV9tYXA6
CisgICAgICAgICAgICAgICAgICAgICMgSGFzIG5vdCBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3Nv
ciBzeW1ib2wuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAg
ICAgICAgZGVmaW5lX25hbWUgPSBjbHMuZG9tYWluX2RlZmluZV9uYW1lX21hcFtkb21haW5fbmFt
ZV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBkZWZpbmVfbmFtZSBpbiBkZWZpbmVzOgorICAg
ICAgICAgICAgICAgICAgICAjIERpc2FibGVkIHdoZW4gbm90IG1lbnRpb25lZAorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX3ZhbHVlID0g
ZGVmaW5lc1tkZWZpbmVfbmFtZV0KKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGJvb2woZGVm
aW5lX3ZhbHVlKQorCisgICAgICAgIHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21h
aW5zID0gc2V0KFsiUnVudGltZSIsICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5f
ZG9tYWlucyA9IHNldChbIkluc3BlY3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3
b3JrIjogIkluc3BlY3RvclJlc291cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9m
IHRoaXMsIGdlbmVyYXRlIG5hbWVzIGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAg
PSB7CisgICAgICAgICJQYWdlIjogInBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1
bnRpbWVBZ2VudCIsCisgICAgICAgICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAg
ICJOZXR3b3JrIjogICJyZXNvdXJjZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRh
YmFzZUFnZW50IiwKKyAgICAgICAgIkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisg
ICAgICAgICJBcHBsaWNhdGlvbkNhY2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAg
ICAgICAiRE9NIjogICJkb21BZ2VudCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAg
ICAgICAgIkRlYnVnZ2VyIjogImRlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIi
OiAiZG9tRGVidWdnZXJBZ2VudCIsCisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50
IiwKKyAgICAgICAgIldvcmtlciI6ICJ3b3JrZXJBZ2VudCIsCisgICAgfQorCisgICAgZG9tYWlu
X2RlZmluZV9uYW1lX21hcCA9IHsKKyAgICAgICAgIkRhdGFiYXNlIjogIkVOQUJMRV9TUUxfREFU
QUJBU0UiLAorICAgICAgICAiRE9NU3RvcmFnZSI6ICJFTkFCTEVfRE9NX1NUT1JBR0UiLAorICAg
ICAgICAiRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAi
RE9NRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiUHJv
ZmlsZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiV29ya2VyIjog
IkVOQUJMRV9XT1JLRVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlwZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIlcyIpOgorICAgICAg
ICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1hdCA9IHNldHRlcl9m
b3JtYXQKKworICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlw
ZQorCisgICAgZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXR0ZXJfZm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0g
ImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxp
ZiBqc29uX3R5cGUgPT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3Ry
aW5nCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6Cisg
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJpbnRlZ2VyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
TnVtYmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25v
d24gdHlwZTogJXMiICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToK
KyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFy
YW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFy
YW1fdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJh
bUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgY2xhc3Mg
U3RyaW5nKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRD
UGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgcGFy
YW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xz
Ll9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRH
ZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKworICAgICAgICBnZXRT
ZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJcIlwiIgorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAg
ICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1U
eXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IFN0
cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJJbnQi
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgpOgor
ICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIjAiCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAg
ICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBD
UGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBlKToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAg
cmV0dXJuICJPYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlVuc3VwcG9ydGVkIikKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5
cGUoImRvdWJsZSIpCisKKyAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgorICAgICAgICAgICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAg
ICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNs
cy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkJvb2xlYW4i
CisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJl
dHVybiAiZmFsc2UiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNC
aW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUo
ImJvb2wiKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNv
bnN0IiwgIiolcyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgorICAgICAgICBAY2xh
c3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRp
b25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVy
biAiT2JqZWN0IgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAg
ICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0
dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVu
dFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAg
ICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQor
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhv
ZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToK
KyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLk9VVFBVVDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAgIGVsaWYgcGFyYW1f
dHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxh
aW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0
ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkFycmF5IgorCisgICAgICAgIGdldFNldHRl
ck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFycmF5
OjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0Jp
bmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBl
KCJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCisKKworY2xhc3MgUGFyYW1UeXBlKG9iamVj
dCk6CisgICAgSU5QVVQgPSAiaW5wdXQiCisgICAgT1VUUFVUID0gIm91dHB1dCIKKyAgICBFVkVO
VCA9ICJldmVudCIKKworCitjbGFzcyBUeXBlRGF0YShvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToKKyAgICAgICAgc2VsZi5qc29uX3R5cGVf
ID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KKwor
ICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlOgorICAgICAgICAgICAganNvbl90eXBlX25h
bWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5n
ZXQoanNvbl90eXBlX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVua25vd24gdHlwZSIpCisgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUK
KworICAgIGRlZiBnZXRSYXdUeXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlw
ZV8KKworCitjbGFzcyBUeXBlTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGkpOgorICAg
ICAgICBzZWxmLm1hcF8gPSB7fQorICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21h
aW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQor
CisgICAgICAgICAgICBkb21haW5fbWFwID0ge30KKyAgICAgICAgICAgIHNlbGYubWFwX1tkb21h
aW5fbmFtZV0gPSBkb21haW5fbWFwCisKKyAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9k
b21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlw
ZXMiXToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9k
b21haW4pCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9uYW1lXSA9IHR5cGVf
ZGF0YQorCisgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQorCisKK2RlZiByZXNv
bHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAg
aWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3JlZiA9IGpzb25fcGFy
YW1ldGVyWyIkcmVmIl0KKyAgICAgICAgdHlwZV9kYXRhID0gZ2V0UmVmRGF0YShqc29uX3JlZiwg
c2NvcGVfZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0UmF3VHlwZSgp
CisgICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fdHlwZSA9
IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29u
X3R5cGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUi
KQorCisKK2RlZiBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAg
ZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKQorICAgIGlmIGRvdF9wb3MgPT0gLTE6CisgICAg
ICAgIGRvbWFpbl9uYW1lID0gc2NvcGVfZG9tYWluX25hbWUKKyAgICAgICAgdHlwZV9uYW1lID0g
anNvbl9yZWYKKyAgICBlbHNlOgorICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fcmVmWzpkb3Rf
cG9zXQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZltkb3RfcG9zICsgMTpdCisKKyAgICBy
ZXR1cm4gdHlwZV9tYXAuZ2V0KGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpCisKKworaW5wdXRfZmls
ZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwgInIiKQoranNvbl9zdHJpbmcgPSBpbnB1dF9m
aWxlLnJlYWQoKQoranNvbl9hcGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5nKQorCisKK2NsYXNz
IFRlbXBsYXRlczoKKyAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUo
CisiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CisgICAgcHVibGljOgorICAgICAgICAk
ZG9tYWluQ2xhc3NOYW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9Ciske2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisgICAgfTsKKworICAgICRk
b21haW5DbGFzc05hbWUqICRkb21haW5GaWVsZE5hbWUoKSB7IHJldHVybiAmbV8kZG9tYWluRmll
bGROYW1lOyB9CisKKyIiIikKKworICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRl
KAorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfV8kbWV0
aG9kTmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVj
dCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCEkYWdlbnRGaWVsZCkKKyAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9tYWluTmFtZX0gaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOworJG1ldGhvZE91dENvZGUKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyRtZXRo
b2RJbkNvZGUKK2lmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQorICAgICRhZ2VudEZpZWxk
LT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1zKTsKKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske3Jlc3Bv
bnNlQ29va31zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJGRvbWFpbk5h
bWUuJG1ldGhvZE5hbWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKK30KKyIiIikKKworICAg
IGZyb250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgiIiJ2b2lkIEluc3BlY3RvckZyb250
ZW5kOjokZG9tYWluTmFtZTo6JGV2ZW50TmFtZSgkcGFyYW1ldGVycykKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiAke2V2ZW50TmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAke2V2ZW50TmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICIk
ZG9tYWluTmFtZS4kZXZlbnROYW1lIik7CiskY29kZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoJHtldmVudE5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorIiIi
KQorCisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMp
IDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0
b3JGcm9udGVuZF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKKworI2luY2x1ZGUgPFBs
YXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKK3B1YmxpYzoKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKworCiskZG9tYWluQ2xh
c3NMaXN0Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7Ciske2ZpZWxkRGVjbGFyYXRpb25zfX07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQorIiIi
KQorCisgICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJf
aAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKworJGZvcndh
cmREZWNsYXJhdGlvbnMKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4geworcHVibGljOgorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsJGNvbnN0
cnVjdG9yUGFyYW1zKQorICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyRjb25zdHJ1Y3RvckluaXQKKyAgICB7IH0KKworICAgIHZv
aWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9CisK
KyAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7CisgICAgICAgIFBhcnNlRXJyb3IgPSAwLAorICAg
ICAgICBJbnZhbGlkUmVxdWVzdCwKKyAgICAgICAgTWV0aG9kTm90Rm91bmQsCisgICAgICAgIElu
dmFsaWRQYXJhbXMsCisgICAgICAgIEludGVybmFsRXJyb3IsCisgICAgICAgIFNlcnZlckVycm9y
LAorICAgICAgICBMYXN0RW50cnksCisgICAgfTsKKworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihj
b25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OworICAg
IHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsKKwor
ICAgIGVudW0gTWV0aG9kTmFtZXMgeworCiskbWV0aG9kTmFtZXNFbnVtQ29udGVudAorfTsKKwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwor
ICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxs
SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJy
b3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsKKworJG1ldGhvZERlY2xhcmF0aW9ucworCisgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyRm
aWVsZERlY2xhcmF0aW9ucworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gpCisKKworIiIiKQorCisgICAg
YmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorJGluY2x1ZGVzCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmROYW1lc1tdID0geworJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKK307CisKKworJG1ldGhvZHMK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QgPSB0aGlzOworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVj
dCk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFw
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwor
ICAgIGxvbmcgY2FsbElkID0gMDsKKworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7CiskbWVzc2FnZUhhbmRs
ZXJzCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFuZE5h
bWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRO
YW1lc1tpXSwgaGFuZGxlcnNbaV0pOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Cisg
ICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwg
UGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVj
dCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7
CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdl
IG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+
Z2V0KCJpZCIpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVx
dWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFs
dWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAgIGlmICghbWV0aG9kVmFsdWUp
IHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwg
IidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygm
bWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRS
ZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9
PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBtZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQs
IG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQorewor
ICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJy
b3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxl
bmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJy
b3IsIGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQp
OworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CisgICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90
b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1lc3NhZ2UsIDApOworfQorCit2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoVmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKKyAgICBpZiAoIXNfY29t
bW9uRXJyb3JzLnNpemUoKSkgeworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VF
cnJvciwgLTMyNzAwKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1
ZXN0LCAtMzI2MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91
bmQsIC0zMjYwMSk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1z
LCAtMzI2MDIpOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwg
LTMyNjAzKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIw
MDApOworICAgIH0KKyAgICBBU1NFUlQoY29kZSA+PTApOworICAgIEFTU0VSVCgodW5zaWduZWQp
Y29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7CisgICAgQVNTRVJUKHNfY29tbW9uRXJyb3Jz
W2NvZGVdKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJy
b3JzW2NvZGVdKTsKKyAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdl
KTsKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIGlmIChkYXRhKQorICAgICAgICBlcnJvci0+c2V0
QXJyYXkoImRhdGEiLCBkYXRhKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVy
cm9yIiwgZXJyb3IpOworICAgIGlmIChjYWxsSWQpCisgICAgICAgIG1lc3NhZ2UtPnNldE51bWJl
cigiaWQiLCAqY2FsbElkKTsKKyAgICBlbHNlCisgICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJp
ZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK2ludCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91
bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBpbnQgdmFsdWUgPSAwOwor
CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAg
ICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgor
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidw
YXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0
eXBlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVl
SXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IG11c3QgYmUgJ051bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAg
ICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBB
U1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2
YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBTdHJpbmcgdmFsdWUgPSAiIjsKKworICAgIGlmICgh
b2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVx
dWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmpl
Y3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3RyaW5n
Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBv
YmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09
IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBl
ICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+
YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdT
dHJpbmcnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZh
bHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9j
b2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0g
ZmFsc2U7CisKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFt
ZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29u
dGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5k
KCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0g
b2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4n
IHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNCb29sZWFu
KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnQm9vbGVhbicu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3Vu
ZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAg
ICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAg
ICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAg
ICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRl
ciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFp
biByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsK
KyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMg
bm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzT2JqZWN0KCZ2YWx1
ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnT2JqZWN0Jy4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAg
ICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFy
cmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQo
cHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZv
dW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2lu
ZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQg
cGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFt
ZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1
ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91bmQuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNBcnJheSgmdmFsdWUpKQorICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVl
Rm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KK2Jvb2wgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5n
KiByZXN1bHQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBmcm9udGVu
ZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisKKworSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorJGNv
bnN0cnVjdG9ySW5pdHsKK30KKworJG1ldGhvZHMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGJhY2tlbmRfanMgPSBz
dHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKworCitJbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkK
K3sKKyAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50ID0gMDsKKyAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLl9kb21h
aW5EaXNwYXRjaGVycyA9IHt9OworICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OworJGRlbGVnYXRl
cyRldmVudEFyZ3MkZG9tYWluRGlzcGF0Y2hlcnMgICAgfQorCitJbnNwZWN0b3JCYWNrZW5kU3R1
Yi5wcm90b3R5cGUgPSB7CisgICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKKyAgICBkdW1w
SW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKKworICAgIF93cmFwOiBmdW5jdGlvbihjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNr
SWQrKzsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwg
ZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7CisgICAgfSwKKworICAg
IF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQorICAgIHsKKyAgICAg
ICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRo
b2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9u
WzBdICsgIkFnZW50IjsKKyAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKKyAgICAgICAg
ICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2Rv
bWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhp
cywgcmVxdWVzdFN0cmluZyk7CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1
bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3Ry
aW5nKQorICAgIH0sCisKKyAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdz
LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1
ZXN0U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOworICAgICAgICB0aGlz
Ll93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Cisg
ICAgfSwKKworICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwor
ICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKKyAgICAgICAg
dmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0g
MV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7CisgICAgICAgIHZhciBkb21haW5B
bmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICB2YXIgYWdlbnRN
ZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsx
XTsKKworICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0
LnBhcmFtcykgeworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBl
OworICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXld
Lm9wdGlvbmFsOworCisgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFv
cHRpb25hbEZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9j
b2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdl
bnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsg
SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0
eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtc1trZXldOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0
eXBlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAn
IiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicg
YnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnBh
cmFtc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQorICAgICAgICAgICAgICAg
IGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdzLmxl
bmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1sw
XSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICci
ICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5k
TWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF93cmFwQ2Fs
bGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJh
Y2spCisgICAgeworICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFj
ayk7CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgeworICAgICAg
ICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0
LmlkXTsKKyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9i
amVjdC5tZXRob2Q7CisgICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0
b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAi
ICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOworCisgICAgICAgICsrdGhpcy5fcGVu
ZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNr
ZW5kKG1lc3NhZ2VPYmplY3QpOworICAgIH0sCisKKyAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFj
a2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUudGlt
ZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09O
LnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCisgICAgeworICAg
ICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKKyAgICB9
LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2Fn
ZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7CisKKyAgICAgICAgdmFyIG1lc3NhZ2VPYmpl
Y3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkg
OiBtZXNzYWdlOworCisgICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVz
dCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2Jq
ZWN0LmVycm9yKSB7CisgICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3Rv
X18gPSB7CisgICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlz
LmNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJu
ICJQYXJzZSBlcnJvciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6
IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3Ii
OzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2
ZXIgZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
IlVua25vd24gZXJyb3IgY29kZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3Nh
Z2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdl
OiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2Rl
ICE9PSAtMzIwMDApCisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJv
cihtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGFyZ3Vt
ZW50cyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQorICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJh
Y2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgICAg
ICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CisgICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKworICAgICAgICAgICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFj
ay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNl
bmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGlt
ZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAh
dGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQorICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0
ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3Bs
aXQoIi4iKTsKKyAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOworICAgICAg
ICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKKyAgICAgICAgICAgIGlmICghKGRv
bWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7CisgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhp
c3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9k
b21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKKyAgICAgICAgICAgIGlmICghKGZ1bmN0aW9u
TmFtZSBpbiBkaXNwYXRjaGVyKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRo
b2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1tt
ZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQ
cm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhv
ZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAgICAg
ICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhciBw
YXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFt
TmFtZXNbaV1dKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdT
dGFydFRpbWU7CisgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQor
ICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAg
ICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1z
KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0
aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdl
T2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0g
IiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3Ip
OworICAgIH0sCisKKyAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3Jp
cHQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCisgICAgICAgICAgICB0aGlz
Ll9zY3JpcHRzID0gW107CisKKyAgICAgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgICAgIHRoaXMu
X3NjcmlwdHMucHVzaChzY3JpcHQpOworCisgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Cisg
ICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KKyAgICAgICAgICAgIGZvciAodmFyIGlkID0g
MDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKKyAgICAgICAgICAgICAgICAgc2NyaXB0c1tp
ZF0uY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW5zcGVjdG9yQmFja2VuZCA9
IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOyIiIikKKworICAgIHBhcmFtX2NvbnRhaW5lcl9h
Y2Nlc3NfY29kZSA9ICIiIgorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOworICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOworIiIiCisKKwordHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpKQorCisKK2NsYXNz
IEdlbmVyYXRvcjoKKyAgICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtdCisgICAgZnJv
bnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KKworICAgIG1ldGhvZF9uYW1lX2VudW1fbGlz
dCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAgYmFj
a2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2Rf
bmFtZV9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBtZXRob2RfaGFuZGxlcl9saXN0ID0gW10K
KyAgICBmcm9udGVuZF9tZXRob2RfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19pbml0aWFsaXpl
cl9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2V2ZW50X2xpc3QgPSBbXQorICAgIGJhY2tlbmRf
anNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdCA9IFtdCisKKyAgICBiYWNrZW5kX2NvbnN0cnVjdG9y
X3BhcmFtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10K
KyAgICBiYWNrZW5kX2ZpZWxkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZm9yd2FyZF9saXN0ID0g
W10KKyAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfY29uc3RydWN0
b3JfaW5pdF9saXN0ID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ28oKToKKyAg
ICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CisgICAgICAgICAg
ICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorICAgICAgICAgICAgZG9tYWlu
X25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCisKKyAgICAgICAgICAgIGRvbWFpbl9k
YXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorCisgICAg
ICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZpbmVzX21hcCk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFp
bl9kYXRhLmFnZW50X2ZpZWxkX25hbWUKKworICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2Rl
Y2xhcmF0aW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGlmICJldmVudHMiIGluIGpzb25fZG9t
YWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVu
dHMiXToKKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9l
dmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKKwor
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5hcHBl
bmQoIiAgICAlcyBtXyVzO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIpKQor
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3Qu
YXBwZW5kKCIgICAgLCBtXyVzKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbClcbiIgJSBkb21haW5f
bmFtZV9sb3dlcikKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2Ns
YXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1
dGUoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluQ2xhc3NOYW1lPWRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICBkb21haW5GaWVsZE5hbWU9ZG9tYWluX25hbWVfbG93ZXIs
CisgICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPWpv
aW4oZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLCAiIikpKQorICAgICAgICAgICAg
aWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl9j
b21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBH
ZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50
X2ZpZWxkX25hbWUpCisKKyAgICAgICAgICAgIGlmIG5vdCBkb21haW5fZGF0YS5za2lwX2pzX2Jp
bmQ6CisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3BhdGNo
ZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNEaXNwYXRjaGVyID0gdGhpcy5fcmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIlc1wiKTtcbiIgJSAoZG9tYWluX25h
bWUsIGRvbWFpbl9uYW1lKSkKKworICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zID0gbGlzdChq
c29uX2FwaVsiZG9tYWlucyJdKQorICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zLnNvcnQoa2V5
PWxhbWJkYSBvOiBvWyJkb21haW4iXSkKKworICAgICAgICBmb3IganNvbl9kb21haW4gaW4gc29y
dGVkX2pzb25fZG9tYWluczoKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5b
ImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdl
dF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAgICAgICAgICAgaWYgZG9tYWluX2RhdGEuaXNf
ZGlzYWJsZWQoZGVmaW5lc19tYXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAg
ICAgICAgIGlmIGRvbWFpbl9kYXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9uYW1l
CisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRf
bmFtZQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlz
dC5hcHBlbmQoIiwgJXMqICVzIiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUp
KQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFw
cGVuZCgiICAgICAgICAsIG1fJXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVs
ZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5k
KCIgICAgJXMqIG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQor
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xhc3Mg
JXM7IiAlIGFnZW50X3R5cGVfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2lu
Y2x1ZGVfbGlzdC5hcHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFtZSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBk
b21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAg
ZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9
IFtdCisgICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pzX2V2
ZW50X3BhcmFtX2xpc3QgPSBbXQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9ldmVu
dDoKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIp
CisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1ldGVy
cyJdOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5h
bWUiXQorCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpz
b25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0aW9u
YWwgPSAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0
aW9uYWwiXQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlzRXZl
bnRQYXJhbUNoZWNrT3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBl
LmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAg
ICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAgICAg
ICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBlLmdl
dF90ZXh0KCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1
bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKworICAg
ICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNc
IiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVu
dCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2V0
dGVyX2NvZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRl
cl9jb2RlCisgICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2Nv
ZGUpCisKKyAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBwZW5k
KCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0
LmFwcGVuZCgiICAgICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVj
dCk7XG4iICUgZXZlbnRfbmFtZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9u
X2xpbmVzLmFwcGVuZCgKKyAgICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAlIChl
dmVudF9uYW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2VuZXJh
dG9yLmZyb250ZW5kX21ldGhvZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9k
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIGV2
ZW50TmFtZT1ldmVudF9uYW1lLAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFtZXRl
cl9saXN0LCAiLCAiKSwKKyAgICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0LCAi
IikpKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5kKCIg
ICAgdGhpcy5fZXZlbnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAgICAg
IGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlz
dCwgIiwgIikpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQo
anNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpz
b25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9y
Lm1ldGhvZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9t
YWluX25hbWUsIGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhv
ZF9oYW5kbGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lk
ICVzXyVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0aG9k
X2luX2NvZGUgPSAiIgorICAgICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBhZ2Vu
dF9jYWxsX3BhcmFtX2xpc3QgPSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBbXQor
ICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0ZXJz
X3RleHQgPSAiIgorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgorICAg
ICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAgICAg
ICAgICAgbWV0aG9kX2luX2NvZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nlc3Nf
Y29kZQorICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCIKKyAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAgICBm
b3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNvbl9w
YXJhbV9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBhcmFt
X3Jhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25h
bWUpCisKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQYXJh
bVR5cGUoUGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9uYW1l
ID0gcGFyYW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBpZiAi
b3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwi
XToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9
IGZhbHNlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBn
ZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29s
RXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1f
bmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwg
anNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBw
YXJhbSA9ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25hbWUs
IGpzb25fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwi
JXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUs
IGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMi
ICUganNvbl9wYXJhbV9uYW1lCisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBj
b2RlCisgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkK
KworICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmlu
ZFR5cGUoKQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRp
b25hbFwiOiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBq
c29uX3BhcmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25h
bCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNl
ICJmYWxzZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAgICAg
ICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAg
ICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1f
bGlzdCwgIiwgIikgKyAifSIKKworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgorICAg
ICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9kX291
dF9jb2RlICs9ICJcbiIKKyAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1h
bmRbInJldHVybnMiXToKKworICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29u
X3JldHVyblsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1S
YXdUeXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJf
dHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRpYWxp
emVyID0gcmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJfdHlw
ZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKworICAg
ICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlwZS5n
ZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAgICAg
ICBwYXJhbSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAg
IGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0
dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAg
ICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIgaW4g
anNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAg
ICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25h
bWUpICsgY29vaworCisgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKKyAg
ICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAg
ICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAgIHJl
c3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYg
IWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3Qs
ICIiKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAg
ICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRf
bmFtZSwKKyAgICAgICAgICAgIGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisg
ICAgICAgICAgICBtZXRob2RJbkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRo
b2RPdXRDb2RlPW1ldGhvZF9vdXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFtcz1q
b2luKGFnZW50X2NhbGxfcGFyYW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1lc3Nh
Z2VPYmplY3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29r
PXJlc3BvbnNlX2Nvb2tfdGV4dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9u
YW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25h
bWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19p
bml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
XCJtZXRob2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25hbWUs
IGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRvci5n
bygpCisKK2JhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0gb3Bl
bihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIs
ICJ3IikKKworZnJvbnRlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAi
L0luc3BlY3RvckZyb250ZW5kLmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4ob3V0
cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2JhY2tl
bmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcyIsICJ3IikKKworCitmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250
ZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihH
ZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRvbWFp
bkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIi
KSkpCisKK2JhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0
ZShOb25lLAorICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0
cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihHZW5l
cmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgbWV0aG9kTmFt
ZXNFbnVtQ29udGVudD1qb2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIp
LAorICAgIG1ldGhvZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVy
YXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9
am9pbihHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRf
Y3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisg
ICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdCwgIiIpLAorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9k
X2xpc3QsICJcbiIpKSkKKworYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2Vu
ZF9jcHAuc3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihH
ZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAg
ICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiksCisg
ICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LCAiXG4iKSwKKyAgICBtZXNzYWdlSGFuZGxlcnM9am9pbihHZW5lcmF0b3IubWV0aG9kX2hh
bmRsZXJfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJh
Y2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAorICAgIGRlbGVnYXRlcz1qb2luKEdlbmVyYXRvci5i
YWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QsICIiKSwKKyAgICBldmVudEFyZ3M9am9pbihHZW5l
cmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0LCAiIiksCisgICAgZG9tYWluRGlzcGF0Y2hlcnM9
am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LCAiIikpKQor
CitiYWNrZW5kX2hfZmlsZS5jbG9zZSgpCitiYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKKworZnJv
bnRlbmRfaF9maWxlLmNsb3NlKCkKK2Zyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKKworYmFja2Vu
ZF9qc19maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpp
bmRleCA4OGI5ZTk5ZTk3ZGMzMzlkYWFjZDBhMDRjMDA3OGY5ZWY5ZGY0N2RiLi45OTAzMDViMjQw
NmRmYjVlYjFmMTQyMmE1MTA1NGNhMTJkOGI5NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzZXNzaW9uIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJU
cnVlIGluIGNhc2Ugb2Ygc2Vzc2lvbiBjb29raWUuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICAgICAiaGlkZGVuIjogdHJ1ZQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAgewpAQCAt
ODQ2LDcgKzg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNMb2NhbFN0
b3JhZ2UiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIGxvY2Fs
IHN0b3JhZ2UuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgInR5cGUi
OiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkVudHJ5IGlkIGZvciBmdXJ0aGVyIHJlZmVyZW5j
ZS4iIH0KICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQog
ICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAxOGRlZDYxMGIyODZiYTVlNjQ4MGNhOWFkYTNmZGFkZjkwNmZi
YTdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCisrKyAvZGV2L251bGwK
QEAgLTEsMTYxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotcHJvZ3JhbV9uYW1lID0gb3MucGF0
aC5iYXNlbmFtZShfX2ZpbGVfXykKLWlmIGxlbihzeXMuYXJndikgPCA0IG9yIHN5cy5hcmd2WzFd
ICE9ICItbyI6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6ICVzIC1vIE9VVFBVVF9GSUxF
IElOUFVUX0ZJTEVcbiIgJSBwcm9ncmFtX25hbWUpCi0gICAgZXhpdCgxKQotCi1vdXRwdXRfcGF0
aCA9IHN5cy5hcmd2WzJdCi1pbnB1dF9wYXRoID0gc3lzLmFyZ3ZbM10KLQotaW5wdXRfZmlsZSA9
IG9wZW4oaW5wdXRfcGF0aCwgInIiKQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQot
anNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IHRydWUiLCAiOiBUcnVlIikKLWpz
b25fc3RyaW5nID0ganNvbl9zdHJpbmcucmVwbGFjZSgiOiBmYWxzZSIsICI6IGZhbHNlIikKLWpz
b25fYXBpID0gZXZhbChqc29uX3N0cmluZylbImRvbWFpbnMiXQotCi1vdXRwdXRfZmlsZSA9IG9w
ZW4ob3V0cHV0X3BhdGgsICJ3IikKLW91dHB1dF9maWxlLndyaXRlKCIiIi8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAotbW9kdWxlIGNvcmUgeyIiIikKLQot
dHlwZV90cmFpdHMgPSB7Ci0gICAgInN0cmluZyI6ICJTdHJpbmciLAotICAgICJpbnRlZ2VyIjog
ImludCIsCi0gICAgIm51bWJlciI6ICJkb3VibGUiLAotICAgICJib29sZWFuIjogImJvb2xlYW4i
LAotICAgICJhcnJheSI6ICJBcnJheSIsCi0gICAgIm9iamVjdCI6ICJPYmplY3QiCi19Ci0KLXJl
Zl90eXBlcyA9IHt9Ci0KLW1hY3JvX3RyYWl0cyA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RB
VEFCQVNFIiwKLSAgICAiRE9NU3RvcmFnZSI6ICJET01fU1RPUkFHRSIsCi0gICAgIkRlYnVnZ2Vy
IjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJET01EZWJ1Z2dlciI6ICJKQVZBU0NSSVBU
X0RFQlVHR0VSIiwKLSAgICAiUHJvZmlsZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAg
IldvcmtlciI6ICJXT1JLRVJTIgotfQotCi1kZWYgZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21h
aW5fbmFtZSwgdHlwZV9pZCk6Ci0gICAgaWYgdHlwZV9pZC5maW5kKCIuIikgPT0gLTE6Ci0gICAg
ICAgcmV0dXJuICIlcy4lcyIgJSAoZG9tYWluX25hbWUsIHR5cGVfaWQpCi0gICAgcmV0dXJuIHR5
cGVfaWQKLSAgICAKLQotZGVmIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIHBhcmFtKToKLSAgICBp
ZiAidHlwZSIgaW4gcGFyYW06Ci0gICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1twYXJhbVsidHlw
ZSJdXQotICAgIGlmICIkcmVmIiBpbiBwYXJhbToKLSAgICAgICAgdHlwZV9pZCA9IGZ1bGxfcXVh
bGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHBhcmFtWyIkcmVmIl0pCi0gICAgICAgIGlmIHR5
cGVfaWQgaW4gcmVmX3R5cGVzOgotICAgICAgICAgICAgcmVmX3R5cGUgPSByZWZfdHlwZXNbdHlw
ZV9pZF0KLSAgICAgICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1tyZWZfdHlwZVsidHlwZSJdXQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIlR5cGUgbm90IGZvdW5kOiAiICsgdHlw
ZV9pZCkKLSAgICAgICAgICAgIHJldHVybiAiISEgVHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lk
Ci0KLWZvciBkb21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUgPSBkb21haW5bImRv
bWFpbiJdCi0gICAgaWYgInR5cGVzIiBpbiBkb21haW46Ci0gICAgICAgIGZvciB0eXBlIGluIGRv
bWFpblsidHlwZXMiXToKLSAgICAgICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBl
X2lkKGRvbWFpbl9uYW1lLCB0eXBlWyJpZCJdKQotICAgICAgICAgICAgcmVmX3R5cGVzW3R5cGVf
aWRdID0gdHlwZTsKLQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAgICBkb21haW5fbmFtZSA9
IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiBkb21haW5fbmFtZSBpbiBtYWNyb190cmFpdHM6Ci0g
ICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNpZiBkZWZpbmVkKEVOQUJMRV8lcykgJiYgRU5B
QkxFXyVzIiAlIChtYWNyb190cmFpdHNbZG9tYWluX25hbWVdLCBtYWNyb190cmFpdHNbZG9tYWlu
X25hbWVdKSkKLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgaW50ZXJmYWNlIFtDb25kaXRp
b25hbD1JTlNQRUNUT1JdICVzIHsiICUgZG9tYWluX25hbWUpCi0KLSAgICBpZiAiY29tbWFuZHMi
IGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluWyJjb21tYW5kcyJdOgot
ICAgICAgICAgICAgcGFyYW1zID0gW10KLSAgICAgICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4g
Y29tbWFuZCk6Ci0gICAgICAgICAgICAgICAgZm9yIGluX3BhcmFtIGluIGNvbW1hbmRbInBhcmFt
ZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0p
OgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9
ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoImluJXMgJXMgJXMiICUgKG9w
dGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBpbl9wYXJhbSksIGluX3BhcmFtWyJuYW1l
Il0pKQotICAgICAgICAgICAgaWYgKCJyZXR1cm5zIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAg
ICAgICBmb3Igb3V0X3BhcmFtIGluIGNvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCJvcHRpb25hbCIgaW4gb3V0X3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9t
YWluX25hbWUsIG91dF9wYXJhbSksIG91dF9wYXJhbVsibmFtZSJdKSkKLSAgICAgICAgICAgIG91
dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgdm9pZCAlcyglcyk7IiAlIChjb21tYW5kWyJuYW1l
Il0sICIsICIuam9pbihwYXJhbXMpKSkKLQotICAgIGlmICJldmVudHMiIGluIGRvbWFpbjoKLSAg
ICAgICAgZm9yIGV2ZW50IGluIGRvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICBwYXJhbXMg
PSBbXQotICAgICAgICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBldmVudCk6Ci0gICAgICAgICAg
ICAgICAgZm9yIGluX3BhcmFtIGluIGV2ZW50WyJwYXJhbWV0ZXJzIl06Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAg
ICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9t
YWluX25hbWUsIGluX3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBvdXRw
dXRfZmlsZS53cml0ZSgiXG4gICAgICAgIFtldmVudF0gdm9pZCAlcyglcyk7IiAlIChldmVudFsi
bmFtZSJdLCAiLCAiLmpvaW4ocGFyYW1zKSkpCi0KLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4g
ICAgfTsiKQotICAgIGlmIGRvbWFpblsiZG9tYWluIl0gaW4gbWFjcm9fdHJhaXRzOgotICAgICAg
ICBvdXRwdXRfZmlsZS53cml0ZSgiXG4jZW5kaWYgLy8gRU5BQkxFXyVzIiAlIG1hY3JvX3RyYWl0
c1tkb21haW5bImRvbWFpbiJdXSkKLW91dHB1dF9maWxlLndyaXRlKCJcbn1cbiIpCi1vdXRwdXRf
ZmlsZS5jbG9zZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110523</attachid>
            <date>2011-10-11 09:22:32 -0700</date>
            <delta_ts>2011-10-17 09:40:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111011202229.patch</filename>
            <type>text/plain</type>
            <size>122926</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWVhZjcz
MTFhYTU0YThmNGRmZDAxM2VkNjg5Yzc5NjM3ZTE5NGNhYy4uMjU0OGM0Zjg0NTQzOWIxYTAyMDlj
OTdjMDJlYzIzYjNhNGUwZTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTQsMTcgKzIy
MTQsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMTViMjg5MjRlOTUxNmVhNDU3ZjkzYzBkZmQ3NDZhN2Y2N2ViOWVkMi4u
MWE1ZmI1ZjNmZmFlZjU4YThlZDQwNjcxZTA2NmE2ZGQ2MGQwMWZhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIwIEBACisyMDExLTEwLTA3ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBDb2RlR2Vu
ZXJhdG9ycy5wcmk6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBH
TlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0
ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgorCiAyMDExLTEwLTA3ICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSB3ZWJraXR3ZWJz
cmM6IGF2b2lkIEdTVF9CT0lMRVJQTEFURV9GVUxMCkBAIC0zMTU4LDYgKzMxNzUsMjEgQEAKICAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW06CiAgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlcjo6U2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIpOgogCisyMDExLTEwLTA0ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdt
YWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBi
YWNrZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbTogUmVtb3ZlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uOgorICAgICAgICAqIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVk
LgorCiAyMDExLTEwLTA0ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQnVpbGQgZml4ZXMgZm9yIGV2ZXJ5b25lLgpAQCAtMTM3ODQsNiArMTM4MTYsMjAg
QEAKICAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpjYW5SZW1haW5BbGl2
ZU9uUmVtb3ZhbEZyb21UcmVlKToKICAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNl
Lmg6CiAKKzIwMTEtMTAtMDMgIFBldGVyIFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJv
bnRlbmQgc291cmNlIGdlbmVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIFdlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtOgorICAgICAgICAoZmluaXNoKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weTogQWRkZWQuCisKIDIwMTEtMDktMTkgIEFiaGlzaGVrIEFyeWEgIDxp
bmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBJc3N1ZXMgd2l0aCBtZXJnaW5nIHJ1Ynkg
YmFzZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkgYi9T
b3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKaW5kZXggZjE1ZTM5ZWVjMjJlZTIxNjhm
YjkyMTk0NzEyOTNjMzlmZjhhZGQ4MS4uYjBjZTJmNTBkODYxNTJmZDNlNmY5ZTg4OGM5MTkxNDU0
NjJmODgzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQpAQCAtNjc3LDI5ICs2NzcsMTIg
QEAgaW5zcGVjdG9yVmFsaWRhdGUuZGVwZW5kcyA9ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogaW5zcGVjdG9yVmFsaWRhdGUud2tBZGRPdXRwdXRU
b1NvdXJjZXMgPSBmYWxzZQogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JWYWxpZGF0ZSkKIAot
aW5zcGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwKK2luc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKIGluc3BlY3RvckpTT04uaW5wdXQgPSBJTlNQ
RUNUT1JfSlNPTgotaW5zcGVjdG9ySlNPTi53a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5z
cGVjdG9ySlNPTi53a1NjcmlwdCAtbyAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3Bl
Y3Rvci5pZGwgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi1pbnNwZWN0b3JKU09OLmRl
cGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9y
SlNPTi53a0FkZE91dHB1dFRvU291cmNlcyA9IGZhbHNlCitpbnNwZWN0b3JKU09OLndrU2NyaXB0
ID0gJCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKK2luc3BlY3RvckpT
T04uY29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0ICQkUFdEL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUiAtLW91dHB1dF9jcHBfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0tZGVmaW5l
cyBcIiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiCitpbnNwZWN0b3JKU09OLmRlcGVu
ZHMgPSAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9y
SlNPTikKLWluc3BlY3RvckpTT04udmFyaWFibGVfb3V0ID0gSU5TUEVDVE9SX0pTT05fT1VUUFVU
Ci0KLWluc3BlY3RvcklETC5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0lu
c3BlY3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcAotaW5zcGVjdG9ySURMLmlucHV0ID0gSU5TUEVDVE9SX0pT
T05fT1VUUFVUCi1pbnNwZWN0b3JJREwud2tTY3JpcHQgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRz
L2dlbmVyYXRlLWJpbmRpbmdzLnBsCi1pbnNwZWN0b3JJREwuY29tbWFuZHMgPSBwZXJsIC1JJCRQ
V0QvYmluZGluZ3Mvc2NyaXB0cyAtSSQkUFdEL2luc3BlY3RvciAkJGluc3BlY3RvcklETC53a1Nj
cmlwdCAtLWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIiAtLWdlbmVy
YXRvciBJbnNwZWN0b3IgLS1vdXRwdXREaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1w
cmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJHtRTUFLRV9GSUxFX05BTUV9Ci1pbnNw
ZWN0b3JJREwuZGVwZW5kcyA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5w
bSBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtIFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0g
XAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSW5GaWxlc1BhcnNlci5wbSBc
Ci0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvcHJlcHJvY2Vzc29yLnBtIFwK
LSAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIFwKLSAgICAgICAg
ICAgICAgJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWluc3BlY3RvcklE
TC53a0V4dHJhU291cmNlcyA9ICQkaW5zcGVjdG9ySURMLm91dHB1dAotYWRkRXh0cmFDb21waWxl
cihpbnNwZWN0b3JJREwpCiAKIGluc3BlY3RvckJhY2tlbmRTdHViLm91dHB1dCA9IGdlbmVyYXRl
ZC9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5xcmMKIGluc3BlY3RvckJhY2tlbmRTdHViLmlucHV0ID0g
SU5TUEVDVE9SX0JBQ0tFTkRfU1RVQl9RUkMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDVlYTA0ZGUxNTA4MWZiMWZlNGI1MGZkOTc2ODc2MGVkZGI3MTNjN2UuLmMwYzI1NWQ1Njhi
YThmZWIwNTI0NjhlNWNlZjRkZGY0MDYxNzYzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtODk0LDE1ICs4OTQsMTIgQEAgYWxsIDogSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9u
LmgKIEluc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJcHl0aG9uICQoV2ViQ29yZSkv
aW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vIEluc3BlY3Rv
clByb3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCiAK
LUluc3BlY3Rvci5pZGwgOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVj
dG9yLWlkbAotCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
aWRsIC1vIEluc3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
LQogYWxsIDogSW5zcGVjdG9yRnJvbnRlbmQuaAogCi1JTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMgPSAkKEdFTkVSQVRFX1NDUklQVFMpIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCitJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQogCi1JbnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmlkbCAkKElO
U1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKGNhbGwgZ2VuZXJhdG9yX3NjcmlwdCwgJChJ
TlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpKSAtLW91dHB1dERpciAuIC0tZGVmaW5lcyAiJChG
RUFUVVJFX0RFRklORVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiIC0tZ2VuZXJhdG9yIEluc3BlY3Rv
ciAkPAorSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5qc29uICQoSU5TUEVDVE9SX0dF
TkVSQVRPUl9TQ1JJUFRTKQorCXB5dGhvbiAkKFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIC0tb3V0
cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3BwX2RpciAuIC0tZGVmaW5lcyAiJChGRUFUVVJFX0RFRklO
RVMpIExBTkdVQUdFX0pBVkFTQ1JJUFQiCiAKIGFsbCA6IEluamVjdGVkU2NyaXB0U291cmNlLmgK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCAxNDQ0YjRlNDI3ZjBmZDNhZTYxZmE4MDViM2ZjZjM1
YjAyY2U2NWE4Li4wMWYyMWUzMTA3MWQyMWM1ZTZmYzgxZWRjYjE4YjI2NDMxOTE3OTU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzAwLDExICs3MDAsOCBAQCBEZXJpdmVkU291cmNlcy9XZWJD
b3JlL1hNTE5hbWVzLmNwcCBEZXJpdmVkU291cmNlcy9XZWJDb3JlL1hNTE5hbWVzLmg6ICQoV2Vi
Q29yZQogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6
ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uCiAJJChQWVRIT04pICQoV2ViQ29y
ZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uIC1vICQoR0VO
U09VUkNFU19XRUJDT1JFKS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgogCi1EZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rv
ci5pZGwgOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi0JJChQWVRIT04pICQoV2ViQ29yZSkvaW5z
cGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJChHRU5TT1VSQ0VTX1dFQkNPUkUpL0lu
c3BlY3Rvci5pZGwgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLQotRGVyaXZl
ZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6IERlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yLmlkbCAkKFNDUklQVFNfQklORElOR1MpICQoV2ViQ29y
ZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KLQkkKEFNX1ZfR0VOKSQoUEVS
TCkgLUkkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgLUkkKFdlYkNvcmUpL2luc3BlY3RvciAk
KFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwgJChJRExfUEFU
SDolPS0taW5jbHVkZSAiJSIpIC0tb3V0cHV0RGlyICIkKEdFTlNPVVJDRVNfV0VCQ09SRSkiIC0t
ZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVNDUklQVD0xICQoRkVBVFVSRV9ERUZJTkVTKSIgLS1nZW5l
cmF0b3IgSW5zcGVjdG9yICQ8CitEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChX
ZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCSQoUFlUSE9OKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICQ8IC0tb3V0cHV0
X2hfZGlyICQoR0VOU09VUkNFU19XRUJDT1JFKSAtLW91dHB1dF9jcHBfZGlyICQoR0VOU09VUkNF
U19XRUJDT1JFKSAtLWRlZmluZXMgIkxBTkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVG
SU5FUykiCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmg6IERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwCiBEZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcDogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNw
ZWN0b3JCYWNrZW5kU3R1Yi5qcwogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNr
ZW5kU3R1Yi5qczogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3ODI1NzMz
NjIwYTdkZmI3Y2FiNmY3MGRiZGRhZTVlMjA2MmJjNzEuLmJkZTVkYTg4ZGY0Y2Q2NjQwMjk0ZmQ3
NzRmZGE5YzkxMTg0YmExNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
CkBAIC0zMzUsMTcgKzMzNSwyNCBAQAogICB9LAogICAndGFyZ2V0cyc6IFsKICAgICB7Ci0gICAg
ICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAor
ICAgICAgJ3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKICAgICAg
ICd0eXBlJzogJ25vbmUnLAorICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgJ2dlbmVy
YXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJzaW9uJworICAgICAgXSwKICAgICAgICdhY3Rpb25z
JzogWwotICAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3Bl
Y3RvclByb3RvY29sVmVyc2lvbicsCisgICAgICAgIHsKKyAgICAgICAgICAnYWN0aW9uX25hbWUn
OiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbFNvdXJjZXMnLAogICAgICAgICAgICdpbnB1dHMn
OiBbCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC12ZXJzaW9uJywKKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weScsCiAgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uJywKICAg
ICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAgICAgJzwoU0hBUkVE
X0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNw
cCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvckZyb250ZW5kLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIp
L3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMnLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzog
WwpAQCAtMzUzLDI4ICszNjAsMjggQEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24n
OiBbCiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24nLAotICAgICAgICAgICAgJy1vJywKLSAg
ICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAgICAgICAgJzxAKF9pbnB1dHMpJworICAg
ICAgICAgICAgJy4uL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAg
ICAgICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAorICAgICAgICAgICAgJy0tb3V0
cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCcsCisgICAgICAg
ICAgICAnLS1vdXRwdXRfY3BwX2RpcicsICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJj
b3JlJywKKyAgICAgICAgICAgICctLWRlZmluZXMnLCAnPChmZWF0dXJlX2RlZmluZXMpIExBTkdV
QUdFX0pBVkFTQ1JJUFQnLAogICAgICAgICAgIF0sCi0gICAgICAgICAgJ21lc3NhZ2UnOiAnVmFs
aWRhdGUgaW5zcGVjdG9yIHByb3RvY29sIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQg
Z2VuZXJhdGUgdmVyc2lvbiBmaWxlJywKLSAgICAgICAgfQorICAgICAgICAgICdtZXNzYWdlJzog
J0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuanNv
bicsCisgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25h
bWUnOiAnaW5zcGVjdG9yX2lkbCcsCisgICAgICAndGFyZ2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5z
cGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAogICAgICAgJ3R5cGUnOiAnbm9uZScsCiAgICAgICAn
YWN0aW9ucyc6IFsKLQotICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVy
YXRlSW5zcGVjdG9yUHJvdG9jb2xJREwnLAorICAgICAgICAgeworICAgICAgICAgICdhY3Rpb25f
bmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sVmVyc2lvbicsCiAgICAgICAgICAgJ2lu
cHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlk
bCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC12ZXJzaW9uJywKICAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAog
ICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAg
ICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJz
aW9uLmgnLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAg
ICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzgyLDY1ICszODksMTYgQEAKICAg
ICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9uJywK
LSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAg
ICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9u
JywKICAgICAgICAgICAgICctbycsCiAgICAgICAgICAgICAnPEAoX291dHB1dHMpJywKICAgICAg
ICAgICAgICc8QChfaW5wdXRzKScKICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzog
J0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRs
JywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdWYWxpZGF0ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9y
IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBnZW5lcmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAg
ICAgICB9CiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5z
cGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAotICAgICAgJ3R5cGUnOiAnbm9uZScsCi0gICAgICAn
ZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW5zcGVjdG9yX2lkbCcsCi0gICAgICAgICdnZW5l
cmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicKLSAgICAgIF0sCi0gICAgICAnYWN0aW9u
cyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3Bl
Y3RvclByb3RvY29sU291cmNlcycsCi0gICAgICAgICAgIyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0g
d2lsbCBiZSB1c2VkIGFzIGl0ZW0gbmFtZSBpbiB2Y3Byb2ouCi0gICAgICAgICAgIyBJdCBpcyBu
b3QgcG9zc2libGUgdG8gcHV0IEluc3BlY3Rvci5pZGwgdGhlcmUgYmVjYXVzZQotICAgICAgICAg
ICMgYWxsIGlkbCBmaWxlcyBhcmUgbWFya2luZyBhcyBleGNsdWRlZCBieSBneXAgZ2VuZXJhdG9y
LgotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0
cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvci5wbScsCi0gICAgICAgICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9JRExQ
YXJzZXIucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJl
LnBtJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0lu
c3BlY3Rvci5pZGwnLAotICAgICAgICAgIF0sCi0gICAgICAgICAgJ291dHB1dHMnOiBbCi0gICAg
ICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMnLAotICAgICAgICAgICAgJzwoU0hB
UkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
JywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3Bl
Y3RvckZyb250ZW5kLmNwcCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAotICAgICAgICAgIF0sCi0gICAgICAgICAg
J3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwot
ICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAgICAgICAgICdhY3Rpb24nOiBbCi0gICAg
ICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICdzY3JpcHRzL3J1bGVfYmluZGluZy5weScs
Ci0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0
b3IuaWRsJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3Jl
JywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQnLAotICAg
ICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICc8QChfaW5wdXRzKScsCi0gICAgICAgICAgICAn
LS0nLAotICAgICAgICAgICAgJy0tZGVmaW5lcycsICc8KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VB
R0VfSkFWQVNDUklQVCcsCi0gICAgICAgICAgICAnLS1nZW5lcmF0b3InLCAnSW5zcGVjdG9yJywK
LSAgICAgICAgICAgICc8QChnZW5lcmF0b3JfaW5jbHVkZV9kaXJzKScKLSAgICAgICAgICBdLAot
ICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNvdXJj
ZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKLSAgICAgICAgfSwKLSAgICAgIF0KLSAgICB9LAotICAg
IHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3RlZF9zY3JpcHRfc291cmNlJywKICAgICAg
ICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMnOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3MmUyMTgzYzFmMjljNDY3OTU4OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisrKyAvZGV2L251bGwKQEAg
LTEsMTIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgotCi1wYWNrYWdlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBz
dHJpY3Q7Ci0KLXVzZSBDbGFzczo6U3RydWN0OwotdXNlIEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBl
VHJhbnNmb3JtOwotJHR5cGVUcmFuc2Zvcm17IkFwcGxpY2F0aW9uQ2FjaGUifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNj
ZXNzb3IiID0+ICJtX2FwcGxpY2F0aW9uQ2FjaGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17
IkNTUyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2Nzc0FnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQ29uc29sZSJ9ID0gewotICAgICJm
b3J3YXJkIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5z
cGVjdG9yQ29uc29sZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fY29uc29s
ZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9
PiAiSW5zcGVjdG9yUGFnZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcGFnZUFnZW50IiwKLX07Ci0kdHlw
ZVRyYW5zZm9ybXsiRGVidWdnZXIifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckRl
YnVnZ2VyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Lmgi
LAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGVidWdnZXJBZ2VudCIsCi19OwotJHR5cGVU
cmFuc2Zvcm17IkRPTURlYnVnZ2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJEYXRhYmFzZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRhdGFiYXNl
QWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kYXRhYmFzZUFnZW50IiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JE
T01BZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAotICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1fZG9tQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJET01T
dG9yYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQi
LAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCIsCi0gICAgImRv
bWFpbkFjY2Vzc29yIiA9PiAibV9kb21TdG9yYWdlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3Jt
eyJGaWxlU3lzdGVtIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVt
QWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9maWxlU3lzdGVtQWdlbnQiLAotfTsKLSR0eXBlVHJh
bnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vz
c29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsi
fSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclJlc291cmNlQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3Nv
ciIgPT4gIm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0g
PSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQcm9maWxlckFnZW50IiwKLSAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3Ii
ID0+ICJtX3Byb2ZpbGVyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJSdW50aW1lIn0gPSB7
Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAi
bV9ydW50aW1lQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJUaW1lbGluZSJ9ID0gewotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV90
aW1lbGluZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiV29ya2VyIn0gPSB7Ci0gICAgImZv
cndhcmQiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvcldvcmtlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fd29ya2VyQWdl
bnQiLAotfTsKLQotJHR5cGVUcmFuc2Zvcm17IkZyb250ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250
ZW5kLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQYXNzUmVmUHRyIn0gPSB7Ci0gICAgImZvcndh
cmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0ci5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVm
Q291bnRlZCJ9ID0gewotICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL1JlZkNvdW50ZWQuaCIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gewotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJPYmpl
Y3QifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iLAot
ICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVs
dFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+
ICJJbnNwZWN0b3JPYmplY3QiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIs
Ci0gICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0IiwKLSAgICAiSlNUeXBlIiA9PiAib2JqZWN0IiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgInZhcmlhYmxlIiA9PiAiUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUo
KSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcnJheSIsCi0gICAgImhlYWRlciIgPT4g
Ikluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJBcnJheSIsCi0gICAgIkpT
VHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAg
InBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAgICJ2YXJpYWJsZSIg
PT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNw
ZWN0b3JWYWx1ZTo6bnVsbCgpIiwKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclZhbHVlIiwK
LSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4g
IlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAiIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5n
In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiY29uc3QgU3RyaW5nJiIsCi0gICAgIm9wdGlvbmFsX3Bh
cmFtIiA9PiAiY29uc3QgU3RyaW5nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNz
b3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJTdHJpbmciLAotICAgICJyZXR1cm4iID0+
ICJTdHJpbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhl
YWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAgICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0
cmluZy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJTdHJpbmciLAotICAgICJKU1R5cGUiID0+ICJz
dHJpbmciCi19OwotJHR5cGVUcmFuc2Zvcm17ImxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJs
b25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBsb25nKiBjb25zdCIsCi0gICAg
Im9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJsb25n
IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAg
ICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlw
ZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiaW50In0gPSB7Ci0gICAgInBhcmFt
IiA9PiAiaW50IiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBpbnQqIGNvbnN0IiwK
LSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4g
ImludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwK
LSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJK
U1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGxvbmcifSA9
IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCB1bnNpZ25lZCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNj
ZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAi
ZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVy
IiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJu
dW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2lnbmVkIGludCJ9ID0gewotICAgICJwYXJh
bSIgPT4gInVuc2lnbmVkIGludCIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgdW5z
aWduZWQgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwK
LSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICIwdSIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJK
U09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlw
ZVRyYW5zZm9ybXsiZG91YmxlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiZG91YmxlIiwKLSAgICAi
b3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBkb3VibGUqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxf
dmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSIgPT4gImRvdWJsZSIsCi0gICAg
ImRlZmF1bHRWYWx1ZSIgPT4gIjAuMCIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFk
ZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4g
Im51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiYm9vbGVhbiJ9ID0gewotICAgICJwYXJhbSIg
PT4gImJvb2wiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IGJvb2wqIGNvbnN0IiwK
LSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJpYWJsZSI9PiAi
Ym9vbCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gImZhbHNlIiwKLSAgICAiZm9yd2FyZCIgPT4g
IiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiQm9vbGVhbiIsCi0g
ICAgIkpTVHlwZSIgPT4gImJvb2xlYW4iCi19OwotJHR5cGVUcmFuc2Zvcm17InZvaWQifSA9IHsK
LSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5z
Zm9ybXsiVmVjdG9yIn0gPSB7Ci0gICAgImhlYWRlciIgPT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0K
LSMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcwotCi1teSAkbGljZW5zZVRlbXBsYXRlID0gPDwg
IkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotRU9GCi0KLW15ICRjb2RlR2VuZXJhdG9yOwotbXkgJG91dHB1dERpcjsKLW15ICRv
dXRwdXRIZWFkZXJzRGlyOwotbXkgJHdyaXRlRGVwZW5kZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0K
LW15ICRuYW1lc3BhY2U7Ci0KLW15ICRiYWNrZW5kQ2xhc3NOYW1lOwotbXkgJGJhY2tlbmRDbGFz
c0RlY2xhcmF0aW9uOwotbXkgJGJhY2tlbmRKU1N0dWJOYW1lOwotbXkgJWJhY2tlbmRUeXBlczsK
LW15IEBiYWNrZW5kTWV0aG9kczsKLW15IEBiYWNrZW5kTWV0aG9kc0ltcGw7Ci1teSAlYmFja2Vu
ZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkYmFja2VuZENvbnN0cnVjdG9yOwotbXkgQGJhY2tlbmRD
b25zdGFudERlY2xhcmF0aW9uczsKLW15IEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15
IEBiYWNrZW5kRm9vdGVyOwotbXkgQGJhY2tlbmRKU1N0dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50
czsKLW15ICViYWNrZW5kRG9tYWluczsKLQotbXkgJGZyb250ZW5kQ2xhc3NOYW1lOwotbXkgJWZy
b250ZW5kVHlwZXM7Ci1teSBAZnJvbnRlbmRNZXRob2RzOwotbXkgQGZyb250ZW5kQWdlbnRGaWVs
ZHM7Ci1teSBAZnJvbnRlbmRNZXRob2RzSW1wbDsKLW15ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVy
ZXM7Ci1teSAkZnJvbnRlbmRDb25zdHJ1Y3RvcjsKLW15IEBmcm9udGVuZENvbnN0YW50RGVjbGFy
YXRpb25zOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWZpbml0aW9uczsKLW15IEBmcm9udGVuZEZv
b3RlcjsKLW15IEBmcm9udGVuZERvbWFpbnM7Ci0KLSMgRGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3Vi
IG5ldwotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkcmVmZXJlbmNlID0geyB9
OwotCi0gICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsKLSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7
Ci0gICAgJG91dHB1dEhlYWRlcnNEaXIgPSBzaGlmdDsKLSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJP
blRvcAotICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IKLSAgICAkd3JpdGVEZXBlbmRlbmNpZXMg
PSBzaGlmdDsKLSAgICAkdmVyYm9zZSA9IHNoaWZ0OwotCi0gICAgYmxlc3MoJHJlZmVyZW5jZSwg
JG9iamVjdCk7Ci0gICAgcmV0dXJuICRyZWZlcmVuY2U7Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9j
dW1lbnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlTW9kdWxlCi17Ci0gICAgbXkgJG9iamVjdCA9IHNo
aWZ0OwotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OwotCi0gICAgJG5hbWVzcGFjZSA9ICRkYXRh
Tm9kZS0+bW9kdWxlOwotICAgICRuYW1lc3BhY2UgPX4gcy9jb3JlL1dlYkNvcmUvOwotCi0gICAg
JGZyb250ZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckZyb250ZW5kIjsKLSAgICAkZnJvbnRlbmRD
b25zdHJ1Y3RvciA9ICIgICAgJHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKik7IjsKLSAgICBwdXNoKEBmcm9udGVuZEZvb3RlciwgInByaXZhdGU6Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICAkZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0g
PSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwifSA9IDE7
Ci0gICAgJGZyb250ZW5kVHlwZXN7IlBhc3NSZWZQdHIifSA9IDE7Ci0KLSAgICAkYmFja2VuZENs
YXNzTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFz
c0RlY2xhcmF0aW9uID0gIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4iOwotICAgICRiYWNrZW5kSlNTdHViTmFt
ZSA9ICJJbnNwZWN0b3JCYWNrZW5kU3R1YiI7Ci0gICAgJGJhY2tlbmRUeXBlc3siSW5zcGVjdG9y
In0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0g
MTsKLSAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwotICAgICRiYWNrZW5kVHlw
ZXN7IlJlZkNvdW50ZWQifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siT2JqZWN0In0gPSAxOwot
fQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFj
ZQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
Ci0gICAgbXkgJGRlZmluZXMgPSBzaGlmdDsKLQotICAgIG15ICVhZ2VudCA9ICgKLSAgICAgICAg
bWV0aG9kRGVjbGFyYXRpb25zID0+IFtdLAotICAgICAgICBtZXRob2RTaWduYXR1cmVzID0+IHt9
Ci0gICAgKTsKLSAgICBnZW5lcmF0ZUZ1bmN0aW9ucygkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAg
ICBpZiAoQHskYWdlbnR7bWV0aG9kRGVjbGFyYXRpb25zfX0pIHsKLSAgICAgICAgcHVzaChAZnJv
bnRlbmREb21haW5zLCAkaW50ZXJmYWNlLT5uYW1lKTsKLSAgICAgICAgZ2VuZXJhdGVBZ2VudERl
Y2xhcmF0aW9uKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwotICAgIH0KLX0KLQotc3ViIGdlbmVyYXRl
QWdlbnREZWNsYXJhdGlvbgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAk
YWdlbnQgPSBzaGlmdDsKLSAgICBteSAkYWdlbnROYW1lID0gJGludGVyZmFjZS0+bmFtZTsKLSAg
ICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgY2xhc3MgJHthZ2VudE5hbWV9IHsiKTsKLSAg
ICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHVibGljOiIpOwotICAgIHB1c2goQGZyb250
ZW5kTWV0aG9kcywgIiAgICAgICAgJHthZ2VudE5hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRo
b2RzLCBAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9uc319KTsKLSAgICBwdXNoKEBmcm9udGVu
ZE1ldGhvZHMsICIgICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIHByaXZhdGU6
Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyIpOwotICAgIHB1c2goQGZyb250
ZW5kTWV0aG9kcywgIiAgICB9OyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwot
Ci0gICAgbXkgJGdldHRlck5hbWUgPSBsYygkYWdlbnROYW1lKTsKLSAgICBwdXNoKEBmcm9udGVu
ZE1ldGhvZHMsICIgICAgJHthZ2VudE5hbWV9KiAke2dldHRlck5hbWV9KCkgeyByZXR1cm4gJm1f
JHtnZXR0ZXJOYW1lfTsgfSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0g
ICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgJHthZ2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1l
fTsiKTsKLQotICAgIHB1c2goQGZyb250ZW5kQWdlbnRGaWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0i
KTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRlbmRDb25zdHJ1Y3RvckltcGwKLXsKLSAgICBteSBA
ZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3Rvcklt
cGwsICIke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtmcm9udGVuZENsYXNzTmFtZX0oSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgcHVzaChA
ZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0gICAgZm9yZWFjaCBteSAkYWdlbnRGaWVs
ZCAoQGZyb250ZW5kQWdlbnRGaWVsZHMpIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1
Y3RvckltcGwsICIgICAgLCAke2FnZW50RmllbGR9KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCki
KTsKLSAgICB9Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAg
cHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ9Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVu
ZENvbnN0cnVjdG9ySW1wbDsKLX0KLQotc3ViIGdlbmVyYXRlRnVuY3Rpb25zCi17Ci0gICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgZm9yZWFj
aCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSkgewotICAgICAgICBpZiAo
JGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0g
ICAgICAgICAgICBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9u
LCAkYWdlbnQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ2VuZXJhdGVCYWNrZW5k
RnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zKCRpbnRlcmZhY2UpOwotICAgIGNvbGxlY3RC
YWNrZW5kSlNTdHViRXZlbnRzKCRpbnRlcmZhY2UpOwotfQotCi1zdWIgZ2VuZXJhdGVGcm9udGVu
ZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlv
biA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRl
cmZhY2UtPm5hbWU7Ci0gICAgbXkgQGFyZ3NGaWx0ZXJlZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBl
cSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsgIyBqdXN0IGtlZXAgb25seSBvdXQg
cGFyYW1ldGVycyBmb3IgZnJvbnRlbmQgaW50ZXJmYWNlLgotICAgIG1hcCgkZnJvbnRlbmRUeXBl
c3skXy0+dHlwZX0gPSAxLCBAYXJnc0ZpbHRlcmVkKTsgIyByZWdpc3RlciByZXF1aXJlZCB0eXBl
cy4KLSAgICBteSAkYXJndW1lbnRzID0gam9pbigiLCAiLCBtYXAocGFyYW1UeXBlVHJhaXRzKCRf
LCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1lLCBAYXJnc0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBh
cmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25hdHVyZS4KLQotICAgIG15ICRzaWduYXR1cmUgPSAi
ICAgICAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30pOyI7Ci0gICAgISRhZ2Vu
dC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVyZX0gfHwgZGllICJEdXBsaWNhdGUgZnJv
bnRlbmQgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7
Ci0gICAgJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30tPnskc2lnbmF0dXJlfSA9IDE7Ci0gICAg
cHVzaChAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9uc319LCAkc2lnbmF0dXJlKTsKLQotICAg
IG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInZvaWQgJHtmcm9udGVuZENsYXNz
TmFtZX06OiR7ZG9tYWlufTo6JHtmdW5jdGlvbk5hbWV9KCR7YXJndW1lbnRzfSkiKTsKLSAgICBw
dXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNz
YWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwgXCIkZG9tYWluLiRmdW5jdGlvbk5hbWVcIik7Iik7
Ci0gICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOyIpOwotCi0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGFy
Z3NGaWx0ZXJlZCkgewotICAgICAgICAgICAgbXkgJG9wdGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAiaWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1l
IC4gIilcbiAgICAgICAgIiA6ICIiOwotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAg
IiAuICRvcHRpb25hbCAuICJwYXJhbXNPYmplY3QtPnNldCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBh
cmFtZXRlciwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiXCIsICIg
LiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgInZhbHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0
ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2Jq
ZWN0KTsiKTsKLSAgICB9Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1l
fU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsK
LSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kc0ltcGws
IEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBjYW1lbENhc2UKLXsKLSAgICBteSAkdmFsdWUgPSBzaGlm
dDsKLSAgICAkdmFsdWUgPX4gcy9cYihcdykvXFUkMS9nOyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5h
bWUgZm9yIHR5cGUgbmFtZQotICAgICR2YWx1ZSA9fiBzLyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1
ZTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9u
TmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVk
RnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+bmFtZSAuICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0g
ICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4g
Ii4iIC4gJGZ1bmN0aW9uTmFtZTsKLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0
aW9ucywgIiAgICAgICAgayR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAg
cHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICIgICAgXCIke2Z1bGxRdWFsaWZpZWRG
dW5jdGlvbk5hbWVEb3R9XCIsIik7Ci0KLSAgICBtYXAoJGJhY2tlbmRUeXBlc3skXy0+dHlwZX0g
PSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOyAjIHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVz
Ci0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlv
bi0+cGFyYW1ldGVyc30pOwotICAgIG15IEBvdXRBcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVx
ICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgIAotICAgIG15ICRzaWduYXR1
cmUgPSAiICAgIHZvaWQgJHtmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lfShsb25nIGNhbGxJZCwg
SW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9iamVjdCk7IjsKLSAgICAhJGJhY2tlbmRN
ZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gfHwgZGllICJEdXBsaWNhdGUgZnVuY3Rpb24g
d2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRN
ZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gPSAiJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5h
bWUiOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzLCAke3NpZ25hdHVyZX0pOwotCi0gICAgbXkg
QGZ1bmN0aW9uOwotICAgIG15ICRyZXF1ZXN0TWVzc2FnZU9iamVjdCA9IHNjYWxhcihAaW5Bcmdz
KSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3QiIDogIiI7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2
b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVzdE1lc3NhZ2VPYmplY3QpIik7Ci0gICAg
cHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZh
Y2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFjY2Vzc29yID0gdHlwZVRyYWl0cygkZG9tYWluLCAi
ZG9tYWluQWNjZXNzb3IiKTsKLSAgICAkYmFja2VuZFR5cGVzeyRkb21haW59ID0gMTsKLSAgICAk
YmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAxOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlm
ICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICAgICBwcm90
b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIiRkb21haW4gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxl
LlwiKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0gICAgIyBkZWNsYXJlIGxvY2Fs
IHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50cy4KLSAgICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkg
ewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIgICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5
cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAuICRfLT5uYW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRz
KCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikgLiAiOyIsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIEVycm9y
U3RyaW5nIGVycm9yOyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0KLSAgICBteSAkaW5k
ZW50ID0gIiI7Ci0gICAgaWYgKHNjYWxhcihAaW5BcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5j
dGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSByZXF1
ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KFwicGFyYW1zXCIpOyIpOwotICAgICAgICBwdXNo
KEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsiKTsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7
Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVyIChAaW5BcmdzKSB7Ci0gICAgICAgICAg
ICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0gICAgICAgICAgICBteSAkdHlwZSA9ICRw
YXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgICAgICBteSAkdHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgk
cGFyYW1ldGVyLT50eXBlKTsKLSAgICAgICAgICAgIG15ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9
ICIwIjsKLSAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
b3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wg
JHtuYW1lfV92YWx1ZUZvdW5kID0gZmFsc2U7Iik7Ci0gICAgICAgICAgICAgICAgJG9wdGlvbmFs
RmxhZ0FyZ3VtZW50ID0gIiYke25hbWV9X3ZhbHVlRm91bmQiOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJp
YWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0eXBlU3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
XCIkbmFtZVwiLCAkb3B0aW9uYWxGbGFnQXJndW1lbnQsIHByb3RvY29sRXJyb3JzUHRyKTsiKTsK
LSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgICAgICAkaW5kZW50
ID0gIiAgICAiOwotICAgIH0KLQotICAgIG15ICRhcmdzID0gam9pbigiLCAiLAotICAgICAgICAg
ICAgICAgICAgICAoIiZlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICBtYXAoKCRfLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICRfLT5uYW1lIC4gIl92YWx1ZUZvdW5kID8gJmluXyIgLiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbl8iIC4gJF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAg
ICAgICAgICAgICAgICAgICAgIG1hcCgiJm91dF8iIC4gJF8tPm5hbWUsIEBvdXRBcmdzKSkpOwot
Ci0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAiaWYgKCFwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAiICAgICRkb21haW5BY2Nl
c3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsK
LSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotICAgIGlmIChzY2FsYXIoQG91dEFyZ3Mp
KSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghcHJvdG9jb2xFcnJvcnMtPmxl
bmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgeyIpOwotICAgICAgICBmb3JlYWNoIG15ICRwYXJh
bWV0ZXIgKEBvdXRBcmdzKSB7Ci0gICAgICAgICAgICBteSAkb2Zmc2V0ID0gIiAgICAgICAgIjsK
LSAgICAgICAgICAgICMgRG9uJ3QgYWRkIG9wdGlvbmFsIGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRo
ZSByZXN1bHQgdW5sZXNzIGl0IGlzICJ0cnVlIgotICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEg
ImJvb2xlYW4iKSB7Ci0gICAgICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICRvZmZzZXQgLiAi
aWYgKG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIpIik7Ci0gICAgICAgICAgICAgICAgJG9m
ZnNldCAuPSAiICAgICI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwdXNoKEBmdW5jdGlv
biwgJG9mZnNldCAuICJyZXN1bHQtPnNldCIgLiB0eXBlVHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUs
ICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIlwiLCBvdXRfIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICB9Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIHNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWRcIiwgXCIkZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFt
ZURvdFwiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
In0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZQot
ewotICAgIG15ICRzZW5kUmVzcG9uc2UgPSA8PCAiRU9GIjsKLQotdm9pZCAke2JhY2tlbmRDbGFz
c05hbWV9OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQot
ewotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29s
RXJyb3JzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW52b2NhdGlvbkVycm9y
Lmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVy
RXJyb3IsIGludm9jYXRpb25FcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1
bHQpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAg
aWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwotfSAgICAKLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkc2VuZFJlc3Bv
bnNlKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IKLXsKLSAg
ICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9IDw8ICJFT0YiOwotCi12b2lkICR7YmFja2VuZENs
YXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBD
b21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17
Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7
Ci19Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6cmVwb3J0UHJvdG9jb2xFcnJvcihjb25z
dCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBjb2RlLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3QKLXsK
LSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxpbnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0g
ICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsKLSAgICAgICAgc19jb21tb25FcnJvcnMu
aW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2Vy
dChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0
KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQo
SW52YWxpZFBhcmFtcywgLTMyNjAyKTsKLSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KElu
dGVybmFsRXJyb3IsIC0zMjYwMyk7Ci0gICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChTZXJ2
ZXJFcnJvciwgLTMyMDAwKTsKLSAgICB9Ci0gICAgQVNTRVJUKGNvZGUgPj0wKTsKLSAgICBBU1NF
UlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9ycy5zaXplKCkpOwotICAgIEFTU0VSVChz
X2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZXJyb3Ig
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGVycm9yLT5zZXROdW1iZXIoImNvZGUi
LCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgZXJyb3ItPnNldFN0cmluZygibWVzc2FnZSIs
IGVycm9yTWVzc2FnZSk7Ci0gICAgQVNTRVJUKGVycm9yKTsKLSAgICBpZiAoZGF0YSkKLSAgICAg
ICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+
c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKLSAgICBpZiAoY2FsbElkKQotICAgICAgICBtZXNz
YWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7Ci0gICAgZWxzZQotICAgICAgICBtZXNzYWdl
LT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKLSAgICBpZiAobV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotRU9G
Ci0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRyZXBvcnRQcm90b2NvbEVycm9yKTsKLX0KLQotc3Vi
IGdlbmVyYXRlQXJndW1lbnRHZXR0ZXJzCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlmdDsKLSAgICBt
eSAkanNvbiA9IHR5cGVUcmFpdHMoJHR5cGUsICJKU09OVHlwZSIpOwotICAgIG15ICR2YXJpYWJs
ZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpOwotICAgIG15ICRkZWZhdWx0VmFsdWUg
PSB0eXBlVHJhaXRzKCR0eXBlLCAiZGVmYXVsdFZhbHVlIik7Ci0gICAgbXkgJHJldHVybiAgPSB0
eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgPyB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikg
OiB0eXBlVHJhaXRzKCR0eXBlLCAicGFyYW0iKTsKLQotICAgIG15ICR0eXBlU3RyaW5nID0gY2Ft
ZWxDYXNlKCR0eXBlKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIg
ICAgc3RhdGljICRyZXR1cm4gZ2V0JHR5cGVTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKTsiKTsKLSAgICBteSAkZ2V0dGVyQm9keSA9IDw8ICJFT0YiOwotCi0kcmV0
dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17Ci0gICAgQVNTRVJUKHByb3RvY29sRXJyb3Jz
KTsKLQotICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAgICAqdmFsdWVGb3VuZCA9IGZhbHNlOwot
Ci0gICAgJHZhcmlhYmxlIHZhbHVlID0gJGRlZmF1bHRWYWx1ZTsKLQotICAgIGlmICghb2JqZWN0
KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkgewotICAgICAgICAgICAgLy8gUmVxdWlyZWQg
cGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KLSAgICAgICAgICAgIHByb3Rv
Y29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVz
dCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnXCVzJyB3aXRoIHR5cGUgJyRqc29uJy4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgfQotCi0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3Qt
PmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRv
ciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLQotICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkg
ewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+
cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIHdpdGggdHlwZSAnJGpz
b24nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXMkanNv
bigmdmFsdWUpKQotICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICckanNvbicu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZWxzZQotICAgICAgICBpZiAodmFsdWVGb3Vu
ZCkKLSAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19
Ci1FT0YKLQotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkZ2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBn
ZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCi17Ci0gICAgbXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVu
dHJpZXMgPSBtYXAoIiAgICAgICAgJiR7YmFja2VuZENsYXNzTmFtZX06OiRfLCIsIG1hcCAoJGJh
Y2tlbmRNZXRob2RTaWduYXR1cmVzeyRffSwgQGJhY2tlbmRNZXRob2RzKSk7Ci0gICAgbXkgJG1h
cEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBFbnRyaWVzKTsKLQotICAgIG15ICRiYWNrZW5kRGlz
cGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIFJlZlB0cjwke2JhY2tlbmRDbGFzc05h
bWV9PiBwcm90ZWN0ID0gdGhpczsKLSAgICB0eXBlZGVmIHZvaWQgKCR7YmFja2VuZENsYXNzTmFt
ZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9i
amVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNo
TWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAp
OwotICAgIGxvbmcgY2FsbElkID0gMDsKLQotICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7Ci0kbWFwRW50cmll
cwotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gc2l6ZW9mKGNvbW1hbmROYW1l
cykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kTmFt
ZXNbaV0sIGhhbmRsZXJzW2ldKTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOwotICAg
IGlmICghcGFyc2VkTWVzc2FnZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIFBh
cnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3Qg
PSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwotICAgIGlmICghbWVzc2FnZU9iamVjdCkgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBt
dXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdl
dCgiaWQiKTsKLSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghY2FsbElkVmFsdWUtPmFzTnVtYmVy
KCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVl
c3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgbnVtYmVyIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVl
ID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsKLSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICIn
bWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1l
dGhvZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVx
dWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+
OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0g
ZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsgIicgd2Fzbid0IGZvdW5kIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qaXQtPnNlY29uZCkoY2FsbElkLCBt
ZXNzYWdlT2JqZWN0LmdldCgpKTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkYmFj
a2VuZERpc3BhdGNoZXJCb2R5KTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJz
ZXIKLXsKLSAgICBteSAkbWVzc2FnZVBhcnNlckJvZHkgPSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNr
ZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJp
bmcqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVj
dG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1
ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3Bs
aXQoIlxuIiwgJG1lc3NhZ2VQYXJzZXJCb2R5KTsKLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNT
dHViRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5j
dGlvbnMgPSBncmVwKCEkXy0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQi
fSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAgICBteSAkZG9tYWluID0gJGludGVyZmFj
ZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAg
ICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBp
bkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwgQHskZnVuY3Rpb24tPnBhcmFtZXRl
cnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMgPSBqb2luKAotICAgICAgICAgICAgIiwi
LAotICAgICAgICAgICAgbWFwKCJcIiIgLiAkXy0+bmFtZSAuICJcIjogeyIKLSAgICAgICAgICAg
ICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAoJF8tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIpIC4gIiwgIgotICAgICAgICAgICAgICAgIC4gIlwi
dHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiSlNUeXBlIikgLiAiXCIiCi0gICAg
ICAgICAgICAgICAgLiAifSIsCi0gICAgICAgICAgICAgICAgIEBpbkFyZ3MpKTsKLSAgICAgICAg
cHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAgdGhpcy5fcmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgot
ICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwiJGRvbWFpbi4kbmFtZVwiLCAiIC4KLSAgICAgICAg
ICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJwYXJhbXNcIjogeyRhcmd1bWVudE5hbWVzfSwgIiA6
ICIiKSAuCi0gICAgICAgICAgICAiXCJpZFwiOiAwIiAuCi0gICAgICAgICJ9Jyk7Iik7Ci0gICAg
fQotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJFdmVudHMKLXsKLSAgICBteSAkaW50ZXJm
YWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0sIEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0g
ICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5j
dGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAgICBteSAkbmFtZSA9ICRkb21haW4gLiAiLiIgLiAk
ZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAgICAgbXkgQG91dEFyZ3MgPSBncmVwKCRf
LT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAg
IG15ICRhcmd1bWVudE5hbWVzID0gam9pbigiLCIsIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIi
ICwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTRXZlbnRzLCAiICAgIHRoaXMu
X2V2ZW50QXJnc1tcIiIgLiAkbmFtZSAuICJcIl0gPSBbIiAuICRhcmd1bWVudE5hbWVzIC4iXTsi
KTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRTdHViSlMKLXsKLSAgICBteSAkSlNS
ZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzID0gam9pbigiXG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lz
dGVyIiAuICRfIC4gIkRpc3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIu
YmluZCh0aGlzLCBcIiIgLiAkXyAuIlwiKTsiLCBAZnJvbnRlbmREb21haW5zKSk7Ci0gICAgbXkg
JEpTU3R1YnMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNTdHVicyk7Ci0gICAgbXkgJEpTRXZlbnRz
ID0gam9pbigiXG4iLCBAYmFja2VuZEpTRXZlbnRzKTsKLSAgICBteSAkaW5zcGVjdG9yQmFja2Vu
ZFN0dWJKUyA9IDw8ICJFT0YiOwotJGxpY2Vuc2VUZW1wbGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5k
U3R1YiA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAg
dGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0gMDsKLSAgICB0aGlzLl9jYWxsYmFja3MgPSB7
fTsKLSAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVycyA9IHt9OwotICAgIHRoaXMuX2V2ZW50QXJn
cyA9IHt9OwotJEpTU3R1YnMKLSRKU0V2ZW50cwotJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
cwotfQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7Ci0gICAgZHVtcEluc3Bl
Y3RvclRpbWVTdGF0czogMCwKLSAgICBkdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwK
LQotICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZhciBjYWxs
YmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsKLSAgICAgICAgdGhpcy5fY2FsbGJhY2tz
W2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKLSAgICAgICAgcmV0dXJu
IGNhbGxiYWNrSWQ7Ci0gICAgfSwKLQotICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihy
ZXF1ZXN0U3RyaW5nKQotICAgIHsKLSAgICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNP
Ti5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFn
ZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsgIkFnZW50IjsKLSAgICAgICAgaWYgKCF3
aW5kb3dbYWdlbnROYW1lXSkKLSAgICAgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307Ci0g
ICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3Nl
bmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZyk7Ci0gICAgICAgIHdp
bmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9p
bnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQotICAgIH0sCi0KLSAgICBfaW52b2tlOiBm
dW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHZh
ciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdC5w
YXJhbXMgPSBhcmdzOwotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9i
amVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF9zZW5kTWVzc2FnZVRvQmFj
a2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFy
c2UoYXJncy5zaGlmdCgpKTsKLSAgICAgICAgdmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYm
IHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3Ao
KSA6IDA7Ci0gICAgICAgIHZhciBkb21haW5BbmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxp
dCgiLiIpOwotICAgICAgICB2YXIgYWdlbnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAi
QWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKLQotICAgICAgICB2YXIgaGFzUGFyYW1zID0g
ZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnBhcmFtcykgewotICAgICAgICAgICAgZm9yICh2
YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1l
ID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOwotICAgICAgICAgICAgICAgIHZhciBvcHRpb25h
bEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlvbmFsOwotCi0gICAgICAgICAgICAgICAg
aWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25hbEZsYWcpIHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFy
Z3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhh
dmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMp
ICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzLnNoaWZ0KCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtc1trZXldOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFtZSkgewotICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50
ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQg
bXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsg
IicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7Ci0gICAgICAgICAg
ICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgh
aGFzUGFyYW1zKQotICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAg
ICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0gInVuZGVmaW5lZCIpIHsKLSAgICAgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sg
YXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEg
ZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFj
ayk7Ci0gICAgfSwKLQotICAgIF93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVu
Y3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCi0gICAgewotICAgICAgICBtZXNzYWdlT2Jq
ZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayk7Ci0KLSAgICAgICAgaWYgKHRoaXMuZHVtcElu
c3BlY3RvclRpbWVTdGF0cykgewotICAgICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRo
aXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLSAgICAgICAgICAgIHdyYXBwZWRDYWxs
YmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5tZXRob2Q7Ci0gICAgICAgICAgICB3cmFw
cGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQotICAgICAgICAg
ICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVj
dCkpOwotCi0gICAgICAgICsrdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OwotICAgICAgICB0
aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1lc3NhZ2VPYmplY3QpOwotICAgIH0sCi0K
LSAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkK
LSAgICB7Ci0gICAgICAgIGNvbnNvbGUudGltZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsK
LSAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKLSAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2Up
OwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21h
aW4sIGRpc3BhdGNoZXIpCi0gICAgewotICAgICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tk
b21haW5dID0gZGlzcGF0Y2hlcjsKLSAgICB9LAotCi0gICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1l
c3NhZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNz
YWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVz
c2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7
Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJp
bmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNzYWdlOwotCi0gICAgICAgIGlmICgiaWQi
IGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QK
LSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yKSB7Ci0gICAgICAgICAgICAgICAg
bWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7Ci0gICAgICAgICAgICAgICAgICAgIGdl
dERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJzZSBlcnJvciI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90
IGZvdW5kIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJu
ICJJbnZhbGlkIHBhcmFtcyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2
MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJyb3IiOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LAotCi0gICAgICAgICAgICAgICAgICAgIHRv
U3RyaW5nOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25vd24gZXJyb3IgY29kZSI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhp
cy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsg
dGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsKLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAg
ICAgICAgICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBp
ZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAtMzIwMDApCi0gICAgICAgICAgICAgICAg
ICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9IFtdOwotICAgICAgICAgICAgaWYgKG1l
c3NhZ2VPYmplY3QucmVzdWx0KSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1l
c3NhZ2VPYmplY3QucmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaCht
ZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
dmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOwotICAgICAg
ICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFy
dFRpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAm
JiBjYWxsYmFjay5tZXRob2ROYW1lKQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3Rh
cnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0
KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51
bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2Vz
Q291bnQ7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2Jq
ZWN0LmlkXTsKLQotICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3Rh
dHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5s
b2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vz
c2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRl
Lm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQot
ICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOwotCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2YXIgbWV0aG9k
ID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgICAgIHZhciBkb21h
aW5OYW1lID0gbWV0aG9kWzBdOwotICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhv
ZFsxXTsKLSAgICAgICAgICAgIGlmICghKGRvbWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0
Y2hlcnMpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6
IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSAr
ICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsK
LSAgICAgICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBpbiBkaXNwYXRjaGVyKSkgewotICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlz
cGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCAr
ICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAg
ICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRp
c3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsg
IiciKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFt
cykgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21l
c3NhZ2VPYmplY3QubWV0aG9kXTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNo
KG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNbaV1dKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICBpZiAodGhp
cy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFy
dFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFt
ZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKLQotICAgICAgICAgICAgaWYgKHRoaXMuZHVt
cEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1z
dGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHBy
b2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICByZXBvcnRQcm90
b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQotICAgIHsKLSAgICAgICAgY29uc29s
ZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxl
ZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAgIH0sCi0KLSAgICBydW5BZnRlclBlbmRp
bmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMu
X3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW107Ci0KLSAgICAgICAgaWYg
KHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOwotCi0gICAg
ICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KSB7Ci0gICAgICAgICAgICB2YXIg
c2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10K
LSAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkK
LSAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlzKTsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOwot
Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGluc3BlY3RvckJhY2tlbmRTdHViSlMpOwot
fQotCi1zdWIgZ2VuZXJhdGVIZWFkZXIKLXsKLSAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0g
ICAgbXkgJGNsYXNzRGVjbGFyYXRpb24gPSBzaGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsK
LSAgICBteSAkY29uc3RydWN0b3IgPSBzaGlmdDsKLSAgICBteSAkY29uc3RhbnRzID0gc2hpZnQ7
Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLSAgICBteSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAg
ICBteSAkZm9yd2FyZEhlYWRlcnMgPSBqb2luKCJcbiIsIHNvcnQobWFwKCIjaW5jbHVkZSA8IiAu
IHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIikgLiAiPiIsIGdyZXAodHlwZVRyYWl0cygk
XywgImZvcndhcmRIZWFkZXIiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRmb3J3YXJk
RGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBzb3J0KG1hcCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMo
JF8sICJmb3J3YXJkIikgLiAiOyIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmQiKSwga2V5
cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRjb25zdGFudERlY2xhcmF0aW9ucyA9IGpvaW4oIlxu
IiwgQHskY29uc3RhbnRzfSk7Ci0gICAgbXkgJG1ldGhvZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJc
biIsIEB7JG1ldGhvZHN9KTsKLQotICAgIG15ICRoZWFkZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBD
b3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotI2lm
bmRlZiAke2NsYXNzTmFtZX1faAotI2RlZmluZSAke2NsYXNzTmFtZX1faAotCi0ke2ZvcndhcmRI
ZWFkZXJzfQotCi1uYW1lc3BhY2UgJG5hbWVzcGFjZSB7Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25z
Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCi1jbGFzcyAkY2xhc3NEZWNsYXJhdGlv
biB7Ci1wdWJsaWM6Ci0kY29uc3RydWN0b3IKLQotJGNvbnN0YW50RGVjbGFyYXRpb25zCi0kbWV0
aG9kc0RlY2xhcmF0aW9ucwotCi0kZm9vdGVyCi19OwotCi19IC8vIG5hbWVzcGFjZSAkbmFtZXNw
YWNlCi0jZW5kaWYgLy8gIWRlZmluZWQoJHtjbGFzc05hbWV9X2gpCi0KLUVPRgotICAgIHJldHVy
biAkaGVhZGVyQm9keTsKLX0KLQotc3ViIGdlbmVyYXRlU291cmNlCi17Ci0gICAgbXkgJGNsYXNz
TmFtZSA9IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNoaWZ0OwotICAgIG15ICRjb25zdGFudHMg
PSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0OwotCi0gICAgbXkgQHNvdXJjZUNvbnRl
bnQgPSBzcGxpdCgiXHIiLCAkbGljZW5zZVRlbXBsYXRlKTsKLSAgICBwdXNoKEBzb3VyY2VDb250
ZW50LCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQs
ICIjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Iik7Ci0gICAgcHVzaChAc291cmNl
Q29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaWYgRU5BQkxFKElOU1BF
Q1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0KLSAgICBteSAlaGVhZGVy
czsKLSAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV7JHR5cGVzfSkgewotICAgICAgICAkaGVh
ZGVyc3siI2luY2x1ZGUgXCIiIC4gdHlwZVRyYWl0cygkdHlwZSwgImhlYWRlciIpIC4gIlwiIn0g
PSAxIGlmICF0eXBlVHJhaXRzKCR0eXBlLCAiaGVhZGVyIikgZXEgICIiOwotICAgIH0KLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCBzb3J0IGtleXMgJWhlYWRlcnMpOwotICAgIHB1c2goQHNvdXJj
ZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAibmFtZXNwYWNlICRuYW1l
c3BhY2UgeyIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3Vy
Y2VDb250ZW50LCBqb2luKCJcbiIsIEB7JGNvbnN0YW50c30pKTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgQHskbWV0aG9kc30pOwotICAg
IHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAifSAv
LyBuYW1lc3BhY2UgJG5hbWVzcGFjZSIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpIik7
Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHJldHVybiBAc291cmNlQ29udGVu
dDsKLX0KLQotc3ViIHR5cGVUcmFpdHMKLXsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15
ICR0cmFpdCA9IHNoaWZ0OwotICAgIHJldHVybiAkdHlwZVRyYW5zZm9ybXskdHlwZX0tPnskdHJh
aXR9OwotfQotCi1zdWIgcGFyYW1UeXBlVHJhaXRzCi17Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRp
b24gPSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlmdDsKLSAgICBpZiAoJHBhcmFtRGVzY3Jp
cHRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9KSB7Ci0gICAgICAgIG15ICRv
cHRpb25hbFJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICJvcHRp
b25hbF8iIC4gJHRyYWl0KTsKLSAgICAgICAgcmV0dXJuICRvcHRpb25hbFJlc3VsdCBpZiBkZWZp
bmVkICRvcHRpb25hbFJlc3VsdDsKLSAgICB9Ci0gICAgbXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMo
JHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICR0cmFpdCk7Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJl
c3VsdCA/ICRyZXN1bHQgOiAiIjsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEFnZW50RmllbGRz
QW5kQ29uc3RydWN0b3IKLXsKLSAgICBteSBAYXJndW1lbnRzOwotICAgIG15IEBmaWVsZEluaXRp
YWxpemVyczsKLQotICAgIHB1c2goQGFyZ3VtZW50cywgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIik7Ci0gICAgcHVzaChAZmllbGRJbml0aWFsaXpl
cnMsICIgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSIpOwotICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLQotICAgIGZvcmVh
Y2ggbXkgJGRvbWFpbiAoc29ydCBrZXlzICViYWNrZW5kRG9tYWlucykgewotICAgICAgICAjIEFk
ZCBhZ2VudCBmaWVsZCBkZWNsYXJhdGlvbiB0byB0aGUgZm9vdGVyLgotICAgICAgICBteSAkYWdl
bnRDbGFzc05hbWUgPSB0eXBlVHJhaXRzKCRkb21haW4sICJmb3J3YXJkIik7Ci0gICAgICAgIG15
ICRmaWVsZCA9IHR5cGVUcmFpdHMoJGRvbWFpbiwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgICAg
IHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgJHthZ2VudENsYXNzTmFtZX0qICR7ZmllbGR9OyIp
OwotCi0gICAgICAgICMgQWRkIGFnZW50IHBhcmFtZXRlciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAg
ICAgIG15ICRhcmcgPSBzdWJzdHIoJGZpZWxkLCAyKTsKLSAgICAgICAgcHVzaChAZmllbGRJbml0
aWFsaXplcnMsICIgICAgICAgICwgJHtmaWVsZH0oJHthcmd9KSIpOwotICAgICAgICBwdXNoKEBh
cmd1bWVudHMsICIke2FnZW50Q2xhc3NOYW1lfSogJHthcmd9Iik7Ci0gICAgfQotCi0gICAgbXkg
JGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAiLCBAYXJndW1lbnRzKTsKLQotICAgIG15IEBiYWNr
ZW5kSGVhZDsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAke2JhY2tlbmRDbGFzc05hbWV9
KCR7YXJndW1lbnRTdHJpbmd9KSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCBAZmllbGRJbml0
aWFsaXplcnMpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHsgfSIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBjbGVh
ckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0iKTsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIGVudW0g
Q29tbW9uRXJyb3JDb2RlIHsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgUGFy
c2VFcnJvciA9IDAsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRS
ZXF1ZXN0LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBNZXRob2ROb3RGb3Vu
ZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW52YWxpZFBhcmFtcywiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgSW50ZXJuYWxFcnJvciwiKTsKLSAgICBw
dXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgU2VydmVyRXJyb3IsIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRyeSwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICB9OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNh
bGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7
Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9y
KGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7
Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCBkaXNwYXRjaChjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHN0YXRpYyBib29sIGdl
dENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOyIpOwot
ICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAg
ZW51bSBNZXRob2ROYW1lcyB7Iik7Ci0gICAgJGJhY2tlbmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxu
IiwgQGJhY2tlbmRIZWFkKTsKLX0KLQotc3ViIGZpbmlzaAotewotICAgIG15ICRvYmplY3QgPSBz
aGlmdDsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlz
cGF0Y2hlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2Vu
ZFNlbmRSZXNwb25zZSgpKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRl
QmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IoKSk7Ci0gICAgdW5zaGlmdChAZnJvbnRlbmRNZXRo
b2RzSW1wbCwgZ2VuZXJhdGVGcm9udGVuZENvbnN0cnVjdG9ySW1wbCgpLCAiIik7Ci0KLSAgICBv
cGVuKG15ICRTT1VSQ0UsICI+JG91dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIikgfHwg
ZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERpci8kZnJvbnRlbmRDbGFzc05hbWUuY3Bw
IjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGZyb250ZW5k
Q2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsIFxAZnJvbnRlbmRDb25zdGFudERlZmluaXRpb25z
LCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRl
ZigkU09VUkNFKTsKLQotICAgIG9wZW4obXkgJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8k
ZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRI
ZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGdlbmVy
YXRlSGVhZGVyKCRmcm9udGVuZENsYXNzTmFtZSwgJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250
ZW5kVHlwZXMsICRmcm9udGVuZENvbnN0cnVjdG9yLCBcQGZyb250ZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBmcm9udGVuZEZvb3RlcikpOwot
ICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgdW5zaGlmdChA
YmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0
YW50RGVmaW5pdGlvbnMsICJ9OyIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRp
b25zLCAiIik7Ci0KLSAgICAjIE1ha2UgZGlzcGF0Y2hlciBtZXRob2RzIHByaXZhdGUgb24gdGhl
IGJhY2tlbmQuCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAifTsiKTsK
LSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBi
YWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbW1h
bmROYW1lc1tdOyIpOyAgICAKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMs
ICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICJwcml2YXRlOiIp
OwotCi0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAlYmFja2VuZFR5cGVzKSB7Ci0gICAgICAg
IGlmICh0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUiKSkgewotICAgICAgICAgICAgcHVzaChA
YmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUFyZ3VtZW50R2V0dGVycygkdHlwZSkpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAi
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRpb25FcnJvcik7
Iik7Ci0KLSAgICBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZpZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0K
LSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJz
ZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCAiIik7Ci0KLSAgICBwdXNoKEBi
YWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLQotICAgIG9wZW4oJFNPVVJDRSwgIj4k
b3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBm
aWxlICRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNF
IGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGJhY2tlbmRDbGFzc05hbWUsIFwlYmFja2VuZFR5
cGVzLCBcQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGJhY2tlbmRNZXRob2RzSW1wbCkp
OwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVmKCRTT1VSQ0UpOwotCi0gICAgb3Blbigk
SEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUg
IkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5o
IjsKLSAgICBwcmludCAkSEVBREVSIGpvaW4oIlxuIiwgZ2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRD
bGFzc05hbWUsICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlvbiwgXCViYWNrZW5kVHlwZXMsICRiYWNr
ZW5kQ29uc3RydWN0b3IsIFxAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRN
ZXRob2RzLCBqb2luKCJcbiIsIEBiYWNrZW5kRm9vdGVyKSkpOwotICAgIGNsb3NlKCRIRUFERVIp
OwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgb3BlbihteSAkSlNfU1RVQiwgIj4kb3V0cHV0
RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRv
dXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpzIjsKLSAgICBwcmludCAkSlNfU1RVQiBqb2lu
KCJcbiIsIGdlbmVyYXRlQmFja2VuZFN0dWJKUygpKTsKLSAgICBjbG9zZSgkSlNfU1RVQik7Ci0g
ICAgdW5kZWYoJEpTX1NUVUIpOwotfQotCi0xOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2FmNjY5NDRhMzlj
NjMxOGY0NzFmZWY0ZTYwZGI1OTAwZmM5MmI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTAsMCArMSwxNDI0
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
IyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
anNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKworY21kbGluZV9wYXJzZXIgPSBvcHRwYXJz
ZS5PcHRpb25QYXJzZXIoKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1kZWZpbmVzIikK
K2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKK2NtZGxpbmVfcGFy
c2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIiKQorCit0cnk6CisgICAgYXJnX29wdGlv
bnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVu
KGFyZ192YWx1ZXMpICE9IDEpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIkV4YWN0bHkgb25l
IHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIChmb3VuZCAlcykiICUgbGVuKGFyZ192YWx1ZXMpKQor
ICAgIGlucHV0X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFsdWVzWzBdCisgICAgb3V0cHV0X2hlYWRl
cl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hfZGlyCisgICAgb3V0cHV0X2NwcF9kaXJu
YW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIKKyAgICBpZiBub3Qgb3V0cHV0X2hlYWRl
cl9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuaCBkaXJlY3Rvcnkg
bXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIG5vdCBvdXRwdXRfY3BwX2Rpcm5hbWU6CisgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lm
aWVkIikKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVk
IHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzXG5cbiIgJSBlKQorICAgIHN5cy5z
dGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2Rp
ciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2NwcF9kaXIgPG91dHB1dF9jcHBfZGlyPiBb
LS1kZWZpbmVzIDxkZWZpbmVzIHN0cmluZz5dXG4iKQorICAgIGV4aXQoMSkKKworCitkZWYgcGFy
c2VfZGVmaW5lcyhzdHIpOgorICAgIGlmIG5vdCBzdHI6CisgICAgICAgIHJldHVybiB7fQorCisg
ICAgaXRlbXMgPSBzdHIuc3BsaXQoKQorICAgIHJlc3VsdCA9IHt9CisgICAgZm9yIGl0ZW0gaW4g
aXRlbXM6CisgICAgICAgIGlmIGl0ZW1bMF0gPT0gJyInIGFuZCBpdGVtWy0xXSA9PSAnIicgYW5k
IGxlbihpdGVtKSA+PSAyOgorICAgICAgICAgICAgaXRlbSA9IGl0ZW1bMTotMV0KKyAgICAgICAg
ZXFfcG9zID0gaXRlbS5maW5kKCI9IikKKyAgICAgICAgaWYgZXFfcG9zID09IC0xOgorICAgICAg
ICAgICAga2V5ID0gaXRlbQorICAgICAgICAgICAgdmFsdWUgPSBUcnVlCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBrZXkgPSBpdGVtWzplcV9wb3NdCisgICAgICAgICAgICB2YWx1ZV9zdHIg
PSBpdGVtW2VxX3BvcyArIDE6XQorICAgICAgICAgICAgaWYgdmFsdWVfc3RyID09ICIwIjoKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBlbGlmIHZhbHVlX3N0ciA9
PSAiMSI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICMgU2hvdWxkIHdlIHN1cHBvcnQgb3RoZXIgdmFsdWVzPworICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5yZWNvZ25pemVkIGRlZmluZSB2YWx1ZTogJyVz
JyAoa2V5OiAnJXMnKSIgJSAodmFsdWVfc3RyLCBrZXkpKQorICAgICAgICByZXN1bHRba2V5XSA9
IHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWZpbmVzX21hcCA9IHBhcnNlX2RlZmluZXMo
YXJnX29wdGlvbnMuZGVmaW5lcykKKworCitjbGFzcyBEb21haW5OYW1lRml4ZXM6CisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgorICAg
ICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfdHlwZV9tYXA6CisgICAgICAgICAgICBh
Z2VudF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gIkluc3BlY3RvciVzQWdlbnQiICUg
ZG9tYWluX25hbWUKKworICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfZmllbGRf
bmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IGNscy5hZ2VudF9maWVsZF9u
YW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpZWxkX25h
bWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJBZ2VudCIKKworICAgICAgICBjbGFzcyBS
ZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5cGVfbmFtZSA9IGFnZW50X25hbWVfcmVz
CisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFtZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMK
KyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2Jp
bmRfZG9tYWlucworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGZpZWxkX25hbWVfcmVz
CisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBpc19kaXNhYmxl
ZChkZWZpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZG9tYWluX25hbWUgaW4gY2xzLmRv
bWFpbl9kZWZpbmVfbmFtZV9tYXA6CisgICAgICAgICAgICAgICAgICAgICMgSGFzIG5vdCBjb3Jy
ZXNwb25kaW5nIHByZXByb2Nlc3NvciBzeW1ib2wuCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX25hbWUgPSBjbHMuZG9tYWluX2RlZmlu
ZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKworICAgICAgICAgICAgICAgIGlmIG5vdCBkZWZpbmVf
bmFtZSBpbiBkZWZpbmVzOgorICAgICAgICAgICAgICAgICAgICAjIERpc2FibGVkIHdoZW4gbm90
IG1lbnRpb25lZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICAg
ICAgICAgZGVmaW5lX3ZhbHVlID0gZGVmaW5lc1tkZWZpbmVfbmFtZV0KKyAgICAgICAgICAgICAg
ICByZXR1cm4gbm90IGJvb2woZGVmaW5lX3ZhbHVlKQorCisgICAgICAgIHJldHVybiBSZXMKKwor
ICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsiUnVudGltZSIsICJDU1MiLCAiRE9NRGVi
dWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNldChbIkluc3BlY3RvciJdKQorICAgIGFn
ZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3BlY3RvclJlc291cmNlQWdlbnQifQorCisg
ICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVyYXRlIG5hbWVzIGluc3RlYWQuCisgICAg
YWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAgICJQYWdlIjogInBhZ2VBZ2VudCIsCisg
ICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIsCisgICAgICAgICJDb25zb2xlIjogImNv
bnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjogICJyZXNvdXJjZUFnZW50IiwKKyAgICAg
ICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwKKyAgICAgICAgIkRPTVN0b3JhZ2UiOiAg
ImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBsaWNhdGlvbkNhY2hlIjogICJhcHBsaWNh
dGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjogICJkb21BZ2VudCIsCisgICAgICAgICJD
U1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVnZ2VyIjogImRlYnVnZ2VyQWdlbnQiLAor
ICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdnZXJBZ2VudCIsCisgICAgICAgICJQcm9m
aWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAgIldvcmtlciI6ICJ3b3JrZXJBZ2VudCIs
CisgICAgfQorCisgICAgZG9tYWluX2RlZmluZV9uYW1lX21hcCA9IHsKKyAgICAgICAgIkRhdGFi
YXNlIjogIkVOQUJMRV9TUUxfREFUQUJBU0UiLAorICAgICAgICAiRE9NU3RvcmFnZSI6ICJFTkFC
TEVfRE9NX1NUT1JBR0UiLAorICAgICAgICAiRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRf
REVCVUdHRVIiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVC
VUdHRVIiLAorICAgICAgICAiUHJvZmlsZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIi
LAorICAgICAgICAiV29ya2VyIjogIkVOQUJMRV9XT1JLRVJTIiwKKyAgICB9CisKKworY2xhc3Mg
Q1BhcmFtVHlwZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJf
Zm9ybWF0PSIlcyIpOgorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0
dGVyX2Zvcm1hdCA9IHNldHRlcl9mb3JtYXQKKworICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYudHlwZQorCisgICAgZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYp
OgorICAgICAgICByZXR1cm4gc2VsZi5zZXR0ZXJfZm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMo
b2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldChqc29uX3R5cGUpOgorICAg
ICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkJvb2wKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gInN0cmluZyI6CisgICAgICAgICAg
ICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhcnJh
eSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29u
X3R5cGUgPT0gIm9iamVjdCI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0Cisg
ICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRlZ2VyIjoKKyAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5JbnQKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CisgICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZTogJXMiICUganNvbl90eXBlKQorCisgICAgY2xh
c3MgQmFzZVR5cGUob2JqZWN0KToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0
dXJuIGNscy5kZWZhdWx0X2NfcGFyYW1fdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorCisgICAgY2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0
aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwp
OgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0
aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0
cmluZyIKKworICAgICAgICBnZXRTZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAg
ICAgcmV0dXJuICJcIlwiIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdl
dEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9w
bGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9
IENQYXJhbVR5cGUoImNvbnN0IFN0cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAg
ICAgICAgICAgcmV0dXJuICJJbnQiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAg
ICAgICByZXR1cm4gIjAiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAgICAgICAgZGVm
YXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xhc3MgTnVtYmVy
KEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVy
TmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJO
dW1iZXIiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxp
emVyKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBkZWZhdWx0X2Nf
cGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCisKKyAgICBjbGFzcyBCb29sKEJhc2VU
eXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgKHBhcmFtX3R5cGUgPT0g
UGFyYW1UeXBlLkVWRU5UKToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAg
ICAgICByZXR1cm4gIkJvb2xlYW4iCisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRl
ck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6
ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiZmFsc2UiCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJib29s
ZWFuIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNo
ZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWlu
X2NfdHlwZSA9IENQYXJhbVR5cGUoImJvb2wiKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJh
bVR5cGUoImNvbnN0IGJvb2wqIGNvbnN0IiwgIiolcyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFz
ZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUo
Y2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09
IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2Nf
dHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUo
KToKKyAgICAgICAgICAgIHJldHVybiAiT2JqZWN0IgorCisgICAgICAgIGdldFNldHRlck5hbWUg
PSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlw
ZSgpOgorICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAg
cmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6
CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBh
cmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1U
eXBlLk9VVFBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAg
ICAgICAgICAgIGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkFycmF5
IgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICBy
ZXR1cm4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gIm9iamVj
dCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVj
a09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9j
X3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKyAgICAgICAgX3Jl
Zl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCisKKwor
Y2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CisgICAgSU5QVVQgPSAiaW5wdXQiCisgICAgT1VUUFVU
ID0gIm91dHB1dCIKKyAgICBFVkVOVCA9ICJldmVudCIKKworCitjbGFzcyBUeXBlRGF0YShvYmpl
Y3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToKKyAg
ICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNvbl9kb21h
aW5fID0ganNvbl9kb21haW4KKworICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlOgorICAg
ICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAgICAgICAg
cmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCisgICAgICAgIHNlbGYu
cmF3X3R5cGVfID0gcmF3X3R5cGUKKworICAgIGRlZiBnZXRSYXdUeXBlKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KKworCitjbGFzcyBUeXBlTWFwOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBhcGkpOgorICAgICAgICBzZWxmLm1hcF8gPSB7fQorICAgICAgICBmb3IganNv
bl9kb21haW4gaW4gYXBpWyJkb21haW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpz
b25fZG9tYWluWyJkb21haW4iXQorCisgICAgICAgICAgICBkb21haW5fbWFwID0ge30KKyAgICAg
ICAgICAgIHNlbGYubWFwX1tkb21haW5fbmFtZV0gPSBkb21haW5fbWFwCisKKyAgICAgICAgICAg
IGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fdHlw
ZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1l
ID0ganNvbl90eXBlWyJpZCJdCisgICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVE
YXRhKGpzb25fdHlwZSwganNvbl9kb21haW4pCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9t
YXBbdHlwZV9uYW1lXSA9IHR5cGVfZGF0YQorCisgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFt
ZSwgdHlwZV9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlw
ZV9uYW1lXQorCisKK2RlZiByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBzY29w
ZV9kb21haW5fbmFtZSk6CisgICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAg
ICBqc29uX3JlZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KKyAgICAgICAgdHlwZV9kYXRhID0g
Z2V0UmVmRGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiB0
eXBlX2RhdGEuZ2V0UmF3VHlwZSgpCisgICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6
CisgICAgICAgIGpzb25fdHlwZSA9IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLmdldChqc29uX3R5cGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisKK2RlZiBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29w
ZV9kb21haW5fbmFtZSk6CisgICAgZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKQorICAgIGlm
IGRvdF9wb3MgPT0gLTE6CisgICAgICAgIGRvbWFpbl9uYW1lID0gc2NvcGVfZG9tYWluX25hbWUK
KyAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWYKKyAgICBlbHNlOgorICAgICAgICBkb21haW5f
bmFtZSA9IGpzb25fcmVmWzpkb3RfcG9zXQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZltk
b3RfcG9zICsgMTpdCisKKyAgICByZXR1cm4gdHlwZV9tYXAuZ2V0KGRvbWFpbl9uYW1lLCB0eXBl
X25hbWUpCisKKworaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwgInIiKQor
anNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQoranNvbl9hcGkgPSBqc29uLmxvYWRzKGpz
b25fc3RyaW5nKQorCisKK2NsYXNzIFRlbXBsYXRlczoKKyAgICBmcm9udGVuZF9kb21haW5fY2xh
c3MgPSBzdHJpbmcuVGVtcGxhdGUoCisiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7Cisg
ICAgcHVibGljOgorICAgICAgICAkZG9tYWluQ2xhc3NOYW1lKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ciske2Zyb250ZW5kRG9tYWluTWV0aG9k
RGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KKyAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
KSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQorICAgIHByaXZhdGU6Cisg
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CisgICAgfTsKKworICAgICRkb21haW5DbGFzc05hbWUqICRkb21haW5GaWVsZE5hbWUoKSB7
IHJldHVybiAmbV8kZG9tYWluRmllbGROYW1lOyB9CisKKyIiIikKKworICAgIGJhY2tlbmRfbWV0
aG9kID0gc3RyaW5nLlRlbXBsYXRlKAorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6JHtkb21haW5OYW1lfV8kbWV0aG9kTmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0
KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCEkYWdl
bnRGaWVsZCkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9tYWluTmFt
ZX0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOworJG1ldGhvZE91dENvZGUKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyRtZXRob2RJbkNvZGUKK2lmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKQorICAgICRhZ2VudEZpZWxkLT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1z
KTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ciske3Jlc3BvbnNlQ29va31zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQs
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiJGRvbWFpbk5hbWUuJG1ldGhvZE5hbWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVy
cm9yKTsKK30KKyIiIikKKworICAgIGZyb250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgi
IiJ2b2lkIEluc3BlY3RvckZyb250ZW5kOjokZG9tYWluTmFtZTo6JGV2ZW50TmFtZSgkcGFyYW1l
dGVycykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2V2ZW50TmFtZX1NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAke2V2ZW50TmFtZX1NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCIsICIkZG9tYWluTmFtZS4kZXZlbnROYW1lIik7CiskY29kZSAgICBp
ZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoJHtldmVudE5hbWV9TWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorIiIiKQorCisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0
ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250
ZW5kX2gKKworI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsK
K2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5k
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqKTsKKworCiskZG9tYWluQ2xhc3NMaXN0Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Ciske2ZpZWxkRGVjbGFyYXRp
b25zfX07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3JGcm9udGVuZF9oKQorIiIiKQorCisgICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRl
KCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXJfaAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNw
ZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKKworJGZvcndhcmREZWNsYXJhdGlvbnMKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVm
Q291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4geworcHVibGljOgorICAgIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsJGNvbnN0cnVjdG9yUGFyYW1zKQorICAgICAgICA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyRjb25zdHJ1Y3Rvcklu
aXQKKyAgICB7IH0KKworICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSAwOyB9CisKKyAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7CisgICAgICAg
IFBhcnNlRXJyb3IgPSAwLAorICAgICAgICBJbnZhbGlkUmVxdWVzdCwKKyAgICAgICAgTWV0aG9k
Tm90Rm91bmQsCisgICAgICAgIEludmFsaWRQYXJhbXMsCisgICAgICAgIEludGVybmFsRXJyb3Is
CisgICAgICAgIFNlcnZlckVycm9yLAorICAgICAgICBMYXN0RW50cnksCisgICAgfTsKKworICAg
IHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OworICAgIHZvaWQg
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGRhdGEpIGNvbnN0OworICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKKyAgICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IFN0cmluZyogcmVzdWx0KTsKKworICAgIGVudW0gTWV0aG9kTmFtZXMgeworCiskbWV0aG9kTmFt
ZXNFbnVtQ29udGVudAorfTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNb
XTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVh
bihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdl
dEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCBz
ZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsKKworJG1ldGhv
ZERlY2xhcmF0aW9ucworCisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKKyRmaWVsZERlY2xhcmF0aW9ucworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
X2gpCisKKworIiIiKQorCisgICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVj
dG9yQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorJGlu
Y2x1ZGVzCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lc1tdID0geworJG1ldGhvZE5hbWVEZWNsYXJhdGlv
bnMKK307CisKKworJG1ldGhvZHMKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QgPSB0aGlzOworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rv
ck9iamVjdCogbWVzc2FnZU9iamVjdCk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hN
YXAsIGRpc3BhdGNoTWFwLCApOworICAgIGxvbmcgY2FsbElkID0gMDsKKworICAgIGlmIChkaXNw
YXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJz
W10gPSB7CiskbWVzc2FnZUhhbmRsZXJzCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5n
dGggPSBzaXplb2YoY29tbWFuZE5hbWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNbMF0pOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKGNvbW1hbmROYW1lc1tpXSwgaGFuZGxlcnNbaV0pOworICAgIH0KKworICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CisgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09O
IGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAg
aWYgKCFtZXNzYWdlT2JqZWN0KSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52
YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZh
bHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJv
cGVydHkgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KCFjYWxsSWRWYWx1ZS0+YXNOdW1iZXIoJmNhbGxJZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVz
dCBiZSBudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOwor
ICAgIGlmICghbWV0aG9kVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1l
dGhvZFZhbHVlLT5hc1N0cmluZygmbWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVy
dHkgbXVzdCBiZSBzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZCht
ZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBtZXRob2QgKyAi
JyB3YXNuJ3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMp
LippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworfQorCit2b2lkIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcg
aW52b2NhdGlvbkVycm9yKQoreworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJv
ck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2Ug
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJyZXN1bHQiLCByZXN1bHQpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJp
ZCIsIGNhbGxJZCk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3Bv
bnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwg
Q29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAor
eworICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1lc3NhZ2UsIDAp
OworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBj
b25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPGludD4sc19jb21tb25FcnJv
cnMsKTsKKyAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNpemUoKSkgeworICAgICAgICBzX2NvbW1v
bkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAwKTsKKyAgICAgICAgc19jb21tb25FcnJv
cnMuaW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAtMzI2MDApOworICAgICAgICBzX2NvbW1vbkVycm9y
cy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7CisgICAgICAgIHNfY29tbW9uRXJyb3Jz
Lmluc2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOworICAgICAgICBzX2NvbW1vbkVycm9ycy5p
bnNlcnQoSW50ZXJuYWxFcnJvciwgLTMyNjAzKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5z
ZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOworICAgIH0KKyAgICBBU1NFUlQoY29kZSA+PTApOwor
ICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7CisgICAg
QVNTRVJUKHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3ItPnNldE51bWJl
cigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKKyAgICBlcnJvci0+c2V0U3RyaW5nKCJt
ZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIGlmIChkYXRh
KQorICAgICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEiLCBkYXRhKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
ZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3IpOworICAgIGlmIChjYWxsSWQpCisgICAg
ICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2FsbElkKTsKKyAgICBlbHNlCisgICAgICAg
IG1lc3NhZ2UtPnNldFZhbHVlKCJpZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlm
IChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
Cit9CisKK2ludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMp
OworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisK
KyAgICBpbnQgdmFsdWUgPSAwOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2lu
ZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQg
cGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5h
bWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFs
dWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpKQorICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ051bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2
YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZh
bHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBTdHJpbmcgdmFs
dWUgPSAiIjsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkg
eworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNv
bnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6
Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAn
JXMnIHdpdGggdHlwZSAnU3RyaW5nJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAg
IGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFy
YW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZh
bHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9u
ZyB0eXBlLiBJdCBtdXN0IGJlICdTdHJpbmcnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAg
IGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9
IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitib29sIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykK
K3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisg
ICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisK
KyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAg
ICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3Bh
cmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5
cGUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVl
SXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJ0Jvb2xlYW4nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgp
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0
b3ItPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5w
dXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4g
SXQgbXVzdCBiZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQor
ICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYg
KHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAg
ICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAg
IC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFt
cycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUg
J09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9y
IHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVy
YXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdp
dGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5z
ZWNvbmQtPmFzT2JqZWN0KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVz
dCBiZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAg
IGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJl
dHVybiB2YWx1ZTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91
bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmpl
Y3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJl
ZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBt
dXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0
LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0
b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQp
IHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJy
YXknIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNBcnJh
eSgmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZv
cm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5k
KQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30K
K2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYg
KCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIs
IHJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CisiIiIpCisKKyAgICBmcm9udGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJp
Z2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisKKworSW5zcGVjdG9yRnJvbnRlbmQ6
Okluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKQorICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5pdHsKK30KKworJG1ldGhvZHMKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikK
KworICAgIGJhY2tlbmRfanMgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAy
MDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCitJbnNwZWN0b3JCYWNr
ZW5kU3R1YiA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7Cisg
ICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0gMDsKKyAgICB0aGlzLl9jYWxsYmFja3Mg
PSB7fTsKKyAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVycyA9IHt9OworICAgIHRoaXMuX2V2ZW50
QXJncyA9IHt9OworJGRlbGVnYXRlcyRldmVudEFyZ3MkZG9tYWluRGlzcGF0Y2hlcnMgICAgfQor
CitJbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUgPSB7CisgICAgZHVtcEluc3BlY3RvclRp
bWVTdGF0czogMCwKKyAgICBkdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKKworICAg
IF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciBjYWxsYmFja0lk
ID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxi
YWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgcmV0dXJuIGNhbGxi
YWNrSWQ7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0
U3RyaW5nKQorICAgIHsKKyAgICAgICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJz
ZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TmFt
ZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsgIkFnZW50IjsKKyAgICAgICAgaWYgKCF3aW5kb3db
YWdlbnROYW1lXSkKKyAgICAgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307CisgICAgICAg
IHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNz
YWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZyk7CisgICAgICAgIHdpbmRvd1th
Z2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2Uu
YmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQorICAgIH0sCisKKyAgICBfaW52b2tlOiBmdW5jdGlv
bihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXF1
ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5wYXJhbXMg
PSBhcmdzOworICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChy
ZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xp
Y2UuY2FsbChhcmd1bWVudHMpOworICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJn
cy5zaGlmdCgpKTsKKyAgICAgICAgdmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVv
ZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7
CisgICAgICAgIHZhciBkb21haW5BbmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIp
OworICAgICAgICB2YXIgYWdlbnRNZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQu
IiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKKworICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7
CisgICAgICAgIGlmIChyZXF1ZXN0LnBhcmFtcykgeworICAgICAgICAgICAgZm9yICh2YXIga2V5
IGluIHJlcXVlc3QucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVx
dWVzdC5wYXJhbXNba2V5XS50eXBlOworICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcg
PSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlvbmFsOworCisgICAgICAgICAgICAgICAgaWYgKGFy
Z3MubGVuZ3RoID09PSAwICYmICFvcHRpb25hbEZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50
cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhl
IG5leHQgYXJndW1lbnRzICciICsgSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicu
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAg
aWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtc1trZXldOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb25z
b2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsg
a2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBi
ZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAg
aGFzUGFyYW1zID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGFzUGFy
YW1zKQorICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1l
bnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rp
b24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlz
Ll93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Cisg
ICAgfSwKKworICAgIF93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24o
bWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCisgICAgeworICAgICAgICBtZXNzYWdlT2JqZWN0Lmlk
ID0gdGhpcy5fd3JhcChjYWxsYmFjayk7CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3Rv
clRpbWVTdGF0cykgeworICAgICAgICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2Nh
bGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5t
ZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5tZXRob2Q7CisgICAgICAgICAgICB3cmFwcGVkQ2Fs
bGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29u
c29sZS5sb2coImZyb250ZW5kOiAiICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwor
CisgICAgICAgICsrdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICB0aGlzLnNl
bmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1lc3NhZ2VPYmplY3QpOworICAgIH0sCisKKyAgICBz
ZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7
CisgICAgICAgIGNvbnNvbGUudGltZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKKyAgICAg
ICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworICAg
IH0sCisKKyAgICBfcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRp
c3BhdGNoZXIpCisgICAgeworICAgICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5d
ID0gZGlzcGF0Y2hlcjsKKyAgICB9LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2Up
CisgICAgeworICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykK
KyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9
PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7CisKKyAg
ICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/
IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNzYWdlOworCisgICAgICAgIGlmICgiaWQiIGluIG1l
c3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKKyAgICAg
ICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yKSB7CisgICAgICAgICAgICAgICAgbWVzc2Fn
ZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7CisgICAgICAgICAgICAgICAgICAgIGdldERlc2Ny
aXB0aW9uOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJzZSBlcnJvciI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5k
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZh
bGlkIHBhcmFtcyI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJl
dHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5n
OiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25vd24gZXJyb3IgY29kZSI7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2Rl
ICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5k
YXRhLmpvaW4oIiAiKSA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg
ICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWVz
c2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAtMzIwMDApCisgICAgICAgICAgICAgICAgICAgIHRo
aXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VP
YmplY3QucmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VP
YmplY3QucmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdl
T2JqZWN0LnJlc3VsdFtrZXldKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNh
bGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAgICAgICAg
aWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7
CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxs
YmFjay5tZXRob2ROYW1lKQorICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1l
ID0gRGF0ZS5ub3coKTsKKworICAgICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3Nh
Z2VPYmplY3QuZXJyb3IpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFy
Z3VtZW50cyk7CisgICAgICAgICAgICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7
CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0Lmlk
XTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYg
Y2FsbGJhY2subWV0aG9kTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRp
bWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0
YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygp
IC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQorICAgICAg
ICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOworCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVz
c2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4iKTsKKyAgICAgICAgICAgIHZhciBkb21haW5OYW1l
ID0gbWV0aG9kWzBdOworICAgICAgICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsK
KyAgICAgICAgICAgIGlmICghKGRvbWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMp
KSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBt
ZXNzYWdlIGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKKyAgICAg
ICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBpbiBkaXNwYXRjaGVyKSkgeworICAgICAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2gg
YW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKKyAgICAgICAgICAg
ICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNo
IGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciBwYXJhbXMgPSBbXTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewor
ICAgICAgICAgICAgICAgIHZhciBwYXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VP
YmplY3QubWV0aG9kXTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFt
TmFtZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3Nh
Z2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNbaV1dKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgICAgICBpZiAodGhpcy5kdW1w
SW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUg
PSBEYXRlLm5vdygpOworCisgICAgICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBw
bHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclRpbWVTdGF0cykKKyAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czog
IiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3Np
bmdTdGFydFRpbWUpKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICByZXBvcnRQcm90b2NvbEVy
cm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5lcnJv
cigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiAr
IG1lc3NhZ2VPYmplY3QuZXJyb3IpOworICAgIH0sCisKKyAgICBydW5BZnRlclBlbmRpbmdEaXNw
YXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Njcmlw
dHMpCisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW107CisKKyAgICAgICAgaWYgKHNjcmlw
dCkKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMucHVzaChzY3JpcHQpOworCisgICAgICAgIGlm
ICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0
cyA9IHRoaXMuX3NjcmlwdHM7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KKyAgICAg
ICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKKyAgICAg
ICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30K
KworSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOyIiIikKKwor
ICAgIHBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZSA9ICIiIgorICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmpl
Y3QoInBhcmFtcyIpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworIiIiCisKKwordHlwZV9tYXAgPSBUeXBlTWFw
KGpzb25fYXBpKQorCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBmcm9udGVuZF9jbGFzc19maWVs
ZF9saW5lcyA9IFtdCisgICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KKworICAg
IG1ldGhvZF9uYW1lX2VudW1fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfZGVjbGFyYXRp
b25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtd
CisgICAgYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBtZXRo
b2RfaGFuZGxlcl9saXN0ID0gW10KKyAgICBmcm9udGVuZF9tZXRob2RfbGlzdCA9IFtdCisgICAg
YmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2V2ZW50X2xp
c3QgPSBbXQorICAgIGJhY2tlbmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdCA9IFtdCisKKyAg
ICBiYWNrZW5kX2NvbnN0cnVjdG9yX3BhcmFtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfY29uc3Ry
dWN0b3JfaW5pdF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2ZpZWxkX2xpc3QgPSBbXQorICAgIGJh
Y2tlbmRfZm9yd2FyZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCisg
ICAgZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgZ28oKToKKyAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJk
b21haW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4i
XQorICAgICAgICAgICAgZG9tYWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCisK
KyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRh
KGRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChk
ZWZpbmVzX21hcCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWdl
bnRfZmllbGRfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50X2ZpZWxkX25hbWUKKworICAgICAgICAg
ICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGlm
ICJldmVudHMiIGluIGpzb25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2V2ZW50
IGluIGpzb25fZG9tYWluWyJldmVudHMiXToKKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9y
LnByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saW5lcykKKworICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9j
bGFzc19maWVsZF9saW5lcy5hcHBlbmQoIiAgICAlcyBtXyVzO1xuIiAlIChkb21haW5fbmFtZSwg
ZG9tYWluX25hbWVfbG93ZXIpKQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9j
b25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAgLCBtXyVzKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbClcbiIgJSBkb21haW5fbmFtZV9sb3dlcikKKyAgICAgICAgICAgICAgICBHZW5lcmF0
b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRf
ZG9tYWluX2NsYXNzLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWlu
Q2xhc3NOYW1lPWRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICBkb21haW5GaWVsZE5h
bWU9ZG9tYWluX25hbWVfbG93ZXIsCisgICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWlu
TWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVz
LCAiIikpKQorICAgICAgICAgICAgaWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAg
ICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgor
ICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFu
ZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpCisKKyAgICAgICAgICAgIGlmIG5vdCBk
b21haW5fZGF0YS5za2lwX2pzX2JpbmQ6CisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNE
aXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIl
c1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkKKworICAgICAgICBzb3J0ZWRf
anNvbl9kb21haW5zID0gbGlzdChqc29uX2FwaVsiZG9tYWlucyJdKQorICAgICAgICBzb3J0ZWRf
anNvbl9kb21haW5zLnNvcnQoa2V5PWxhbWJkYSBvOiBvWyJkb21haW4iXSkKKworICAgICAgICBm
b3IganNvbl9kb21haW4gaW4gc29ydGVkX2pzb25fZG9tYWluczoKKyAgICAgICAgICAgIGRvbWFp
bl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFpbl9kYXRh
ID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAgICAgICAg
ICAgaWYgZG9tYWluX2RhdGEuaXNfZGlzYWJsZWQoZGVmaW5lc19tYXApOgorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGRvbWFpbl9kYXRhLmhpZGRlbjoKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWlu
X2RhdGEuYWdlbnRfdHlwZV9uYW1lCisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9t
YWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
Y29uc3RydWN0b3JfcGFyYW1fbGlzdC5hcHBlbmQoIiwgJXMqICVzIiAlIChhZ2VudF90eXBlX25h
bWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29u
c3RydWN0b3JfaW5pdF9saXN0LmFwcGVuZCgiICAgICAgICAsIG1fJXMoJXMpIiAlIChhZ2VudF9m
aWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUs
IGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2Fy
ZF9saXN0LmFwcGVuZCgiY2xhc3MgJXM7IiAlIGFnZW50X3R5cGVfbmFtZSkKKyAgICAgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdC5hcHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwi
IiAlIGFnZW50X3R5cGVfbmFtZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vz
c19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0
aW9uX2xpbmVzKToKKyAgICAgICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorICAg
ICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCisgICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQor
ICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QgPSBbXQorICAgICAgICBpZiAicGFy
YW1ldGVycyIgaW4ganNvbl9ldmVudDoKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBw
ZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTtcbiIpCisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4g
anNvbl9ldmVudFsicGFyYW1ldGVycyJdOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1l
ID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSBy
ZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAg
ICAgICAgICAgIGpzb25fb3B0aW9uYWwgPSAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFu
ZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWxf
bWFzayA9IHJhd190eXBlLmlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKQorICAgICAgICAgICAg
ICAgIGNfdHlwZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29u
X29wdGlvbmFsKQorCisgICAgICAgICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRT
ZXR0ZXJOYW1lKCkKKworICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBh
bmQganNvbl9vcHRpb25hbAorCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5k
KCIlcyAlcyIgJSAoY190eXBlLmdldF90ZXh0KCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAg
ICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUg
cGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gIiAgICBwYXJh
bXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVy
X25hbWUsIHNldHRlcl9hcmd1bWVudCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBh
cmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2RlCisgICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVf
bGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCisKKyAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2
ZW50X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAg
ICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAgICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwi
cGFyYW1zXCIsIHBhcmFtc09iamVjdCk7XG4iICUgZXZlbnRfbmFtZSkKKyAgICAgICAgZnJvbnRl
bmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZCgKKyAgICAgICAgICAgICIgICAgICAg
IHZvaWQgJXMoJXMpO1xuIiAlIChldmVudF9uYW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAi
KSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LmFwcGVuZChUZW1w
bGF0ZXMuZnJvbnRlbmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFp
bk5hbWU9ZG9tYWluX25hbWUsIGV2ZW50TmFtZT1ldmVudF9uYW1lLAorICAgICAgICAgICAgcGFy
YW1ldGVycz1qb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSwKKyAgICAgICAgICAgIGNvZGU9am9p
bihtZXRob2RfbGluZV9saXN0LCAiIikpKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pz
X2V2ZW50X2xpc3QuYXBwZW5kKCIgICAgdGhpcy5fZXZlbnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNd
O1xuIiAlICgKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCBqb2luKGJhY2tl
bmRfanNfZXZlbnRfcGFyYW1fbGlzdCwgIiwgIikpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmll
bGRfbmFtZSk6CisgICAgICAgIGpzb25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1l
Il0KKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAg
ICAgayVzXyVzQ21kLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAg
ICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21t
YW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25f
bGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFt
ZSkpCisKKyAgICAgICAgbWV0aG9kX2luX2NvZGUgPSAiIgorICAgICAgICBtZXRob2Rfb3V0X2Nv
ZGUgPSAiIgorICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QgPSBbXQorICAgICAgICByZXNw
b25zZV9jb29rX2xpc3QgPSBbXQorICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgor
ICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiIgorICAgICAgICBpZiAicGFyYW1ldGVycyIg
aW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRb
InBhcmFtZXRlcnMiXQorICAgICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0gVGVtcGxhdGVzLnBh
cmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZQorICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3Bh
cmFtID0gIiByZXF1ZXN0TWVzc2FnZU9iamVjdCIKKyAgICAgICAgICAgIGpzX3BhcmFtX2xpc3Qg
PSBbXQorCisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9wYXJhbXM6Cisg
ICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQor
ICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29u
X3BhcmFtZXRlciwgZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBh
cmFtX3Jhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAg
ICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFyYW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisK
KyAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29u
X3BhcmFtZXRlclsib3B0aW9uYWwiXToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAg
IGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVz
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJh
bV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAw
IiAlIChqc29uX3BhcmFtX25hbWUsIGpzb25fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhw
YXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFy
YW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAg
ICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCisKKyAgICAgICAgICAgICAg
ICBtZXRob2RfaW5fY29kZSArPSBjb2RlCisgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJh
bV9saXN0LmFwcGVuZChwYXJhbSkKKworICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBh
cmFtX3Jhd190eXBlLmdldEpzQmluZFR5cGUoKQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3Rl
eHQgPSAiXCIlc1wiOiB7XCJvcHRpb25hbFwiOiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAor
ICAgICAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1l
dGVyWyJvcHRpb25hbCJdKSBlbHNlICJmYWxzZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19i
aW5kX3R5cGUpCisKKyAgICAgICAgICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJh
bV90ZXh0KQorCisgICAgICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wi
OiB7IiArIGpvaW4oanNfcGFyYW1fbGlzdCwgIiwgIikgKyAifSIKKworICAgICAgICByZXNwb25z
ZV9jb29rX3RleHQgPSAiIgorICAgICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgor
ICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9ICJcbiIKKyAgICAgICAgICAgIGZvciBqc29u
X3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMiXToKKworICAgICAgICAgICAgICAgIGpz
b25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3
X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAg
ICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAg
ICAgICAgICAgICAgICB2YXJfdHlwZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBl
Lk9VVFBVVCwgTm9uZSkKKworICAgICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9
ICVzO1xuIiAlICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFs
aXplcikKKyAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5f
bmFtZQorICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNc
Iiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0
dXJuX25hbWUpCisgICAgICAgICAgICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9v
bCIgYW5kICJvcHRpb25hbCIgaW4ganNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25h
bCJdOgorICAgICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4g
ICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vaworCisgICAgICAgICAgICAgICAgbWV0aG9k
X291dF9jb2RlICs9IGNvZGUKKyAgICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3Qu
YXBwZW5kKHBhcmFtKQorICAgICAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQo
Y29vaykKKyAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9p
bihyZXNwb25zZV9jb29rX2xpc3QsICIiKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21l
dGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Qu
c3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0
aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgIGFnZW50RmllbGQ9Im1fIiAr
IGFnZW50X2ZpZWxkX25hbWUsCisgICAgICAgICAgICBtZXRob2RJbkNvZGU9bWV0aG9kX2luX2Nv
ZGUsCisgICAgICAgICAgICBtZXRob2RPdXRDb2RlPW1ldGhvZF9vdXRfY29kZSwKKyAgICAgICAg
ICAgIGFnZW50Q2FsbFBhcmFtcz1qb2luKGFnZW50X2NhbGxfcGFyYW1fbGlzdCwgIiIpLAorICAg
ICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmplY3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAorICAg
ICAgICAgICAgcmVzcG9uc2VDb29rPXJlc3BvbnNlX2Nvb2tfdGV4dCkpCisgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIl
cy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgICAgICB0aGlz
Ll9yZWdpc3RlckRlbGVnYXRlKCd7XCJtZXRob2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0n
KTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3Rl
eHQpKQorCisKK0dlbmVyYXRvci5nbygpCisKK2JhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRf
aGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCiti
YWNrZW5kX2NwcF9maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmNwcCIsICJ3IikKKworZnJvbnRlbmRfaF9maWxlID0gb3BlbihvdXRw
dXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckZyb250ZW5kLmgiLCAidyIpCitmcm9udGVu
ZF9jcHBfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVu
ZC5jcHAiLCAidyIpCisKK2JhY2tlbmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1l
ICsgIi9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcyIsICJ3IikKKworCitmcm9udGVuZF9oX2ZpbGUu
d3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgZmll
bGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMs
ICIiKSwKKyAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9k
b21haW5fY2xhc3NfbGluZXMsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRl
cy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdl
bmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCisgICAgY29uc3Ry
dWN0b3JQYXJhbXM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0
LCAiIiksCisgICAgbWV0aG9kTmFtZXNFbnVtQ29udGVudD1qb2luKEdlbmVyYXRvci5tZXRob2Rf
bmFtZV9lbnVtX2xpc3QsICJcbiIpLAorICAgIG1ldGhvZERlY2xhcmF0aW9ucz1qb2luKEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBmaWVsZERl
Y2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAorICAg
IGZvcndhcmREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3Qs
ICJcbiIpKSkKKworZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2Nw
cC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZy
b250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIpLAorICAgIG1ldGhvZHM9am9pbihHZW5l
cmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIpKSkKKworYmFja2VuZF9jcHBfZmlsZS53
cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZE5h
bWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJh
dGlvbl9saXN0LCAiXG4iKSwKKyAgICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2lu
Y2x1ZGVfbGlzdCwgIlxuIiksCisgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21l
dGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBtZXNzYWdlSGFuZGxlcnM9am9p
bihHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2pzX2Zp
bGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAorICAgIGRlbGVn
YXRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QsICIiKSwKKyAg
ICBldmVudEFyZ3M9am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0LCAiIiksCisg
ICAgZG9tYWluRGlzcGF0Y2hlcnM9am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlz
cGF0Y2hlcl9saXN0LCAiIikpKQorCitiYWNrZW5kX2hfZmlsZS5jbG9zZSgpCitiYWNrZW5kX2Nw
cF9maWxlLmNsb3NlKCkKKworZnJvbnRlbmRfaF9maWxlLmNsb3NlKCkKK2Zyb250ZW5kX2NwcF9m
aWxlLmNsb3NlKCkKKworYmFja2VuZF9qc19maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA4OGI5ZTk5ZTk3ZGMzMzlkYWFjZDBhMDRjMDA3OGY5
ZWY5ZGY0N2RiLi45OTAzMDViMjQwNmRmYjVlYjFmMTQyMmE1MTA1NGNhMTJkOGI5NzA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xNDAsNyArMTQwLDcgQEAK
ICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzZXNzaW9uIiwgInR5cGUiOiAiYm9vbGVh
biIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGluIGNhc2Ugb2Ygc2Vzc2lvbiBjb29raWUuIiB9CiAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiaGlkZGVuIjogdHJ1ZQotICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjog
WwogICAgICAgICAgICAgewpAQCAtODQ2LDcgKzg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaXNMb2NhbFN0b3JhZ2UiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0
aW9uIjogIlRydWUgZm9yIGxvY2FsIHN0b3JhZ2UuIiB9LAogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImlkIiwgInR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkVudHJ5IGlk
IGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4iIH0KICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAg
ICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAg
ICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLWlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxOGRlZDYxMGIyODZiYTVl
NjQ4MGNhOWFkYTNmZGFkZjkwNmZiYTdjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0
b3ItaWRsCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5
dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmli
dXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQot
cHJvZ3JhbV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShfX2ZpbGVfXykKLWlmIGxlbihzeXMuYXJn
dikgPCA0IG9yIHN5cy5hcmd2WzFdICE9ICItbyI6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiVXNh
Z2U6ICVzIC1vIE9VVFBVVF9GSUxFIElOUFVUX0ZJTEVcbiIgJSBwcm9ncmFtX25hbWUpCi0gICAg
ZXhpdCgxKQotCi1vdXRwdXRfcGF0aCA9IHN5cy5hcmd2WzJdCi1pbnB1dF9wYXRoID0gc3lzLmFy
Z3ZbM10KLQotaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfcGF0aCwgInIiKQotanNvbl9zdHJpbmcg
PSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6
IHRydWUiLCAiOiBUcnVlIikKLWpzb25fc3RyaW5nID0ganNvbl9zdHJpbmcucmVwbGFjZSgiOiBm
YWxzZSIsICI6IGZhbHNlIikKLWpzb25fYXBpID0gZXZhbChqc29uX3N0cmluZylbImRvbWFpbnMi
XQotCi1vdXRwdXRfZmlsZSA9IG9wZW4ob3V0cHV0X3BhdGgsICJ3IikKLW91dHB1dF9maWxlLndy
aXRlKCIiIi8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAot
bW9kdWxlIGNvcmUgeyIiIikKLQotdHlwZV90cmFpdHMgPSB7Ci0gICAgInN0cmluZyI6ICJTdHJp
bmciLAotICAgICJpbnRlZ2VyIjogImludCIsCi0gICAgIm51bWJlciI6ICJkb3VibGUiLAotICAg
ICJib29sZWFuIjogImJvb2xlYW4iLAotICAgICJhcnJheSI6ICJBcnJheSIsCi0gICAgIm9iamVj
dCI6ICJPYmplY3QiCi19Ci0KLXJlZl90eXBlcyA9IHt9Ci0KLW1hY3JvX3RyYWl0cyA9IHsKLSAg
ICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFCQVNFIiwKLSAgICAiRE9NU3RvcmFnZSI6ICJET01fU1RP
UkFHRSIsCi0gICAgIkRlYnVnZ2VyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJET01E
ZWJ1Z2dlciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiUHJvZmlsZXIiOiAiSkFWQVND
UklQVF9ERUJVR0dFUiIsCi0gICAgIldvcmtlciI6ICJXT1JLRVJTIgotfQotCi1kZWYgZnVsbF9x
dWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgdHlwZV9pZCk6Ci0gICAgaWYgdHlwZV9pZC5m
aW5kKCIuIikgPT0gLTE6Ci0gICAgICAgcmV0dXJuICIlcy4lcyIgJSAoZG9tYWluX25hbWUsIHR5
cGVfaWQpCi0gICAgcmV0dXJuIHR5cGVfaWQKLSAgICAKLQotZGVmIHBhcmFtX3R5cGUoZG9tYWlu
X25hbWUsIHBhcmFtKToKLSAgICBpZiAidHlwZSIgaW4gcGFyYW06Ci0gICAgICAgIHJldHVybiB0
eXBlX3RyYWl0c1twYXJhbVsidHlwZSJdXQotICAgIGlmICIkcmVmIiBpbiBwYXJhbToKLSAgICAg
ICAgdHlwZV9pZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHBhcmFtWyIk
cmVmIl0pCi0gICAgICAgIGlmIHR5cGVfaWQgaW4gcmVmX3R5cGVzOgotICAgICAgICAgICAgcmVm
X3R5cGUgPSByZWZfdHlwZXNbdHlwZV9pZF0KLSAgICAgICAgICAgIHJldHVybiB0eXBlX3RyYWl0
c1tyZWZfdHlwZVsidHlwZSJdXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIlR5
cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZCkKLSAgICAgICAgICAgIHJldHVybiAiISEgVHlwZSBu
b3QgZm91bmQ6ICIgKyB0eXBlX2lkCi0KLWZvciBkb21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9t
YWluX25hbWUgPSBkb21haW5bImRvbWFpbiJdCi0gICAgaWYgInR5cGVzIiBpbiBkb21haW46Ci0g
ICAgICAgIGZvciB0eXBlIGluIGRvbWFpblsidHlwZXMiXToKLSAgICAgICAgICAgIHR5cGVfaWQg
PSBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlWyJpZCJdKQotICAgICAg
ICAgICAgcmVmX3R5cGVzW3R5cGVfaWRdID0gdHlwZTsKLQotZm9yIGRvbWFpbiBpbiBqc29uX2Fw
aToKLSAgICBkb21haW5fbmFtZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiBkb21haW5fbmFt
ZSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNpZiBkZWZp
bmVkKEVOQUJMRV8lcykgJiYgRU5BQkxFXyVzIiAlIChtYWNyb190cmFpdHNbZG9tYWluX25hbWVd
LCBtYWNyb190cmFpdHNbZG9tYWluX25hbWVdKSkKLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4g
ICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1JTlNQRUNUT1JdICVzIHsiICUgZG9tYWluX25hbWUp
Ci0KLSAgICBpZiAiY29tbWFuZHMiIGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAgcGFyYW1zID0gW10KLSAgICAgICAgICAg
IGlmICgicGFyYW1ldGVycyIgaW4gY29tbWFuZCk6Ci0gICAgICAgICAgICAgICAgZm9yIGluX3Bh
cmFtIGluIGNvbW1hbmRbInBhcmFtZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJv
cHRpb25hbCIgaW4gaW5fcGFyYW0pOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwg
PSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBl
bmQoImluJXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBpbl9w
YXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgaWYgKCJyZXR1cm5zIiBpbiBj
b21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3Igb3V0X3BhcmFtIGluIGNvbW1hbmRbInJldHVy
bnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gb3V0X3BhcmFtKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAi
IgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0
aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIG91dF9wYXJhbSksIG91dF9wYXJhbVsibmFt
ZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgdm9pZCAlcygl
cyk7IiAlIChjb21tYW5kWyJuYW1lIl0sICIsICIuam9pbihwYXJhbXMpKSkKLQotICAgIGlmICJl
dmVudHMiIGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpblsiZXZlbnRzIl06
Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAgICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBp
biBldmVudCk6Ci0gICAgICAgICAgICAgICAgZm9yIGluX3BhcmFtIGluIGV2ZW50WyJwYXJhbWV0
ZXJzIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFtKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAi
IgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0
aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIGluX3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUi
XSkpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgICAgIFtldmVudF0gdm9p
ZCAlcyglcyk7IiAlIChldmVudFsibmFtZSJdLCAiLCAiLmpvaW4ocGFyYW1zKSkpCi0KLSAgICBv
dXRwdXRfZmlsZS53cml0ZSgiXG4gICAgfTsiKQotICAgIGlmIGRvbWFpblsiZG9tYWluIl0gaW4g
bWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4jZW5kaWYgLy8gRU5B
QkxFXyVzIiAlIG1hY3JvX3RyYWl0c1tkb21haW5bImRvbWFpbiJdXSkKLW91dHB1dF9maWxlLndy
aXRlKCJcbn1cbiIpCi1vdXRwdXRfZmlsZS5jbG9zZSgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111276</attachid>
            <date>2011-10-17 09:40:33 -0700</date>
            <delta_ts>2011-10-17 10:07:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111017204030.patch</filename>
            <type>text/plain</type>
            <size>121810</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5NDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggYWVhZjcz
MTFhYTU0YThmNGRmZDAxM2VkNjg5Yzc5NjM3ZTE5NGNhYy4uMjU0OGM0Zjg0NTQzOWIxYTAyMDlj
OTdjMDJlYzIzYjNhNGUwZTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMTQsMTcgKzIy
MTQsMTAgQEAgQUREX0NVU1RPTV9DT01NQU5EKAogTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JQcm90b2NvbFZlcnNpb24u
aCkKIAogQUREX0NVU1RPTV9DT01NQU5EKAotICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAotICAgIE1BSU5fREVQRU5ERU5DWSBpbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9L0luc3BlY3Rvci5pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgVkVSQkFUSU0pCi0KLUFERF9DVVNUT01fQ09NTUFORCgKICAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5oCi0gICAgTUFJ
Tl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRs
Ci0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJp
bmRpbmdzLnBsICR7U0NSSVBUU19CSU5ESU5HU30gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3Rvci5pZGwKLSAgICBDT01NQU5EICR7UEVSTF9FWEVDVVRBQkxFfSAtSSR7V0VCQ09SRV9E
SVJ9L2JpbmRpbmdzL3NjcmlwdHMgLUkke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IgJHtXRUJDT1JF
X0RJUn0vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAtLWRlZmluZXMgIiR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9IiAtLWdlbmVyYXRvciBJbnNwZWN0b3IgJHtJRExf
SU5DTFVERVN9IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
cHJlcHJvY2Vzc29yICIke0NPREVfR0VORVJBVE9SX1BSRVBST0NFU1NPUn0iICR7REVSSVZFRF9T
T1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCisgICAgTUFJTl9ERVBFTkRFTkNZIGlu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbgorICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZGVmaW5lcyAiJHtGRUFUVVJFX0RFRklORVNfSkFW
QVNDUklQVH0iCiAgICAgVkVSQkFUSU0pCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMTViMjg5MjRlOTUxNmVhNDU3ZjkzYzBkZmQ3NDZhN2Y2N2ViOWVkMi4u
NmYwMjU0MTkxZjQxZWZiNWFjNTg0ZGE4NzhmZjJlOWE5YTM0NDNkMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI0IEBACisyMDExLTEwLTA3ICBQZXRlciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWls
LmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZWltcGxlbWVudCBwcm90b2NvbCBiYWNr
ZW5kL2Zyb250ZW5kIHNvdXJjZSBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY5Mjk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgT2xkIDItc3RhZ2UgcHl0aG9uK3BlcmYgZ2VuZXJhdG9yIHRo
YXQgdXNlcyBpbnRlcm1lZGlhdGUgSURMIG91dHB1dCBpcworICAgICAgICBiZWluZyByZXBsYWNl
ZCB3aXRoIGEgc29saWQgcHl0aG9uIHNjcmlwdC4gVGhpcyBpcyBmb3Igc2ltcGxpY2l0eSBhbmQK
KyAgICAgICAgYXMgYSBiYXNlIGZvciB0aGUgZnV0dXJlIEpTT04gdmFsaWRhdG9yLgorCisgICAg
ICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogQ29kZUdlbmVyYXRvcnMucHJpOgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICogaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucG06IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbDog
UmVtb3ZlZC4KKwogMjAxMS0xMC0wNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gd2Via2l0d2Vic3JjOiBhdm9pZCBHU1RfQk9J
TEVSUExBVEVfRlVMTApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMu
cHJpIGIvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCmluZGV4IGYxNWUzOWVlYzIy
ZWUyMTY4ZmI5MjE5NDcxMjkzYzM5ZmY4YWRkODEuLmIwY2UyZjUwZDg2MTUyZmQzZTZmOWU4ODhj
OTE5MTQ1NDYyZjg4M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3Jz
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKQEAgLTY3NywyOSAr
Njc3LDEyIEBAIGluc3BlY3RvclZhbGlkYXRlLmRlcGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIGluc3BlY3RvclZhbGlkYXRlLndrQWRk
T3V0cHV0VG9Tb3VyY2VzID0gZmFsc2UKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9yVmFsaWRh
dGUpCiAKLWluc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsCitpbnNwZWN0b3JKU09OLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCiBpbnNwZWN0b3JKU09OLmlucHV0
ID0gSU5TUEVDVE9SX0pTT04KLWluc3BlY3RvckpTT04ud2tTY3JpcHQgPSAkJFBXRC9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNPTi5jb21tYW5kcyA9IHB5dGhv
biAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQgLW8gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgotaW5zcGVjdG9y
SlNPTi5kZXBlbmRzID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWlu
c3BlY3RvckpTT04ud2tBZGRPdXRwdXRUb1NvdXJjZXMgPSBmYWxzZQoraW5zcGVjdG9ySlNPTi53
a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CitpbnNw
ZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVjdG9ySlNPTi53a1NjcmlwdCAkJFBX
RC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgJCRXQ19HRU5FUkFURURf
U09VUkNFU19ESVIgLS1vdXRwdXRfY3BwX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiAt
LWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIgoraW5zcGVjdG9ySlNP
Ti5kZXBlbmRzID0gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0CiBhZGRFeHRyYUNvbXBpbGVyKGlu
c3BlY3RvckpTT04pCi1pbnNwZWN0b3JKU09OLnZhcmlhYmxlX291dCA9IElOU1BFQ1RPUl9KU09O
X09VVFBVVAotCi1pbnNwZWN0b3JJREwub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKLWluc3BlY3RvcklETC5pbnB1dCA9IElOU1BF
Q1RPUl9KU09OX09VVFBVVAotaW5zcGVjdG9ySURMLndrU2NyaXB0ID0gJCRQV0QvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbAotaW5zcGVjdG9ySURMLmNvbW1hbmRzID0gcGVy
bCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgLUkkJFBXRC9pbnNwZWN0b3IgJCRpbnNwZWN0b3JJ
REwud2tTY3JpcHQgLS1kZWZpbmVzIFwiJCR7RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9XCIg
LS1nZW5lcmF0b3IgSW5zcGVjdG9yIC0tb3V0cHV0RGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICR7UU1BS0VfRklMRV9OQU1F
fQotaW5zcGVjdG9ySURMLmRlcGVuZHMgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0gXAotICAgICAgICAgICAgICAkJFBXRC9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtIFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1
cmUucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0luRmlsZXNQYXJz
ZXIucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3Nv
ci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBcCi0g
ICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNw
ZWN0b3JJREwud2tFeHRyYVNvdXJjZXMgPSAkJGluc3BlY3RvcklETC5vdXRwdXQKLWFkZEV4dHJh
Q29tcGlsZXIoaW5zcGVjdG9ySURMKQogCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5vdXRwdXQgPSBn
ZW5lcmF0ZWQvSW5zcGVjdG9yQmFja2VuZFN0dWIucXJjCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5p
bnB1dCA9IElOU1BFQ1RPUl9CQUNLRU5EX1NUVUJfUVJDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCA1ZWEwNGRlMTUwODFmYjFmZTRiNTBmZDk3Njg3NjBlZGRiNzEzYzdlLi5jMGMy
NTVkNTY4YmE4ZmViMDUyNDY4ZTVjZWY0ZGRmNDA2MTc2MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTg5NCwxNSArODk0LDEyIEBAIGFsbCA6IEluc3BlY3RvclByb3RvY29s
VmVyc2lvbi5oCiBJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6IEluc3BlY3Rvci5qc29uIGlu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCXB5dGhvbiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAtbyBJ
bnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3Iu
anNvbgogCi1JbnNwZWN0b3IuaWRsIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1pZGwKLQlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5z
cGVjdG9yLWlkbCAtbyBJbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCi0KIGFsbCA6IEluc3BlY3RvckZyb250ZW5kLmgKIAotSU5TUEVDVE9SX0dFTkVSQVRP
Ul9TQ1JJUFRTID0gJChHRU5FUkFURV9TQ1JJUFRTKSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKIAotSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5p
ZGwgJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0JJChjYWxsIGdlbmVyYXRvcl9zY3Jp
cHQsICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKSkgLS1vdXRwdXREaXIgLiAtLWRlZmlu
ZXMgIiQoRkVBVFVSRV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWdlbmVyYXRvciBJ
bnNwZWN0b3IgJDwKK0luc3BlY3RvckZyb250ZW5kLmggOiBJbnNwZWN0b3IuanNvbiAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKKwlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
biAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLWRlZmluZXMgIiQoRkVBVFVS
RV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIgogCiBhbGwgOiBJbmplY3RlZFNjcmlwdFNv
dXJjZS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMTQ0NGI0ZTQyN2YwZmQzYWU2MWZhODA1
YjNmY2YzNWIwMmNlNjVhOC4uMDFmMjFlMzEwNzFkMjFjNWU2ZmM4MWVkY2IxOGIyNjQzMTkxNzk1
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTcwMCwxMSArNzAwLDggQEAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9YTUxOYW1lcy5jcHAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxOYW1lcy5o
OiAkKFdlYkNvcmUKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJz
aW9uLmggOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCSQoUFlUSE9OKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAt
byAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KIAotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9J
bnNwZWN0b3IuaWRsIDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJD
b3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotCSQoUFlUSE9OKSAkKFdlYkNv
cmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vICQoR0VOU09VUkNFU19XRUJD
T1JFKS9JbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0K
LURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOiBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgJChTQ1JJUFRTX0JJTkRJTkdTKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCi0JJChBTV9WX0dF
TikkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzIC1JJChXZWJDb3JlKS9pbnNw
ZWN0b3IgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsICQo
SURMX1BBVEg6JT0tLWluY2x1ZGUgIiUiKSAtLW91dHB1dERpciAiJChHRU5TT1VSQ0VTX1dFQkNP
UkUpIiAtLWRlZmluZXMgIkxBTkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUyki
IC0tZ2VuZXJhdG9yIEluc3BlY3RvciAkPAorRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwkkKFBZ
VEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAkPCAt
LW91dHB1dF9oX2RpciAkKEdFTlNPVVJDRVNfV0VCQ09SRSkgLS1vdXRwdXRfY3BwX2RpciAkKEdF
TlNPVVJDRVNfV0VCQ09SRSkgLS1kZWZpbmVzICJMQU5HVUFHRV9KQVZBU0NSSVBUPTEgJChGRUFU
VVJFX0RFRklORVMpIgogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5o
OiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcAogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yQmFja2VuZFN0dWIuanM6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBl
NzgyNTczMzYyMGE3ZGZiN2NhYjZmNzBkYmRkYWU1ZTIwNjJiYzcxLi5kMmQ2N2FiM2UyYzQwZDAz
NzMzZWIzMmYyZTA0ZWY1MDQwODNlYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cApAQCAtMzM1LDE3ICszMzUsMjYgQEAKICAgfSwKICAgJ3RhcmdldHMnOiBbCiAgICAg
ewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJz
aW9uJywKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
CiAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAg
ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicKKyAgICAgIF0sCiAgICAgICAn
YWN0aW9ucyc6IFsKLSAgICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJh
dGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24nLAorICAgICAgICB7CisgICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xTb3VyY2VzJywKICAgICAgICAgICAn
aW5wdXRzJzogWwotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbicsCisgICAgICAgICAgICAjIEZpcnN0IGlucHV0LiBJdCBzdGFuZHMg
Zm9yIHB5dGhvbiBzY3JpcHQgaW4gYWN0aW9uIGJlbG93LgorICAgICAgICAgICAgJy4uL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICMgT3RoZXIgaW5w
dXRzLiBUaGV5IGdvIGFzIGFyZ3VtZW50cyB0byB0aGUgcHl0aG9uIHNjcmlwdC4KICAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewog
ICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTMsMjggKzM2Miwy
NyBAQAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdw
eXRob24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtdmVyc2lvbicsCi0gICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRw
dXRzKScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknCisgICAgICAgICAgICAnPEAoX2lucHV0
cyknLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2RpcicsICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLWRlZmluZXMnLCAn
PChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAgICAgICAgIF0sCi0g
ICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29sIGZvciBiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywKLSAgICAgICAg
fQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuanNvbicsCisgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwK
ICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX2lkbCcsCisgICAgICAndGFy
Z2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAogICAgICAg
J3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQotICAgICAgICB7Ci0gICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xJREwnLAorICAgICAg
ICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29s
VmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMn
OiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNw
ZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAgICAgIF0sCiAgICAgICAgICAg
J3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpA
QCAtMzgyLDY1ICszOTAsMTYgQEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBb
CiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICctbycsCiAgICAgICAgICAg
ICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScKICAgICAgICAgICBd
LAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdWYWxpZGF0
ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBnZW5l
cmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0g
ICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAotICAgICAg
J3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW5zcGVj
dG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicK
LSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCi0gICAgICAgICAg
IyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFzIGl0ZW0gbmFtZSBpbiB2Y3By
b2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IEluc3BlY3Rvci5pZGwg
dGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxlcyBhcmUgbWFya2luZyBhcyBl
eGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAg
ICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0gICAgICAg
ICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0nLAotICAgICAgICAg
ICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbScsCi0gICAgICAgICAgICAn
Li4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRp
bmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgIF0sCi0gICAg
ICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIu
anMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCi0gICAgICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAot
ICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdnZW5l
cmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAg
ICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICdz
Y3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICc8QChf
aW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJy0tZGVmaW5lcycsICc8
KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCi0gICAgICAgICAgICAnLS1n
ZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8QChnZW5lcmF0b3JfaW5jbHVk
ZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcg
SW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKLSAgICAgICAg
fSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3Rl
ZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMn
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyMTgzYzFmMjljNDY3OTU4
OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1wYWNrYWdlIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBDbGFzczo6U3RydWN0OwotdXNl
IEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5cGVUcmFuc2Zvcm17IkFwcGxp
Y2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2FwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwK
LSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiLAotICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFn
ZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50IiwKLSAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVidWdnZXIifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGVi
dWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURlYnVnZ2VyIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEYXRhYmFzZSJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tQWdlbnQiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21TdG9yYWdlQWdl
bnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9maWxlU3lz
dGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAgICAiZm9y
d2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQWdl
bnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudCIsCi19Owot
JHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
clJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVyQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSdW50
aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5cGVUcmFuc2Zvcm17IkZyb250
ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCi0gICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQYXNz
UmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0ci5oIiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewotICAgICJmb3J3YXJkSGVhZGVy
IiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0IiwKLSAg
ICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9IHsK
LSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgInZhcmlh
YmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4g
Ikluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JB
cnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAg
ICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVz
LmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAiIiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiY29uc3QgU3Ry
aW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgU3RyaW5nKiBjb25zdCIsCi0g
ICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJT
dHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAg
ICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJTdHJp
bmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5cGVUcmFuc2Zvcm17Imxvbmci
fSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJj
b25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwK
LSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAi
LAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFu
c2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBsb25n
IiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBsb25nKiBjb25zdCIs
Ci0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+
ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3
YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1i
ZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2ln
bmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCi0gICAgIm9wdGlv
bmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFs
X3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBpbnQi
LAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAg
ICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlw
ZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91YmxlIn0gPSB7Ci0gICAgInBh
cmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBkb3VibGUq
IGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJp
YWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAuMCIsCi0gICAgImZv
cndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51
bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiYm9v
bGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAgICJvcHRpb25hbF9wYXJhbSIg
PT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gImZh
bHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpT
T05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4gImJvb2xlYW4iCi19OwotJHR5
cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRl
ciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0gPSB7Ci0gICAgImhlYWRlciIg
PT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcwotCi1t
eSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0KLW15ICRjb2RlR2VuZXJhdG9y
OwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGlyOwotbXkgJHdyaXRlRGVwZW5k
ZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7Ci0KLW15ICRiYWNrZW5kQ2xh
c3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwotbXkgJGJhY2tlbmRKU1N0dWJO
YW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0aG9kczsKLW15IEBiYWNrZW5k
TWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkYmFja2VuZENv
bnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVyOwotbXkgQGJhY2tlbmRKU1N0
dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5kRG9tYWluczsKLQotbXkgJGZy
b250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1teSBAZnJvbnRlbmRNZXRob2Rz
OwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRlbmRNZXRob2RzSW1wbDsKLW15
ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRlbmRDb25zdHJ1Y3RvcjsKLW15
IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWZp
bml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9udGVuZERvbWFpbnM7Ci0KLSMg
RGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
LSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsK
LSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhlYWRlcnNEaXIgPSBzaGlmdDsK
LSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IK
LSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAkdmVyYm9zZSA9IHNoaWZ0Owot
Ci0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAgcmV0dXJuICRyZWZlcmVuY2U7
Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlTW9kdWxl
Ci17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owot
Ci0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwotICAgICRuYW1lc3BhY2UgPX4g
cy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckZy
b250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIgICAgJHtmcm9udGVuZENsYXNz
TmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAgICBwdXNoKEBmcm9udGVuZEZv
b3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICAk
ZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7IlBhc3NSZWZQdHIi
fSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0gIkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4i
OwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kU3R1YiI7Ci0gICAg
JGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ikluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRy
In0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQifSA9IDE7Ci0gICAgJGJhY2tl
bmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1
Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmluZXMgPSBzaGlmdDsKLQotICAg
IG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRpb25zID0+IFtdLAotICAgICAg
ICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBnZW5lcmF0ZUZ1bmN0aW9ucygk
aW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7bWV0aG9kRGVjbGFyYXRpb25z
fX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAkaW50ZXJmYWNlLT5uYW1lKTsK
LSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwot
ICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbgotewotICAgIG15ICRpbnRl
cmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLSAgICBteSAkYWdlbnROYW1l
ID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgY2xh
c3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHVi
bGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgJHthZ2VudE5hbWV9
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Iik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAi
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICB9OyIpOwotICAgIHB1c2go
QGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRlck5hbWUgPSBsYygkYWdlbnRO
YW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgJHthZ2VudE5hbWV9KiAke2dl
dHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsgfSIpOwotICAgIHB1c2goQGZy
b250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgJHth
Z2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1c2goQGZyb250ZW5kQWdlbnRG
aWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci0gICAgcHVz
aChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtmcm9u
dGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0g
ICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdlbnRGaWVsZHMpIHsKLSAgICAg
ICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgLCAke2FnZW50RmllbGR9KGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAgcHVzaChAZnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ9
Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsKLX0KLQotc3ViIGdlbmVy
YXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2Vu
dCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFjZS0+ZnVu
Y3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rp
b24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zKCRp
bnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzKCRpbnRlcmZhY2UpOwot
fQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0
OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwot
Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgQGFyZ3NGaWx0ZXJl
ZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3IgZnJvbnRlbmQgaW50ZXJmYWNl
LgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAYXJnc0ZpbHRlcmVkKTsg
IyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJndW1lbnRzID0gam9pbigiLCAi
LCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1lLCBAYXJn
c0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25hdHVyZS4K
LQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2Fy
Z3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVy
ZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBz
aWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30t
Pnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlv
biwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlufTo6JHtmdW5jdGlvbk5hbWV9
KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFtZX1NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwgXCIkZG9t
YWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkg
ewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotCi0gICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewotICAgICAgICAgICAgbXkgJG9w
dGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAi
aWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAgIiA6ICIiOwotICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAuICJwYXJhbXNPYmplY3QtPnNl
dCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgInZh
bHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAgfQotICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmpl
Y3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1
c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBjYW1lbENhc2UK
LXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUgPX4gcy9cYihcdykvXFUkMS9n
OyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFtZQotICAgICR2YWx1ZSA9fiBz
LyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0
aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+bmFtZSAu
ICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVE
b3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uTmFtZTsKLQotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAgayR7ZnVsbFF1YWxpZmllZEZ1
bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMs
ICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCIsIik7Ci0KLSAgICBtYXAo
JGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOyAj
IHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVj
dGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgIG15IEBvdXRBcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdWxsUXVhbGlmaWVkRnVu
Y3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gfHwg
ZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWdu
YXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gPSAi
JGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzLCAk
e3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIG15ICRyZXF1ZXN0TWVzc2Fn
ZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3QiIDogIiI7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVsbFF1
YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVz
dE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0g
ICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFjY2Vzc29y
ID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAkYmFja2VuZFR5
cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAxOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIiRkb21haW4g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50cy4KLSAg
ICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIg
ICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAuICRfLT5u
YW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikgLiAiOyIs
IEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgfQotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAgaWYgKHNjYWxhcihAaW5Bcmdz
KSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KFwicGFy
YW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVy
IChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgICAgICBteSAk
dHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBlKTsKLSAgICAgICAgICAgIG15
ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAgICAgIGlmICgkcGFyYW1ldGVy
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZvdW5kID0gZmFsc2U7Iik7Ci0g
ICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIiYke25hbWV9X3ZhbHVlRm91
bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAu
IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0eXBlU3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0aW9uYWxGbGFnQXJndW1lbnQs
IHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAgIH0KLQotICAgIG15ICRhcmdz
ID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZlcnJvciIsCi0gICAgICAgICAg
ICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92YWx1ZUZvdW5kID8gJmluXyIg
LiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJpbl8iIC4g
JF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAgICAgIG1hcCgiJm91dF8iIC4g
JF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAi
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICRp
bmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwot
ICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgeyIpOwot
ICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdzKSB7Ci0gICAgICAgICAgICBt
eSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMgRG9uJ3QgYWRkIG9wdGlvbmFs
IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlzICJ0cnVlIgotICAg
ICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9
ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIp
Iik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJyZXN1bHQtPnNldCIgLiB0eXBl
VHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVy
LT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAg
fQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
XCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWRcIiwgXCIk
ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwot
ICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5kUmVzcG9uc2UgPSA8PCAiRU9G
IjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JT
dHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1z
LCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQot
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAgICAKLUVPRgotICAgIHJldHVy
biBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFJl
cG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9IDw8ICJF
T0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rvcjxp
bnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsK
LSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7Ci0gICAg
ICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKLSAgICAg
ICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwotICAgICAg
ICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKLSAgICAgICAg
c19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7Ci0gICAgICAgIHNf
Y29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKLSAgICB9Ci0gICAgQVNT
RVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9y
cy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgZXJy
b3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7Ci0gICAgQVNTRVJUKGVycm9y
KTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKLSAgICBp
ZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRyZXBvcnRQ
cm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1lbnRHZXR0ZXJzCi17Ci0gICAg
bXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVUcmFpdHMoJHR5cGUsICJKU09O
VHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIp
OwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0eXBlLCAiZGVmYXVsdFZhbHVl
Iik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgPyB0eXBl
VHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0eXBlLCAicGFyYW0iKTsKLQot
ICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsKLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1cm4gZ2V0JHR5cGVTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsiKTsKLSAgICBteSAkZ2V0dGVy
Qm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17Ci0g
ICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAg
ICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxlIHZhbHVlID0gJGRlZmF1bHRW
YWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkgewot
ICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRh
aW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnXCVz
JyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLQotICAgIGlm
ICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZWxz
ZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1
ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJldHVybiBzcGxpdCgiXG4iLCAk
Z2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCi17Ci0gICAg
bXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAgICAgICAgJiR7YmFja2VuZENs
YXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyRffSwgQGJhY2tl
bmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBFbnRyaWVz
KTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0gdGhpczsKLSAgICB0eXBlZGVm
IHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlz
cGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2FsbElkID0gMDsKLQotICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhh
bmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRp
c3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6
cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNP
TiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwotICAg
IGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRW
YWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICInaWQnIHBy
b3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11
c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsK
LSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAgaWYgKCFt
ZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3Bl
cnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQo
bWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsg
Iicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlz
KS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKLX0KLUVPRgotICAg
IHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAkbWVzc2FnZVBhcnNlckJvZHkg
PSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygibWV0
aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3NhZ2VQYXJzZXJCb2R5KTsKLX0K
LQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEkXy0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAg
ICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImlu
IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMg
PSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgbWFwKCJcIiIgLiAkXy0+bmFt
ZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAoJF8tPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIpIC4gIiwg
IgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRfLT50eXBl
LCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAifSIsCi0gICAgICAgICAgICAg
ICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwiJGRvbWFp
bi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJwYXJhbXNc
IjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAgICAgICAiXCJpZFwiOiAwIiAu
Ci0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJF
dmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9
IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0sIEB7JGlu
dGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7
Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAgICBteSAk
bmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAg
ICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigiLCIsIG1h
cCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFj
a2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIgLiAkbmFtZSAuICJcIl0gPSBb
IiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tl
bmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzID0gam9pbigi
XG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRpc3BhdGNoZXIgPSB0aGlzLl9y
ZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIgLiAkXyAuIlwiKTsiLCBAZnJv
bnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNT
dHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBAYmFja2VuZEpTRXZlbnRzKTsK
LSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwotJGxpY2Vuc2VUZW1w
bGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9s
YXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0gMDsK
LSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVycyA9
IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1YnMKLSRKU0V2ZW50cwotJEpT
UmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKLSAgICBkdW1wSW5zcGVj
dG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsK
LSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rp
b24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0gICAgfSwKLQotICAgIF9yZWdp
c3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQotICAgIHsKLSAgICAgICAgdmFy
IGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3Bs
aXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsg
IkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKLSAgICAgICAgICAgIHdp
bmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFu
ZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVx
dWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9u
WzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQot
ICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3Ry
aW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwotICAgICAgICB0aGlzLl93cmFw
Q2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwK
LQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAg
ICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKLSAgICAgICAgdmFyIGNh
bGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09
ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAgIHZhciBkb21haW5BbmRNZXRo
b2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnRNZXRob2Qg
PSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKLQot
ICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnBhcmFt
cykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOwotICAg
ICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlv
bmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25h
bEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJy
b3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRo
b2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5z
dHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBh
cmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2Yg
dmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1
ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
SW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0
IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1tr
ZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0g
InVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0
aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlw
ZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2Fn
ZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF93cmFwQ2FsbGJhY2tB
bmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCi0g
ICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgewotICAgICAgICAgICAg
dmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsK
LSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5t
ZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0
ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90
b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNP
Ti5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAgICsrdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1l
c3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDog
ZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUudGltZVN0YW1w
KG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCi0gICAgewotICAgICAgICB0
aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKLSAgICB9LAotCi0g
ICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5k
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJi
YWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpT
T04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAo
dHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNz
YWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJl
c3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJz
ZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVy
biAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0z
MjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJy
b3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25v
d24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRE
ZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAi
LiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5j
dGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAt
MzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNz
YWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9
IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQotICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21l
c3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
ZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQotICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAg
ICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAg
LS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRo
b2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1
ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5k
aW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4i
KTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOwotICAgICAgICAgICAg
dmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAgICAgIGlmICghKGRvbWFpbk5h
bWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3Rpbmcg
ZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5E
aXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBp
biBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29s
IEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIg
KyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdl
T2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiAr
IG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAg
IGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbU5h
bWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNb
aV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRp
bWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgICAgICAg
ICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKLQot
ICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsg
IiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1l
c3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAg
IH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9zY3Jp
cHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3Njcmlw
dHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0Nv
dW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0gICAgICAg
ICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQg
PCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2Fs
bCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJ
bnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGlu
c3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJhdGVIZWFkZXIKLXsKLSAgICBt
eSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVjbGFyYXRpb24gPSBzaGlmdDsK
LSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RydWN0b3IgPSBzaGlmdDsKLSAg
ICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLSAgICBt
eSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhlYWRlcnMgPSBqb2luKCJcbiIs
IHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIikg
LiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFkZXIiKSwga2V5cyAleyR0eXBl
c30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBzb3J0KG1h
cCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikgLiAiOyIsIGdyZXAodHlwZVRy
YWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRjb25zdGFu
dERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRzfSk7Ci0gICAgbXkgJG1ldGhv
ZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9KTsKLQotICAgIG15ICRoZWFk
ZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFtZX1faAotI2RlZmluZSAke2Ns
YXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1lc3BhY2UgJG5hbWVzcGFjZSB7
Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0kY29uc3RydWN0b3IKLQotJGNv
bnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9ucwotCi0kZm9vdGVyCi19Owot
Ci19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8gIWRlZmluZWQoJHtjbGFzc05h
bWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsKLX0KLQotc3ViIGdlbmVyYXRl
U291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNo
aWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0
OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIiLCAkbGljZW5zZVRlbXBsYXRl
KTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNv
bnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV7
JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUgXCIiIC4gdHlwZVRyYWl0cygk
dHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJhaXRzKCR0eXBlLCAiaGVhZGVy
IikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBzb3J0IGtleXMgJWhl
YWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRl
bnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2luKCJcbiIsIEB7JGNvbnN0YW50
c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFjZSIpOwotICAgIHB1
c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
ICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5cGVUcmFpdHMKLXsKLSAgICBt
eSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0OwotICAgIHJldHVybiAkdHlw
ZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIgcGFyYW1UeXBlVHJhaXRzCi17
Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlm
dDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFt
RGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0KTsKLSAgICAgICAgcmV0dXJu
ICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJlc3VsdDsKLSAgICB9Ci0gICAg
bXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICR0cmFpdCk7
Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQgOiAiIjsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IKLXsKLSAgICBteSBAYXJndW1l
bnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAgIHB1c2goQGFyZ3VtZW50cywg
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIik7Ci0g
ICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGJhY2tlbmRG
b290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc29ydCBrZXlzICViYWNrZW5k
RG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBkZWNsYXJhdGlvbiB0byB0aGUg
Zm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0eXBlVHJhaXRzKCRkb21haW4s
ICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVUcmFpdHMoJGRvbWFpbiwgImRv
bWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgJHthZ2Vu
dENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMgQWRkIGFnZW50IHBhcmFtZXRl
ciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBzdWJzdHIoJGZpZWxkLCAyKTsK
LSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgICwgJHtmaWVsZH0oJHth
cmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2FnZW50Q2xhc3NOYW1lfSogJHth
cmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAiLCBAYXJn
dW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJpbmd9KSIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsiKTsKLSAgICBwdXNoKEBi
YWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAg
SW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgU2VydmVy
RXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRyeSwiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAg
dm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9u
RXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9p
ZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAg
cHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1lcyB7Iik7Ci0gICAgJGJhY2tl
bmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFkKTsKLX0KLQotc3ViIGZpbmlz
aAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0
aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgpKTsKLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IoKSk7Ci0g
ICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVGcm9udGVuZENvbnN0cnVj
dG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0UsICI+JG91dHB1dERpci8kZnJv
bnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERp
ci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwg
Z2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsIFxAZnJv
bnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBj
bG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9wZW4obXkgJEhFQURF
UiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291
bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIjsK
LSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9udGVuZENsYXNzTmFtZSwgJGZy
b250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9udGVuZENvbnN0cnVjdG9yLCBc
QGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzLCBqb2luKCJc
biIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRI
RUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7Iik7
Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJ9OyIpOwotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAgICAjIE1ha2UgZGlzcGF0Y2hl
ciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAgcHVzaChAYmFja2VuZENvbnN0
YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAgICAKLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAl
YmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUi
KSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUFyZ3Vt
ZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVzaChAYmFja2Vu
ZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9y
U3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZp
ZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJ
bXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsK
LQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCIp
IHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05hbWUu
Y3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGJhY2tl
bmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25z
LCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVm
KCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRiYWNr
ZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0SGVhZGVy
c0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGpvaW4oIlxuIiwg
Z2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlv
biwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3IsIFxAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBiYWNrZW5kRm9vdGVy
KSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgb3Bl
bihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyIpIHx8IGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpzIjsK
LSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRlQmFja2VuZFN0dWJKUygpKTsK
LSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NUVUIpOwotfQotCi0xOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jY2FmNjY5NDRhMzljNjMxOGY0NzFmZWY0ZTYwZGI1OTAwZmM5MmI3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKQEAgLTAsMCArMSwxNDI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKwor
Y21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorY21kbGluZV9wYXJzZXIu
YWRkX29wdGlvbigiLS1kZWZpbmVzIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0
cHV0X2hfZGlyIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIi
KQorCit0cnk6CisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5w
YXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpICE9IDEpOgorICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkV4YWN0bHkgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIChmb3VuZCAl
cykiICUgbGVuKGFyZ192YWx1ZXMpKQorICAgIGlucHV0X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFs
dWVzWzBdCisgICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hf
ZGlyCisgICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIK
KyAgICBpZiBub3Qgb3V0cHV0X2hlYWRlcl9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRp
b24oIk91dHB1dCAuaCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIG5vdCBv
dXRwdXRfY3BwX2Rpcm5hbWU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAg
ZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6
ICVzXG5cbiIgJSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNw
ZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2Nw
cF9kaXIgPG91dHB1dF9jcHBfZGlyPiBbLS1kZWZpbmVzIDxkZWZpbmVzIHN0cmluZz5dXG4iKQor
ICAgIGV4aXQoMSkKKworCitkZWYgcGFyc2VfZGVmaW5lcyhzdHIpOgorICAgIGlmIG5vdCBzdHI6
CisgICAgICAgIHJldHVybiB7fQorCisgICAgaXRlbXMgPSBzdHIuc3BsaXQoKQorICAgIHJlc3Vs
dCA9IHt9CisgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGl0ZW1bMF0gPT0gJyIn
IGFuZCBpdGVtWy0xXSA9PSAnIicgYW5kIGxlbihpdGVtKSA+PSAyOgorICAgICAgICAgICAgaXRl
bSA9IGl0ZW1bMTotMV0KKyAgICAgICAgZXFfcG9zID0gaXRlbS5maW5kKCI9IikKKyAgICAgICAg
aWYgZXFfcG9zID09IC0xOgorICAgICAgICAgICAga2V5ID0gaXRlbQorICAgICAgICAgICAgdmFs
dWUgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXkgPSBpdGVtWzplcV9wb3Nd
CisgICAgICAgICAgICB2YWx1ZV9zdHIgPSBpdGVtW2VxX3BvcyArIDE6XQorICAgICAgICAgICAg
aWYgdmFsdWVfc3RyID09ICIwIjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEZhbHNlCisgICAg
ICAgICAgICBlbGlmIHZhbHVlX3N0ciA9PSAiMSI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBU
cnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2hvdWxkIHdlIHN1cHBv
cnQgb3RoZXIgdmFsdWVzPworICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5yZWNv
Z25pemVkIGRlZmluZSB2YWx1ZTogJyVzJyAoa2V5OiAnJXMnKSIgJSAodmFsdWVfc3RyLCBrZXkp
KQorICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWZp
bmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKKworCitjbGFzcyBE
b21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRh
KGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRf
dHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21h
cFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVz
ID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUKKworICAgICAgICBpZiBkb21haW5f
bmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1l
X3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJB
Z2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5
cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFt
ZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFp
bl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucworICAgICAgICAgICAgYWdlbnRfZmll
bGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgIGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBu
b3QgZG9tYWluX25hbWUgaW4gY2xzLmRvbWFpbl9kZWZpbmVfbmFtZV9tYXA6CisgICAgICAgICAg
ICAgICAgICAgICMgSGFzIG5vdCBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBzeW1ib2wuCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmaW5l
X25hbWUgPSBjbHMuZG9tYWluX2RlZmluZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKworICAgICAg
ICAgICAgICAgIGlmIG5vdCBkZWZpbmVfbmFtZSBpbiBkZWZpbmVzOgorICAgICAgICAgICAgICAg
ICAgICAjIERpc2FibGVkIHdoZW4gbm90IG1lbnRpb25lZAorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX3ZhbHVlID0gZGVmaW5lc1tkZWZp
bmVfbmFtZV0KKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGJvb2woZGVmaW5lX3ZhbHVlKQor
CisgICAgICAgIHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsi
UnVudGltZSIsICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNl
dChbIkluc3BlY3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3Bl
Y3RvclJlc291cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVy
YXRlIG5hbWVzIGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAg
ICJQYWdlIjogInBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIs
CisgICAgICAgICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjog
ICJyZXNvdXJjZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwK
KyAgICAgICAgIkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBs
aWNhdGlvbkNhY2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjog
ICJkb21BZ2VudCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVn
Z2VyIjogImRlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdn
ZXJBZ2VudCIsCisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAg
IldvcmtlciI6ICJ3b3JrZXJBZ2VudCIsCisgICAgfQorCisgICAgZG9tYWluX2RlZmluZV9uYW1l
X21hcCA9IHsKKyAgICAgICAgIkRhdGFiYXNlIjogIkVOQUJMRV9TUUxfREFUQUJBU0UiLAorICAg
ICAgICAiRE9NU3RvcmFnZSI6ICJFTkFCTEVfRE9NX1NUT1JBR0UiLAorICAgICAgICAiRGVidWdn
ZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiRE9NRGVidWdnZXIi
OiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiUHJvZmlsZXIiOiAiRU5B
QkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiV29ya2VyIjogIkVOQUJMRV9XT1JL
RVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlwZShvYmplY3QpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIlcyIpOgorICAgICAgICBzZWxmLnR5cGUg
PSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1hdCA9IHNldHRlcl9mb3JtYXQKKworICAg
IGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorCisgICAgZGVm
IGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXR0ZXJfZm9y
bWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4iOgor
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxpZiBqc29uX3R5cGUg
PT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCisgICAgICAg
IGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
QXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6CisgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRlZ2Vy
IjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAgZWxpZiBqc29uX3R5
cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZTogJXMi
ICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToKKyAgICAgICAgQGNs
YXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0
aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFyYW1fdHlwZQorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9u
YWwoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgY2xhc3MgU3RyaW5nKEJhc2VU
eXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNs
cywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgcGFyYW1fdHlwZSA9PSBQ
YXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5
cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6
CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKworICAgICAgICBnZXRTZXR0ZXJOYW1lID0g
Z2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldENJ
bml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJcIlwiIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAgICAgICAgIHJldHVy
biAic3RyaW5nIgorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmci
KQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IFN0cmluZyYiKQorCisg
ICAgY2xhc3MgSW50KEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJJbnQiCisKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAg
cmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIjAiCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJu
ICJudW1iZXIiCisKKyAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJp
bnQiKQorCisgICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJPYmpl
Y3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgp
OgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVk
IikKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIp
CisKKyAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAg
ICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAg
ICAgICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAgICAgICAgICAgICAg
ICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlw
ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBn
ZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkJvb2xlYW4iCisKKyAgICAgICAg
Z2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiZmFsc2Ui
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgor
ICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoImJvb2wiKQorICAg
ICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNvbnN0IiwgIiolcyIp
CisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QKKyAg
ICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6CisgICAg
ICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiT2JqZWN0Igor
CisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1
cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJvYmplY3Qi
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVudFBhcmFtQ2hlY2tP
cHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190
eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQorICAgICAgICBfcmVm
X2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisKKyAg
ICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBk
ZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAg
IGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLk9VVFBVVDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAgIGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJh
bVR5cGUuSU5QVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIkFycmF5IgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRH
ZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRp
YWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4g
VHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiIpCisKKworY2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CisgICAgSU5Q
VVQgPSAiaW5wdXQiCisgICAgT1VUUFVUID0gIm91dHB1dCIKKyAgICBFVkVOVCA9ICJldmVudCIK
KworCitjbGFzcyBUeXBlRGF0YShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29u
X3R5cGUsIGpzb25fZG9tYWluKToKKyAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBl
CisgICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KKworICAgICAgICBpZiAi
dHlwZSIgaW4ganNvbl90eXBlOgorICAgICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5
cGVbInR5cGUiXQorICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBl
X25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25v
d24gdHlwZSIpCisgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKworICAgIGRlZiBn
ZXRSYXdUeXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KKworCitjbGFz
cyBUeXBlTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGkpOgorICAgICAgICBzZWxmLm1h
cF8gPSB7fQorICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21haW5zIl06CisgICAg
ICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorCisgICAgICAgICAg
ICBkb21haW5fbWFwID0ge30KKyAgICAgICAgICAgIHNlbGYubWFwX1tkb21haW5fbmFtZV0gPSBk
b21haW5fbWFwCisKKyAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46CisgICAg
ICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCisgICAgICAgICAgICAg
ICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4pCisgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9uYW1lXSA9IHR5cGVfZGF0YQorCisgICAg
ZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQorCisKK2RlZiByZXNvbHZlUGFyYW1SYXdU
eXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAgaWYgIiRyZWYiIGlu
IGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3JlZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVm
Il0KKyAgICAgICAgdHlwZV9kYXRhID0gZ2V0UmVmRGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWlu
X25hbWUpCisgICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0UmF3VHlwZSgpCisgICAgZWxpZiAi
dHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fdHlwZSA9IGpzb25fcGFyYW1l
dGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29uX3R5cGUpCisgICAg
ZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisKK2RlZiBn
ZXRSZWZEYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAgZG90X3BvcyA9IGpz
b25fcmVmLmZpbmQoIi4iKQorICAgIGlmIGRvdF9wb3MgPT0gLTE6CisgICAgICAgIGRvbWFpbl9u
YW1lID0gc2NvcGVfZG9tYWluX25hbWUKKyAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWYKKyAg
ICBlbHNlOgorICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fcmVmWzpkb3RfcG9zXQorICAgICAg
ICB0eXBlX25hbWUgPSBqc29uX3JlZltkb3RfcG9zICsgMTpdCisKKyAgICByZXR1cm4gdHlwZV9t
YXAuZ2V0KGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpCisKKworaW5wdXRfZmlsZSA9IG9wZW4oaW5w
dXRfanNvbl9maWxlbmFtZSwgInIiKQoranNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQor
anNvbl9hcGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5nKQorCisKK2NsYXNzIFRlbXBsYXRlczoK
KyAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoCisiIiIgICAgY2xh
c3MgJGRvbWFpbkNsYXNzTmFtZSB7CisgICAgcHVibGljOgorICAgICAgICAkZG9tYWluQ2xhc3NO
YW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
Ciske2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisgICAgfTsKKworICAgICRkb21haW5DbGFzc05h
bWUqICRkb21haW5GaWVsZE5hbWUoKSB7IHJldHVybiAmbV8kZG9tYWluRmllbGROYW1lOyB9CisK
KyIiIikKKworICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKAorIiIidm9pZCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfV8kbWV0aG9kTmFtZShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVjdCkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworCisgICAgaWYgKCEkYWdlbnRGaWVsZCkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMt
PnB1c2hTdHJpbmcoIiR7ZG9tYWluTmFtZX0gaGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLiIpOwor
JG1ldGhvZE91dENvZGUKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyRtZXRob2RJbkNvZGUKK2lm
ICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQorICAgICRhZ2VudEZpZWxkLT4kbWV0aG9kTmFt
ZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1zKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske3Jlc3BvbnNlQ29va31zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJGRvbWFpbk5hbWUuJG1ldGhvZE5h
bWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKK30KKyIiIikKKworICAgIGZyb250ZW5kX21l
dGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgiIiJ2b2lkIEluc3BlY3RvckZyb250ZW5kOjokZG9tYWlu
TmFtZTo6JGV2ZW50TmFtZSgkcGFyYW1ldGVycykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiAke2V2ZW50TmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAke2V2ZW50TmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICIkZG9tYWluTmFtZS4k
ZXZlbnROYW1lIik7CiskY29kZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisg
ICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
JHtldmVudE5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorIiIiKQorCisgICAgZnJv
bnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENo
cm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0b3JGcm9udGVuZF9o
CisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKKworI2luY2x1ZGUgPFBsYXRmb3JtU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
K2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
K2NsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKworCiskZG9tYWluQ2xhc3NMaXN0Citwcml2
YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7Ciske2ZpZWxkRGVjbGFyYXRpb25zfX07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQorIiIiKQorCisgICAgYmFj
a2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hy
b21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyX2gKKyNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaAorCisjaW5jbHVk
ZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW5z
cGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JBcnJh
eTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKworJGZvcndhcmREZWNsYXJhdGlv
bnMKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cj4geworcHVibGljOgorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsJGNvbnN0cnVjdG9yUGFyYW1z
KQorICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKKyRjb25zdHJ1Y3RvckluaXQKKyAgICB7IH0KKworICAgIHZvaWQgY2xlYXJGcm9u
dGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9CisKKyAgICBlbnVtIENv
bW1vbkVycm9yQ29kZSB7CisgICAgICAgIFBhcnNlRXJyb3IgPSAwLAorICAgICAgICBJbnZhbGlk
UmVxdWVzdCwKKyAgICAgICAgTWV0aG9kTm90Rm91bmQsCisgICAgICAgIEludmFsaWRQYXJhbXMs
CisgICAgICAgIEludGVybmFsRXJyb3IsCisgICAgICAgIFNlcnZlckVycm9yLAorICAgICAgICBM
YXN0RW50cnksCisgICAgfTsKKworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBs
b25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1l
c3NhZ2UpIGNvbnN0OworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBj
b25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OworICAgIHZvaWQgZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRDb21tYW5kTmFt
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsKKworICAgIGVudW0gTWV0
aG9kTmFtZXMgeworCiskbWV0aG9kTmFtZXNFbnVtQ29udGVudAorfTsKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGdl
dEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBT
dHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7Cisg
ICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9ycyk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52
b2NhdGlvbkVycm9yKTsKKworJG1ldGhvZERlY2xhcmF0aW9ucworCisgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyRmaWVsZERlY2xhcmF0
aW9ucworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gpCisKKworIiIiKQorCisgICAgYmFja2VuZF9jcHAg
PSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oIgorJGluY2x1ZGVzCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lc1tdID0g
eworJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKK307CisKKworJG1ldGhvZHMKK3ZvaWQgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QgPSB0aGlzOwor
ICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxl
cikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOworICAgIGxvbmcgY2Fs
bElkID0gMDsKKworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3Rh
dGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7CiskbWVzc2FnZUhhbmRsZXJzCisgICAgICAg
IH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFuZE5hbWVzKSAvIHNpemVv
Zihjb21tYW5kTmFtZXNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmROYW1lc1tpXSwgaGFu
ZGxlcnNbaV0pOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVz
c2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCFwYXJz
ZWRNZXNzYWdlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgUGFyc2VFcnJvciwg
Ik1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1l
c3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7CisgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBK
U09OaWZpZWQgb2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJpZCIpOwor
ICAgIGlmICghY2FsbElkVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJ
bnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1iZXIoJmNhbGxJZCkp
IHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0
eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWUgPSBtZXNzYWdl
T2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAgIGlmICghbWV0aG9kVmFsdWUpIHsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3Ry
aW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygmbWV0aG9kKSkgewor
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9y
IGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5v
dEZvdW5kLCAiJyIgKyBtZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQsIG1lc3NhZ2VPYmpl
Y3QuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVz
cG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90
b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQoreworICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Cisg
ICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRp
b25FcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOworICAgIHJlc3Bv
bnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CisgICAgaWYgKG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2Vu
ZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQor
Cit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNv
bnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElk
LCBjb2RlLCBlcnJvck1lc3NhZ2UsIDApOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
VmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKKyAgICBpZiAoIXNfY29tbW9uRXJyb3JzLnNp
emUoKSkgeworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VFcnJvciwgLTMyNzAw
KTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1ZXN0LCAtMzI2MDAp
OworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91bmQsIC0zMjYwMSk7
CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1zLCAtMzI2MDIpOwor
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwgLTMyNjAzKTsKKyAg
ICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIwMDApOworICAgIH0K
KyAgICBBU1NFUlQoY29kZSA+PTApOworICAgIEFTU0VSVCgodW5zaWduZWQpY29kZSA8IHNfY29t
bW9uRXJyb3JzLnNpemUoKSk7CisgICAgQVNTRVJUKHNfY29tbW9uRXJyb3JzW2NvZGVdKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJyb3JzW2NvZGVdKTsK
KyAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdlKTsKKyAgICBBU1NF
UlQoZXJyb3IpOworICAgIGlmIChkYXRhKQorICAgICAgICBlcnJvci0+c2V0QXJyYXkoImRhdGEi
LCBkYXRhKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVycm9yIiwgZXJyb3Ip
OworICAgIGlmIChjYWxsSWQpCisgICAgICAgIG1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCAqY2Fs
bElkKTsKKyAgICBlbHNlCisgICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJpZCIsIEluc3BlY3Rv
clZhbHVlOjpudWxsKCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAg
ICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCht
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK2ludCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAg
ICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAg
ICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBpbnQgdmFsdWUgPSAwOworCisgICAgaWYgKCFv
YmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1
aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVj
dCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdOdW1iZXIn
LiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9i
amVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0
ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0g
ZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUg
J051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5h
c051bWJlcigmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJp
bmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ051
bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFs
dWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFs
dWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9j
b2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0g
ZmFsc2U7CisKKyAgICBTdHJpbmcgdmFsdWUgPSAiIjsKKworICAgIGlmICghb2JqZWN0KSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1l
dGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250
YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3RyaW5nJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQor
CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgp
OworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9i
amVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAg
ICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnIHdh
cyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNTdHJpbmcoJnZh
bHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQo
IlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdTdHJpbmcnLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisg
ICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCiti
b29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOwor
CisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAg
ICBib29sIHZhbHVlID0gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAo
IXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNz
aW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJl
ZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nLiIsIG5hbWUudXRmOCgpLmRhdGEo
KSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNw
ZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5z
cGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5k
KG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICgh
dmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nIHdhcyBub3QgZm91
bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNCb29sZWFuKCZ2YWx1ZSkpCisg
ICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0
ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAg
ICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0
KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJv
dG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5k
ID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZh
bHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5n
IHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmlu
ZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBw
YXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFt
ZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1
ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMgbm90IGZvdW5kLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisg
ICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzT2JqZWN0KCZ2YWx1ZSkpCisgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZh
bHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJv
cnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7
CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29u
dGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICcl
cycgd2l0aCB0eXBlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBp
ZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAg
ICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXNBcnJheSgmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5
cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNl
CisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVl
OworICAgIHJldHVybiB2YWx1ZTsKK30KK2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpCit7
CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJz
ZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghb2Jq
ZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBmcm9udGVuZF9jcHAgPSBzdHJp
bmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisKKworSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5p
dHsKK30KKworJG1ldGhvZHMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGJhY2tlbmRfanMgPSBzdHJpbmcuVGVtcGxh
dGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKworCitJbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKK3sKKyAgICB0aGlz
Ll9sYXN0Q2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0g
MDsKKyAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVy
cyA9IHt9OworICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OworJGRlbGVnYXRlcyRldmVudEFyZ3Mk
ZG9tYWluRGlzcGF0Y2hlcnMgICAgfQorCitJbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90b3R5cGUg
PSB7CisgICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKKyAgICBkdW1wSW5zcGVjdG9yUHJv
dG9jb2xNZXNzYWdlczogMCwKKworICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsKKyAgICAg
ICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7
fTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRl
bGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQorICAgIHsKKyAgICAgICAgdmFyIGRvbWFp
bkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3BsaXQoIi4i
KTsKKyAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsgIkFnZW50
IjsKKyAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKKyAgICAgICAgICAgIHdpbmRvd1th
Z2VudE5hbWVdID0ge307CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0
aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVxdWVzdFN0
cmluZyk7CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9uWzFdXVsi
aW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQorICAgIH0s
CisKKyAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxsYmFjaykK
KyAgICB7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKTsK
KyAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOworICAgICAgICB0aGlzLl93cmFwQ2FsbGJh
Y2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAg
IF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGFy
Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOworICAgICAgICB2YXIg
cmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKKyAgICAgICAgdmFyIGNhbGxiYWNr
ID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICJmdW5j
dGlvbiIpID8gYXJncy5wb3AoKSA6IDA7CisgICAgICAgIHZhciBkb21haW5BbmRNZXRob2QgPSBy
ZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICB2YXIgYWdlbnRNZXRob2QgPSBkb21h
aW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKKworICAgICAg
ICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0LnBhcmFtcykgewor
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOworICAgICAgICAg
ICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlvbmFsOwor
CisgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25hbEZsYWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IElu
dmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAi
JyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5zdHJpbmdp
ZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBhcmdzLnNo
aWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2YgdmFsdWUg
PT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0LnBh
cmFtc1trZXldOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFtZSkgewor
ICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxp
ZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0
aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0IGlzICci
ICsgdHlwZW9mIHZhbHVlICsgIicuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1trZXldID0g
dmFsdWU7CisgICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQorICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1
ZXN0LnBhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAm
JiAhY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0gInVuZGVm
aW5lZCIpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
T3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsg
IicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlwZW9mIGFy
Z3NbMF0gKyAiJy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVj
dChyZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF93cmFwQ2FsbGJhY2tBbmRTZW5k
TWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCisgICAgewor
ICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayk7CisKKyAgICAg
ICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgeworICAgICAgICAgICAgdmFyIHdy
YXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKyAgICAg
ICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5tZXRob2Q7
CisgICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0ZS5ub3co
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1l
c3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNPTi5zdHJp
bmdpZnkobWVzc2FnZU9iamVjdCkpOworCisgICAgICAgICsrdGhpcy5fcGVuZGluZ1Jlc3BvbnNl
c0NvdW50OworICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1lc3NhZ2VP
YmplY3QpOworICAgIH0sCisKKyAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDogZnVuY3Rp
b24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUudGltZVN0YW1wKG1lc3Nh
Z2VPYmplY3QubWV0aG9kKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmluZ2lmeSht
ZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRNZXNzYWdl
VG9CYWNrZW5kKG1lc3NhZ2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCisgICAgeworICAgICAgICB0aGlzLl9k
b21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKKyAgICB9LAorCisgICAgZGlz
cGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAodGhpcy5kdW1wSW5z
cGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJiYWNrZW5k
OiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpTT04uc3Ry
aW5naWZ5KG1lc3NhZ2UpKSk7CisKKyAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAodHlwZW9m
IG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNzYWdlOwor
CisgICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJlc3BvbnNl
IGZvciBzb21lIHJlcXVlc3QKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yKSB7
CisgICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7CisgICAg
ICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJzZSBlcnJv
ciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVybiAiSW52
YWxpZCBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMTog
cmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJyb3IiOwor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9LAorCisgICAg
ICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25vd24gZXJy
b3IgY29kZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREZXNjcmlw
dGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAiLiIgKyAo
dGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5jdGlvbigp
CisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAtMzIwMDAp
CisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNzYWdlT2Jq
ZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9IFtdOwor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQorICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VP
YmplY3QuaWRdOworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
dmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVtcElu
c3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAgICAgICAgICAgICAg
ICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOworICAgICAgICAgICAgICAg
IGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgLS10aGlz
Ll9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CisgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Nh
bGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKworICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1
bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRob2ROYW1l
ICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1ZXN0VGlt
ZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5fcGVuZGlu
Z1Jlc3BvbnNlc0NvdW50KQorICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5kaW5nRGlz
cGF0Y2hlcygpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4iKTsKKyAg
ICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOworICAgICAgICAgICAgdmFyIGZ1
bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKKyAgICAgICAgICAgIGlmICghKGRvbWFpbk5hbWUgaW4g
dGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJv
cigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3RpbmcgZG9tYWlu
ICciICsgZG9tYWluTmFtZSArICInIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5EaXNwYXRj
aGVyc1tkb21haW5OYW1lXTsKKyAgICAgICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBpbiBkaXNw
YXRjaGVyKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9y
OiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIgKyBtZXNz
YWdlT2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdlT2JqZWN0
Lm1ldGhvZF0pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJv
cjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiArIG1lc3Nh
Z2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAgICAgICAgICAgIGlmICht
ZXNzYWdlT2JqZWN0LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhciBwYXJhbU5hbWVzID0g
dGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNbaV1dKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Cisg
ICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAg
ICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgICAgICAgICBkaXNw
YXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKKworICAgICAg
ICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAgICAgICAgICAgICAgICBj
b25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiA9ICIg
KyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAgICAgICAgfQorICAgIH0s
CisKKyAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0KQorICAg
IHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1lc3NhZ2VP
YmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3IpOworICAgIH0sCisK
KyAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCisgICAgewor
ICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCisgICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0g
W107CisKKyAgICAgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMucHVz
aChzY3JpcHQpOworCisgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KSB7
CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7CisgICAgICAgICAgICB0
aGlzLl9zY3JpcHRzID0gW10KKyAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQgPCBzY3Jp
cHRzLmxlbmd0aDsgKytpZCkKKyAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2FsbCh0aGlz
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJbnNwZWN0
b3JCYWNrZW5kU3R1YigpOyIiIikKKworICAgIHBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZSA9
ICIiIgorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IHJlcXVl
c3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOworICAgIEluc3BlY3Rvck9iamVj
dCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3Bl
Y3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworIiIi
CisKKwordHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpKQorCisKK2NsYXNzIEdlbmVyYXRvcjoK
KyAgICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtdCisgICAgZnJvbnRlbmRfZG9tYWlu
X2NsYXNzX2xpbmVzID0gW10KKworICAgIG1ldGhvZF9uYW1lX2VudW1fbGlzdCA9IFtdCisgICAg
YmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2Rf
aW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJh
dGlvbl9saXN0ID0gW10KKyAgICBtZXRob2RfaGFuZGxlcl9saXN0ID0gW10KKyAgICBmcm9udGVu
ZF9tZXRob2RfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19pbml0aWFsaXplcl9saXN0ID0gW10K
KyAgICBiYWNrZW5kX2pzX2V2ZW50X2xpc3QgPSBbXQorICAgIGJhY2tlbmRfanNfZG9tYWluX2Rp
c3BhdGNoZXJfbGlzdCA9IFtdCisKKyAgICBiYWNrZW5kX2NvbnN0cnVjdG9yX3BhcmFtX2xpc3Qg
PSBbXQorICAgIGJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10KKyAgICBiYWNrZW5k
X2ZpZWxkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZm9yd2FyZF9saXN0ID0gW10KKyAgICBiYWNr
ZW5kX2luY2x1ZGVfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0
ID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ28oKToKKyAgICAgICAgZm9yIGpz
b25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFt
ZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorICAgICAgICAgICAgZG9tYWluX25hbWVfbG93ZXIg
PSBkb21haW5fbmFtZS5sb3dlcigpCisKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWlu
TmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICBpZiBk
b21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZpbmVzX21hcCk6CisgICAgICAgICAgICAgICAgY29u
dGludWUKKworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFpbl9kYXRhLmFnZW50
X2ZpZWxkX25hbWUKKworICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xp
bmVzID0gW10KKyAgICAgICAgICAgIGlmICJldmVudHMiIGluIGpzb25fZG9tYWluOgorICAgICAg
ICAgICAgICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVudHMiXToKKyAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWlu
X25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKKworICAgICAgICAgICAg
ICAgIEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5hcHBlbmQoIiAgICAlcyBt
XyVzO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIpKQorICAgICAgICAgICAg
ICAgIEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAg
LCBtXyVzKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbClcbiIgJSBkb21haW5fbmFtZV9sb3dlcikK
KyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLmFw
cGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1dGUoTm9uZSwKKyAg
ICAgICAgICAgICAgICAgICAgZG9tYWluQ2xhc3NOYW1lPWRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICBkb21haW5GaWVsZE5hbWU9ZG9tYWluX25hbWVfbG93ZXIsCisgICAgICAgICAg
ICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oZnJvbnRlbmRf
bWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLCAiIikpKQorICAgICAgICAgICAgaWYgImNvbW1hbmRz
IiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGluIGpz
b25fZG9tYWluWyJjb21tYW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJv
Y2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ZpZWxkX25hbWUp
CisKKyAgICAgICAgICAgIGlmIG5vdCBkb21haW5fZGF0YS5za2lwX2pzX2JpbmQ6CisgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdC5hcHBl
bmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNEaXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyLmJpbmQodGhpcywgXCIlc1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9u
YW1lKSkKKworICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zID0gbGlzdChqc29uX2FwaVsiZG9t
YWlucyJdKQorICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zLnNvcnQoa2V5PWxhbWJkYSBvOiBv
WyJkb21haW4iXSkKKworICAgICAgICBmb3IganNvbl9kb21haW4gaW4gc29ydGVkX2pzb25fZG9t
YWluczoKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisK
KyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRh
KGRvbWFpbl9uYW1lKQorICAgICAgICAgICAgaWYgZG9tYWluX2RhdGEuaXNfZGlzYWJsZWQoZGVm
aW5lc19tYXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIGRv
bWFpbl9kYXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAg
YWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9uYW1lCisgICAgICAgICAg
ICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRfbmFtZQorICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdC5hcHBlbmQoIiwg
JXMqICVzIiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFwcGVuZCgiICAgICAg
ICAsIG1fJXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKSkKKyAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1f
JXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xhc3MgJXM7IiAlIGFnZW50
X3R5cGVfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdC5h
cHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFtZSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwg
ZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAgZXZlbnRfbmFtZSA9
IGpzb25fZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9IFtdCisgICAgICAg
IG1ldGhvZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xp
c3QgPSBbXQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9ldmVudDoKKyAgICAgICAg
ICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCisgICAgICAgICAg
ICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1ldGVycyJdOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorCisgICAg
ICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVy
LCBkb21haW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0aW9uYWwgPSAib3B0aW9u
YWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXQorCisg
ICAgICAgICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlzRXZlbnRQYXJhbUNoZWNr
T3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBlLmdldENQYXJhbVR5
cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAgICAgICAgICAgc2V0
dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAgICAgICAgICAgICAgIG9w
dGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAorCisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBlLmdldF90ZXh0KCksIHBh
cmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IGNfdHlw
ZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgICAg
IHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNcIiwgJXMpO1xuIiAl
IChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKKyAgICAgICAg
ICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAo
IiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2RlCisgICAg
ICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCisKKyAgICAg
ICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVzXCIiICUg
cGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZCgiICAg
ICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVjdCk7XG4iICUgZXZl
bnRfbmFtZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVu
ZCgKKyAgICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAlIChldmVudF9uYW1lLCBq
b2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5k
X21ldGhvZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9kLnN1YnN0aXR1dGUo
Tm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIGV2ZW50TmFtZT1ldmVu
dF9uYW1lLAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFtZXRlcl9saXN0LCAiLCAi
KSwKKyAgICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0LCAiIikpKQorCisgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5kKCIgICAgdGhpcy5fZXZl
bnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAgICAgIGRvbWFpbl9uYW1l
LCBldmVudF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCwgIiwgIikpKQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5k
LCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpzb25fY29tbWFuZF9u
YW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9uYW1l
X2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9tYWluX25hbWUsIGpz
b25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhvZF9oYW5kbGVyX2xp
c3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JXNfJXMsIiAl
IChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzXyVzKGxvbmcg
Y2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0KTsiICUgKGRvbWFp
bl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0aG9kX2luX2NvZGUgPSAi
IgorICAgICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBhZ2VudF9jYWxsX3BhcmFt
X2xpc3QgPSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBbXQorICAgICAgICByZXF1
ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiIgor
ICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAganNv
bl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAgICAgICAgICAgbWV0aG9k
X2luX2NvZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZQorICAgICAg
ICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVzc2FnZU9iamVjdCIKKyAg
ICAgICAgICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAgICBmb3IganNvbl9wYXJh
bWV0ZXIgaW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lID0g
anNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0g
cmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCisKKyAgICAg
ICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1U
eXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFyYW1fcmF3
X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBpZiAib3B0aW9uYWwiIGlu
IGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXToKKyAgICAgICAg
ICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXND
b250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtc
biIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgdmFyX3R5
cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9u
YW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVz
X3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25hbWUsIGpzb25fcGFyYW1f
bmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb2RlID0g
KCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgMCwgcHJv
dG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcl90
eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1f
bmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJh
bV9uYW1lCisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBjb2RlCisgICAgICAg
ICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKKworICAgICAgICAg
ICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmluZFR5cGUoKQorICAg
ICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRpb25hbFwiOiAlcywg
XCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25h
bWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIgaW4ganNvbl9w
YXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNlICJmYWxzZSIpLAor
ICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAgICAgICAgICAgICBqc19w
YXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAgICBqc19wYXJhbWV0
ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1fbGlzdCwgIiwgIikg
KyAifSIKKworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgorICAgICAgICBpZiAicmV0
dXJucyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9ICJc
biIKKyAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMi
XToKKworICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFt
ZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpzb25f
cmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190
eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5
cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHJhd190eXBl
LmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKworICAgICAgICAgICAgICAg
IGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBq
c29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAgICAgICBwYXJhbSA9ICIs
ICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAgIGNvb2sgPSAiICAg
ICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpz
b25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAgICAgICAgaWYgdmFy
X3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIgaW4ganNvbl9yZXR1cm4g
YW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAgICAgICBjb29rID0g
KCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25hbWUpICsgY29vawor
CisgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKKyAgICAgICAgICAgICAg
ICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAgICAgICAgICAgIHJl
c3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAgIHJlc3BvbnNlX2Nvb2tf
dGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYgIWVycm9yLmxlbmd0
aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3QsICIiKQorCisgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChU
ZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgZG9t
YWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgIGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisgICAgICAgICAgICBt
ZXRob2RJbkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRob2RPdXRDb2RlPW1l
dGhvZF9vdXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFtcz1qb2luKGFnZW50X2Nh
bGxfcGFyYW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmplY3Q9cmVx
dWVzdF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29rPXJlc3BvbnNlX2Nv
b2tfdGV4dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0
aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25hbWUsIGpzb25fY29t
bWFuZF9uYW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19pbml0aWFsaXplcl9s
aXN0LmFwcGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7XCJtZXRob2RcIjog
XCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFu
ZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRvci5nbygpCisKK2JhY2tl
bmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0gb3BlbihvdXRwdXRfY3Bw
X2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIsICJ3IikKKworZnJv
bnRlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0luc3BlY3RvckZy
b250ZW5kLmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJu
YW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2JhY2tlbmRfanNfZmlsZSA9
IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qcyIsICJ3
IikKKworCitmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3Rp
dHV0ZShOb25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuZnJv
bnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRvbWFpbkNsYXNzTGlzdD1q
b2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIiKSkpCisKK2JhY2tl
bmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAg
IGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX2luaXRf
bGlzdCwgIlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihHZW5lcmF0b3IuYmFja2Vu
ZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgbWV0aG9kTmFtZXNFbnVtQ29udGVu
dD1qb2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIpLAorICAgIG1ldGhv
ZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9s
aXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2ZpZWxkX2xpc3QsICJcbiIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0
b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRfY3BwX2ZpbGUud3Jp
dGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29uc3RydWN0
b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdCwgIiIp
LAorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsICJcbiIp
KSkKKworYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3Rp
dHV0ZShOb25lLAorICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihHZW5lcmF0b3IuYmFj
a2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBpbmNsdWRlcz1q
b2luKEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiksCisgICAgbWV0aG9kcz1q
b2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCAiXG4iKSwK
KyAgICBtZXNzYWdlSGFuZGxlcnM9am9pbihHZW5lcmF0b3IubWV0aG9kX2hhbmRsZXJfbGlzdCwg
IlxuIikpKQorCitiYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vi
c3RpdHV0ZShOb25lLAorICAgIGRlbGVnYXRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2lu
aXRpYWxpemVyX2xpc3QsICIiKSwKKyAgICBldmVudEFyZ3M9am9pbihHZW5lcmF0b3IuYmFja2Vu
ZF9qc19ldmVudF9saXN0LCAiIiksCisgICAgZG9tYWluRGlzcGF0Y2hlcnM9am9pbihHZW5lcmF0
b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LCAiIikpKQorCitiYWNrZW5kX2hf
ZmlsZS5jbG9zZSgpCitiYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKKworZnJvbnRlbmRfaF9maWxl
LmNsb3NlKCkKK2Zyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKKworYmFja2VuZF9qc19maWxlLmNs
b3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
biBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCA4OGI5ZTk5
ZTk3ZGMzMzlkYWFjZDBhMDRjMDA3OGY5ZWY5ZGY0N2RiLi45OTAzMDViMjQwNmRmYjVlYjFmMTQy
MmE1MTA1NGNhMTJkOGI5NzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
ZXNzaW9uIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGluIGNhc2Ug
b2Ygc2Vzc2lvbiBjb29raWUuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAg
ICAiaGlkZGVuIjogdHJ1ZQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0KICAgICAgICAg
XSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAgewpAQCAtODQ2LDcgKzg0Niw3
IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNMb2NhbFN0b3JhZ2UiLCAidHlw
ZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIGxvY2FsIHN0b3JhZ2UuIiB9
LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgInR5cGUiOiAibnVtYmVyIiwg
ImRlc2NyaXB0aW9uIjogIkVudHJ5IGlkIGZvciBmdXJ0aGVyIHJlZmVyZW5jZS4iIH0KICAgICAg
ICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAog
ICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAxOGRlZDYxMGIyODZiYTVlNjQ4MGNhOWFkYTNmZGFkZjkwNmZiYTdjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICsw
LDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMg
Ci0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0
IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotcHJvZ3JhbV9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShf
X2ZpbGVfXykKLWlmIGxlbihzeXMuYXJndikgPCA0IG9yIHN5cy5hcmd2WzFdICE9ICItbyI6Ci0g
ICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6ICVzIC1vIE9VVFBVVF9GSUxFIElOUFVUX0ZJTEVc
biIgJSBwcm9ncmFtX25hbWUpCi0gICAgZXhpdCgxKQotCi1vdXRwdXRfcGF0aCA9IHN5cy5hcmd2
WzJdCi1pbnB1dF9wYXRoID0gc3lzLmFyZ3ZbM10KLQotaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRf
cGF0aCwgInIiKQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9zdHJpbmcg
PSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IHRydWUiLCAiOiBUcnVlIikKLWpzb25fc3RyaW5nID0g
anNvbl9zdHJpbmcucmVwbGFjZSgiOiBmYWxzZSIsICI6IGZhbHNlIikKLWpzb25fYXBpID0gZXZh
bChqc29uX3N0cmluZylbImRvbWFpbnMiXQotCi1vdXRwdXRfZmlsZSA9IG9wZW4ob3V0cHV0X3Bh
dGgsICJ3IikKLW91dHB1dF9maWxlLndyaXRlKCIiIi8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotIAotbW9kdWxlIGNvcmUgeyIiIikKLQotdHlwZV90cmFpdHMg
PSB7Ci0gICAgInN0cmluZyI6ICJTdHJpbmciLAotICAgICJpbnRlZ2VyIjogImludCIsCi0gICAg
Im51bWJlciI6ICJkb3VibGUiLAotICAgICJib29sZWFuIjogImJvb2xlYW4iLAotICAgICJhcnJh
eSI6ICJBcnJheSIsCi0gICAgIm9iamVjdCI6ICJPYmplY3QiCi19Ci0KLXJlZl90eXBlcyA9IHt9
Ci0KLW1hY3JvX3RyYWl0cyA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFCQVNFIiwKLSAg
ICAiRE9NU3RvcmFnZSI6ICJET01fU1RPUkFHRSIsCi0gICAgIkRlYnVnZ2VyIjogIkpBVkFTQ1JJ
UFRfREVCVUdHRVIiLAotICAgICJET01EZWJ1Z2dlciI6ICJKQVZBU0NSSVBUX0RFQlVHR0VSIiwK
LSAgICAiUHJvZmlsZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIldvcmtlciI6ICJX
T1JLRVJTIgotfQotCi1kZWYgZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgdHlw
ZV9pZCk6Ci0gICAgaWYgdHlwZV9pZC5maW5kKCIuIikgPT0gLTE6Ci0gICAgICAgcmV0dXJuICIl
cy4lcyIgJSAoZG9tYWluX25hbWUsIHR5cGVfaWQpCi0gICAgcmV0dXJuIHR5cGVfaWQKLSAgICAK
LQotZGVmIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIHBhcmFtKToKLSAgICBpZiAidHlwZSIgaW4g
cGFyYW06Ci0gICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1twYXJhbVsidHlwZSJdXQotICAgIGlm
ICIkcmVmIiBpbiBwYXJhbToKLSAgICAgICAgdHlwZV9pZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVf
aWQoZG9tYWluX25hbWUsIHBhcmFtWyIkcmVmIl0pCi0gICAgICAgIGlmIHR5cGVfaWQgaW4gcmVm
X3R5cGVzOgotICAgICAgICAgICAgcmVmX3R5cGUgPSByZWZfdHlwZXNbdHlwZV9pZF0KLSAgICAg
ICAgICAgIHJldHVybiB0eXBlX3RyYWl0c1tyZWZfdHlwZVsidHlwZSJdXQotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgcHJpbnQoIlR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZCkKLSAgICAg
ICAgICAgIHJldHVybiAiISEgVHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkCi0KLWZvciBkb21h
aW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUgPSBkb21haW5bImRvbWFpbiJdCi0gICAg
aWYgInR5cGVzIiBpbiBkb21haW46Ci0gICAgICAgIGZvciB0eXBlIGluIGRvbWFpblsidHlwZXMi
XToKLSAgICAgICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9u
YW1lLCB0eXBlWyJpZCJdKQotICAgICAgICAgICAgcmVmX3R5cGVzW3R5cGVfaWRdID0gdHlwZTsK
LQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAgICBkb21haW5fbmFtZSA9IGRvbWFpblsiZG9t
YWluIl0KLSAgICBpZiBkb21haW5fbmFtZSBpbiBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1
dF9maWxlLndyaXRlKCJcbiNpZiBkZWZpbmVkKEVOQUJMRV8lcykgJiYgRU5BQkxFXyVzIiAlICht
YWNyb190cmFpdHNbZG9tYWluX25hbWVdLCBtYWNyb190cmFpdHNbZG9tYWluX25hbWVdKSkKLSAg
ICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD1JTlNQRUNU
T1JdICVzIHsiICUgZG9tYWluX25hbWUpCi0KLSAgICBpZiAiY29tbWFuZHMiIGluIGRvbWFpbjoK
LSAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAg
cGFyYW1zID0gW10KLSAgICAgICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4gY29tbWFuZCk6Ci0g
ICAgICAgICAgICAgICAgZm9yIGluX3BhcmFtIGluIGNvbW1hbmRbInBhcmFtZXRlcnMiXToKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0pOgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAgICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIiCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoImluJXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJh
bV90eXBlKGRvbWFpbl9uYW1lLCBpbl9wYXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAg
ICAgICAgaWYgKCJyZXR1cm5zIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3Igb3V0
X3BhcmFtIGluIGNvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJv
cHRpb25hbCIgaW4gb3V0X3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
ID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBw
ZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIG91
dF9wYXJhbSksIG91dF9wYXJhbVsibmFtZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndy
aXRlKCJcbiAgICAgICAgdm9pZCAlcyglcyk7IiAlIChjb21tYW5kWyJuYW1lIl0sICIsICIuam9p
bihwYXJhbXMpKSkKLQotICAgIGlmICJldmVudHMiIGluIGRvbWFpbjoKLSAgICAgICAgZm9yIGV2
ZW50IGluIGRvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAg
ICAgICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBldmVudCk6Ci0gICAgICAgICAgICAgICAgZm9yIGlu
X3BhcmFtIGluIGV2ZW50WyJwYXJhbWV0ZXJzIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgi
b3B0aW9uYWwiIGluIGluX3BhcmFtKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFs
ID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBw
ZW5kKCJvdXQlcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIGlu
X3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0
ZSgiXG4gICAgICAgIFtldmVudF0gdm9pZCAlcyglcyk7IiAlIChldmVudFsibmFtZSJdLCAiLCAi
LmpvaW4ocGFyYW1zKSkpCi0KLSAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4gICAgfTsiKQotICAg
IGlmIGRvbWFpblsiZG9tYWluIl0gaW4gbWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRwdXRfZmls
ZS53cml0ZSgiXG4jZW5kaWYgLy8gRU5BQkxFXyVzIiAlIG1hY3JvX3RyYWl0c1tkb21haW5bImRv
bWFpbiJdXSkKLW91dHB1dF9maWxlLndyaXRlKCJcbn1cbiIpCi1vdXRwdXRfZmlsZS5jbG9zZSgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111279</attachid>
            <date>2011-10-17 10:07:38 -0700</date>
            <delta_ts>2011-10-19 12:51:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111017210735.patch</filename>
            <type>text/plain</type>
            <size>121731</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2EzNTIzMmYzYTRjMDdl
YzM1MWQzNDQ1OGI1NGY5ZTUwNDlmYmY1Li5hOWMxY2JlYzI2NDJiZmI2MzUzZDk2YmE2Yzc0ZGVi
ZmY0MzQyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTAtMDcgIFBldGVy
IFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbGQgMi1zdGFn
ZSBweXRob24rcGVyZiBnZW5lcmF0b3IgdGhhdCB1c2VzIGludGVybWVkaWF0ZSBJREwgb3V0cHV0
IGlzCisgICAgICAgIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBzb2xpZCBweXRob24gc2NyaXB0LiBU
aGlzIGlzIGZvciBzaW1wbGljaXR5IGFuZAorICAgICAgICBhcyBhIGJhc2UgZm9yIHRoZSBmdXR1
cmUgSlNPTiB2YWxpZGF0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBDb2RlR2VuZXJhdG9ycy5wcmk6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgorCiAyMDExLTEwLTE3ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IHdlYmtpdCB3b24n
dCBhbHdheXMgc2VuZCBsaXZlIHJlZ2lvbiBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDgyOTI1ZWEzY2EwYjIzOTdmOGExYTMwMjg2ZTAwZjNkZTBiZjUyNjYuLjEyZDY4Yzhh
YzU5ZTE5Yzc4MTI4NjI1MTZjNGI4ZmI2NDRkMmNiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0yMjE0LDE3ICsyMjE0LDEwIEBAIEFERF9DVVNUT01fQ09NTUFORCgKIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yUHJv
dG9jb2xWZXJzaW9uLmgpCiAKIEFERF9DVVNUT01fQ09NTUFORCgKLSAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwKLSAgICBNQUlOX0RFUEVOREVO
Q1kgaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9p
bnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V0VCQ09S
RV9ESVJ9L2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbgotICAgIFZFUkJBVElNKQotCi1BRERfQ1VTVE9NX0NPTU1BTkQoCiAgICAg
T1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmggJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZy
b250ZW5kLmNwcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRl
bmQuaAotICAgIE1BSU5fREVQRU5ERU5DWSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5zcGVjdG9yLmlkbAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0
cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAke1NDUklQVFNfQklORElOR1N9ICR7V0VCQ09SRV9ESVJ9
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCi0gICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0g
LUkke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzIC1JJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwg
LS1kZWZpbmVzICIke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfSIgLS1nZW5lcmF0b3IgSW5z
cGVjdG9yICR7SURMX0lOQ0xVREVTfSAtLW91dHB1dERpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9IiAtLXByZXByb2Nlc3NvciAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9
IiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAorICAgIE1BSU5f
REVQRU5ERU5DWSBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKyAgICBERVBFTkRTICR7V0VCQ09S
RV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisgICAgQ09NTUFORCAk
e1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1v
dXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1vdXRwdXRfY3Bw
X2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLWRlZmluZXMgIiR7RkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFR9IgogICAgIFZFUkJBVElNKQogTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZy
b250ZW5kLmNwcCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMu
cHJpIGIvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCmluZGV4IDNlYjY5NGRkMDE5
NzJhZTRkMzRmODFjYjAzNjIzNjFkYzI4NjllZjYuLjM1OTUxYjAyMDE0MTkzY2RlOGMyMzg2OGJk
N2QxMTkwYmQwMmQ3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3Jz
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKQEAgLTY3MywyOSAr
NjczLDEyIEBAIGluc3BlY3RvclZhbGlkYXRlLmRlcGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIGluc3BlY3RvclZhbGlkYXRlLndrQWRk
T3V0cHV0VG9Tb3VyY2VzID0gZmFsc2UKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9yVmFsaWRh
dGUpCiAKLWluc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsCitpbnNwZWN0b3JKU09OLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCiBpbnNwZWN0b3JKU09OLmlucHV0
ID0gSU5TUEVDVE9SX0pTT04KLWluc3BlY3RvckpTT04ud2tTY3JpcHQgPSAkJFBXRC9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNPTi5jb21tYW5kcyA9IHB5dGhv
biAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQgLW8gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgotaW5zcGVjdG9y
SlNPTi5kZXBlbmRzID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWlu
c3BlY3RvckpTT04ud2tBZGRPdXRwdXRUb1NvdXJjZXMgPSBmYWxzZQoraW5zcGVjdG9ySlNPTi53
a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CitpbnNw
ZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVjdG9ySlNPTi53a1NjcmlwdCAkJFBX
RC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgJCRXQ19HRU5FUkFURURf
U09VUkNFU19ESVIgLS1vdXRwdXRfY3BwX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiAt
LWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIgoraW5zcGVjdG9ySlNP
Ti5kZXBlbmRzID0gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0CiBhZGRFeHRyYUNvbXBpbGVyKGlu
c3BlY3RvckpTT04pCi1pbnNwZWN0b3JKU09OLnZhcmlhYmxlX291dCA9IElOU1BFQ1RPUl9KU09O
X09VVFBVVAotCi1pbnNwZWN0b3JJREwub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKLWluc3BlY3RvcklETC5pbnB1dCA9IElOU1BF
Q1RPUl9KU09OX09VVFBVVAotaW5zcGVjdG9ySURMLndrU2NyaXB0ID0gJCRQV0QvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbAotaW5zcGVjdG9ySURMLmNvbW1hbmRzID0gcGVy
bCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgLUkkJFBXRC9pbnNwZWN0b3IgJCRpbnNwZWN0b3JJ
REwud2tTY3JpcHQgLS1kZWZpbmVzIFwiJCR7RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9XCIg
LS1nZW5lcmF0b3IgSW5zcGVjdG9yIC0tb3V0cHV0RGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICR7UU1BS0VfRklMRV9OQU1F
fQotaW5zcGVjdG9ySURMLmRlcGVuZHMgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0gXAotICAgICAgICAgICAgICAkJFBXRC9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtIFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1
cmUucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0luRmlsZXNQYXJz
ZXIucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3Nv
ci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBcCi0g
ICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNw
ZWN0b3JJREwud2tFeHRyYVNvdXJjZXMgPSAkJGluc3BlY3RvcklETC5vdXRwdXQKLWFkZEV4dHJh
Q29tcGlsZXIoaW5zcGVjdG9ySURMKQogCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5vdXRwdXQgPSBn
ZW5lcmF0ZWQvSW5zcGVjdG9yQmFja2VuZFN0dWIucXJjCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5p
bnB1dCA9IElOU1BFQ1RPUl9CQUNLRU5EX1NUVUJfUVJDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCA0OTZjYzI3YmFkYjA3ZDgwZWQ5Y2U0YzMxMTRlN2Y4NDNhYzViZTRhLi5jYjNk
NjVkMjhkYzU3NmJiOGQwZDJmNDE2ZGE1ZGU0OTVlZjkwYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTkwMCwxNSArOTAwLDEyIEBAIGFsbCA6IEluc3BlY3RvclByb3RvY29s
VmVyc2lvbi5oCiBJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6IEluc3BlY3Rvci5qc29uIGlu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCXB5dGhvbiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAtbyBJ
bnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3Iu
anNvbgogCi1JbnNwZWN0b3IuaWRsIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1pZGwKLQlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5z
cGVjdG9yLWlkbCAtbyBJbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCi0KIGFsbCA6IEluc3BlY3RvckZyb250ZW5kLmgKIAotSU5TUEVDVE9SX0dFTkVSQVRP
Ul9TQ1JJUFRTID0gJChHRU5FUkFURV9TQ1JJUFRTKSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKIAotSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5p
ZGwgJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0JJChjYWxsIGdlbmVyYXRvcl9zY3Jp
cHQsICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKSkgLS1vdXRwdXREaXIgLiAtLWRlZmlu
ZXMgIiQoRkVBVFVSRV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWdlbmVyYXRvciBJ
bnNwZWN0b3IgJDwKK0luc3BlY3RvckZyb250ZW5kLmggOiBJbnNwZWN0b3IuanNvbiAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKKwlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
biAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLWRlZmluZXMgIiQoRkVBVFVS
RV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIgogCiBhbGwgOiBJbmplY3RlZFNjcmlwdFNv
dXJjZS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMGQ3YTFmMGI0NTFjZjM1ZjYzNWQzNTJh
OWQ0M2EwM2M2Y2M1MTU4ZS4uMmIxOGRhODQ2ZDIxN2JhNjMyNTI1Y2I4NDk1NjUxN2U1MzhhYTQw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY5MywxMSArNjkzLDggQEAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9YTUxOYW1lcy5jcHAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxOYW1lcy5o
OiAkKFdlYkNvcmUKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJz
aW9uLmggOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCSQoUFlUSE9OKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAt
byAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KIAotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9J
bnNwZWN0b3IuaWRsIDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJD
b3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotCSQoUFlUSE9OKSAkKFdlYkNv
cmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vICQoR0VOU09VUkNFU19XRUJD
T1JFKS9JbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0K
LURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOiBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgJChTQ1JJUFRTX0JJTkRJTkdTKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCi0JJChBTV9WX0dF
TikkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzIC1JJChXZWJDb3JlKS9pbnNw
ZWN0b3IgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsICQo
SURMX1BBVEg6JT0tLWluY2x1ZGUgIiUiKSAtLW91dHB1dERpciAiJChHRU5TT1VSQ0VTX1dFQkNP
UkUpIiAtLWRlZmluZXMgIkxBTkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUyki
IC0tZ2VuZXJhdG9yIEluc3BlY3RvciAkPAorRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwkkKFBZ
VEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAkPCAt
LW91dHB1dF9oX2RpciAkKEdFTlNPVVJDRVNfV0VCQ09SRSkgLS1vdXRwdXRfY3BwX2RpciAkKEdF
TlNPVVJDRVNfV0VCQ09SRSkgLS1kZWZpbmVzICJMQU5HVUFHRV9KQVZBU0NSSVBUPTEgJChGRUFU
VVJFX0RFRklORVMpIgogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5o
OiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcAogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yQmFja2VuZFN0dWIuanM6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBk
NjU1ZDE4M2NmOWYxNmYxMmUxOTIyMzA3ZmE1ZTc5MTExZDgzMzZmLi43NzMwMTY3NTYxZmQzNWVm
NTViYzhhODFmZmY0OWEyNjhjNDBlZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cApAQCAtMzM2LDE3ICszMzYsMjYgQEAKICAgfSwKICAgJ3RhcmdldHMnOiBbCiAgICAg
ewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJz
aW9uJywKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
CiAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAg
ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicKKyAgICAgIF0sCiAgICAgICAn
YWN0aW9ucyc6IFsKLSAgICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJh
dGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24nLAorICAgICAgICB7CisgICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xTb3VyY2VzJywKICAgICAgICAgICAn
aW5wdXRzJzogWwotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbicsCisgICAgICAgICAgICAjIEZpcnN0IGlucHV0LiBJdCBzdGFuZHMg
Zm9yIHB5dGhvbiBzY3JpcHQgaW4gYWN0aW9uIGJlbG93LgorICAgICAgICAgICAgJy4uL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICMgT3RoZXIgaW5w
dXRzLiBUaGV5IGdvIGFzIGFyZ3VtZW50cyB0byB0aGUgcHl0aG9uIHNjcmlwdC4KICAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewog
ICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTQsMjggKzM2Mywy
NyBAQAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdw
eXRob24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtdmVyc2lvbicsCi0gICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRw
dXRzKScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknCisgICAgICAgICAgICAnPEAoX2lucHV0
cyknLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2RpcicsICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLWRlZmluZXMnLCAn
PChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAgICAgICAgIF0sCi0g
ICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29sIGZvciBiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywKLSAgICAgICAg
fQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuanNvbicsCisgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwK
ICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX2lkbCcsCisgICAgICAndGFy
Z2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAogICAgICAg
J3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQotICAgICAgICB7Ci0gICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xJREwnLAorICAgICAg
ICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29s
VmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMn
OiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNw
ZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAgICAgIF0sCiAgICAgICAgICAg
J3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpA
QCAtMzgzLDY1ICszOTEsMTYgQEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBb
CiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICctbycsCiAgICAgICAgICAg
ICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScKICAgICAgICAgICBd
LAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdWYWxpZGF0
ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBnZW5l
cmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0g
ICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAotICAgICAg
J3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW5zcGVj
dG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicK
LSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCi0gICAgICAgICAg
IyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFzIGl0ZW0gbmFtZSBpbiB2Y3By
b2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IEluc3BlY3Rvci5pZGwg
dGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxlcyBhcmUgbWFya2luZyBhcyBl
eGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAg
ICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0gICAgICAg
ICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0nLAotICAgICAgICAg
ICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbScsCi0gICAgICAgICAgICAn
Li4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRp
bmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgIF0sCi0gICAg
ICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIu
anMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCi0gICAgICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAot
ICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdnZW5l
cmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAg
ICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICdz
Y3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICc8QChf
aW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJy0tZGVmaW5lcycsICc8
KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCi0gICAgICAgICAgICAnLS1n
ZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8QChnZW5lcmF0b3JfaW5jbHVk
ZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcg
SW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKLSAgICAgICAg
fSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3Rl
ZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMn
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyMTgzYzFmMjljNDY3OTU4
OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1wYWNrYWdlIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBDbGFzczo6U3RydWN0OwotdXNl
IEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5cGVUcmFuc2Zvcm17IkFwcGxp
Y2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2FwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwK
LSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiLAotICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFn
ZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50IiwKLSAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVidWdnZXIifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGVi
dWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURlYnVnZ2VyIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEYXRhYmFzZSJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tQWdlbnQiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21TdG9yYWdlQWdl
bnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9maWxlU3lz
dGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAgICAiZm9y
d2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQWdl
bnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudCIsCi19Owot
JHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
clJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVyQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSdW50
aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5cGVUcmFuc2Zvcm17IkZyb250
ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCi0gICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQYXNz
UmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0ci5oIiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewotICAgICJmb3J3YXJkSGVhZGVy
IiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0IiwKLSAg
ICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9IHsK
LSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgInZhcmlh
YmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4g
Ikluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JB
cnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAg
ICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVz
LmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAiIiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiY29uc3QgU3Ry
aW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgU3RyaW5nKiBjb25zdCIsCi0g
ICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJT
dHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAg
ICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJTdHJp
bmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5cGVUcmFuc2Zvcm17Imxvbmci
fSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJj
b25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwK
LSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAi
LAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFu
c2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBsb25n
IiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBsb25nKiBjb25zdCIs
Ci0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+
ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3
YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1i
ZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2ln
bmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCi0gICAgIm9wdGlv
bmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFs
X3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBpbnQi
LAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAg
ICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlw
ZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91YmxlIn0gPSB7Ci0gICAgInBh
cmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBkb3VibGUq
IGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJp
YWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAuMCIsCi0gICAgImZv
cndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51
bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiYm9v
bGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAgICJvcHRpb25hbF9wYXJhbSIg
PT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gImZh
bHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpT
T05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4gImJvb2xlYW4iCi19OwotJHR5
cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRl
ciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0gPSB7Ci0gICAgImhlYWRlciIg
PT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcwotCi1t
eSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0KLW15ICRjb2RlR2VuZXJhdG9y
OwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGlyOwotbXkgJHdyaXRlRGVwZW5k
ZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7Ci0KLW15ICRiYWNrZW5kQ2xh
c3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwotbXkgJGJhY2tlbmRKU1N0dWJO
YW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0aG9kczsKLW15IEBiYWNrZW5k
TWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkYmFja2VuZENv
bnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVyOwotbXkgQGJhY2tlbmRKU1N0
dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5kRG9tYWluczsKLQotbXkgJGZy
b250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1teSBAZnJvbnRlbmRNZXRob2Rz
OwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRlbmRNZXRob2RzSW1wbDsKLW15
ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRlbmRDb25zdHJ1Y3RvcjsKLW15
IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWZp
bml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9udGVuZERvbWFpbnM7Ci0KLSMg
RGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
LSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsK
LSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhlYWRlcnNEaXIgPSBzaGlmdDsK
LSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IK
LSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAkdmVyYm9zZSA9IHNoaWZ0Owot
Ci0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAgcmV0dXJuICRyZWZlcmVuY2U7
Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlTW9kdWxl
Ci17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owot
Ci0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwotICAgICRuYW1lc3BhY2UgPX4g
cy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckZy
b250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIgICAgJHtmcm9udGVuZENsYXNz
TmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAgICBwdXNoKEBmcm9udGVuZEZv
b3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICAk
ZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7IlBhc3NSZWZQdHIi
fSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0gIkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4i
OwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kU3R1YiI7Ci0gICAg
JGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ikluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRy
In0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQifSA9IDE7Ci0gICAgJGJhY2tl
bmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1
Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmluZXMgPSBzaGlmdDsKLQotICAg
IG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRpb25zID0+IFtdLAotICAgICAg
ICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBnZW5lcmF0ZUZ1bmN0aW9ucygk
aW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7bWV0aG9kRGVjbGFyYXRpb25z
fX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAkaW50ZXJmYWNlLT5uYW1lKTsK
LSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwot
ICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbgotewotICAgIG15ICRpbnRl
cmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLSAgICBteSAkYWdlbnROYW1l
ID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgY2xh
c3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHVi
bGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgJHthZ2VudE5hbWV9
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Iik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAi
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICB9OyIpOwotICAgIHB1c2go
QGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRlck5hbWUgPSBsYygkYWdlbnRO
YW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgJHthZ2VudE5hbWV9KiAke2dl
dHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsgfSIpOwotICAgIHB1c2goQGZy
b250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgJHth
Z2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1c2goQGZyb250ZW5kQWdlbnRG
aWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci0gICAgcHVz
aChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtmcm9u
dGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0g
ICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdlbnRGaWVsZHMpIHsKLSAgICAg
ICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgLCAke2FnZW50RmllbGR9KGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAgcHVzaChAZnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ9
Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsKLX0KLQotc3ViIGdlbmVy
YXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2Vu
dCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFjZS0+ZnVu
Y3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rp
b24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zKCRp
bnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzKCRpbnRlcmZhY2UpOwot
fQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0
OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwot
Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgQGFyZ3NGaWx0ZXJl
ZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3IgZnJvbnRlbmQgaW50ZXJmYWNl
LgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAYXJnc0ZpbHRlcmVkKTsg
IyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJndW1lbnRzID0gam9pbigiLCAi
LCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1lLCBAYXJn
c0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25hdHVyZS4K
LQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2Fy
Z3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVy
ZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBz
aWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30t
Pnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlv
biwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlufTo6JHtmdW5jdGlvbk5hbWV9
KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFtZX1NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwgXCIkZG9t
YWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkg
ewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotCi0gICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewotICAgICAgICAgICAgbXkgJG9w
dGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAi
aWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAgIiA6ICIiOwotICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAuICJwYXJhbXNPYmplY3QtPnNl
dCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgInZh
bHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAgfQotICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmpl
Y3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1
c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBjYW1lbENhc2UK
LXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUgPX4gcy9cYihcdykvXFUkMS9n
OyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFtZQotICAgICR2YWx1ZSA9fiBz
LyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0
aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+bmFtZSAu
ICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVE
b3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uTmFtZTsKLQotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAgayR7ZnVsbFF1YWxpZmllZEZ1
bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMs
ICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCIsIik7Ci0KLSAgICBtYXAo
JGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOyAj
IHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVj
dGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgIG15IEBvdXRBcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdWxsUXVhbGlmaWVkRnVu
Y3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gfHwg
ZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWdu
YXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gPSAi
JGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzLCAk
e3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIG15ICRyZXF1ZXN0TWVzc2Fn
ZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3QiIDogIiI7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVsbFF1
YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVz
dE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0g
ICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFjY2Vzc29y
ID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAkYmFja2VuZFR5
cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAxOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIiRkb21haW4g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50cy4KLSAg
ICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIg
ICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAuICRfLT5u
YW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikgLiAiOyIs
IEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgfQotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAgaWYgKHNjYWxhcihAaW5Bcmdz
KSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KFwicGFy
YW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVy
IChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgICAgICBteSAk
dHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBlKTsKLSAgICAgICAgICAgIG15
ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAgICAgIGlmICgkcGFyYW1ldGVy
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZvdW5kID0gZmFsc2U7Iik7Ci0g
ICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIiYke25hbWV9X3ZhbHVlRm91
bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAu
IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0eXBlU3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0aW9uYWxGbGFnQXJndW1lbnQs
IHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAgIH0KLQotICAgIG15ICRhcmdz
ID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZlcnJvciIsCi0gICAgICAgICAg
ICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92YWx1ZUZvdW5kID8gJmluXyIg
LiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJpbl8iIC4g
JF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAgICAgIG1hcCgiJm91dF8iIC4g
JF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAi
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICRp
bmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwot
ICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgeyIpOwot
ICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdzKSB7Ci0gICAgICAgICAgICBt
eSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMgRG9uJ3QgYWRkIG9wdGlvbmFs
IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlzICJ0cnVlIgotICAg
ICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9
ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIp
Iik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJyZXN1bHQtPnNldCIgLiB0eXBl
VHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVy
LT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAg
fQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
XCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWRcIiwgXCIk
ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwot
ICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5kUmVzcG9uc2UgPSA8PCAiRU9G
IjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JT
dHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1z
LCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQot
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAgICAKLUVPRgotICAgIHJldHVy
biBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFJl
cG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9IDw8ICJF
T0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rvcjxp
bnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsK
LSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7Ci0gICAg
ICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKLSAgICAg
ICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwotICAgICAg
ICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKLSAgICAgICAg
c19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7Ci0gICAgICAgIHNf
Y29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKLSAgICB9Ci0gICAgQVNT
RVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9y
cy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgZXJy
b3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7Ci0gICAgQVNTRVJUKGVycm9y
KTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKLSAgICBp
ZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRyZXBvcnRQ
cm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1lbnRHZXR0ZXJzCi17Ci0gICAg
bXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVUcmFpdHMoJHR5cGUsICJKU09O
VHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIp
OwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0eXBlLCAiZGVmYXVsdFZhbHVl
Iik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgPyB0eXBl
VHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0eXBlLCAicGFyYW0iKTsKLQot
ICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsKLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1cm4gZ2V0JHR5cGVTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsiKTsKLSAgICBteSAkZ2V0dGVy
Qm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17Ci0g
ICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAg
ICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxlIHZhbHVlID0gJGRlZmF1bHRW
YWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkgewot
ICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRh
aW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnXCVz
JyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLQotICAgIGlm
ICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZWxz
ZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1
ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJldHVybiBzcGxpdCgiXG4iLCAk
Z2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCi17Ci0gICAg
bXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAgICAgICAgJiR7YmFja2VuZENs
YXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyRffSwgQGJhY2tl
bmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBFbnRyaWVz
KTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0gdGhpczsKLSAgICB0eXBlZGVm
IHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlz
cGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2FsbElkID0gMDsKLQotICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhh
bmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRp
c3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6
cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNP
TiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwotICAg
IGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRW
YWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICInaWQnIHBy
b3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11
c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsK
LSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAgaWYgKCFt
ZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3Bl
cnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQo
bWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsg
Iicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlz
KS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKLX0KLUVPRgotICAg
IHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAkbWVzc2FnZVBhcnNlckJvZHkg
PSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygibWV0
aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3NhZ2VQYXJzZXJCb2R5KTsKLX0K
LQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEkXy0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAg
ICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImlu
IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMg
PSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgbWFwKCJcIiIgLiAkXy0+bmFt
ZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAoJF8tPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIpIC4gIiwg
IgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRfLT50eXBl
LCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAifSIsCi0gICAgICAgICAgICAg
ICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwiJGRvbWFp
bi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJwYXJhbXNc
IjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAgICAgICAiXCJpZFwiOiAwIiAu
Ci0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJF
dmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9
IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0sIEB7JGlu
dGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7
Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAgICBteSAk
bmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAg
ICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigiLCIsIG1h
cCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFj
a2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIgLiAkbmFtZSAuICJcIl0gPSBb
IiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tl
bmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzID0gam9pbigi
XG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRpc3BhdGNoZXIgPSB0aGlzLl9y
ZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIgLiAkXyAuIlwiKTsiLCBAZnJv
bnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNT
dHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBAYmFja2VuZEpTRXZlbnRzKTsK
LSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwotJGxpY2Vuc2VUZW1w
bGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9s
YXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0gMDsK
LSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVycyA9
IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1YnMKLSRKU0V2ZW50cwotJEpT
UmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKLSAgICBkdW1wSW5zcGVj
dG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsK
LSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rp
b24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0gICAgfSwKLQotICAgIF9yZWdp
c3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQotICAgIHsKLSAgICAgICAgdmFy
IGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3Bs
aXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsg
IkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKLSAgICAgICAgICAgIHdp
bmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFu
ZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVx
dWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9u
WzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQot
ICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3Ry
aW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwotICAgICAgICB0aGlzLl93cmFw
Q2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwK
LQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAg
ICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKLSAgICAgICAgdmFyIGNh
bGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09
ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAgIHZhciBkb21haW5BbmRNZXRo
b2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnRNZXRob2Qg
PSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKLQot
ICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnBhcmFt
cykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOwotICAg
ICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlv
bmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25h
bEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJy
b3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRo
b2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5z
dHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBh
cmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2Yg
dmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1
ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
SW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0
IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1tr
ZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0g
InVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0
aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlw
ZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2Fn
ZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF93cmFwQ2FsbGJhY2tB
bmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCi0g
ICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgewotICAgICAgICAgICAg
dmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsK
LSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5t
ZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0
ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90
b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNP
Ti5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAgICsrdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1l
c3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDog
ZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUudGltZVN0YW1w
KG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCi0gICAgewotICAgICAgICB0
aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKLSAgICB9LAotCi0g
ICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5k
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJi
YWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpT
T04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAo
dHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNz
YWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJl
c3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJz
ZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVy
biAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0z
MjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJy
b3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25v
d24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRE
ZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAi
LiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5j
dGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAt
MzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNz
YWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9
IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQotICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21l
c3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
ZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQotICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAg
ICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAg
LS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRo
b2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1
ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5k
aW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4i
KTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOwotICAgICAgICAgICAg
dmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAgICAgIGlmICghKGRvbWFpbk5h
bWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3Rpbmcg
ZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5E
aXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBp
biBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29s
IEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIg
KyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdl
T2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiAr
IG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAg
IGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbU5h
bWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNb
aV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRp
bWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgICAgICAg
ICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKLQot
ICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsg
IiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1l
c3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAg
IH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9zY3Jp
cHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3Njcmlw
dHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0Nv
dW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0gICAgICAg
ICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQg
PCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2Fs
bCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJ
bnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGlu
c3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJhdGVIZWFkZXIKLXsKLSAgICBt
eSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVjbGFyYXRpb24gPSBzaGlmdDsK
LSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RydWN0b3IgPSBzaGlmdDsKLSAg
ICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLSAgICBt
eSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhlYWRlcnMgPSBqb2luKCJcbiIs
IHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIikg
LiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFkZXIiKSwga2V5cyAleyR0eXBl
c30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBzb3J0KG1h
cCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikgLiAiOyIsIGdyZXAodHlwZVRy
YWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRjb25zdGFu
dERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRzfSk7Ci0gICAgbXkgJG1ldGhv
ZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9KTsKLQotICAgIG15ICRoZWFk
ZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFtZX1faAotI2RlZmluZSAke2Ns
YXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1lc3BhY2UgJG5hbWVzcGFjZSB7
Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0kY29uc3RydWN0b3IKLQotJGNv
bnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9ucwotCi0kZm9vdGVyCi19Owot
Ci19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8gIWRlZmluZWQoJHtjbGFzc05h
bWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsKLX0KLQotc3ViIGdlbmVyYXRl
U291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNo
aWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0
OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIiLCAkbGljZW5zZVRlbXBsYXRl
KTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNv
bnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV7
JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUgXCIiIC4gdHlwZVRyYWl0cygk
dHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJhaXRzKCR0eXBlLCAiaGVhZGVy
IikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBzb3J0IGtleXMgJWhl
YWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRl
bnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2luKCJcbiIsIEB7JGNvbnN0YW50
c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFjZSIpOwotICAgIHB1
c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
ICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5cGVUcmFpdHMKLXsKLSAgICBt
eSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0OwotICAgIHJldHVybiAkdHlw
ZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIgcGFyYW1UeXBlVHJhaXRzCi17
Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlm
dDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFt
RGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0KTsKLSAgICAgICAgcmV0dXJu
ICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJlc3VsdDsKLSAgICB9Ci0gICAg
bXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICR0cmFpdCk7
Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQgOiAiIjsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IKLXsKLSAgICBteSBAYXJndW1l
bnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAgIHB1c2goQGFyZ3VtZW50cywg
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIik7Ci0g
ICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGJhY2tlbmRG
b290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc29ydCBrZXlzICViYWNrZW5k
RG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBkZWNsYXJhdGlvbiB0byB0aGUg
Zm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0eXBlVHJhaXRzKCRkb21haW4s
ICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVUcmFpdHMoJGRvbWFpbiwgImRv
bWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgJHthZ2Vu
dENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMgQWRkIGFnZW50IHBhcmFtZXRl
ciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBzdWJzdHIoJGZpZWxkLCAyKTsK
LSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgICwgJHtmaWVsZH0oJHth
cmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2FnZW50Q2xhc3NOYW1lfSogJHth
cmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAiLCBAYXJn
dW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJpbmd9KSIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsiKTsKLSAgICBwdXNoKEBi
YWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAg
SW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgU2VydmVy
RXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRyeSwiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAg
dm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9u
RXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9p
ZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAg
cHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1lcyB7Iik7Ci0gICAgJGJhY2tl
bmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFkKTsKLX0KLQotc3ViIGZpbmlz
aAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0
aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgpKTsKLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IoKSk7Ci0g
ICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVGcm9udGVuZENvbnN0cnVj
dG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0UsICI+JG91dHB1dERpci8kZnJv
bnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERp
ci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwg
Z2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsIFxAZnJv
bnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBj
bG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9wZW4obXkgJEhFQURF
UiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291
bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIjsK
LSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9udGVuZENsYXNzTmFtZSwgJGZy
b250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9udGVuZENvbnN0cnVjdG9yLCBc
QGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzLCBqb2luKCJc
biIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRI
RUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7Iik7
Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJ9OyIpOwotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAgICAjIE1ha2UgZGlzcGF0Y2hl
ciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAgcHVzaChAYmFja2VuZENvbnN0
YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAgICAKLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAl
YmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUi
KSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUFyZ3Vt
ZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVzaChAYmFja2Vu
ZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9y
U3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZp
ZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJ
bXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsK
LQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCIp
IHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05hbWUu
Y3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGJhY2tl
bmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25z
LCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVm
KCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRiYWNr
ZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0SGVhZGVy
c0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGpvaW4oIlxuIiwg
Z2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlv
biwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3IsIFxAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBiYWNrZW5kRm9vdGVy
KSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgb3Bl
bihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyIpIHx8IGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpzIjsK
LSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRlQmFja2VuZFN0dWJKUygpKTsK
LSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NUVUIpOwotfQotCi0xOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41OTJkMzQyM2U3YjYxOTFhYWI4NDRhNzM4MTJkMTUyOTEzNzkwNGE4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKQEAgLTAsMCArMSwxNDIzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKwor
Y21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorY21kbGluZV9wYXJzZXIu
YWRkX29wdGlvbigiLS1kZWZpbmVzIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0
cHV0X2hfZGlyIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIi
KQorCit0cnk6CisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5w
YXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpICE9IDEpOgorICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkV4YWN0bHkgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIChmb3VuZCAl
cykiICUgbGVuKGFyZ192YWx1ZXMpKQorICAgIGlucHV0X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFs
dWVzWzBdCisgICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hf
ZGlyCisgICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIK
KyAgICBpZiBub3Qgb3V0cHV0X2hlYWRlcl9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRp
b24oIk91dHB1dCAuaCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIG5vdCBv
dXRwdXRfY3BwX2Rpcm5hbWU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAg
ZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6
ICVzXG5cbiIgJSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNw
ZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2Nw
cF9kaXIgPG91dHB1dF9jcHBfZGlyPiBbLS1kZWZpbmVzIDxkZWZpbmVzIHN0cmluZz5dXG4iKQor
ICAgIGV4aXQoMSkKKworCitkZWYgcGFyc2VfZGVmaW5lcyhzdHIpOgorICAgIGlmIG5vdCBzdHI6
CisgICAgICAgIHJldHVybiB7fQorCisgICAgaXRlbXMgPSBzdHIuc3BsaXQoKQorICAgIHJlc3Vs
dCA9IHt9CisgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGl0ZW1bMF0gPT0gJyIn
IGFuZCBpdGVtWy0xXSA9PSAnIicgYW5kIGxlbihpdGVtKSA+PSAyOgorICAgICAgICAgICAgaXRl
bSA9IGl0ZW1bMTotMV0KKyAgICAgICAgZXFfcG9zID0gaXRlbS5maW5kKCI9IikKKyAgICAgICAg
aWYgZXFfcG9zID09IC0xOgorICAgICAgICAgICAga2V5ID0gaXRlbQorICAgICAgICAgICAgdmFs
dWUgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXkgPSBpdGVtWzplcV9wb3Nd
CisgICAgICAgICAgICB2YWx1ZV9zdHIgPSBpdGVtW2VxX3BvcyArIDE6XQorICAgICAgICAgICAg
aWYgdmFsdWVfc3RyID09ICIwIjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEZhbHNlCisgICAg
ICAgICAgICBlbGlmIHZhbHVlX3N0ciA9PSAiMSI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBU
cnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2hvdWxkIHdlIHN1cHBv
cnQgb3RoZXIgdmFsdWVzPworICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5yZWNv
Z25pemVkIGRlZmluZSB2YWx1ZTogJyVzJyAoa2V5OiAnJXMnKSIgJSAodmFsdWVfc3RyLCBrZXkp
KQorICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWZp
bmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKKworCitjbGFzcyBE
b21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRh
KGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRf
dHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21h
cFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVz
ID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUKKworICAgICAgICBpZiBkb21haW5f
bmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1l
X3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJB
Z2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5
cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFt
ZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFp
bl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucworICAgICAgICAgICAgYWdlbnRfZmll
bGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgIGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBu
b3QgZG9tYWluX25hbWUgaW4gY2xzLmRvbWFpbl9kZWZpbmVfbmFtZV9tYXA6CisgICAgICAgICAg
ICAgICAgICAgICMgSGFzIG5vdCBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBzeW1ib2wuCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmaW5l
X25hbWUgPSBjbHMuZG9tYWluX2RlZmluZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKworICAgICAg
ICAgICAgICAgIGlmIG5vdCBkZWZpbmVfbmFtZSBpbiBkZWZpbmVzOgorICAgICAgICAgICAgICAg
ICAgICAjIERpc2FibGVkIHdoZW4gbm90IG1lbnRpb25lZAorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX3ZhbHVlID0gZGVmaW5lc1tkZWZp
bmVfbmFtZV0KKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGJvb2woZGVmaW5lX3ZhbHVlKQor
CisgICAgICAgIHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsi
UnVudGltZSIsICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNl
dChbIkluc3BlY3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3Bl
Y3RvclJlc291cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVy
YXRlIG5hbWVzIGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAg
ICJQYWdlIjogInBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIs
CisgICAgICAgICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjog
ICJyZXNvdXJjZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwK
KyAgICAgICAgIkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBs
aWNhdGlvbkNhY2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjog
ICJkb21BZ2VudCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVn
Z2VyIjogImRlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdn
ZXJBZ2VudCIsCisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAg
IldvcmtlciI6ICJ3b3JrZXJBZ2VudCIsCisgICAgfQorCisgICAgZG9tYWluX2RlZmluZV9uYW1l
X21hcCA9IHsKKyAgICAgICAgIkRhdGFiYXNlIjogIkVOQUJMRV9TUUxfREFUQUJBU0UiLAorICAg
ICAgICAiRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAi
RE9NRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiUHJv
ZmlsZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiV29ya2VyIjog
IkVOQUJMRV9XT1JLRVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlwZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIlcyIpOgorICAgICAg
ICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1hdCA9IHNldHRlcl9m
b3JtYXQKKworICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlw
ZQorCisgICAgZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXR0ZXJfZm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0g
ImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxp
ZiBqc29uX3R5cGUgPT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3Ry
aW5nCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6Cisg
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJpbnRlZ2VyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
TnVtYmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25v
d24gdHlwZTogJXMiICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToK
KyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFy
YW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFy
YW1fdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJh
bUNoZWNrT3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgY2xhc3Mg
U3RyaW5nKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRD
UGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgcGFy
YW1fdHlwZSA9PSBQYXJhbVR5cGUuRVZFTlQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5f
cmVmX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xz
Ll9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRH
ZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKworICAgICAgICBnZXRT
ZXR0ZXJOYW1lID0gZ2V0R2V0dGVyTmFtZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAg
ICAgZGVmIGdldENJbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJcIlwiIgorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEpzQmluZFR5cGUoKToKKyAgICAg
ICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1U
eXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IFN0
cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJJbnQi
CisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0U2V0dGVyTmFtZSgpOgor
ICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIjAiCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAg
ICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAgICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBD
UGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBlKToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0R2V0dGVyTmFtZSgpOgorICAgICAgICAgICAg
cmV0dXJuICJPYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
U2V0dGVyTmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRKc0JpbmRUeXBlKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlVuc3VwcG9ydGVkIikKKworICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5
cGUoImRvdWJsZSIpCisKKyAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNz
bWV0aG9kCisgICAgICAgIGRlZiBnZXRDUGFyYW1UeXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9u
YWwpOgorICAgICAgICAgICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAg
ICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNs
cy5fcmVmX2NfdHlwZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgIGRlZiBnZXRHZXR0ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkJvb2xlYW4i
CisKKyAgICAgICAgZ2V0U2V0dGVyTmFtZSA9IGdldEdldHRlck5hbWUKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRDSW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJl
dHVybiAiZmFsc2UiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNC
aW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGlzRXZlbnRQYXJhbUNoZWNrT3B0aW9uYWwoKToKKyAgICAg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUo
ImJvb2wiKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNv
bnN0IiwgIiolcyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgorICAgICAgICBAY2xh
c3NtZXRob2QKKyAgICAgICAgZGVmIGdldENQYXJhbVR5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRp
b25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldEdldHRlck5hbWUoKToKKyAgICAgICAgICAgIHJldHVy
biAiT2JqZWN0IgorCisgICAgICAgIGdldFNldHRlck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAg
ICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCisKKyAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0SnNCaW5kVHlwZSgpOgorICAgICAgICAgICAgcmV0
dXJuICJvYmplY3QiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgaXNFdmVu
dFBhcmFtQ2hlY2tPcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAg
ICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9iamVjdD4iKQor
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhv
ZAorICAgICAgICBkZWYgZ2V0Q1BhcmFtVHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToK
KyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLk9VVFBVVDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAgIGVsaWYgcGFyYW1f
dHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcGxh
aW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRHZXR0
ZXJOYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIkFycmF5IgorCisgICAgICAgIGdldFNldHRl
ck5hbWUgPSBnZXRHZXR0ZXJOYW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0Q0luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFycmF5
OjpjcmVhdGUoKSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRKc0Jp
bmRUeXBlKCk6CisgICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBpc0V2ZW50UGFyYW1DaGVja09wdGlvbmFsKCk6CisgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBl
KCJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIpCisKKworY2xhc3MgUGFyYW1UeXBlKG9iamVj
dCk6CisgICAgSU5QVVQgPSAiaW5wdXQiCisgICAgT1VUUFVUID0gIm91dHB1dCIKKyAgICBFVkVO
VCA9ICJldmVudCIKKworCitjbGFzcyBUeXBlRGF0YShvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluKToKKyAgICAgICAgc2VsZi5qc29uX3R5cGVf
ID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KKwor
ICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlOgorICAgICAgICAgICAganNvbl90eXBlX25h
bWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5n
ZXQoanNvbl90eXBlX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVua25vd24gdHlwZSIpCisgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUK
KworICAgIGRlZiBnZXRSYXdUeXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlw
ZV8KKworCitjbGFzcyBUeXBlTWFwOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGkpOgorICAg
ICAgICBzZWxmLm1hcF8gPSB7fQorICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21h
aW5zIl06CisgICAgICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQor
CisgICAgICAgICAgICBkb21haW5fbWFwID0ge30KKyAgICAgICAgICAgIHNlbGYubWFwX1tkb21h
aW5fbmFtZV0gPSBkb21haW5fbWFwCisKKyAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9k
b21haW46CisgICAgICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlw
ZXMiXToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9k
b21haW4pCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9uYW1lXSA9IHR5cGVf
ZGF0YQorCisgICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQorCisKK2RlZiByZXNv
bHZlUGFyYW1SYXdUeXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAg
aWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgorICAgICAgICBqc29uX3JlZiA9IGpzb25fcGFy
YW1ldGVyWyIkcmVmIl0KKyAgICAgICAgdHlwZV9kYXRhID0gZ2V0UmVmRGF0YShqc29uX3JlZiwg
c2NvcGVfZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0UmF3VHlwZSgp
CisgICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fdHlwZSA9
IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29u
X3R5cGUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUi
KQorCisKK2RlZiBnZXRSZWZEYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSk6CisgICAg
ZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKQorICAgIGlmIGRvdF9wb3MgPT0gLTE6CisgICAg
ICAgIGRvbWFpbl9uYW1lID0gc2NvcGVfZG9tYWluX25hbWUKKyAgICAgICAgdHlwZV9uYW1lID0g
anNvbl9yZWYKKyAgICBlbHNlOgorICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fcmVmWzpkb3Rf
cG9zXQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZltkb3RfcG9zICsgMTpdCisKKyAgICBy
ZXR1cm4gdHlwZV9tYXAuZ2V0KGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpCisKKworaW5wdXRfZmls
ZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwgInIiKQoranNvbl9zdHJpbmcgPSBpbnB1dF9m
aWxlLnJlYWQoKQoranNvbl9hcGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5nKQorCisKK2NsYXNz
IFRlbXBsYXRlczoKKyAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUo
CisiIiIgICAgY2xhc3MgJGRvbWFpbkNsYXNzTmFtZSB7CisgICAgcHVibGljOgorICAgICAgICAk
ZG9tYWluQ2xhc3NOYW1lKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9Ciske2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfSAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQorICAgIHByaXZhdGU6CisgICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CisgICAgfTsKKworICAgICRk
b21haW5DbGFzc05hbWUqICRkb21haW5GaWVsZE5hbWUoKSB7IHJldHVybiAmbV8kZG9tYWluRmll
bGROYW1lOyB9CisKKyIiIikKKworICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRl
KAorIiIidm9pZCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfV8kbWV0
aG9kTmFtZShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiRyZXF1ZXN0TWVzc2FnZU9iamVj
dCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCEkYWdlbnRGaWVsZCkKKyAgICAgICAgcHJv
dG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoIiR7ZG9tYWluTmFtZX0gaGFuZGxlciBpcyBub3QgYXZh
aWxhYmxlLiIpOworJG1ldGhvZE91dENvZGUKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyRtZXRo
b2RJbkNvZGUKK2lmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKQorICAgICRhZ2VudEZpZWxk
LT4kbWV0aG9kTmFtZSgmZXJyb3IkYWdlbnRDYWxsUGFyYW1zKTsKKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske3Jlc3Bv
bnNlQ29va31zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJGRvbWFpbk5h
bWUuJG1ldGhvZE5hbWUiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsKK30KKyIiIikKKworICAg
IGZyb250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZSgiIiJ2b2lkIEluc3BlY3RvckZyb250
ZW5kOjokZG9tYWluTmFtZTo6JGV2ZW50TmFtZSgkcGFyYW1ldGVycykKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiAke2V2ZW50TmFtZX1NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAke2V2ZW50TmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCIsICIk
ZG9tYWluTmFtZS4kZXZlbnROYW1lIik7CiskY29kZSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoJHtldmVudE5hbWV9TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorIiIi
KQorCisgICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMp
IDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorI2lmbmRlZiBJbnNwZWN0
b3JGcm9udGVuZF9oCisjZGVmaW5lIEluc3BlY3RvckZyb250ZW5kX2gKKworI2luY2x1ZGUgPFBs
YXRmb3JtU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kIHsKK3B1YmxpYzoKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKKworCiskZG9tYWluQ2xh
c3NMaXN0Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7Ciske2ZpZWxkRGVjbGFyYXRpb25zfX07CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQorIiIi
KQorCisgICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyX2gKKyNkZWZpbmUgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJf
aAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSW5zcGVjdG9yQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKworJGZvcndh
cmREZWNsYXJhdGlvbnMKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4geworcHVibGljOgorICAgIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsJGNvbnN0
cnVjdG9yUGFyYW1zKQorICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkKKyRjb25zdHJ1Y3RvckluaXQKKyAgICB7IH0KKworICAgIHZv
aWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9CisK
KyAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7CisgICAgICAgIFBhcnNlRXJyb3IgPSAwLAorICAg
ICAgICBJbnZhbGlkUmVxdWVzdCwKKyAgICAgICAgTWV0aG9kTm90Rm91bmQsCisgICAgICAgIElu
dmFsaWRQYXJhbXMsCisgICAgICAgIEludGVybmFsRXJyb3IsCisgICAgICAgIFNlcnZlckVycm9y
LAorICAgICAgICBMYXN0RW50cnksCisgICAgfTsKKworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xF
cnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihj
b25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0OworICAg
IHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICBzdGF0aWMgYm9vbCBn
ZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVzdWx0KTsKKwor
ICAgIGVudW0gTWV0aG9kTmFtZXMgeworCiskbWV0aG9kTmFtZXNFbnVtQ29udGVudAorfTsKKwor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb21tYW5kTmFtZXNbXTsKKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgaW50IGdldEludChJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpOwor
ICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycyk7CisgICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJh
eSogcHJvdG9jb2xFcnJvcnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxs
SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJy
b3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJy
b3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKTsKKworJG1ldGhvZERlY2xhcmF0aW9ucworCisgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyRm
aWVsZERlY2xhcmF0aW9ucworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gpCisKKworIiIiKQorCisgICAg
YmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRo
ZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yQWdlbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIgorJGluY2x1ZGVzCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY29uc3QgY2hhciogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmROYW1lc1tdID0geworJG1ldGhvZE5hbWVEZWNsYXJhdGlvbnMKK307CisKKworJG1ldGhvZHMK
K3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QgPSB0aGlzOworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVj
dCk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFw
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwor
ICAgIGxvbmcgY2FsbElkID0gMDsKKworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhhbmRsZXJzW10gPSB7CiskbWVzc2FnZUhhbmRs
ZXJzCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBzaXplb2YoY29tbWFuZE5h
bWVzKSAvIHNpemVvZihjb21tYW5kTmFtZXNbMF0pOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRO
YW1lc1tpXSwgaGFuZGxlcnNbaV0pOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcGFyc2VkTWVzc2FnZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Cisg
ICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwg
UGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVj
dCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7
CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJNZXNzYWdl
IG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGNhbGxJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+
Z2V0KCJpZCIpOworICAgIGlmICghY2FsbElkVmFsdWUpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjYWxsSWRWYWx1ZS0+YXNOdW1i
ZXIoJmNhbGxJZCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVx
dWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBudW1iZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbWV0aG9kVmFs
dWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoIm1ldGhvZCIpOworICAgIGlmICghbWV0aG9kVmFsdWUp
IHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwg
IidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgU3RyaW5nIG1ldGhvZDsKKyAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZygm
bWV0aG9kKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRS
ZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxl
cj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9
PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBtZXRob2QgKyAiJyB3YXNuJ3QgZm91bmQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+c2Vjb25kKShjYWxsSWQs
IG1lc3NhZ2VPYmplY3QuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JTdHJpbmcgaW52b2NhdGlvbkVycm9yKQorewor
ICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJy
b3JzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxl
bmd0aCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJy
b3IsIGludm9jYXRpb25FcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQp
OworICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsIGNhbGxJZCk7CisgICAgaWYg
KG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90
b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAoreworICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1lc3NhZ2UsIDApOworfQorCit2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBkYXRhKSBjb25zdAoreworICAgIERFRklORV9T
VEFUSUNfTE9DQUwoVmVjdG9yPGludD4sc19jb21tb25FcnJvcnMsKTsKKyAgICBpZiAoIXNfY29t
bW9uRXJyb3JzLnNpemUoKSkgeworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoUGFyc2VF
cnJvciwgLTMyNzAwKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRSZXF1
ZXN0LCAtMzI2MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoTWV0aG9kTm90Rm91
bmQsIC0zMjYwMSk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUGFyYW1z
LCAtMzI2MDIpOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW50ZXJuYWxFcnJvciwg
LTMyNjAzKTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFNlcnZlckVycm9yLCAtMzIw
MDApOworICAgIH0KKyAgICBBU1NFUlQoY29kZSA+PTApOworICAgIEFTU0VSVCgodW5zaWduZWQp
Y29kZSA8IHNfY29tbW9uRXJyb3JzLnNpemUoKSk7CisgICAgQVNTRVJUKHNfY29tbW9uRXJyb3Jz
W2NvZGVdKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgZXJyb3ItPnNldE51bWJlcigiY29kZSIsIHNfY29tbW9uRXJy
b3JzW2NvZGVdKTsKKyAgICBlcnJvci0+c2V0U3RyaW5nKCJtZXNzYWdlIiwgZXJyb3JNZXNzYWdl
KTsKKyAgICBBU1NFUlQoZXJyb3IpOworICAgIGlmIChkYXRhKQorICAgICAgICBlcnJvci0+c2V0
QXJyYXkoImRhdGEiLCBkYXRhKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtZXNzYWdlLT5zZXRPYmplY3QoImVy
cm9yIiwgZXJyb3IpOworICAgIGlmIChjYWxsSWQpCisgICAgICAgIG1lc3NhZ2UtPnNldE51bWJl
cigiaWQiLCAqY2FsbElkKTsKKyAgICBlbHNlCisgICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKCJp
ZCIsIEluc3BlY3RvclZhbHVlOjpudWxsKCkpOworICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkKKyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdl
VG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK2ludCBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91
bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBpbnQgdmFsdWUgPSAwOwor
CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAg
ICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgor
ICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidw
YXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0
eXBlICdOdW1iZXInLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVl
SXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVz
JyB3aXRoIHR5cGUgJ051bWJlcicgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc051bWJlcigmdmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVz
aFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0
IG11c3QgYmUgJ051bWJlcicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAg
ICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBB
U1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2
YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBTdHJpbmcgdmFsdWUgPSAiIjsKKworICAgIGlmICgh
b2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVx
dWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAg
IHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmpl
Y3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnU3RyaW5n
Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBv
YmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJ
dGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09
IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBl
ICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAg
IHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+
YXNTdHJpbmcoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdT
dHJpbmcnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZh
bHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZh
bHVlOworfQorCitib29sIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQocHJvdG9j
b2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZvdW5kID0g
ZmFsc2U7CisKKyAgICBib29sIHZhbHVlID0gZmFsc2U7CisKKyAgICBpZiAoIW9iamVjdCkgewor
ICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFt
ZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVy
cm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29u
dGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4nLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5k
KCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0g
b2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ0Jvb2xlYW4n
IHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9CisKKyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNCb29sZWFu
KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnQm9vbGVhbicu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3Vu
ZCkKKyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAg
ICBBU1NFUlQocHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAg
ICp2YWx1ZUZvdW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAg
ICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRl
ciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFp
biByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ09iamVjdCcuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKwor
ICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsK
KyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0JyB3YXMg
bm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4gdmFsdWU7
CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzT2JqZWN0KCZ2YWx1
ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnT2JqZWN0Jy4iLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAg
ICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFy
cmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZh
bHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycykKK3sKKyAgICBBU1NFUlQo
cHJvdG9jb2xFcnJvcnMpOworCisgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICp2YWx1ZUZv
dW5kID0gZmFsc2U7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKCF2
YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4gbWlzc2lu
ZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJp
bmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQg
cGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rv
ck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0
b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFt
ZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1
ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpm
b3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQXJyYXknIHdhcyBub3QgZm91bmQuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNBcnJheSgmdmFsdWUpKQorICAgICAgICBw
cm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVl
Rm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KK2Jvb2wgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5n
KiByZXN1bHQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSA9IEluc3BlY3Rv
clZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0ID0gdmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBmcm9udGVu
ZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJv
bWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisKKworSW5zcGVjdG9yRnJvbnRlbmQ6Okluc3BlY3RvckZyb250ZW5kKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorJGNv
bnN0cnVjdG9ySW5pdHsKK30KKworJG1ldGhvZHMKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGJhY2tlbmRfanMgPSBz
dHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKworCitJbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkK
K3sKKyAgICB0aGlzLl9sYXN0Q2FsbGJhY2tJZCA9IDE7CisgICAgdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50ID0gMDsKKyAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKKyAgICB0aGlzLl9kb21h
aW5EaXNwYXRjaGVycyA9IHt9OworICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OworJGRlbGVnYXRl
cyRldmVudEFyZ3MkZG9tYWluRGlzcGF0Y2hlcnMgICAgfQorCitJbnNwZWN0b3JCYWNrZW5kU3R1
Yi5wcm90b3R5cGUgPSB7CisgICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKKyAgICBkdW1w
SW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlczogMCwKKworICAgIF93cmFwOiBmdW5jdGlvbihjYWxs
YmFjaykKKyAgICB7CisgICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNr
SWQrKzsKKyAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwg
ZnVuY3Rpb24oKSB7fTsKKyAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7CisgICAgfSwKKworICAg
IF9yZWdpc3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQorICAgIHsKKyAgICAg
ICAgdmFyIGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRo
b2Quc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9u
WzBdICsgIkFnZW50IjsKKyAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKKyAgICAgICAg
ICAgIHdpbmRvd1thZ2VudE5hbWVdID0ge307CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2Rv
bWFpbkFuZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhp
cywgcmVxdWVzdFN0cmluZyk7CisgICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1
bmN0aW9uWzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3Ry
aW5nKQorICAgIH0sCisKKyAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdz
LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1
ZXN0U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOworICAgICAgICB0aGlz
Ll93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Cisg
ICAgfSwKKworICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwor
ICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKKyAgICAgICAg
dmFyIGNhbGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0g
MV0gPT09ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7CisgICAgICAgIHZhciBkb21haW5B
bmRNZXRob2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICB2YXIgYWdlbnRN
ZXRob2QgPSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsx
XTsKKworICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7CisgICAgICAgIGlmIChyZXF1ZXN0
LnBhcmFtcykgeworICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBl
OworICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXld
Lm9wdGlvbmFsOworCisgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFv
cHRpb25hbEZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9j
b2wgRXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdl
bnRNZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsg
SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgdmFs
dWUgPSBhcmdzLnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0
eXBlb2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtc1trZXldOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0
eXBlTmFtZSkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogSW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAn
IiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicg
YnV0IGl0IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnBh
cmFtc1trZXldID0gdmFsdWU7CisgICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQorICAgICAgICAgICAgICAg
IGRlbGV0ZSByZXF1ZXN0LnBhcmFtczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhcmdzLmxl
bmd0aCA9PT0gMSAmJiAhY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1sw
XSAhPT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICci
ICsgdHlwZW9mIGFyZ3NbMF0gKyAiJy4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5k
TWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7CisgICAgfSwKKworICAgIF93cmFwQ2Fs
bGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJh
Y2spCisgICAgeworICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFj
ayk7CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgeworICAgICAg
ICAgICAgdmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0
LmlkXTsKKyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9i
amVjdC5tZXRob2Q7CisgICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0
b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAi
ICsgSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOworCisgICAgICAgICsrdGhpcy5fcGVu
ZGluZ1Jlc3BvbnNlc0NvdW50OworICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNr
ZW5kKG1lc3NhZ2VPYmplY3QpOworICAgIH0sCisKKyAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFj
a2VuZDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUudGlt
ZVN0YW1wKG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKKyAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09O
LnN0cmluZ2lmeShtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0
LnNlbmRNZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOworICAgIH0sCisKKyAgICBfcmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCisgICAgeworICAg
ICAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKKyAgICB9
LAorCisgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKKyAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJiYWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2Fn
ZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7CisKKyAgICAgICAgdmFyIG1lc3NhZ2VPYmpl
Y3QgPSAodHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkg
OiBtZXNzYWdlOworCisgICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVz
dCBhIHJlc3BvbnNlIGZvciBzb21lIHJlcXVlc3QKKyAgICAgICAgICAgIGlmIChtZXNzYWdlT2Jq
ZWN0LmVycm9yKSB7CisgICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3Rv
X18gPSB7CisgICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCisg
ICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlz
LmNvZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJu
ICJQYXJzZSBlcnJvciI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6
IHJldHVybiAiSW52YWxpZCBSZXF1ZXN0IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIC0zMjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3Ii
OzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2
ZXIgZXJyb3IiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9
IlVua25vd24gZXJyb3IgY29kZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhp
cy5nZXREZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3Nh
Z2UgKyAiLiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdl
OiBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2Rl
ICE9PSAtMzIwMDApCisgICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJv
cihtZXNzYWdlT2JqZWN0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGFyZ3Vt
ZW50cyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7CisgICAg
ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQorICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJh
Y2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgaWYg
KHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAg
ICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKKworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOworICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CisgICAgICAgICAg
ICAgICAgLS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7CisgICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKKworICAgICAgICAgICAgICAg
IGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFj
ay5tZXRob2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNl
bmRSZXF1ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGlt
ZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAh
dGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50KQorICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0
ZXJQZW5kaW5nRGlzcGF0Y2hlcygpOworCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3Bs
aXQoIi4iKTsKKyAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOworICAgICAg
ICAgICAgdmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKKyAgICAgICAgICAgIGlmICghKGRv
bWFpbk5hbWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7CisgICAgICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhp
c3RpbmcgZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9k
b21haW5EaXNwYXRjaGVyc1tkb21haW5OYW1lXTsKKyAgICAgICAgICAgIGlmICghKGZ1bmN0aW9u
TmFtZSBpbiBkaXNwYXRjaGVyKSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlBy
b3RvY29sIEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRo
b2QgJyIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1tt
ZXNzYWdlT2JqZWN0Lm1ldGhvZF0pIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQ
cm90b2NvbCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhv
ZCAnIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKKyAgICAg
ICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhciBw
YXJhbU5hbWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFt
TmFtZXNbaV1dKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdT
dGFydFRpbWU7CisgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQor
ICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAg
ICAgICAgICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1z
KTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKKyAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0
aG9kICsgIiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKKyAgICAg
ICAgfQorICAgIH0sCisKKyAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdl
T2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0g
IiArIG1lc3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3Ip
OworICAgIH0sCisKKyAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3Jp
cHQpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCisgICAgICAgICAgICB0aGlz
Ll9zY3JpcHRzID0gW107CisKKyAgICAgICAgaWYgKHNjcmlwdCkKKyAgICAgICAgICAgIHRoaXMu
X3NjcmlwdHMucHVzaChzY3JpcHQpOworCisgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3Bv
bnNlc0NvdW50KSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Cisg
ICAgICAgICAgICB0aGlzLl9zY3JpcHRzID0gW10KKyAgICAgICAgICAgIGZvciAodmFyIGlkID0g
MDsgaWQgPCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKKyAgICAgICAgICAgICAgICAgc2NyaXB0c1tp
ZF0uY2FsbCh0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW5zcGVjdG9yQmFja2VuZCA9
IG5ldyBJbnNwZWN0b3JCYWNrZW5kU3R1YigpOyIiIikKKworICAgIHBhcmFtX2NvbnRhaW5lcl9h
Y2Nlc3NfY29kZSA9ICIiIgorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IHJlcXVlc3RNZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInBhcmFtcyIpOworICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOworIiIiCisKKwordHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpKQorCisKK2NsYXNz
IEdlbmVyYXRvcjoKKyAgICBmcm9udGVuZF9jbGFzc19maWVsZF9saW5lcyA9IFtdCisgICAgZnJv
bnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KKworICAgIG1ldGhvZF9uYW1lX2VudW1fbGlz
dCA9IFtdCisgICAgYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdCA9IFtdCisgICAgYmFj
a2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCisgICAgYmFja2VuZF9tZXRob2Rf
bmFtZV9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBtZXRob2RfaGFuZGxlcl9saXN0ID0gW10K
KyAgICBmcm9udGVuZF9tZXRob2RfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19pbml0aWFsaXpl
cl9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2V2ZW50X2xpc3QgPSBbXQorICAgIGJhY2tlbmRf
anNfZG9tYWluX2Rpc3BhdGNoZXJfbGlzdCA9IFtdCisKKyAgICBiYWNrZW5kX2NvbnN0cnVjdG9y
X3BhcmFtX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0ID0gW10K
KyAgICBiYWNrZW5kX2ZpZWxkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZm9yd2FyZF9saXN0ID0g
W10KKyAgICBiYWNrZW5kX2luY2x1ZGVfbGlzdCA9IFtdCisgICAgZnJvbnRlbmRfY29uc3RydWN0
b3JfaW5pdF9saXN0ID0gW10KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ28oKToKKyAg
ICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06CisgICAgICAgICAg
ICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQorICAgICAgICAgICAgZG9tYWlu
X25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCisKKyAgICAgICAgICAgIGRvbWFpbl9k
YXRhID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorCisgICAg
ICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZpbmVzX21hcCk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9IGRvbWFp
bl9kYXRhLmFnZW50X2ZpZWxkX25hbWUKKworICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2Rl
Y2xhcmF0aW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGlmICJldmVudHMiIGluIGpzb25fZG9t
YWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVu
dHMiXToKKyAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9l
dmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKKwor
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcy5hcHBl
bmQoIiAgICAlcyBtXyVzO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWVfbG93ZXIpKQor
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3Qu
YXBwZW5kKCIgICAgLCBtXyVzKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbClcbiIgJSBkb21haW5f
bmFtZV9sb3dlcikKKyAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2Ns
YXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1
dGUoTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluQ2xhc3NOYW1lPWRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICBkb21haW5GaWVsZE5hbWU9ZG9tYWluX25hbWVfbG93ZXIs
CisgICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPWpv
aW4oZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLCAiIikpKQorICAgICAgICAgICAg
aWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3IganNvbl9j
b21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJdOgorICAgICAgICAgICAgICAgICAgICBH
ZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50
X2ZpZWxkX25hbWUpCisKKyAgICAgICAgICAgIGlmIG5vdCBkb21haW5fZGF0YS5za2lwX2pzX2Jp
bmQ6CisgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2Rpc3BhdGNo
ZXJfbGlzdC5hcHBlbmQoIiAgICB0aGlzLnJlZ2lzdGVyJXNEaXNwYXRjaGVyID0gdGhpcy5fcmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQodGhpcywgXCIlc1wiKTtcbiIgJSAoZG9tYWluX25h
bWUsIGRvbWFpbl9uYW1lKSkKKworICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zID0gbGlzdChq
c29uX2FwaVsiZG9tYWlucyJdKQorICAgICAgICBzb3J0ZWRfanNvbl9kb21haW5zLnNvcnQoa2V5
PWxhbWJkYSBvOiBvWyJkb21haW4iXSkKKworICAgICAgICBmb3IganNvbl9kb21haW4gaW4gc29y
dGVkX2pzb25fZG9tYWluczoKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5b
ImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluTmFtZUZpeGVzLmdl
dF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQorICAgICAgICAgICAgaWYgZG9tYWluX2RhdGEuaXNf
ZGlzYWJsZWQoZGVmaW5lc19tYXApOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAg
ICAgICAgIGlmIGRvbWFpbl9kYXRhLmhpZGRlbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgYWdlbnRfdHlwZV9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfdHlwZV9uYW1l
CisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRf
bmFtZQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlz
dC5hcHBlbmQoIiwgJXMqICVzIiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUp
KQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LmFw
cGVuZCgiICAgICAgICAsIG1fJXMoJXMpIiAlIChhZ2VudF9maWVsZF9uYW1lLCBhZ2VudF9maWVs
ZF9uYW1lKSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QuYXBwZW5k
KCIgICAgJXMqIG1fJXM7IiAlIChhZ2VudF90eXBlX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQor
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZm9yd2FyZF9saXN0LmFwcGVuZCgiY2xhc3Mg
JXM7IiAlIGFnZW50X3R5cGVfbmFtZSkKKyAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2lu
Y2x1ZGVfbGlzdC5hcHBlbmQoIiNpbmNsdWRlIFwiJXMuaFwiIiAlIGFnZW50X3R5cGVfbmFtZSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBk
b21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKKyAgICAgICAg
ZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5hbWUiXQorICAgICAgICBwYXJhbWV0ZXJfbGlzdCA9
IFtdCisgICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQorICAgICAgICBiYWNrZW5kX2pzX2V2
ZW50X3BhcmFtX2xpc3QgPSBbXQorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9ldmVu
dDoKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIp
CisgICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9ldmVudFsicGFyYW1ldGVy
cyJdOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5h
bWUiXQorCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1SYXdUeXBlKGpz
b25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKKworICAgICAgICAgICAgICAgIGpzb25fb3B0aW9u
YWwgPSAib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0
aW9uYWwiXQorCisgICAgICAgICAgICAgICAgb3B0aW9uYWxfbWFzayA9IHJhd190eXBlLmlzRXZl
bnRQYXJhbUNoZWNrT3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBl
LmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAg
ICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRTZXR0ZXJOYW1lKCkKKworICAgICAg
ICAgICAgICAgIG9wdGlvbmFsID0gb3B0aW9uYWxfbWFzayBhbmQganNvbl9vcHRpb25hbAorCisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoY190eXBlLmdl
dF90ZXh0KCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1
bWVudCA9IGNfdHlwZS5nZXRfc2V0dGVyX2Zvcm1hdCgpICUgcGFyYW1ldGVyX25hbWUKKworICAg
ICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gIiAgICBwYXJhbXNPYmplY3QtPnNldCVzKFwiJXNc
IiwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVu
dCkKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgc2V0
dGVyX2NvZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRl
cl9jb2RlCisgICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2Nv
ZGUpCisKKyAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QuYXBwZW5k
KCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0
LmFwcGVuZCgiICAgICVzTWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIsIHBhcmFtc09iamVj
dCk7XG4iICUgZXZlbnRfbmFtZSkKKyAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9u
X2xpbmVzLmFwcGVuZCgKKyAgICAgICAgICAgICIgICAgICAgIHZvaWQgJXMoJXMpO1xuIiAlIChl
dmVudF9uYW1lLCBqb2luKHBhcmFtZXRlcl9saXN0LCAiLCAiKSkpCisKKyAgICAgICAgR2VuZXJh
dG9yLmZyb250ZW5kX21ldGhvZF9saXN0LmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9k
LnN1YnN0aXR1dGUoTm9uZSwKKyAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsIGV2
ZW50TmFtZT1ldmVudF9uYW1lLAorICAgICAgICAgICAgcGFyYW1ldGVycz1qb2luKHBhcmFtZXRl
cl9saXN0LCAiLCAiKSwKKyAgICAgICAgICAgIGNvZGU9am9pbihtZXRob2RfbGluZV9saXN0LCAi
IikpKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QuYXBwZW5kKCIg
ICAgdGhpcy5fZXZlbnRBcmdzW1wiJXMuJXNcIl0gPSBbJXNdO1xuIiAlICgKKyAgICAgICAgICAg
IGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCBqb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlz
dCwgIiwgIikpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQo
anNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSk6CisgICAgICAgIGpz
b25fY29tbWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KKyAgICAgICAgR2VuZXJhdG9y
Lm1ldGhvZF9uYW1lX2VudW1fbGlzdC5hcHBlbmQoIiAgICAgICAgayVzXyVzQ21kLCIgJSAoZG9t
YWluX25hbWUsIGpzb25fY29tbWFuZFsibmFtZSJdKSkKKyAgICAgICAgR2VuZXJhdG9yLm1ldGhv
ZF9oYW5kbGVyX2xpc3QuYXBwZW5kKCIgICAgICAgICZJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6JXNfJXMsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICB2b2lk
ICVzXyVzKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqIHJlcXVlc3RNZXNzYWdlT2JqZWN0
KTsiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisKKyAgICAgICAgbWV0aG9k
X2luX2NvZGUgPSAiIgorICAgICAgICBtZXRob2Rfb3V0X2NvZGUgPSAiIgorICAgICAgICBhZ2Vu
dF9jYWxsX3BhcmFtX2xpc3QgPSBbXQorICAgICAgICByZXNwb25zZV9jb29rX2xpc3QgPSBbXQor
ICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIgorICAgICAgICBqc19wYXJhbWV0ZXJz
X3RleHQgPSAiIgorICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21tYW5kOgorICAg
ICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMiXQorICAgICAg
ICAgICAgbWV0aG9kX2luX2NvZGUgKz0gVGVtcGxhdGVzLnBhcmFtX2NvbnRhaW5lcl9hY2Nlc3Nf
Y29kZQorICAgICAgICAgICAgcmVxdWVzdF9tZXNzYWdlX3BhcmFtID0gIiByZXF1ZXN0TWVzc2Fn
ZU9iamVjdCIKKyAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QgPSBbXQorCisgICAgICAgICAgICBm
b3IganNvbl9wYXJhbWV0ZXIgaW4ganNvbl9wYXJhbXM6CisgICAgICAgICAgICAgICAganNvbl9w
YXJhbV9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQorICAgICAgICAgICAgICAgIHBhcmFt
X3Jhd190eXBlID0gcmVzb2x2ZVBhcmFtUmF3VHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25h
bWUpCisKKyAgICAgICAgICAgICAgICB2YXJfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldENQYXJh
bVR5cGUoUGFyYW1UeXBlLklOUFVULCBOb25lKQorICAgICAgICAgICAgICAgIGdldHRlcl9uYW1l
ID0gcGFyYW1fcmF3X3R5cGUuZ2V0R2V0dGVyTmFtZSgpCisKKyAgICAgICAgICAgICAgICBpZiAi
b3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwi
XToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9
IGZhbHNlO1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBn
ZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwiJXNcIiwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29s
RXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1f
bmFtZSwgdmFyX3R5cGUuZ2V0X3RleHQoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwg
anNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBw
YXJhbSA9ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiAwIiAlIChqc29uX3BhcmFtX25hbWUs
IGpzb25fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIFwi
JXNcIiwgMCwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUs
IGpzb25fcGFyYW1fbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMi
ICUganNvbl9wYXJhbV9uYW1lCisKKyAgICAgICAgICAgICAgICBtZXRob2RfaW5fY29kZSArPSBj
b2RlCisgICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkK
KworICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdldEpzQmlu
ZFR5cGUoKQorICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAiXCIlc1wiOiB7XCJvcHRp
b25hbFwiOiAlcywgXCJ0eXBlXCI6IFwiJXNcIn0iICUgKAorICAgICAgICAgICAgICAgICAgICBq
c29uX3BhcmFtX25hbWUsCisgICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25h
bCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNl
ICJmYWxzZSIpLAorICAgICAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUpCisKKyAgICAgICAg
ICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQorCisgICAgICAgICAg
ICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiLCBcInBhcmFtc1wiOiB7IiArIGpvaW4oanNfcGFyYW1f
bGlzdCwgIiwgIikgKyAifSIKKworICAgICAgICByZXNwb25zZV9jb29rX3RleHQgPSAiIgorICAg
ICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgorICAgICAgICAgICAgbWV0aG9kX291
dF9jb2RlICs9ICJcbiIKKyAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1h
bmRbInJldHVybnMiXToKKworICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29u
X3JldHVyblsibmFtZSJdCisgICAgICAgICAgICAgICAgcmF3X3R5cGUgPSByZXNvbHZlUGFyYW1S
YXdUeXBlKGpzb25fcmV0dXJuLCBkb21haW5fbmFtZSkKKyAgICAgICAgICAgICAgICBzZXR0ZXJf
dHlwZSA9IHJhd190eXBlLmdldFNldHRlck5hbWUoKQorICAgICAgICAgICAgICAgIGluaXRpYWxp
emVyID0gcmF3X3R5cGUuZ2V0Q0luaXRpYWxpemVyKCkKKyAgICAgICAgICAgICAgICB2YXJfdHlw
ZSA9IHJhd190eXBlLmdldENQYXJhbVR5cGUoUGFyYW1UeXBlLk9VVFBVVCwgTm9uZSkKKworICAg
ICAgICAgICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcyA9ICVzO1xuIiAlICh2YXJfdHlwZS5n
ZXRfdGV4dCgpLCBqc29uX3JldHVybl9uYW1lLCBpbml0aWFsaXplcikKKyAgICAgICAgICAgICAg
ICBwYXJhbSA9ICIsICZvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQorICAgICAgICAgICAgICAg
IGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKFwiJXNcIiwgb3V0XyVzKTtcbiIgJSAoc2V0
dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIGpzb25fcmV0dXJuX25hbWUpCisgICAgICAgICAg
ICAgICAgaWYgdmFyX3R5cGUuZ2V0X3RleHQoKSA9PSAiYm9vbCIgYW5kICJvcHRpb25hbCIgaW4g
anNvbl9yZXR1cm4gYW5kIGpzb25fcmV0dXJuWyJvcHRpb25hbCJdOgorICAgICAgICAgICAgICAg
ICAgICBjb29rID0gKCIgICAgICAgIGlmIChvdXRfJXMpXG4gICAgIiAlIGpzb25fcmV0dXJuX25h
bWUpICsgY29vaworCisgICAgICAgICAgICAgICAgbWV0aG9kX291dF9jb2RlICs9IGNvZGUKKyAg
ICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQorICAgICAg
ICAgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdC5hcHBlbmQoY29vaykKKyAgICAgICAgICAgIHJl
c3BvbnNlX2Nvb2tfdGV4dCA9ICIgICAgaWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkgJiYg
IWVycm9yLmxlbmd0aCgpKSB7XG4lcyAgICB9XG4iICUgam9pbihyZXNwb25zZV9jb29rX2xpc3Qs
ICIiKQorCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAorICAg
ICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRf
bmFtZSwKKyAgICAgICAgICAgIGFnZW50RmllbGQ9Im1fIiArIGFnZW50X2ZpZWxkX25hbWUsCisg
ICAgICAgICAgICBtZXRob2RJbkNvZGU9bWV0aG9kX2luX2NvZGUsCisgICAgICAgICAgICBtZXRo
b2RPdXRDb2RlPW1ldGhvZF9vdXRfY29kZSwKKyAgICAgICAgICAgIGFnZW50Q2FsbFBhcmFtcz1q
b2luKGFnZW50X2NhbGxfcGFyYW1fbGlzdCwgIiIpLAorICAgICAgICAgICAgcmVxdWVzdE1lc3Nh
Z2VPYmplY3Q9cmVxdWVzdF9tZXNzYWdlX3BhcmFtLAorICAgICAgICAgICAgcmVzcG9uc2VDb29r
PXJlc3BvbnNlX2Nvb2tfdGV4dCkpCisgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9u
YW1lX2RlY2xhcmF0aW9uX2xpc3QuYXBwZW5kKCIgICAgXCIlcy4lc1wiLCIgJSAoZG9tYWluX25h
bWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19p
bml0aWFsaXplcl9saXN0LmFwcGVuZCgiICAgICAgICB0aGlzLl9yZWdpc3RlckRlbGVnYXRlKCd7
XCJtZXRob2RcIjogXCIlcy4lc1wiJXMsIFwiaWRcIjogMH0nKTtcbiIgJSAoZG9tYWluX25hbWUs
IGpzb25fY29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQpKQorCisKK0dlbmVyYXRvci5n
bygpCisKK2JhY2tlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAiL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiLCAidyIpCitiYWNrZW5kX2NwcF9maWxlID0gb3Bl
bihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIs
ICJ3IikKKworZnJvbnRlbmRfaF9maWxlID0gb3BlbihvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAi
L0luc3BlY3RvckZyb250ZW5kLmgiLCAidyIpCitmcm9udGVuZF9jcHBfZmlsZSA9IG9wZW4ob3V0
cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JGcm9udGVuZC5jcHAiLCAidyIpCisKK2JhY2tl
bmRfanNfZmlsZSA9IG9wZW4ob3V0cHV0X2NwcF9kaXJuYW1lICsgIi9JbnNwZWN0b3JCYWNrZW5k
U3R1Yi5qcyIsICJ3IikKKworCitmcm9udGVuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250
ZW5kX2guc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgZmllbGREZWNsYXJhdGlvbnM9am9pbihH
ZW5lcmF0b3IuZnJvbnRlbmRfY2xhc3NfZmllbGRfbGluZXMsICIiKSwKKyAgICAgICAgIGRvbWFp
bkNsYXNzTGlzdD1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMsICIi
KSkpCisKK2JhY2tlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0
ZShOb25lLAorICAgIGNvbnN0cnVjdG9ySW5pdD1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0
cnVjdG9yX2luaXRfbGlzdCwgIlxuIiksCisgICAgY29uc3RydWN0b3JQYXJhbXM9am9pbihHZW5l
cmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LCAiIiksCisgICAgbWV0aG9kTmFt
ZXNFbnVtQ29udGVudD1qb2luKEdlbmVyYXRvci5tZXRob2RfbmFtZV9lbnVtX2xpc3QsICJcbiIp
LAorICAgIG1ldGhvZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAgICBmaWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVy
YXRvci5iYWNrZW5kX2ZpZWxkX2xpc3QsICJcbiIpLAorICAgIGZvcndhcmREZWNsYXJhdGlvbnM9
am9pbihHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QsICJcbiIpKSkKKworZnJvbnRlbmRf
Y3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisg
ICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2lu
aXRfbGlzdCwgIiIpLAorICAgIG1ldGhvZHM9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9k
X2xpc3QsICJcbiIpKSkKKworYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2Vu
ZF9jcHAuc3Vic3RpdHV0ZShOb25lLAorICAgIG1ldGhvZE5hbWVEZWNsYXJhdGlvbnM9am9pbihH
ZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfbmFtZV9kZWNsYXJhdGlvbl9saXN0LCAiXG4iKSwKKyAg
ICBpbmNsdWRlcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2luY2x1ZGVfbGlzdCwgIlxuIiksCisg
ICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LCAiXG4iKSwKKyAgICBtZXNzYWdlSGFuZGxlcnM9am9pbihHZW5lcmF0b3IubWV0aG9kX2hh
bmRsZXJfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJh
Y2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAorICAgIGRlbGVnYXRlcz1qb2luKEdlbmVyYXRvci5i
YWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QsICIiKSwKKyAgICBldmVudEFyZ3M9am9pbihHZW5l
cmF0b3IuYmFja2VuZF9qc19ldmVudF9saXN0LCAiIiksCisgICAgZG9tYWluRGlzcGF0Y2hlcnM9
am9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LCAiIikpKQor
CitiYWNrZW5kX2hfZmlsZS5jbG9zZSgpCitiYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKKworZnJv
bnRlbmRfaF9maWxlLmNsb3NlKCkKK2Zyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKKworYmFja2Vu
ZF9qc19maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpp
bmRleCA1NGQyZmUyY2QwNTU2NmNmZjcyODBiOWE2YzQ4MmEzNmRmYTExZDE5Li4xNWFiYjNkNTU2
OGZmYzc0YjgwYWI1OTUwMGYyZDBlYWVlNDQxYmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uCkBAIC0xNDAsNyArMTQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzZXNzaW9uIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJU
cnVlIGluIGNhc2Ugb2Ygc2Vzc2lvbiBjb29raWUuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICAgICAiaGlkZGVuIjogdHJ1ZQotICAgICAgICAgICAgfSwKKyAgICAgICAgICAg
IH0KICAgICAgICAgXSwKICAgICAgICAgImNvbW1hbmRzIjogWwogICAgICAgICAgICAgewpAQCAt
ODQ2LDcgKzg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaXNMb2NhbFN0
b3JhZ2UiLCAidHlwZSI6ICJib29sZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgZm9yIGxvY2Fs
IHN0b3JhZ2UuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgInR5cGUi
OiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkVudHJ5IGlkIGZvciBmdXJ0aGVyIHJlZmVyZW5j
ZS4iIH0KICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICB9LAorICAgICAgICAgICAgfQog
ICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCAxN2FlNjYxOWZiM2RhMmZjZGFhOWMwYzhjMzA3OTM0NGZhZmQx
NTUxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCisrKyAvZGV2L251bGwK
QEAgLTEsMTYwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0j
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIyAKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSMgCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0j
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLQotcHJvZ3JhbV9uYW1lID0gb3MucGF0
aC5iYXNlbmFtZShfX2ZpbGVfXykKLWlmIGxlbihzeXMuYXJndikgPCA0IG9yIHN5cy5hcmd2WzFd
ICE9ICItbyI6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6ICVzIC1vIE9VVFBVVF9GSUxF
IElOUFVUX0ZJTEVcbiIgJSBwcm9ncmFtX25hbWUpCi0gICAgZXhpdCgxKQotCi1vdXRwdXRfcGF0
aCA9IHN5cy5hcmd2WzJdCi1pbnB1dF9wYXRoID0gc3lzLmFyZ3ZbM10KLQotaW5wdXRfZmlsZSA9
IG9wZW4oaW5wdXRfcGF0aCwgInIiKQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQot
anNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IHRydWUiLCAiOiBUcnVlIikKLWpz
b25fc3RyaW5nID0ganNvbl9zdHJpbmcucmVwbGFjZSgiOiBmYWxzZSIsICI6IGZhbHNlIikKLWpz
b25fYXBpID0gZXZhbChqc29uX3N0cmluZylbImRvbWFpbnMiXQotCi1vdXRwdXRfZmlsZSA9IG9w
ZW4ob3V0cHV0X3BhdGgsICJ3IikKLW91dHB1dF9maWxlLndyaXRlKCIiIi8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotIAotbW9kdWxlIGNvcmUgeyIiIikKLQot
dHlwZV90cmFpdHMgPSB7Ci0gICAgInN0cmluZyI6ICJTdHJpbmciLAotICAgICJpbnRlZ2VyIjog
ImludCIsCi0gICAgIm51bWJlciI6ICJkb3VibGUiLAotICAgICJib29sZWFuIjogImJvb2xlYW4i
LAotICAgICJhcnJheSI6ICJBcnJheSIsCi0gICAgIm9iamVjdCI6ICJPYmplY3QiCi19Ci0KLXJl
Zl90eXBlcyA9IHt9Ci0KLW1hY3JvX3RyYWl0cyA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RB
VEFCQVNFIiwKLSAgICAiRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIkRP
TURlYnVnZ2VyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJQcm9maWxlciI6ICJKQVZB
U0NSSVBUX0RFQlVHR0VSIiwKLSAgICAiV29ya2VyIjogIldPUktFUlMiCi19Ci0KLWRlZiBmdWxs
X3F1YWxpZmllZF90eXBlX2lkKGRvbWFpbl9uYW1lLCB0eXBlX2lkKToKLSAgICBpZiB0eXBlX2lk
LmZpbmQoIi4iKSA9PSAtMToKLSAgICAgICByZXR1cm4gIiVzLiVzIiAlIChkb21haW5fbmFtZSwg
dHlwZV9pZCkKLSAgICByZXR1cm4gdHlwZV9pZAotICAgIAotCi1kZWYgcGFyYW1fdHlwZShkb21h
aW5fbmFtZSwgcGFyYW0pOgotICAgIGlmICJ0eXBlIiBpbiBwYXJhbToKLSAgICAgICAgcmV0dXJu
IHR5cGVfdHJhaXRzW3BhcmFtWyJ0eXBlIl1dCi0gICAgaWYgIiRyZWYiIGluIHBhcmFtOgotICAg
ICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgcGFyYW1b
IiRyZWYiXSkKLSAgICAgICAgaWYgdHlwZV9pZCBpbiByZWZfdHlwZXM6Ci0gICAgICAgICAgICBy
ZWZfdHlwZSA9IHJlZl90eXBlc1t0eXBlX2lkXQotICAgICAgICAgICAgcmV0dXJuIHR5cGVfdHJh
aXRzW3JlZl90eXBlWyJ0eXBlIl1dCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgi
VHlwZSBub3QgZm91bmQ6ICIgKyB0eXBlX2lkKQotICAgICAgICAgICAgcmV0dXJuICIhISBUeXBl
IG5vdCBmb3VuZDogIiArIHR5cGVfaWQKLQotZm9yIGRvbWFpbiBpbiBqc29uX2FwaToKLSAgICBk
b21haW5fbmFtZSA9IGRvbWFpblsiZG9tYWluIl0KLSAgICBpZiAidHlwZXMiIGluIGRvbWFpbjoK
LSAgICAgICAgZm9yIHR5cGUgaW4gZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgdHlwZV9p
ZCA9IGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5cGVbImlkIl0pCi0gICAg
ICAgICAgICByZWZfdHlwZXNbdHlwZV9pZF0gPSB0eXBlOwotCi1mb3IgZG9tYWluIGluIGpzb25f
YXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAgIGlmIGRvbWFpbl9u
YW1lIGluIG1hY3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuI2lmIGRl
ZmluZWQoRU5BQkxFXyVzKSAmJiBFTkFCTEVfJXMiICUgKG1hY3JvX3RyYWl0c1tkb21haW5fbmFt
ZV0sIG1hY3JvX3RyYWl0c1tkb21haW5fbmFtZV0pKQotICAgIG91dHB1dF9maWxlLndyaXRlKCJc
biAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPUlOU1BFQ1RPUl0gJXMgeyIgJSBkb21haW5fbmFt
ZSkKLQotICAgIGlmICJjb21tYW5kcyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAgICBwYXJhbXMgPSBbXQotICAgICAgICAg
ICAgaWYgKCJwYXJhbWV0ZXJzIiBpbiBjb21tYW5kKToKLSAgICAgICAgICAgICAgICBmb3IgaW5f
cGFyYW0gaW4gY29tbWFuZFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAo
Im9wdGlvbmFsIiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFw
cGVuZCgiaW4lcyAlcyAlcyIgJSAob3B0aW9uYWwsIHBhcmFtX3R5cGUoZG9tYWluX25hbWUsIGlu
X3BhcmFtKSwgaW5fcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBpZiAoInJldHVybnMiIGlu
IGNvbW1hbmQpOgotICAgICAgICAgICAgICAgIGZvciBvdXRfcGFyYW0gaW4gY29tbWFuZFsicmV0
dXJucyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFsIiBpbiBvdXRfcGFyYW0p
OgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9
ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAlIChv
cHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgb3V0X3BhcmFtKSwgb3V0X3BhcmFtWyJu
YW1lIl0pKQotICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgICAgICB2b2lkICVz
KCVzKTsiICUgKGNvbW1hbmRbIm5hbWUiXSwgIiwgIi5qb2luKHBhcmFtcykpKQotCi0gICAgaWYg
ImV2ZW50cyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluWyJldmVudHMi
XToKLSAgICAgICAgICAgIHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRlcnMi
IGluIGV2ZW50KToKLSAgICAgICAgICAgICAgICBmb3IgaW5fcGFyYW0gaW4gZXZlbnRbInBhcmFt
ZXRlcnMiXToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCJvcHRpb25hbCIgaW4gaW5fcGFyYW0p
OgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIFtvcHRpb25hbF0iCi0gICAg
ICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9
ICIiCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoIm91dCVzICVzICVzIiAlIChv
cHRpb25hbCwgcGFyYW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsibmFt
ZSJdKSkKLSAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiAgICAgICAgW2V2ZW50XSB2
b2lkICVzKCVzKTsiICUgKGV2ZW50WyJuYW1lIl0sICIsICIuam9pbihwYXJhbXMpKSkKLQotICAg
IG91dHB1dF9maWxlLndyaXRlKCJcbiAgICB9OyIpCi0gICAgaWYgZG9tYWluWyJkb21haW4iXSBp
biBtYWNyb190cmFpdHM6Ci0gICAgICAgIG91dHB1dF9maWxlLndyaXRlKCJcbiNlbmRpZiAvLyBF
TkFCTEVfJXMiICUgbWFjcm9fdHJhaXRzW2RvbWFpblsiZG9tYWluIl1dKQotb3V0cHV0X2ZpbGUu
d3JpdGUoIlxufVxuIikKLW91dHB1dF9maWxlLmNsb3NlKCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111660</attachid>
            <date>2011-10-19 12:52:07 -0700</date>
            <delta_ts>2011-10-20 13:01:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111019235204.patch</filename>
            <type>text/plain</type>
            <size>121868</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2MjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Y2EzNTIzMmYzYTRjMDdl
YzM1MWQzNDQ1OGI1NGY5ZTUwNDlmYmY1Li5hOWMxY2JlYzI2NDJiZmI2MzUzZDk2YmE2Yzc0ZGVi
ZmY0MzQyOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTAtMDcgIFBldGVy
IFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbGQgMi1zdGFn
ZSBweXRob24rcGVyZiBnZW5lcmF0b3IgdGhhdCB1c2VzIGludGVybWVkaWF0ZSBJREwgb3V0cHV0
IGlzCisgICAgICAgIGJlaW5nIHJlcGxhY2VkIHdpdGggYSBzb2xpZCBweXRob24gc2NyaXB0LiBU
aGlzIGlzIGZvciBzaW1wbGljaXR5IGFuZAorICAgICAgICBhcyBhIGJhc2UgZm9yIHRoZSBmdXR1
cmUgSlNPTiB2YWxpZGF0b3IuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBDb2RlR2VuZXJhdG9ycy5wcmk6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weTogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rv
ci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsOiBSZW1vdmVkLgorCiAyMDExLTEwLTE3ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IHdlYmtpdCB3b24n
dCBhbHdheXMgc2VuZCBsaXZlIHJlZ2lvbiBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDgyOTI1ZWEzY2EwYjIzOTdmOGExYTMwMjg2ZTAwZjNkZTBiZjUyNjYuLjEyZDY4Yzhh
YzU5ZTE5Yzc4MTI4NjI1MTZjNGI4ZmI2NDRkMmNiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0yMjE0LDE3ICsyMjE0LDEwIEBAIEFERF9DVVNUT01fQ09NTUFORCgKIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yUHJv
dG9jb2xWZXJzaW9uLmgpCiAKIEFERF9DVVNUT01fQ09NTUFORCgKLSAgICBPVVRQVVQgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwKLSAgICBNQUlOX0RFUEVOREVO
Q1kgaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0gICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9p
bnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3Iv
SW5zcGVjdG9yLmpzb24KLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V0VCQ09S
RV9ESVJ9L2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vICR7REVSSVZFRF9TT1VS
Q0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9J
bnNwZWN0b3IuanNvbgotICAgIFZFUkJBVElNKQotCi1BRERfQ1VTVE9NX0NPTU1BTkQoCiAgICAg
T1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmggJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZy
b250ZW5kLmNwcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yRnJvbnRl
bmQuaAotICAgIE1BSU5fREVQRU5ERU5DWSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5zcGVjdG9yLmlkbAotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mvc2NyaXB0
cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAke1NDUklQVFNfQklORElOR1N9ICR7V0VCQ09SRV9ESVJ9
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCi0gICAgQ09NTUFORCAke1BFUkxfRVhFQ1VUQUJMRX0g
LUkke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9zY3JpcHRzIC1JJHtXRUJDT1JFX0RJUn0vaW5zcGVj
dG9yICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwg
LS1kZWZpbmVzICIke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfSIgLS1nZW5lcmF0b3IgSW5z
cGVjdG9yICR7SURMX0lOQ0xVREVTfSAtLW91dHB1dERpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9IiAtLXByZXByb2Nlc3NvciAiJHtDT0RFX0dFTkVSQVRPUl9QUkVQUk9DRVNTT1J9
IiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yLmlkbAorICAgIE1BSU5f
REVQRU5ERU5DWSBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKyAgICBERVBFTkRTICR7V0VCQ09S
RV9ESVJ9L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisgICAgQ09NTUFORCAk
e1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1v
dXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1vdXRwdXRfY3Bw
X2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLWRlZmluZXMgIiR7RkVBVFVS
RV9ERUZJTkVTX0pBVkFTQ1JJUFR9IgogICAgIFZFUkJBVElNKQogTElTVChBUFBFTkQgV2ViQ29y
ZV9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZy
b250ZW5kLmNwcCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMu
cHJpIGIvU291cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCmluZGV4IDNlYjY5NGRkMDE5
NzJhZTRkMzRmODFjYjAzNjIzNjFkYzI4NjllZjYuLjM1OTUxYjAyMDE0MTkzY2RlOGMyMzg2OGJk
N2QxMTkwYmQwMmQ3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3Jz
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKQEAgLTY3MywyOSAr
NjczLDEyIEBAIGluc3BlY3RvclZhbGlkYXRlLmRlcGVuZHMgPSAkJFBXRC9pbnNwZWN0b3IvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIGluc3BlY3RvclZhbGlkYXRlLndrQWRk
T3V0cHV0VG9Tb3VyY2VzID0gZmFsc2UKIGFkZEV4dHJhQ29tcGlsZXIoaW5zcGVjdG9yVmFsaWRh
dGUpCiAKLWluc3BlY3RvckpTT04ub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsCitpbnNwZWN0b3JKU09OLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9T
T1VSQ0VTX0RJUn0vSW5zcGVjdG9yRnJvbnRlbmQuY3BwICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VT
X0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCiBpbnNwZWN0b3JKU09OLmlucHV0
ID0gSU5TUEVDVE9SX0pTT04KLWluc3BlY3RvckpTT04ud2tTY3JpcHQgPSAkJFBXRC9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySlNPTi5jb21tYW5kcyA9IHB5dGhv
biAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQgLW8gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElS
fS9JbnNwZWN0b3IuaWRsICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgotaW5zcGVjdG9y
SlNPTi5kZXBlbmRzID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLWlu
c3BlY3RvckpTT04ud2tBZGRPdXRwdXRUb1NvdXJjZXMgPSBmYWxzZQoraW5zcGVjdG9ySlNPTi53
a1NjcmlwdCA9ICQkUFdEL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CitpbnNw
ZWN0b3JKU09OLmNvbW1hbmRzID0gcHl0aG9uICQkaW5zcGVjdG9ySlNPTi53a1NjcmlwdCAkJFBX
RC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgJCRXQ19HRU5FUkFURURf
U09VUkNFU19ESVIgLS1vdXRwdXRfY3BwX2RpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiAt
LWRlZmluZXMgXCIkJHtGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH1cIgoraW5zcGVjdG9ySlNP
Ti5kZXBlbmRzID0gJCRpbnNwZWN0b3JKU09OLndrU2NyaXB0CiBhZGRFeHRyYUNvbXBpbGVyKGlu
c3BlY3RvckpTT04pCi1pbnNwZWN0b3JKU09OLnZhcmlhYmxlX291dCA9IElOU1BFQ1RPUl9KU09O
X09VVFBVVAotCi1pbnNwZWN0b3JJREwub3V0cHV0ID0gJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJCR7V0NfR0VORVJBVEVEX1NPVVJDRVNfRElSfS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKLWluc3BlY3RvcklETC5pbnB1dCA9IElOU1BF
Q1RPUl9KU09OX09VVFBVVAotaW5zcGVjdG9ySURMLndrU2NyaXB0ID0gJCRQV0QvYmluZGluZ3Mv
c2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbAotaW5zcGVjdG9ySURMLmNvbW1hbmRzID0gcGVy
bCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgLUkkJFBXRC9pbnNwZWN0b3IgJCRpbnNwZWN0b3JJ
REwud2tTY3JpcHQgLS1kZWZpbmVzIFwiJCR7RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9XCIg
LS1nZW5lcmF0b3IgSW5zcGVjdG9yIC0tb3V0cHV0RGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNf
RElSIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICR7UU1BS0VfRklMRV9OQU1F
fQotaW5zcGVjdG9ySURMLmRlcGVuZHMgPSAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3IucG0gXAotICAgICAgICAgICAgICAkJFBXRC9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSURMUGFy
c2VyLnBtIFwKLSAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1
cmUucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0luRmlsZXNQYXJz
ZXIucG0gXAotICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL3ByZXByb2Nlc3Nv
ci5wbSBcCi0gICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBcCi0g
ICAgICAgICAgICAgICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNw
ZWN0b3JJREwud2tFeHRyYVNvdXJjZXMgPSAkJGluc3BlY3RvcklETC5vdXRwdXQKLWFkZEV4dHJh
Q29tcGlsZXIoaW5zcGVjdG9ySURMKQogCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5vdXRwdXQgPSBn
ZW5lcmF0ZWQvSW5zcGVjdG9yQmFja2VuZFN0dWIucXJjCiBpbnNwZWN0b3JCYWNrZW5kU3R1Yi5p
bnB1dCA9IElOU1BFQ1RPUl9CQUNLRU5EX1NUVUJfUVJDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCA0OTZjYzI3YmFkYjA3ZDgwZWQ5Y2U0YzMxMTRlN2Y4NDNhYzViZTRhLi5jYjNk
NjVkMjhkYzU3NmJiOGQwZDJmNDE2ZGE1ZGU0OTVlZjkwYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTkwMCwxNSArOTAwLDEyIEBAIGFsbCA6IEluc3BlY3RvclByb3RvY29s
VmVyc2lvbi5oCiBJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCA6IEluc3BlY3Rvci5qc29uIGlu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCXB5dGhvbiAkKFdl
YkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAtbyBJ
bnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3Iu
anNvbgogCi1JbnNwZWN0b3IuaWRsIDogSW5zcGVjdG9yLmpzb24gaW5zcGVjdG9yL2dlbmVyYXRl
LWluc3BlY3Rvci1pZGwKLQlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5z
cGVjdG9yLWlkbCAtbyBJbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uCi0KIGFsbCA6IEluc3BlY3RvckZyb250ZW5kLmgKIAotSU5TUEVDVE9SX0dFTkVSQVRP
Ul9TQ1JJUFRTID0gJChHRU5FUkFURV9TQ1JJUFRTKSBpbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKIAotSW5zcGVjdG9yRnJvbnRlbmQuaCA6IEluc3BlY3Rvci5p
ZGwgJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0JJChjYWxsIGdlbmVyYXRvcl9zY3Jp
cHQsICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKSkgLS1vdXRwdXREaXIgLiAtLWRlZmlu
ZXMgIiQoRkVBVFVSRV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIiAtLWdlbmVyYXRvciBJ
bnNwZWN0b3IgJDwKK0luc3BlY3RvckZyb250ZW5kLmggOiBJbnNwZWN0b3IuanNvbiAkKElOU1BF
Q1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKKwlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
biAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLWRlZmluZXMgIiQoRkVBVFVS
RV9ERUZJTkVTKSBMQU5HVUFHRV9KQVZBU0NSSVBUIgogCiBhbGwgOiBJbmplY3RlZFNjcmlwdFNv
dXJjZS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMGQ3YTFmMGI0NTFjZjM1ZjYzNWQzNTJh
OWQ0M2EwM2M2Y2M1MTU4ZS4uMmIxOGRhODQ2ZDIxN2JhNjMyNTI1Y2I4NDk1NjUxN2U1MzhhYTQw
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTY5MywxMSArNjkzLDggQEAgRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9YTUxOYW1lcy5jcHAgRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9YTUxOYW1lcy5o
OiAkKFdlYkNvcmUKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yUHJvdG9jb2xWZXJz
aW9uLmggOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUpL2lu
c3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbgogCSQoUFlUSE9OKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtdmVyc2lvbiAt
byAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KIAotRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9J
bnNwZWN0b3IuaWRsIDogJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJD
b3JlKS9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotCSQoUFlUSE9OKSAkKFdlYkNv
cmUpL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsIC1vICQoR0VOU09VUkNFU19XRUJD
T1JFKS9JbnNwZWN0b3IuaWRsICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCi0K
LURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOiBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3Rvci5pZGwgJChTQ1JJUFRTX0JJTkRJTkdTKSAk
KFdlYkNvcmUpL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCi0JJChBTV9WX0dF
TikkKFBFUkwpIC1JJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzIC1JJChXZWJDb3JlKS9pbnNw
ZWN0b3IgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsICQo
SURMX1BBVEg6JT0tLWluY2x1ZGUgIiUiKSAtLW91dHB1dERpciAiJChHRU5TT1VSQ0VTX1dFQkNP
UkUpIiAtLWRlZmluZXMgIkxBTkdVQUdFX0pBVkFTQ1JJUFQ9MSAkKEZFQVRVUkVfREVGSU5FUyki
IC0tZ2VuZXJhdG9yIEluc3BlY3RvciAkPAorRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHA6ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5q
c29uICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwkkKFBZ
VEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAkPCAt
LW91dHB1dF9oX2RpciAkKEdFTlNPVVJDRVNfV0VCQ09SRSkgLS1vdXRwdXRfY3BwX2RpciAkKEdF
TlNPVVJDRVNfV0VCQ09SRSkgLS1kZWZpbmVzICJMQU5HVUFHRV9KQVZBU0NSSVBUPTEgJChGRUFU
VVJFX0RFRklORVMpIgogRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5o
OiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcAogRGVyaXZlZFNv
dXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHA6IERlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVj
dG9yQmFja2VuZFN0dWIuanM6IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2Vi
Q29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBk
NjU1ZDE4M2NmOWYxNmYxMmUxOTIyMzA3ZmE1ZTc5MTExZDgzMzZmLi43NzMwMTY3NTYxZmQzNWVm
NTViYzhhODFmZmY0OWEyNjhjNDBlZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cApAQCAtMzM2LDE3ICszMzYsMjYgQEAKICAgfSwKICAgJ3RhcmdldHMnOiBbCiAgICAg
ewotICAgICAgJ3RhcmdldF9uYW1lJzogJ2dlbmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJz
aW9uJywKKyAgICAgICd0YXJnZXRfbmFtZSc6ICdpbnNwZWN0b3JfcHJvdG9jb2xfc291cmNlcycs
CiAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAg
ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicKKyAgICAgIF0sCiAgICAgICAn
YWN0aW9ucyc6IFsKLSAgICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJh
dGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24nLAorICAgICAgICB7CisgICAgICAgICAgJ2FjdGlv
bl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xTb3VyY2VzJywKICAgICAgICAgICAn
aW5wdXRzJzogWwotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtdmVyc2lvbicsCisgICAgICAgICAgICAjIEZpcnN0IGlucHV0LiBJdCBzdGFuZHMg
Zm9yIHB5dGhvbiBzY3JpcHQgaW4gYWN0aW9uIGJlbG93LgorICAgICAgICAgICAgJy4uL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5JywKKyAgICAgICAgICAgICMgT3RoZXIgaW5w
dXRzLiBUaGV5IGdvIGFzIGFyZ3VtZW50cyB0byB0aGUgcHl0aG9uIHNjcmlwdC4KICAgICAgICAg
ICAgICcuLi9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAg
ICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2Via2l0L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oJywKKyAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgnLAorICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVE
SUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuY3BwJywKKyAgICAgICAgICAgICc8
KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yRnJvbnRlbmQuaCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3JC
YWNrZW5kU3R1Yi5qcycsCiAgICAgICAgICAgXSwKICAgICAgICAgICAndmFyaWFibGVzJzogewog
ICAgICAgICAgICAgJ2dlbmVyYXRvcl9pbmNsdWRlX2RpcnMnOiBbCkBAIC0zNTQsMjggKzM2Mywy
NyBAQAogICAgICAgICAgIH0sCiAgICAgICAgICAgJ2FjdGlvbic6IFsKICAgICAgICAgICAgICdw
eXRob24nLAotICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtdmVyc2lvbicsCi0gICAgICAgICAgICAnLW8nLAotICAgICAgICAgICAgJzxAKF9vdXRw
dXRzKScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknCisgICAgICAgICAgICAnPEAoX2lucHV0
cyknLAorICAgICAgICAgICAgJy0tb3V0cHV0X2hfZGlyJywgJzwoU0hBUkVEX0lOVEVSTUVESUFU
RV9ESVIpL3dlYmtpdCcsCisgICAgICAgICAgICAnLS1vdXRwdXRfY3BwX2RpcicsICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKKyAgICAgICAgICAgICctLWRlZmluZXMnLCAn
PChmZWF0dXJlX2RlZmluZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAogICAgICAgICAgIF0sCi0g
ICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHByb3RvY29sIGZvciBiYWNr
d2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBmaWxlJywKLSAgICAgICAg
fQorICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuanNvbicsCisgICAgICAgIH0sCiAgICAgICBdCiAgICAgfSwK
ICAgICB7Ci0gICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX2lkbCcsCisgICAgICAndGFy
Z2V0X25hbWUnOiAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nLAogICAgICAg
J3R5cGUnOiAnbm9uZScsCiAgICAgICAnYWN0aW9ucyc6IFsKLQotICAgICAgICB7Ci0gICAgICAg
ICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJvdG9jb2xJREwnLAorICAgICAg
ICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29s
VmVyc2lvbicsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAgICAgICAgICAgICcuLi9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICcuLi9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24nLAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ291dHB1dHMn
OiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2ViY29yZS9JbnNw
ZWN0b3IuaWRsJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJr
aXQvSW5zcGVjdG9yUHJvdG9jb2xWZXJzaW9uLmgnLAogICAgICAgICAgIF0sCiAgICAgICAgICAg
J3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdnZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpA
QCAtMzgzLDY1ICszOTEsMTYgQEAKICAgICAgICAgICB9LAogICAgICAgICAgICdhY3Rpb24nOiBb
CiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLWlkbCcsCisgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC12ZXJzaW9uJywKICAgICAgICAgICAgICctbycsCiAgICAgICAgICAg
ICAnPEAoX291dHB1dHMpJywKICAgICAgICAgICAgICc8QChfaW5wdXRzKScKICAgICAgICAgICBd
LAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcgSW5zcGVjdG9yIHByb3RvY29sIHNv
dXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKKyAgICAgICAgICAnbWVzc2FnZSc6ICdWYWxpZGF0
ZSBpbnNwZWN0b3IgcHJvdG9jb2wgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFuZCBnZW5l
cmF0ZSB2ZXJzaW9uIGZpbGUnLAogICAgICAgICB9CiAgICAgICBdCiAgICAgfSwKICAgICB7Ci0g
ICAgICAndGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAotICAgICAg
J3R5cGUnOiAnbm9uZScsCi0gICAgICAnZGVwZW5kZW5jaWVzJzogWwotICAgICAgICAnaW5zcGVj
dG9yX2lkbCcsCi0gICAgICAgICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicK
LSAgICAgIF0sCi0gICAgICAnYWN0aW9ucyc6IFsKLSAgICAgICAgewotICAgICAgICAgICdhY3Rp
b25fbmFtZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCi0gICAgICAgICAg
IyBUaGUgc2Vjb25kIGlucHV0IGl0ZW0gd2lsbCBiZSB1c2VkIGFzIGl0ZW0gbmFtZSBpbiB2Y3By
b2ouCi0gICAgICAgICAgIyBJdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IEluc3BlY3Rvci5pZGwg
dGhlcmUgYmVjYXVzZQotICAgICAgICAgICMgYWxsIGlkbCBmaWxlcyBhcmUgbWFya2luZyBhcyBl
eGNsdWRlZCBieSBneXAgZ2VuZXJhdG9yLgotICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAg
ICAgICAnLi4vYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCcsCi0gICAgICAg
ICAgICAnLi4vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0nLAotICAgICAgICAg
ICAgJy4uL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbScsCi0gICAgICAgICAgICAn
Li4vYmluZGluZ3Mvc2NyaXB0cy9JRExQYXJzZXIucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRp
bmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3Rvci5pZGwnLAotICAgICAgICAgIF0sCi0gICAg
ICAgICAgJ291dHB1dHMnOiBbCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAotICAgICAgICAgICAg
JzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIu
anMnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCi0gICAgICAgICAgICAn
PChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAot
ICAgICAgICAgIF0sCi0gICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKLSAgICAgICAgICAgICdnZW5l
cmF0b3JfaW5jbHVkZV9kaXJzJzogWwotICAgICAgICAgICAgXSwKLSAgICAgICAgICB9LAotICAg
ICAgICAgICdhY3Rpb24nOiBbCi0gICAgICAgICAgICAncHl0aG9uJywKLSAgICAgICAgICAgICdz
Y3JpcHRzL3J1bGVfYmluZGluZy5weScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJ
QVRFX0RJUikvd2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJjb3JlJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1F
RElBVEVfRElSKS93ZWJraXQnLAotICAgICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICc8QChf
aW5wdXRzKScsCi0gICAgICAgICAgICAnLS0nLAotICAgICAgICAgICAgJy0tZGVmaW5lcycsICc8
KGZlYXR1cmVfZGVmaW5lcykgTEFOR1VBR0VfSkFWQVNDUklQVCcsCi0gICAgICAgICAgICAnLS1n
ZW5lcmF0b3InLCAnSW5zcGVjdG9yJywKLSAgICAgICAgICAgICc8QChnZW5lcmF0b3JfaW5jbHVk
ZV9kaXJzKScKLSAgICAgICAgICBdLAotICAgICAgICAgICdtZXNzYWdlJzogJ0dlbmVyYXRpbmcg
SW5zcGVjdG9yIHByb3RvY29sIHNvdXJjZXMgZnJvbSBJbnNwZWN0b3IuaWRsJywKLSAgICAgICAg
fSwKLSAgICAgIF0KLSAgICB9LAotICAgIHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdpbmplY3Rl
ZF9zY3JpcHRfc291cmNlJywKICAgICAgICd0eXBlJzogJ25vbmUnLAogICAgICAgJ2FjdGlvbnMn
OiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbSBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmUyMTgzYzFmMjljNDY3OTU4
OTI2MDUwY2JkOTg0Y2E5MzljYTE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCisrKyAvZGV2L251bGwKQEAgLTEsMTIzNSArMCwwIEBACi0jIENvcHlyaWdodCAoYykg
MjAxMCBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0
IGNhbiBiZQotIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotCi1wYWNrYWdlIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3I7Ci0KLXVzZSBzdHJpY3Q7Ci0KLXVzZSBDbGFzczo6U3RydWN0OwotdXNl
IEZpbGU6OnN0YXQ7Ci0KLW15ICV0eXBlVHJhbnNmb3JtOwotJHR5cGVUcmFuc2Zvcm17IkFwcGxp
Y2F0aW9uQ2FjaGUifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2FwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5z
cGVjdG9yQ1NTQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwK
LSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2Nzc0FnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiQ29uc29sZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiLAotICAgICJkb21h
aW5BY2Nlc3NvciIgPT4gIm1fY29uc29sZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFn
ZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50IiwKLSAgICAiaGVh
ZGVyIiA9PiAiSW5zcGVjdG9yUGFnZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1fcGFnZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGVidWdnZXIifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvckRlYnVnZ2VyQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGVi
dWdnZXJBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTURlYnVnZ2VyIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9
PiAiSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2RvbURlYnVnZ2VyQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJEYXRhYmFzZSJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9
PiAibV9kYXRhYmFzZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7Ci0gICAg
ImZvcndhcmQiID0+ICJJbnNwZWN0b3JET01BZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvckRPTUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tQWdlbnQiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJET01TdG9yYWdlIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21TdG9yYWdlQWdl
bnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJGaWxlU3lzdGVtIn0gPSB7Ci0gICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JGaWxlU3lzdGVtQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JGaWxlU3lzdGVtQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9maWxlU3lz
dGVtQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3IifSA9IHsKLSAgICAiZm9y
d2FyZCIgPT4gIkluc3BlY3RvckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQWdl
bnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JBZ2VudCIsCi19Owot
JHR5cGVUcmFuc2Zvcm17Ik5ldHdvcmsifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
clJlc291cmNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fcmVzb3VyY2VBZ2VudCIsCi19OwotJHR5
cGVUcmFuc2Zvcm17IlByb2ZpbGVyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JQ
cm9maWxlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3Byb2ZpbGVyQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJSdW50aW1lIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSdW50
aW1lQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCIsCi0g
ICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9ydW50aW1lQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNm
b3JteyJUaW1lbGluZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV90aW1lbGluZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiV29ya2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvcldvcmtlckFnZW50LmgiLAotICAgICJkb21haW5B
Y2Nlc3NvciIgPT4gIm1fd29ya2VyQWdlbnQiLAotfTsKLQotJHR5cGVUcmFuc2Zvcm17IkZyb250
ZW5kIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JGcm9udGVuZCIsCi0gICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQYXNz
UmVmUHRyIn0gPSB7Ci0gICAgImZvcndhcmRIZWFkZXIiID0+ICJ3dGYvUGFzc1JlZlB0ci5oIiwK
LX07Ci0kdHlwZVRyYW5zZm9ybXsiUmVmQ291bnRlZCJ9ID0gewotICAgICJmb3J3YXJkSGVhZGVy
IiA9PiAid3RmL1JlZkNvdW50ZWQuaCIsCi19OwotJHR5cGVUcmFuc2Zvcm17Ikluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJPYmplY3QifSA9IHsKLSAgICAicGFyYW0iID0+ICJQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JPYmplY3QiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiT2JqZWN0IiwKLSAg
ICAiSlNUeXBlIiA9PiAib2JqZWN0IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiQXJyYXkifSA9IHsK
LSAgICAicGFyYW0iID0+ICJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgInZhcmlh
YmxlIiA9PiAiUmVmUHRyPEluc3BlY3RvckFycmF5PiIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4g
Ikluc3BlY3RvckFycmF5OjpjcmVhdGUoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JB
cnJheSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJBcnJheSIsCi0gICAgIkpTVHlwZSIgPT4gIm9iamVjdCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IlZhbHVlIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4iLAotICAg
ICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpIiwKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvclZhbHVlIiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yVmFsdWVz
LmgiLAotICAgICJKU09OVHlwZSIgPT4gIlZhbHVlIiwKLSAgICAiSlNUeXBlIiA9PiAiIiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiU3RyaW5nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAiY29uc3QgU3Ry
aW5nJiIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgU3RyaW5nKiBjb25zdCIsCi0g
ICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJT
dHJpbmciLAotICAgICJyZXR1cm4iID0+ICJTdHJpbmciLAotICAgICJkZWZhdWx0VmFsdWUiID0+
ICJcIlwiIiwKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gIlBsYXRmb3JtU3RyaW5nLmgiLAotICAg
ICJoZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiSlNPTlR5cGUiID0+ICJTdHJp
bmciLAotICAgICJKU1R5cGUiID0+ICJzdHJpbmciCi19OwotJHR5cGVUcmFuc2Zvcm17Imxvbmci
fSA9IHsKLSAgICAicGFyYW0iID0+ICJsb25nIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJj
b25zdCBsb25nKiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwK
LSAgICAidmFyaWFibGUiID0+ICJsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMCIsCi0g
ICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIg
PT4gIk51bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9y
bXsiaW50In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiaW50IiwKLSAgICAib3B0aW9uYWxfcGFyYW0i
ID0+ICJjb25zdCBpbnQqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSIgPT4gImludCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAi
LAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5
cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFu
c2Zvcm17InVuc2lnbmVkIGxvbmcifSA9IHsKLSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBsb25n
IiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCB1bnNpZ25lZCBsb25nKiBjb25zdCIs
Ci0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+
ICJ1bnNpZ25lZCBsb25nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3
YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1i
ZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17InVuc2ln
bmVkIGludCJ9ID0gewotICAgICJwYXJhbSIgPT4gInVuc2lnbmVkIGludCIsCi0gICAgIm9wdGlv
bmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgaW50KiBjb25zdCIsCi0gICAgIm9wdGlvbmFs
X3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJ1bnNpZ25lZCBpbnQi
LAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwdSIsCi0gICAgImZvcndhcmQiID0+ICIiLAotICAg
ICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51bWJlciIsCi0gICAgIkpTVHlw
ZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiZG91YmxlIn0gPSB7Ci0gICAgInBh
cmFtIiA9PiAiZG91YmxlIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBkb3VibGUq
IGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4gIioiLAotICAgICJ2YXJp
YWJsZSIgPT4gImRvdWJsZSIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAuMCIsCi0gICAgImZv
cndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIk51
bWJlciIsCi0gICAgIkpTVHlwZSIgPT4gIm51bWJlciIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiYm9v
bGVhbiJ9ID0gewotICAgICJwYXJhbSIgPT4gImJvb2wiLAotICAgICJvcHRpb25hbF9wYXJhbSIg
PT4gImNvbnN0IGJvb2wqIGNvbnN0IiwKLSAgICAib3B0aW9uYWxfdmFsdWVBY2Nlc3NvciIgPT4g
IioiLAotICAgICJ2YXJpYWJsZSI9PiAiYm9vbCIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gImZh
bHNlIiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpT
T05UeXBlIiA9PiAiQm9vbGVhbiIsCi0gICAgIkpTVHlwZSIgPT4gImJvb2xlYW4iCi19OwotJHR5
cGVUcmFuc2Zvcm17InZvaWQifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0gICAgImhlYWRl
ciIgPT4gIiIKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVmVjdG9yIn0gPSB7Ci0gICAgImhlYWRlciIg
PT4gInd0Zi9WZWN0b3IuaCIKLX07Ci0KLSMgRGVmYXVsdCBMaWNlbnNlIFRlbXBsYXRlcwotCi1t
eSAkbGljZW5zZVRlbXBsYXRlID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhl
IENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
Ci0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotRU9GCi0KLW15ICRjb2RlR2VuZXJhdG9y
OwotbXkgJG91dHB1dERpcjsKLW15ICRvdXRwdXRIZWFkZXJzRGlyOwotbXkgJHdyaXRlRGVwZW5k
ZW5jaWVzOwotbXkgJHZlcmJvc2U7Ci0KLW15ICRuYW1lc3BhY2U7Ci0KLW15ICRiYWNrZW5kQ2xh
c3NOYW1lOwotbXkgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uOwotbXkgJGJhY2tlbmRKU1N0dWJO
YW1lOwotbXkgJWJhY2tlbmRUeXBlczsKLW15IEBiYWNrZW5kTWV0aG9kczsKLW15IEBiYWNrZW5k
TWV0aG9kc0ltcGw7Ci1teSAlYmFja2VuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkYmFja2VuZENv
bnN0cnVjdG9yOwotbXkgQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9uczsKLW15IEBiYWNrZW5k
Q29uc3RhbnREZWZpbml0aW9uczsKLW15IEBiYWNrZW5kRm9vdGVyOwotbXkgQGJhY2tlbmRKU1N0
dWJzOwotbXkgQGJhY2tlbmRKU0V2ZW50czsKLW15ICViYWNrZW5kRG9tYWluczsKLQotbXkgJGZy
b250ZW5kQ2xhc3NOYW1lOwotbXkgJWZyb250ZW5kVHlwZXM7Ci1teSBAZnJvbnRlbmRNZXRob2Rz
OwotbXkgQGZyb250ZW5kQWdlbnRGaWVsZHM7Ci1teSBAZnJvbnRlbmRNZXRob2RzSW1wbDsKLW15
ICVmcm9udGVuZE1ldGhvZFNpZ25hdHVyZXM7Ci1teSAkZnJvbnRlbmRDb25zdHJ1Y3RvcjsKLW15
IEBmcm9udGVuZENvbnN0YW50RGVjbGFyYXRpb25zOwotbXkgQGZyb250ZW5kQ29uc3RhbnREZWZp
bml0aW9uczsKLW15IEBmcm9udGVuZEZvb3RlcjsKLW15IEBmcm9udGVuZERvbWFpbnM7Ci0KLSMg
RGVmYXVsdCBjb25zdHJ1Y3Rvcgotc3ViIG5ldwotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsK
LSAgICBteSAkcmVmZXJlbmNlID0geyB9OwotCi0gICAgJGNvZGVHZW5lcmF0b3IgPSBzaGlmdDsK
LSAgICAkb3V0cHV0RGlyID0gc2hpZnQ7Ci0gICAgJG91dHB1dEhlYWRlcnNEaXIgPSBzaGlmdDsK
LSAgICBzaGlmdDsgIyAkdXNlTGF5ZXJPblRvcAotICAgIHNoaWZ0OyAjICRwcmVwcm9jZXNzb3IK
LSAgICAkd3JpdGVEZXBlbmRlbmNpZXMgPSBzaGlmdDsKLSAgICAkdmVyYm9zZSA9IHNoaWZ0Owot
Ci0gICAgYmxlc3MoJHJlZmVyZW5jZSwgJG9iamVjdCk7Ci0gICAgcmV0dXJuICRyZWZlcmVuY2U7
Ci19Ci0KLSMgUGFyYW1zOiAnaWRsRG9jdW1lbnQnIHN0cnVjdAotc3ViIEdlbmVyYXRlTW9kdWxl
Ci17Ci0gICAgbXkgJG9iamVjdCA9IHNoaWZ0OwotICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0Owot
Ci0gICAgJG5hbWVzcGFjZSA9ICRkYXRhTm9kZS0+bW9kdWxlOwotICAgICRuYW1lc3BhY2UgPX4g
cy9jb3JlL1dlYkNvcmUvOwotCi0gICAgJGZyb250ZW5kQ2xhc3NOYW1lID0gIkluc3BlY3RvckZy
b250ZW5kIjsKLSAgICAkZnJvbnRlbmRDb25zdHJ1Y3RvciA9ICIgICAgJHtmcm9udGVuZENsYXNz
TmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7IjsKLSAgICBwdXNoKEBmcm9udGVuZEZv
b3RlciwgInByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICAk
ZnJvbnRlbmRUeXBlc3siU3RyaW5nIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwifSA9IDE7Ci0gICAgJGZyb250ZW5kVHlwZXN7IlBhc3NSZWZQdHIi
fSA9IDE7Ci0KLSAgICAkYmFja2VuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciI7Ci0gICAgJGJhY2tlbmRDbGFzc0RlY2xhcmF0aW9uID0gIkluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4i
OwotICAgICRiYWNrZW5kSlNTdHViTmFtZSA9ICJJbnNwZWN0b3JCYWNrZW5kU3R1YiI7Ci0gICAg
JGJhY2tlbmRUeXBlc3siSW5zcGVjdG9yIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ikluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJQYXNzUmVmUHRy
In0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7IlJlZkNvdW50ZWQifSA9IDE7Ci0gICAgJGJhY2tl
bmRUeXBlc3siT2JqZWN0In0gPSAxOwotfQotCi0jIFBhcmFtczogJ2lkbERvY3VtZW50JyBzdHJ1
Y3QKLXN1YiBHZW5lcmF0ZUludGVyZmFjZQotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLSAg
ICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgJGRlZmluZXMgPSBzaGlmdDsKLQotICAg
IG15ICVhZ2VudCA9ICgKLSAgICAgICAgbWV0aG9kRGVjbGFyYXRpb25zID0+IFtdLAotICAgICAg
ICBtZXRob2RTaWduYXR1cmVzID0+IHt9Ci0gICAgKTsKLSAgICBnZW5lcmF0ZUZ1bmN0aW9ucygk
aW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICBpZiAoQHskYWdlbnR7bWV0aG9kRGVjbGFyYXRpb25z
fX0pIHsKLSAgICAgICAgcHVzaChAZnJvbnRlbmREb21haW5zLCAkaW50ZXJmYWNlLT5uYW1lKTsK
LSAgICAgICAgZ2VuZXJhdGVBZ2VudERlY2xhcmF0aW9uKCRpbnRlcmZhY2UsIFwlYWdlbnQpOwot
ICAgIH0KLX0KLQotc3ViIGdlbmVyYXRlQWdlbnREZWNsYXJhdGlvbgotewotICAgIG15ICRpbnRl
cmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLSAgICBteSAkYWdlbnROYW1l
ID0gJGludGVyZmFjZS0+bmFtZTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgY2xh
c3MgJHthZ2VudE5hbWV9IHsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgcHVi
bGljOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgJHthZ2VudE5hbWV9
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Iik7
Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCBAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319KTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgIHZvaWQgc2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9Iik7Ci0gICAgcHVzaChAZnJvbnRl
bmRNZXRob2RzLCAiICAgIHByaXZhdGU6Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAi
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICB9OyIpOwotICAgIHB1c2go
QGZyb250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgbXkgJGdldHRlck5hbWUgPSBsYygkYWdlbnRO
YW1lKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgJHthZ2VudE5hbWV9KiAke2dl
dHRlck5hbWV9KCkgeyByZXR1cm4gJm1fJHtnZXR0ZXJOYW1lfTsgfSIpOwotICAgIHB1c2goQGZy
b250ZW5kTWV0aG9kcywgIiIpOwotCi0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICIgICAgJHth
Z2VudE5hbWV9IG1fJHtnZXR0ZXJOYW1lfTsiKTsKLQotICAgIHB1c2goQGZyb250ZW5kQWdlbnRG
aWVsZHMsICJtXyR7Z2V0dGVyTmFtZX0iKTsKLX0KLQotc3ViIGdlbmVyYXRlRnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwKLXsKLSAgICBteSBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci0gICAgcHVz
aChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIke2Zyb250ZW5kQ2xhc3NOYW1lfTo6JHtmcm9u
dGVuZENsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgOiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIik7Ci0g
ICAgZm9yZWFjaCBteSAkYWdlbnRGaWVsZCAoQGZyb250ZW5kQWdlbnRGaWVsZHMpIHsKLSAgICAg
ICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICIgICAgLCAke2FnZW50RmllbGR9KGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICB9Ci0gICAgcHVzaChAZnJvbnRlbmRDb25z
dHJ1Y3RvckltcGwsICJ7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGwsICJ9
Iik7Ci0gICAgcmV0dXJuIEBmcm9udGVuZENvbnN0cnVjdG9ySW1wbDsKLX0KLQotc3ViIGdlbmVy
YXRlRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRhZ2Vu
dCA9IHNoaWZ0OwotCi0gICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGludGVyZmFjZS0+ZnVu
Y3Rpb25zfSkgewotICAgICAgICBpZiAoJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0
cmlidXRlcy0+eyJldmVudCJ9KSB7Ci0gICAgICAgICAgICBnZW5lcmF0ZUZyb250ZW5kRnVuY3Rp
b24oJGludGVyZmFjZSwgJGZ1bmN0aW9uLCAkYWdlbnQpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZ2VuZXJhdGVCYWNrZW5kRnVuY3Rpb24oJGludGVyZmFjZSwgJGZ1bmN0aW9uKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zKCRp
bnRlcmZhY2UpOwotICAgIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzKCRpbnRlcmZhY2UpOwot
fQotCi1zdWIgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9
IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNoaWZ0OwotICAgIG15ICRhZ2VudCA9IHNoaWZ0
OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwot
Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgQGFyZ3NGaWx0ZXJl
ZCA9IGdyZXAoJF8tPmRpcmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9
KTsgIyBqdXN0IGtlZXAgb25seSBvdXQgcGFyYW1ldGVycyBmb3IgZnJvbnRlbmQgaW50ZXJmYWNl
LgotICAgIG1hcCgkZnJvbnRlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAYXJnc0ZpbHRlcmVkKTsg
IyByZWdpc3RlciByZXF1aXJlZCB0eXBlcy4KLSAgICBteSAkYXJndW1lbnRzID0gam9pbigiLCAi
LCBtYXAocGFyYW1UeXBlVHJhaXRzKCRfLCAicGFyYW0iKSAuICIgIiAuICRfLT5uYW1lLCBAYXJn
c0ZpbHRlcmVkKSk7ICMgcHJlcGFyZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uIHNpZ25hdHVyZS4K
LQotICAgIG15ICRzaWduYXR1cmUgPSAiICAgICAgICB2b2lkICR7ZnVuY3Rpb25OYW1lfSgke2Fy
Z3VtZW50c30pOyI7Ci0gICAgISRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVy
ZX0gfHwgZGllICJEdXBsaWNhdGUgZnJvbnRlbmQgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBz
aWduYXR1cmUgJyRzaWduYXR1cmUnLiI7Ci0gICAgJGFnZW50LT57bWV0aG9kU2lnbmF0dXJlc30t
Pnskc2lnbmF0dXJlfSA9IDE7Ci0gICAgcHVzaChAeyRhZ2VudC0+e21ldGhvZERlY2xhcmF0aW9u
c319LCAkc2lnbmF0dXJlKTsKLQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBwdXNoKEBmdW5jdGlv
biwgInZvaWQgJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZG9tYWlufTo6JHtmdW5jdGlvbk5hbWV9
KCR7YXJndW1lbnRzfSkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgInsiKTsKLSAgICBwdXNoKEBm
dW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiAke2Z1bmN0aW9uTmFtZX1NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRTdHJpbmcoXCJtZXRob2RcIiwgXCIkZG9t
YWluLiRmdW5jdGlvbk5hbWVcIik7Iik7Ci0gICAgaWYgKHNjYWxhcihAYXJnc0ZpbHRlcmVkKSkg
ewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwotCi0gICAgICAgIGZv
cmVhY2ggbXkgJHBhcmFtZXRlciAoQGFyZ3NGaWx0ZXJlZCkgewotICAgICAgICAgICAgbXkgJG9w
dGlvbmFsID0gJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPyAi
aWYgKCIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIilcbiAgICAgICAgIiA6ICIiOwotICAgICAgICAg
ICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAuICRvcHRpb25hbCAuICJwYXJhbXNPYmplY3QtPnNl
dCIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgIkpTT05UeXBlIikgLiAiKFwiIiAuICRw
YXJhbWV0ZXItPm5hbWUgLiAiXCIsICIgLiBwYXJhbVR5cGVUcmFpdHMoJHBhcmFtZXRlciwgInZh
bHVlQWNjZXNzb3IiKSAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAgfQotICAg
ICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAke2Z1bmN0aW9uTmFtZX1NZXNzYWdlLT5zZXRPYmpl
Y3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTsiKTsKLSAgICB9Ci0gICAgcHVzaChAZnVuY3Rp
b24sICIgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VU
b0Zyb250ZW5kKCR7ZnVuY3Rpb25OYW1lfU1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsiKTsKLSAg
ICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIHB1
c2goQGZyb250ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBjYW1lbENhc2UK
LXsKLSAgICBteSAkdmFsdWUgPSBzaGlmdDsKLSAgICAkdmFsdWUgPX4gcy9cYihcdykvXFUkMS9n
OyAjIG1ha2UgYSBjYW1lbC1jYXNlIG5hbWUgZm9yIHR5cGUgbmFtZQotICAgICR2YWx1ZSA9fiBz
LyAvL2c7Ci0gICAgcmV0dXJuICR2YWx1ZTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZEZ1bmN0
aW9uCi17Ci0gICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15ICRmdW5jdGlvbiA9IHNo
aWZ0OwotCi0gICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1l
OwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+bmFtZSAu
ICJfIiAuICRmdW5jdGlvbk5hbWU7Ci0gICAgbXkgJGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVE
b3QgPSAkaW50ZXJmYWNlLT5uYW1lIC4gIi4iIC4gJGZ1bmN0aW9uTmFtZTsKLQotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywgIiAgICAgICAgayR7ZnVsbFF1YWxpZmllZEZ1
bmN0aW9uTmFtZX1DbWQsIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMs
ICIgICAgXCIke2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWVEb3R9XCIsIik7Ci0KLSAgICBtYXAo
JGJhY2tlbmRUeXBlc3skXy0+dHlwZX0gPSAxLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOyAj
IHJlZ2lzdGVyIHJlcXVpcmVkIHR5cGVzCi0gICAgbXkgQGluQXJncyA9IGdyZXAoJF8tPmRpcmVj
dGlvbiBlcSAiaW4iLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pOwotICAgIG15IEBvdXRBcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwotICAgIAotICAgIG15ICRzaWduYXR1cmUgPSAiICAgIHZvaWQgJHtmdWxsUXVhbGlmaWVkRnVu
Y3Rpb25OYW1lfShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiByZXF1ZXN0TWVzc2FnZU9i
amVjdCk7IjsKLSAgICAhJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gfHwg
ZGllICJEdXBsaWNhdGUgZnVuY3Rpb24gd2FzIGRldGVjdGVkIGZvciBzaWduYXR1cmUgJyRzaWdu
YXR1cmUnLiI7Ci0gICAgJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyR7c2lnbmF0dXJlfX0gPSAi
JGZ1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWUiOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzLCAk
e3NpZ25hdHVyZX0pOwotCi0gICAgbXkgQGZ1bmN0aW9uOwotICAgIG15ICRyZXF1ZXN0TWVzc2Fn
ZU9iamVjdCA9IHNjYWxhcihAaW5BcmdzKSA/ICIgcmVxdWVzdE1lc3NhZ2VPYmplY3QiIDogIiI7
Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7YmFja2VuZENsYXNzTmFtZX06OiR7ZnVsbFF1
YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCokcmVxdWVz
dE1lc3NhZ2VPYmplY3QpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0g
ICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7Ci0gICAgbXkgJGRvbWFpbkFjY2Vzc29y
ID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZG9tYWluQWNjZXNzb3IiKTsKLSAgICAkYmFja2VuZFR5
cGVzeyRkb21haW59ID0gMTsKLSAgICAkYmFja2VuZERvbWFpbnN7JGRvbWFpbn0gPSAxOwotICAg
IHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICghJGRvbWFpbkFjY2Vzc29yKSIpOwotICAgIHB1c2go
QGZ1bmN0aW9uLCAiICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhcIiRkb21haW4g
aGFuZGxlciBpcyBub3QgYXZhaWxhYmxlLlwiKTsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIp
OwotCi0gICAgIyBkZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3V0IGFyZ3VtZW50cy4KLSAg
ICBpZiAoc2NhbGFyKEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgbWFwKCIg
ICAgIiAuIHR5cGVUcmFpdHMoJF8tPnR5cGUsICJ2YXJpYWJsZSIpIC4gIiBvdXRfIiAuICRfLT5u
YW1lIC4gIiA9ICIgLiB0eXBlVHJhaXRzKCRfLT50eXBlLCAiZGVmYXVsdFZhbHVlIikgLiAiOyIs
IEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiIik7Ci0gICAgfQotICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIEVycm9yU3RyaW5nIGVycm9yOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0KLSAgICBteSAkaW5kZW50ID0gIiI7Ci0gICAgaWYgKHNjYWxhcihAaW5Bcmdz
KSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSByZXF1ZXN0TWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KFwicGFy
YW1zXCIpOyIpOwotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsiKTsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7Iik7Ci0KLSAgICAgICAgZm9yZWFjaCBteSAkcGFyYW1ldGVy
IChAaW5BcmdzKSB7Ci0gICAgICAgICAgICBteSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0g
ICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXItPnR5cGU7Ci0gICAgICAgICAgICBteSAk
dHlwZVN0cmluZyA9IGNhbWVsQ2FzZSgkcGFyYW1ldGVyLT50eXBlKTsKLSAgICAgICAgICAgIG15
ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICIwIjsKLSAgICAgICAgICAgIGlmICgkcGFyYW1ldGVy
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAgICAgICAgICAgICAgIHB1
c2goQGZ1bmN0aW9uLCAiICAgIGJvb2wgJHtuYW1lfV92YWx1ZUZvdW5kID0gZmFsc2U7Iik7Ci0g
ICAgICAgICAgICAgICAgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50ID0gIiYke25hbWV9X3ZhbHVlRm91
bmQiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgIiAu
IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIpIC4gIiBpbl8kbmFtZSA9IGdldCR0eXBlU3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgXCIkbmFtZVwiLCAkb3B0aW9uYWxGbGFnQXJndW1lbnQs
IHByb3RvY29sRXJyb3JzUHRyKTsiKTsKLSAgICAgICAgfQotICAgICAgICBwdXNoKEBmdW5jdGlv
biwgIiIpOwotICAgICAgICAkaW5kZW50ID0gIiAgICAiOwotICAgIH0KLQotICAgIG15ICRhcmdz
ID0gam9pbigiLCAiLAotICAgICAgICAgICAgICAgICAgICAoIiZlcnJvciIsCi0gICAgICAgICAg
ICAgICAgICAgICBtYXAoKCRfLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSA/Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICRfLT5uYW1lIC4gIl92YWx1ZUZvdW5kID8gJmluXyIg
LiAkXy0+bmFtZSAuICIgOiAwIiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICJpbl8iIC4g
JF8tPm5hbWUpLCBAaW5BcmdzKSwKLSAgICAgICAgICAgICAgICAgICAgIG1hcCgiJm91dF8iIC4g
JF8tPm5hbWUsIEBvdXRBcmdzKSkpOwotCi0gICAgcHVzaChAZnVuY3Rpb24sICRpbmRlbnQgLiAi
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICRp
bmRlbnQgLiAiICAgICRkb21haW5BY2Nlc3Nvci0+JGZ1bmN0aW9uTmFtZSgkYXJncyk7Iik7Ci0g
ICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOyIpOwot
ICAgIGlmIChzY2FsYXIoQG91dEFyZ3MpKSB7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IGlmICghcHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpICYmICFlcnJvci5sZW5ndGgoKSkgeyIpOwot
ICAgICAgICBmb3JlYWNoIG15ICRwYXJhbWV0ZXIgKEBvdXRBcmdzKSB7Ci0gICAgICAgICAgICBt
eSAkb2Zmc2V0ID0gIiAgICAgICAgIjsKLSAgICAgICAgICAgICMgRG9uJ3QgYWRkIG9wdGlvbmFs
IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlzICJ0cnVlIgotICAg
ICAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9
ICYmICRwYXJhbWV0ZXItPnR5cGUgZXEgImJvb2xlYW4iKSB7Ci0gICAgICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICRvZmZzZXQgLiAiaWYgKG91dF8iIC4gJHBhcmFtZXRlci0+bmFtZSAuICIp
Iik7Ci0gICAgICAgICAgICAgICAgJG9mZnNldCAuPSAiICAgICI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwgJG9mZnNldCAuICJyZXN1bHQtPnNldCIgLiB0eXBl
VHJhaXRzKCRwYXJhbWV0ZXItPnR5cGUsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVy
LT5uYW1lIC4gIlwiLCBvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKTsiKTsKLSAgICAgICAg
fQotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICB9Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1
bmN0aW9uLCAiICAgIHNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQo
XCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWRcIiwgXCIk
ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZURvdFwiKSwgcHJvdG9jb2xFcnJvcnMsIGVycm9yKTsi
KTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIn0iKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwot
ICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgQGZ1bmN0aW9uKTsKLX0KLQotc3ViIGdlbmVy
YXRlQmFja2VuZFNlbmRSZXNwb25zZQotewotICAgIG15ICRzZW5kUmVzcG9uc2UgPSA8PCAiRU9G
IjsKLQotdm9pZCAke2JhY2tlbmRDbGFzc05hbWV9OjpzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycywgRXJyb3JT
dHJpbmcgaW52b2NhdGlvbkVycm9yKQotewotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUGFyYW1z
LCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9jYXRpb25FcnJvcik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+
c2V0T2JqZWN0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0TnVt
YmVyKCJpZCIsIGNhbGxJZCk7Ci0gICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQot
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KHJlc3BvbnNlTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfSAgICAKLUVPRgotICAgIHJldHVy
biBzcGxpdCgiXG4iLCAkc2VuZFJlc3BvbnNlKTsKLX0KLQotc3ViIGdlbmVyYXRlQmFja2VuZFJl
cG9ydFByb3RvY29sRXJyb3IKLXsKLSAgICBteSAkcmVwb3J0UHJvdG9jb2xFcnJvciA9IDw8ICJF
T0YiOwotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29sRXJyb3IoY29u
c3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpIGNvbnN0Ci17Ci0gICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQs
IGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Ci19Ci0KLXZvaWQgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSBjb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3QKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rvcjxp
bnQ+LHNfY29tbW9uRXJyb3JzLCk7Ci0gICAgaWYgKCFzX2NvbW1vbkVycm9ycy5zaXplKCkpIHsK
LSAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KFBhcnNlRXJyb3IsIC0zMjcwMCk7Ci0gICAg
ICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnZhbGlkUmVxdWVzdCwgLTMyNjAwKTsKLSAgICAg
ICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KE1ldGhvZE5vdEZvdW5kLCAtMzI2MDEpOwotICAgICAg
ICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFBhcmFtcywgLTMyNjAyKTsKLSAgICAgICAg
c19jb21tb25FcnJvcnMuaW5zZXJ0KEludGVybmFsRXJyb3IsIC0zMjYwMyk7Ci0gICAgICAgIHNf
Y29tbW9uRXJyb3JzLmluc2VydChTZXJ2ZXJFcnJvciwgLTMyMDAwKTsKLSAgICB9Ci0gICAgQVNT
RVJUKGNvZGUgPj0wKTsKLSAgICBBU1NFUlQoKHVuc2lnbmVkKWNvZGUgPCBzX2NvbW1vbkVycm9y
cy5zaXplKCkpOwotICAgIEFTU0VSVChzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGVycm9yLT5zZXROdW1iZXIoImNvZGUiLCBzX2NvbW1vbkVycm9yc1tjb2RlXSk7Ci0gICAgZXJy
b3ItPnNldFN0cmluZygibWVzc2FnZSIsIGVycm9yTWVzc2FnZSk7Ci0gICAgQVNTRVJUKGVycm9y
KTsKLSAgICBpZiAoZGF0YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KCJkYXRhIiwgZGF0YSk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KCJlcnJvciIsIGVycm9yKTsKLSAgICBp
ZiAoY2FsbElkKQotICAgICAgICBtZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgKmNhbGxJZCk7Ci0g
ICAgZWxzZQotICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZSgiaWQiLCBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpKTsKLSAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwotfQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRyZXBvcnRQ
cm90b2NvbEVycm9yKTsKLX0KLQotc3ViIGdlbmVyYXRlQXJndW1lbnRHZXR0ZXJzCi17Ci0gICAg
bXkgJHR5cGUgPSBzaGlmdDsKLSAgICBteSAkanNvbiA9IHR5cGVUcmFpdHMoJHR5cGUsICJKU09O
VHlwZSIpOwotICAgIG15ICR2YXJpYWJsZSA9IHR5cGVUcmFpdHMoJHR5cGUsICJ2YXJpYWJsZSIp
OwotICAgIG15ICRkZWZhdWx0VmFsdWUgPSB0eXBlVHJhaXRzKCR0eXBlLCAiZGVmYXVsdFZhbHVl
Iik7Ci0gICAgbXkgJHJldHVybiAgPSB0eXBlVHJhaXRzKCR0eXBlLCAicmV0dXJuIikgPyB0eXBl
VHJhaXRzKCR0eXBlLCAicmV0dXJuIikgOiB0eXBlVHJhaXRzKCR0eXBlLCAicGFyYW0iKTsKLQot
ICAgIG15ICR0eXBlU3RyaW5nID0gY2FtZWxDYXNlKCR0eXBlKTsKLSAgICBwdXNoKEBiYWNrZW5k
Q29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAgc3RhdGljICRyZXR1cm4gZ2V0JHR5cGVTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsiKTsKLSAgICBteSAkZ2V0dGVy
Qm9keSA9IDw8ICJFT0YiOwotCi0kcmV0dXJuIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXQkdHlwZVN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnMpCi17Ci0g
ICAgQVNTRVJUKHByb3RvY29sRXJyb3JzKTsKLQotICAgIGlmICh2YWx1ZUZvdW5kKQotICAgICAg
ICAqdmFsdWVGb3VuZCA9IGZhbHNlOwotCi0gICAgJHZhcmlhYmxlIHZhbHVlID0gJGRlZmF1bHRW
YWx1ZTsKLQotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghdmFsdWVGb3VuZCkgewot
ICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1zIGNvbnRh
aW5lci4KLSAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnXCVz
JyB3aXRoIHR5cGUgJyRqc29uJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOwotICAgIEluc3BlY3Rvck9iamVjdDo6Y29u
c3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKLQotICAgIGlm
ICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpCi0gICAg
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICdcJXMnIHdpdGggdHlwZSAnJGpzb24nIHdhcyBub3QgZm91bmQuIiwgbmFtZS51dGY4KCku
ZGF0YSgpKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbHVl
SXRlcmF0b3ItPnNlY29uZC0+YXMkanNvbigmdmFsdWUpKQotICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICdcJXMnIGhhcyB3cm9uZyB0
eXBlLiBJdCBtdXN0IGJlICckanNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgZWxz
ZQotICAgICAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1
ZTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci1FT0YKLQotICAgIHJldHVybiBzcGxpdCgiXG4iLCAk
Z2V0dGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmREaXNwYXRjaGVyCi17Ci0gICAg
bXkgQGJvZHk7Ci0gICAgbXkgQG1hcEVudHJpZXMgPSBtYXAoIiAgICAgICAgJiR7YmFja2VuZENs
YXNzTmFtZX06OiRfLCIsIG1hcCAoJGJhY2tlbmRNZXRob2RTaWduYXR1cmVzeyRffSwgQGJhY2tl
bmRNZXRob2RzKSk7Ci0gICAgbXkgJG1hcEVudHJpZXMgPSBqb2luKCJcbiIsIEBtYXBFbnRyaWVz
KTsKLQotICAgIG15ICRiYWNrZW5kRGlzcGF0Y2hlckJvZHkgPSA8PCAiRU9GIjsKLXZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAg
IFJlZlB0cjwke2JhY2tlbmRDbGFzc05hbWV9PiBwcm90ZWN0ID0gdGhpczsKLSAgICB0eXBlZGVm
IHZvaWQgKCR7YmFja2VuZENsYXNzTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIElu
c3BlY3Rvck9iamVjdCogbWVzc2FnZU9iamVjdCk7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRGlz
cGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCApOwotICAgIGxvbmcgY2FsbElkID0gMDsKLQotICAgIGlm
IChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIENhbGxIYW5kbGVyIGhh
bmRsZXJzW10gPSB7Ci0kbWFwRW50cmllcwotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc2l6ZW9mKGNvbW1hbmROYW1lcykgLyBzaXplb2YoY29tbWFuZE5hbWVzWzBdKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRp
c3BhdGNoTWFwLmFkZChjb21tYW5kTmFtZXNbaV0sIGhhbmRsZXJzW2ldKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE1lc3NhZ2UgPSBJbnNwZWN0b3JWYWx1ZTo6
cGFyc2VKU09OKG1lc3NhZ2UpOwotICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKDAsIFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNP
TiBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOwotICAg
IGlmICghbWVzc2FnZU9iamVjdCkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRW
YWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgiaWQiKTsKLSAgICBpZiAoIWNhbGxJZFZhbHVlKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICInaWQnIHBy
b3BlcnR5IHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICghY2FsbElkVmFsdWUtPmFzTnVtYmVyKCZjYWxsSWQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoMCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11
c3QgYmUgbnVtYmVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IG1ldGhvZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0KCJtZXRob2QiKTsK
LSAgICBpZiAoIW1ldGhvZFZhbHVlKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW52YWxpZFJlcXVlc3QsICInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAgaWYgKCFt
ZXRob2RWYWx1ZS0+YXNTdHJpbmcoJm1ldGhvZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3Bl
cnR5IG11c3QgYmUgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQo
bWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgbWV0aG9kICsg
Iicgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlz
KS4qaXQtPnNlY29uZCkoY2FsbElkLCBtZXNzYWdlT2JqZWN0LmdldCgpKTsKLX0KLUVPRgotICAg
IHJldHVybiBzcGxpdCgiXG4iLCAkYmFja2VuZERpc3BhdGNoZXJCb2R5KTsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIKLXsKLSAgICBteSAkbWVzc2FnZVBhcnNlckJvZHkg
PSA8PCAiRU9GIjsKLWJvb2wgJHtiYWNrZW5kQ2xhc3NOYW1lfTo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKLXsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKLSAg
ICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW9iamVjdCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygibWV0
aG9kIiwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJG1lc3NhZ2VQYXJzZXJCb2R5KTsKLX0K
LQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRnVuY3Rpb25zCi17Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCEkXy0+c2lnbmF0dXJlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiZXZlbnQifSwgQHskaW50ZXJmYWNlLT5mdW5jdGlvbnN9KTsKLSAg
ICBteSAkZG9tYWluID0gJGludGVyZmFjZS0+bmFtZTsKLQotICAgIGZvcmVhY2ggbXkgJGZ1bmN0
aW9uIChAZnVuY3Rpb25zKSB7Ci0gICAgICAgIG15ICRuYW1lID0gJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPm5hbWU7Ci0gICAgICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImlu
IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAgICAgbXkgJGFyZ3VtZW50TmFtZXMg
PSBqb2luKAotICAgICAgICAgICAgIiwiLAotICAgICAgICAgICAgbWFwKCJcIiIgLiAkXy0+bmFt
ZSAuICJcIjogeyIKLSAgICAgICAgICAgICAgICAuICJcIm9wdGlvbmFsXCI6ICIgLiAoJF8tPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gInRydWUgIiA6ICJmYWxzZSIpIC4gIiwg
IgotICAgICAgICAgICAgICAgIC4gIlwidHlwZVwiOiBcIiIgLiB0eXBlVHJhaXRzKCRfLT50eXBl
LCAiSlNUeXBlIikgLiAiXCIiCi0gICAgICAgICAgICAgICAgLiAifSIsCi0gICAgICAgICAgICAg
ICAgIEBpbkFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFja2VuZEpTU3R1YnMsICIgICAgdGhpcy5f
cmVnaXN0ZXJEZWxlZ2F0ZSgneyIgLgotICAgICAgICAgICAgIlwibWV0aG9kXCI6IFwiJGRvbWFp
bi4kbmFtZVwiLCAiIC4KLSAgICAgICAgICAgIChzY2FsYXIoQGluQXJncykgPyAiXCJwYXJhbXNc
IjogeyRhcmd1bWVudE5hbWVzfSwgIiA6ICIiKSAuCi0gICAgICAgICAgICAiXCJpZFwiOiAwIiAu
Ci0gICAgICAgICJ9Jyk7Iik7Ci0gICAgfQotfQotCi1zdWIgY29sbGVjdEJhY2tlbmRKU1N0dWJF
dmVudHMKLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7Ci0gICAgbXkgQGZ1bmN0aW9ucyA9
IGdyZXAoJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57ImV2ZW50In0sIEB7JGlu
dGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9ICRpbnRlcmZhY2UtPm5hbWU7
Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9ucykgewotICAgICAgICBteSAk
bmFtZSA9ICRkb21haW4gLiAiLiIgLiAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICAg
ICAgbXkgQG91dEFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigiLCIsIG1h
cCgiXCIiIC4gJF8tPm5hbWUgLiAiXCIiICwgQG91dEFyZ3MpKTsKLSAgICAgICAgcHVzaChAYmFj
a2VuZEpTRXZlbnRzLCAiICAgIHRoaXMuX2V2ZW50QXJnc1tcIiIgLiAkbmFtZSAuICJcIl0gPSBb
IiAuICRhcmd1bWVudE5hbWVzIC4iXTsiKTsKLSAgICB9Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tl
bmRTdHViSlMKLXsKLSAgICBteSAkSlNSZWdpc3RlckRvbWFpbkRpc3BhdGNoZXJzID0gam9pbigi
XG4iLCBtYXAoIiAgICB0aGlzLnJlZ2lzdGVyIiAuICRfIC4gIkRpc3BhdGNoZXIgPSB0aGlzLl9y
ZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiIgLiAkXyAuIlwiKTsiLCBAZnJv
bnRlbmREb21haW5zKSk7Ci0gICAgbXkgJEpTU3R1YnMgPSBqb2luKCJcbiIsIEBiYWNrZW5kSlNT
dHVicyk7Ci0gICAgbXkgJEpTRXZlbnRzID0gam9pbigiXG4iLCBAYmFja2VuZEpTRXZlbnRzKTsK
LSAgICBteSAkaW5zcGVjdG9yQmFja2VuZFN0dWJKUyA9IDw8ICJFT0YiOwotJGxpY2Vuc2VUZW1w
bGF0ZQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1YiA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0aGlzLl9s
YXN0Q2FsbGJhY2tJZCA9IDE7Ci0gICAgdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0NvdW50ID0gMDsK
LSAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTsKLSAgICB0aGlzLl9kb21haW5EaXNwYXRjaGVycyA9
IHt9OwotICAgIHRoaXMuX2V2ZW50QXJncyA9IHt9OwotJEpTU3R1YnMKLSRKU0V2ZW50cwotJEpT
UmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycwotfQotCi1JbnNwZWN0b3JCYWNrZW5kU3R1Yi5wcm90
b3R5cGUgPSB7Ci0gICAgZHVtcEluc3BlY3RvclRpbWVTdGF0czogMCwKLSAgICBkdW1wSW5zcGVj
dG9yUHJvdG9jb2xNZXNzYWdlczogMCwKLQotICAgIF93cmFwOiBmdW5jdGlvbihjYWxsYmFjaykK
LSAgICB7Ci0gICAgICAgIHZhciBjYWxsYmFja0lkID0gdGhpcy5fbGFzdENhbGxiYWNrSWQrKzsK
LSAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2NhbGxiYWNrSWRdID0gY2FsbGJhY2sgfHwgZnVuY3Rp
b24oKSB7fTsKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrSWQ7Ci0gICAgfSwKLQotICAgIF9yZWdp
c3RlckRlbGVnYXRlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nKQotICAgIHsKLSAgICAgICAgdmFy
IGRvbWFpbkFuZEZ1bmN0aW9uID0gSlNPTi5wYXJzZShyZXF1ZXN0U3RyaW5nKS5tZXRob2Quc3Bs
aXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TmFtZSA9IGRvbWFpbkFuZEZ1bmN0aW9uWzBdICsg
IkFnZW50IjsKLSAgICAgICAgaWYgKCF3aW5kb3dbYWdlbnROYW1lXSkKLSAgICAgICAgICAgIHdp
bmRvd1thZ2VudE5hbWVdID0ge307Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFu
ZEZ1bmN0aW9uWzFdXSA9IHRoaXMuX3NlbmRNZXNzYWdlVG9CYWNrZW5kLmJpbmQodGhpcywgcmVx
dWVzdFN0cmluZyk7Ci0gICAgICAgIHdpbmRvd1thZ2VudE5hbWVdW2RvbWFpbkFuZEZ1bmN0aW9u
WzFdXVsiaW52b2tlIl0gPSB0aGlzLl9pbnZva2UuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKQot
ICAgIH0sCi0KLSAgICBfaW52b2tlOiBmdW5jdGlvbihyZXF1ZXN0U3RyaW5nLCBhcmdzLCBjYWxs
YmFjaykKLSAgICB7Ci0gICAgICAgIHZhciByZXF1ZXN0ID0gSlNPTi5wYXJzZShyZXF1ZXN0U3Ry
aW5nKTsKLSAgICAgICAgcmVxdWVzdC5wYXJhbXMgPSBhcmdzOwotICAgICAgICB0aGlzLl93cmFw
Q2FsbGJhY2tBbmRTZW5kTWVzc2FnZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwK
LQotICAgIF9zZW5kTWVzc2FnZVRvQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwotICAgICAg
ICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UoYXJncy5zaGlmdCgpKTsKLSAgICAgICAgdmFyIGNh
bGxiYWNrID0gKGFyZ3MubGVuZ3RoICYmIHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09
ICJmdW5jdGlvbiIpID8gYXJncy5wb3AoKSA6IDA7Ci0gICAgICAgIHZhciBkb21haW5BbmRNZXRo
b2QgPSByZXF1ZXN0Lm1ldGhvZC5zcGxpdCgiLiIpOwotICAgICAgICB2YXIgYWdlbnRNZXRob2Qg
PSBkb21haW5BbmRNZXRob2RbMF0gKyAiQWdlbnQuIiArIGRvbWFpbkFuZE1ldGhvZFsxXTsKLQot
ICAgICAgICB2YXIgaGFzUGFyYW1zID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZXF1ZXN0LnBhcmFt
cykgewotICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHJlcXVlc3QucGFyYW1zKSB7Ci0gICAg
ICAgICAgICAgICAgdmFyIHR5cGVOYW1lID0gcmVxdWVzdC5wYXJhbXNba2V5XS50eXBlOwotICAg
ICAgICAgICAgICAgIHZhciBvcHRpb25hbEZsYWcgPSByZXF1ZXN0LnBhcmFtc1trZXldLm9wdGlv
bmFsOwotCi0gICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwICYmICFvcHRpb25h
bEZsYWcpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJy
b3I6IEludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRo
b2QgKyAiJyBjYWxsLiBJdCBtdXN0IGhhdmUgdGhlIG5leHQgYXJndW1lbnRzICciICsgSlNPTi5z
dHJpbmdpZnkocmVxdWVzdC5wYXJhbXMpICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBh
cmdzLnNoaWZ0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsRmxhZyAmJiB0eXBlb2Yg
dmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXF1
ZXN0LnBhcmFtc1trZXldOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSB0eXBlTmFt
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
SW52YWxpZCB0eXBlIG9mIGFyZ3VtZW50ICciICsga2V5ICsgIicgZm9yIG1ldGhvZCAnIiArIGFn
ZW50TWV0aG9kICsgIicgY2FsbC4gSXQgbXVzdCBiZSAnIiArIHR5cGVOYW1lICsgIicgYnV0IGl0
IGlzICciICsgdHlwZW9mIHZhbHVlICsgIicuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtc1tr
ZXldID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgaGFzUGFyYW1zID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGlmICghaGFzUGFyYW1zKQotICAgICAgICAgICAgICAgIGRlbGV0
ZSByZXF1ZXN0LnBhcmFtczsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9
PT0gMSAmJiAhY2FsbGJhY2spIHsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnc1swXSAhPT0g
InVuZGVmaW5lZCIpIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBF
cnJvcjogT3B0aW9uYWwgY2FsbGJhY2sgYXJndW1lbnQgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0
aG9kICsgIicgY2FsbCBtdXN0IGJlIGEgZnVuY3Rpb24gYnV0IGl0cyB0eXBlIGlzICciICsgdHlw
ZW9mIGFyZ3NbMF0gKyAiJy4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl93cmFwQ2FsbGJhY2tBbmRTZW5kTWVzc2Fn
ZU9iamVjdChyZXF1ZXN0LCBjYWxsYmFjayk7Ci0gICAgfSwKLQotICAgIF93cmFwQ2FsbGJhY2tB
bmRTZW5kTWVzc2FnZU9iamVjdDogZnVuY3Rpb24obWVzc2FnZU9iamVjdCwgY2FsbGJhY2spCi0g
ICAgewotICAgICAgICBtZXNzYWdlT2JqZWN0LmlkID0gdGhpcy5fd3JhcChjYWxsYmFjayk7Ci0K
LSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykgewotICAgICAgICAgICAg
dmFyIHdyYXBwZWRDYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsK
LSAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5tZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC5t
ZXRob2Q7Ci0gICAgICAgICAgICB3cmFwcGVkQ2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lID0gRGF0
ZS5ub3coKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQcm90
b2NvbE1lc3NhZ2VzKQotICAgICAgICAgICAgY29uc29sZS5sb2coImZyb250ZW5kOiAiICsgSlNP
Ti5zdHJpbmdpZnkobWVzc2FnZU9iamVjdCkpOwotCi0gICAgICAgICsrdGhpcy5fcGVuZGluZ1Jl
c3BvbnNlc0NvdW50OwotICAgICAgICB0aGlzLnNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kKG1l
c3NhZ2VPYmplY3QpOwotICAgIH0sCi0KLSAgICBzZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZDog
ZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNvbnNvbGUudGltZVN0YW1w
KG1lc3NhZ2VPYmplY3QubWV0aG9kKTsKLSAgICAgICAgdmFyIG1lc3NhZ2UgPSBKU09OLnN0cmlu
Z2lmeShtZXNzYWdlT2JqZWN0KTsKLSAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNlbmRN
ZXNzYWdlVG9CYWNrZW5kKG1lc3NhZ2UpOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyOiBmdW5jdGlvbihkb21haW4sIGRpc3BhdGNoZXIpCi0gICAgewotICAgICAgICB0
aGlzLl9kb21haW5EaXNwYXRjaGVyc1tkb21haW5dID0gZGlzcGF0Y2hlcjsKLSAgICB9LAotCi0g
ICAgZGlzcGF0Y2g6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAgICBpZiAodGhpcy5k
dW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJi
YWNrZW5kOiAiICsgKCh0eXBlb2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gbWVzc2FnZSA6IEpT
T04uc3RyaW5naWZ5KG1lc3NhZ2UpKSk7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VPYmplY3QgPSAo
dHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IEpTT04ucGFyc2UobWVzc2FnZSkgOiBtZXNz
YWdlOwotCi0gICAgICAgIGlmICgiaWQiIGluIG1lc3NhZ2VPYmplY3QpIHsgLy8ganVzdCBhIHJl
c3BvbnNlIGZvciBzb21lIHJlcXVlc3QKLSAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVy
cm9yKSB7Ci0gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5lcnJvci5fX3Byb3RvX18gPSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdldERlc2NyaXB0aW9uOiBmdW5jdGlvbigpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCh0aGlzLmNvZGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjcwMDogcmV0dXJuICJQYXJz
ZSBlcnJvciI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDA6IHJldHVy
biAiSW52YWxpZCBSZXF1ZXN0IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0z
MjYwMTogcmV0dXJuICJNZXRob2Qgbm90IGZvdW5kIjsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIC0zMjYwMjogcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAtMzI2MDM6IHJldHVybiAiSW50ZXJuYWwgZXJyb3IiOzsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjAwMDogcmV0dXJuICJTZXJ2ZXIgZXJy
b3IiOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LAot
Ci0gICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdGlvbiA9IlVua25v
d24gZXJyb3IgY29kZSI7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRE
ZXNjcmlwdGlvbigpICsgIigiICsgdGhpcy5jb2RlICsgIik6ICIgKyB0aGlzLm1lc3NhZ2UgKyAi
LiIgKyAodGhpcy5kYXRhID8gIiAiICsgdGhpcy5kYXRhLmpvaW4oIiAiKSA6ICIiKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAgICAgICAgICBnZXRNZXNzYWdlOiBmdW5j
dGlvbigpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLm1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvci5jb2RlICE9PSAt
MzIwMDApCi0gICAgICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0UHJvdG9jb2xFcnJvcihtZXNz
YWdlT2JqZWN0KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGFyZ3VtZW50cyA9
IFtdOwotICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QucmVzdWx0KSB7Ci0gICAgICAgICAg
ICAgICAgZm9yICh2YXIga2V5IGluIG1lc3NhZ2VPYmplY3QucmVzdWx0KQotICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMucHVzaChtZXNzYWdlT2JqZWN0LnJlc3VsdFtrZXldKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21l
c3NhZ2VPYmplY3QuaWRdOwotICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7Ci0gICAgICAgICAg
ICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRpbWU7Ci0gICAgICAgICAgICAgICAgaWYgKHRoaXMu
ZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQotICAgICAgICAg
ICAgICAgICAgICBwcm9jZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAg
ICAgICAgIGFyZ3VtZW50cy51bnNoaWZ0KG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICAgICAg
LS10aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIHRo
aXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0LmlkXTsKLQotICAgICAgICAgICAgICAgIGlmICh0
aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAg
ICAgICAgICAgICAgICAgY29uc29sZS5sb2coInRpbWUtc3RhdHM6ICIgKyBjYWxsYmFjay5tZXRo
b2ROYW1lICsgIiA9ICIgKyAocHJvY2Vzc2luZ1N0YXJ0VGltZSAtIGNhbGxiYWNrLnNlbmRSZXF1
ZXN0VGltZSkgKyAiICsgIiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodGhpcy5fc2NyaXB0cyAmJiAhdGhpcy5f
cGVuZGluZ1Jlc3BvbnNlc0NvdW50KQotICAgICAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJQZW5k
aW5nRGlzcGF0Y2hlcygpOwotCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICB2YXIgbWV0aG9kID0gbWVzc2FnZU9iamVjdC5tZXRob2Quc3BsaXQoIi4i
KTsKLSAgICAgICAgICAgIHZhciBkb21haW5OYW1lID0gbWV0aG9kWzBdOwotICAgICAgICAgICAg
dmFyIGZ1bmN0aW9uTmFtZSA9IG1ldGhvZFsxXTsKLSAgICAgICAgICAgIGlmICghKGRvbWFpbk5h
bWUgaW4gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMpKSB7Ci0gICAgICAgICAgICAgICAgY29uc29s
ZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IHRoZSBtZXNzYWdlIGlzIGZvciBub24tZXhpc3Rpbmcg
ZG9tYWluICciICsgZG9tYWluTmFtZSArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgdmFyIGRpc3BhdGNoZXIgPSB0aGlzLl9kb21haW5E
aXNwYXRjaGVyc1tkb21haW5OYW1lXTsKLSAgICAgICAgICAgIGlmICghKGZ1bmN0aW9uTmFtZSBp
biBkaXNwYXRjaGVyKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29s
IEVycm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5pbXBsZW1lbnRlZCBtZXRob2QgJyIg
KyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXRoaXMuX2V2ZW50QXJnc1ttZXNzYWdl
T2JqZWN0Lm1ldGhvZF0pIHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2Nv
bCBFcnJvcjogQXR0ZW1wdGVkIHRvIGRpc3BhdGNoIGFuIHVuc3BlY2lmaWVkIG1ldGhvZCAnIiAr
IG1lc3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXTsKLSAgICAgICAgICAg
IGlmIChtZXNzYWdlT2JqZWN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZhciBwYXJhbU5h
bWVzID0gdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9kXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtTmFtZXMubGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgIHBhcmFtcy5wdXNoKG1lc3NhZ2VPYmplY3QucGFyYW1zW3BhcmFtTmFtZXNb
aV1dKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdTdGFydFRp
bWU7Ci0gICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQotICAgICAg
ICAgICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOwotCi0gICAgICAgICAg
ICBkaXNwYXRjaGVyW2Z1bmN0aW9uTmFtZV0uYXBwbHkoZGlzcGF0Y2hlciwgcGFyYW1zKTsKLQot
ICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAg
ICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIG1lc3NhZ2VPYmplY3QubWV0aG9kICsg
IiA9ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICByZXBvcnRQcm90b2NvbEVycm9yOiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0
KQotICAgIHsKLSAgICAgICAgY29uc29sZS5lcnJvcigiUmVxdWVzdCB3aXRoIGlkID0gIiArIG1l
c3NhZ2VPYmplY3QuaWQgKyAiIGZhaWxlZC4gIiArIG1lc3NhZ2VPYmplY3QuZXJyb3IpOwotICAg
IH0sCi0KLSAgICBydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzOiBmdW5jdGlvbihzY3JpcHQpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX3NjcmlwdHMpCi0gICAgICAgICAgICB0aGlzLl9zY3Jp
cHRzID0gW107Ci0KLSAgICAgICAgaWYgKHNjcmlwdCkKLSAgICAgICAgICAgIHRoaXMuX3Njcmlw
dHMucHVzaChzY3JpcHQpOwotCi0gICAgICAgIGlmICghdGhpcy5fcGVuZGluZ1Jlc3BvbnNlc0Nv
dW50KSB7Ci0gICAgICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX3NjcmlwdHM7Ci0gICAgICAg
ICAgICB0aGlzLl9zY3JpcHRzID0gW10KLSAgICAgICAgICAgIGZvciAodmFyIGlkID0gMDsgaWQg
PCBzY3JpcHRzLmxlbmd0aDsgKytpZCkKLSAgICAgICAgICAgICAgICAgc2NyaXB0c1tpZF0uY2Fs
bCh0aGlzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW5zcGVjdG9yQmFja2VuZCA9IG5ldyBJ
bnNwZWN0b3JCYWNrZW5kU3R1YigpOwotCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGlu
c3BlY3RvckJhY2tlbmRTdHViSlMpOwotfQotCi1zdWIgZ2VuZXJhdGVIZWFkZXIKLXsKLSAgICBt
eSAkY2xhc3NOYW1lID0gc2hpZnQ7Ci0gICAgbXkgJGNsYXNzRGVjbGFyYXRpb24gPSBzaGlmdDsK
LSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAkY29uc3RydWN0b3IgPSBzaGlmdDsKLSAg
ICBteSAkY29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLSAgICBt
eSAkZm9vdGVyID0gc2hpZnQ7Ci0KLSAgICBteSAkZm9yd2FyZEhlYWRlcnMgPSBqb2luKCJcbiIs
IHNvcnQobWFwKCIjaW5jbHVkZSA8IiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIikg
LiAiPiIsIGdyZXAodHlwZVRyYWl0cygkXywgImZvcndhcmRIZWFkZXIiKSwga2V5cyAleyR0eXBl
c30pKSkpOwotICAgIG15ICRmb3J3YXJkRGVjbGFyYXRpb25zID0gam9pbigiXG4iLCBzb3J0KG1h
cCgiY2xhc3MgIiAuIHR5cGVUcmFpdHMoJF8sICJmb3J3YXJkIikgLiAiOyIsIGdyZXAodHlwZVRy
YWl0cygkXywgImZvcndhcmQiKSwga2V5cyAleyR0eXBlc30pKSkpOwotICAgIG15ICRjb25zdGFu
dERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgQHskY29uc3RhbnRzfSk7Ci0gICAgbXkgJG1ldGhv
ZHNEZWNsYXJhdGlvbnMgPSBqb2luKCJcbiIsIEB7JG1ldGhvZHN9KTsKLQotICAgIG15ICRoZWFk
ZXJCb2R5ID0gPDwgIkVPRiI7Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotI2lmbmRlZiAke2NsYXNzTmFtZX1faAotI2RlZmluZSAke2Ns
YXNzTmFtZX1faAotCi0ke2ZvcndhcmRIZWFkZXJzfQotCi1uYW1lc3BhY2UgJG5hbWVzcGFjZSB7
Ci0KLSRmb3J3YXJkRGVjbGFyYXRpb25zCi0KLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
Ci1jbGFzcyAkY2xhc3NEZWNsYXJhdGlvbiB7Ci1wdWJsaWM6Ci0kY29uc3RydWN0b3IKLQotJGNv
bnN0YW50RGVjbGFyYXRpb25zCi0kbWV0aG9kc0RlY2xhcmF0aW9ucwotCi0kZm9vdGVyCi19Owot
Ci19IC8vIG5hbWVzcGFjZSAkbmFtZXNwYWNlCi0jZW5kaWYgLy8gIWRlZmluZWQoJHtjbGFzc05h
bWV9X2gpCi0KLUVPRgotICAgIHJldHVybiAkaGVhZGVyQm9keTsKLX0KLQotc3ViIGdlbmVyYXRl
U291cmNlCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9IHNoaWZ0OwotICAgIG15ICR0eXBlcyA9IHNo
aWZ0OwotICAgIG15ICRjb25zdGFudHMgPSBzaGlmdDsKLSAgICBteSAkbWV0aG9kcyA9IHNoaWZ0
OwotCi0gICAgbXkgQHNvdXJjZUNvbnRlbnQgPSBzcGxpdCgiXHIiLCAkbGljZW5zZVRlbXBsYXRl
KTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiXG4jaW5jbHVkZSBcImNvbmZpZy5oXCIiKTsK
LSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2luY2x1ZGUgXCIkY2xhc3NOYW1lLmhcIiIpOwot
ICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Iik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNv
bnRlbnQsICIjaWYgRU5BQkxFKElOU1BFQ1RPUikiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50
LCAiIik7Ci0KLSAgICBteSAlaGVhZGVyczsKLSAgICBmb3JlYWNoIG15ICR0eXBlIChrZXlzICV7
JHR5cGVzfSkgewotICAgICAgICAkaGVhZGVyc3siI2luY2x1ZGUgXCIiIC4gdHlwZVRyYWl0cygk
dHlwZSwgImhlYWRlciIpIC4gIlwiIn0gPSAxIGlmICF0eXBlVHJhaXRzKCR0eXBlLCAiaGVhZGVy
IikgZXEgICIiOwotICAgIH0KLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBzb3J0IGtleXMgJWhl
YWRlcnMpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VD
b250ZW50LCAibmFtZXNwYWNlICRuYW1lc3BhY2UgeyIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRl
bnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCBqb2luKCJcbiIsIEB7JGNvbnN0YW50
c30pKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgQHskbWV0aG9kc30pOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAifSAvLyBuYW1lc3BhY2UgJG5hbWVzcGFjZSIpOwotICAgIHB1
c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwot
ICAgIHJldHVybiBAc291cmNlQ29udGVudDsKLX0KLQotc3ViIHR5cGVUcmFpdHMKLXsKLSAgICBt
eSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICR0cmFpdCA9IHNoaWZ0OwotICAgIHJldHVybiAkdHlw
ZVRyYW5zZm9ybXskdHlwZX0tPnskdHJhaXR9OwotfQotCi1zdWIgcGFyYW1UeXBlVHJhaXRzCi17
Ci0gICAgbXkgJHBhcmFtRGVzY3JpcHRpb24gPSBzaGlmdDsKLSAgICBteSAkdHJhaXQgPSBzaGlm
dDsKLSAgICBpZiAoJHBhcmFtRGVzY3JpcHRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRp
b25hbCJ9KSB7Ci0gICAgICAgIG15ICRvcHRpb25hbFJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFt
RGVzY3JpcHRpb24tPnR5cGUsICJvcHRpb25hbF8iIC4gJHRyYWl0KTsKLSAgICAgICAgcmV0dXJu
ICRvcHRpb25hbFJlc3VsdCBpZiBkZWZpbmVkICRvcHRpb25hbFJlc3VsdDsKLSAgICB9Ci0gICAg
bXkgJHJlc3VsdCA9IHR5cGVUcmFpdHMoJHBhcmFtRGVzY3JpcHRpb24tPnR5cGUsICR0cmFpdCk7
Ci0gICAgcmV0dXJuIGRlZmluZWQgJHJlc3VsdCA/ICRyZXN1bHQgOiAiIjsKLX0KLQotc3ViIGdl
bmVyYXRlQmFja2VuZEFnZW50RmllbGRzQW5kQ29uc3RydWN0b3IKLXsKLSAgICBteSBAYXJndW1l
bnRzOwotICAgIG15IEBmaWVsZEluaXRpYWxpemVyczsKLQotICAgIHB1c2goQGFyZ3VtZW50cywg
Ikluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsIik7Ci0g
ICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIHB1c2goQGJhY2tlbmRG
b290ZXIsICIgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsiKTsKLQotICAgIGZvcmVhY2ggbXkgJGRvbWFpbiAoc29ydCBrZXlzICViYWNrZW5k
RG9tYWlucykgewotICAgICAgICAjIEFkZCBhZ2VudCBmaWVsZCBkZWNsYXJhdGlvbiB0byB0aGUg
Zm9vdGVyLgotICAgICAgICBteSAkYWdlbnRDbGFzc05hbWUgPSB0eXBlVHJhaXRzKCRkb21haW4s
ICJmb3J3YXJkIik7Ci0gICAgICAgIG15ICRmaWVsZCA9IHR5cGVUcmFpdHMoJGRvbWFpbiwgImRv
bWFpbkFjY2Vzc29yIik7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRGb290ZXIsICIgICAgJHthZ2Vu
dENsYXNzTmFtZX0qICR7ZmllbGR9OyIpOwotCi0gICAgICAgICMgQWRkIGFnZW50IHBhcmFtZXRl
ciBhbmQgaW5pdGlhbGl6ZXIuCi0gICAgICAgIG15ICRhcmcgPSBzdWJzdHIoJGZpZWxkLCAyKTsK
LSAgICAgICAgcHVzaChAZmllbGRJbml0aWFsaXplcnMsICIgICAgICAgICwgJHtmaWVsZH0oJHth
cmd9KSIpOwotICAgICAgICBwdXNoKEBhcmd1bWVudHMsICIke2FnZW50Q2xhc3NOYW1lfSogJHth
cmd9Iik7Ci0gICAgfQotCi0gICAgbXkgJGFyZ3VtZW50U3RyaW5nID0gam9pbigiLCAiLCBAYXJn
dW1lbnRzKTsKLQotICAgIG15IEBiYWNrZW5kSGVhZDsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICAke2JhY2tlbmRDbGFzc05hbWV9KCR7YXJndW1lbnRTdHJpbmd9KSIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCBAZmllbGRJbml0aWFsaXplcnMpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgIHsgfSIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IDA7IH0iKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2go
QGJhY2tlbmRIZWFkLCAiICAgIGVudW0gQ29tbW9uRXJyb3JDb2RlIHsiKTsKLSAgICBwdXNoKEBi
YWNrZW5kSGVhZCwgIiAgICAgICAgUGFyc2VFcnJvciA9IDAsIik7Ci0gICAgcHVzaChAYmFja2Vu
ZEhlYWQsICIgICAgICAgIEludmFsaWRSZXF1ZXN0LCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiICAgICAgICBNZXRob2ROb3RGb3VuZCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAg
ICAgICAgSW52YWxpZFBhcmFtcywiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAg
SW50ZXJuYWxFcnJvciwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgU2VydmVy
RXJyb3IsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIExhc3RFbnRyeSwiKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB9OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFk
LCAiIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9pZCByZXBvcnRQcm90b2NvbEVy
cm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAg
dm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9u
RXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZGF0YSkgY29uc3Q7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgdm9p
ZCBkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOyIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgU3RyaW5nKiByZXN1bHQpOyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiIik7Ci0gICAg
cHVzaChAYmFja2VuZEhlYWQsICIgICAgZW51bSBNZXRob2ROYW1lcyB7Iik7Ci0gICAgJGJhY2tl
bmRDb25zdHJ1Y3RvciA9IGpvaW4oIlxuIiwgQGJhY2tlbmRIZWFkKTsKLX0KLQotc3ViIGZpbmlz
aAotewotICAgIG15ICRvYmplY3QgPSBzaGlmdDsKLQotICAgIHB1c2goQGJhY2tlbmRNZXRob2Rz
SW1wbCwgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcigpKTsKLSAgICBwdXNoKEBiYWNrZW5kTWV0
aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFNlbmRSZXNwb25zZSgpKTsKLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlQmFja2VuZFJlcG9ydFByb3RvY29sRXJyb3IoKSk7Ci0g
ICAgdW5zaGlmdChAZnJvbnRlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVGcm9udGVuZENvbnN0cnVj
dG9ySW1wbCgpLCAiIik7Ci0KLSAgICBvcGVuKG15ICRTT1VSQ0UsICI+JG91dHB1dERpci8kZnJv
bnRlbmRDbGFzc05hbWUuY3BwIikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dERp
ci8kZnJvbnRlbmRDbGFzc05hbWUuY3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwg
Z2VuZXJhdGVTb3VyY2UoJGZyb250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsIFxAZnJv
bnRlbmRDb25zdGFudERlZmluaXRpb25zLCBcQGZyb250ZW5kTWV0aG9kc0ltcGwpKTsKLSAgICBj
bG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQotICAgIG9wZW4obXkgJEhFQURF
UiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCIpIHx8IGRpZSAiQ291
bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXRIZWFkZXJzRGlyLyRmcm9udGVuZENsYXNzTmFtZS5oIjsK
LSAgICBwcmludCAkSEVBREVSIGdlbmVyYXRlSGVhZGVyKCRmcm9udGVuZENsYXNzTmFtZSwgJGZy
b250ZW5kQ2xhc3NOYW1lLCBcJWZyb250ZW5kVHlwZXMsICRmcm9udGVuZENvbnN0cnVjdG9yLCBc
QGZyb250ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsIFxAZnJvbnRlbmRNZXRob2RzLCBqb2luKCJc
biIsIEBmcm9udGVuZEZvb3RlcikpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRI
RUFERVIpOwotCi0gICAgdW5zaGlmdChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJjb25z
dCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7Iik7
Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVmaW5pdGlvbnMsICJ9OyIpOwotICAgIHB1c2go
QGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiIik7Ci0KLSAgICAjIE1ha2UgZGlzcGF0Y2hl
ciBtZXRob2RzIHByaXZhdGUgb24gdGhlIGJhY2tlbmQuCi0gICAgcHVzaChAYmFja2VuZENvbnN0
YW50RGVjbGFyYXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJh
dGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOyIpOyAgICAKLSAgICBwdXNoKEBiYWNr
ZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnRE
ZWNsYXJhdGlvbnMsICJwcml2YXRlOiIpOwotCi0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAl
YmFja2VuZFR5cGVzKSB7Ci0gICAgICAgIGlmICh0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUi
KSkgewotICAgICAgICAgICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUFyZ3Vt
ZW50R2V0dGVycygkdHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVzaChAYmFja2Vu
ZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElk
LCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9y
U3RyaW5nIGludm9jYXRpb25FcnJvcik7Iik7Ci0KLSAgICBnZW5lcmF0ZUJhY2tlbmRBZ2VudEZp
ZWxkc0FuZENvbnN0cnVjdG9yKCk7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdl
bmVyYXRlQmFja2VuZE1lc3NhZ2VQYXJzZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJ
bXBsLCAiIik7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnMsICIiKTsK
LQotICAgIG9wZW4oJFNPVVJDRSwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCIp
IHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRDbGFzc05hbWUu
Y3BwIjsKLSAgICBwcmludCAkU09VUkNFIGpvaW4oIlxuIiwgZ2VuZXJhdGVTb3VyY2UoJGJhY2tl
bmRDbGFzc05hbWUsIFwlYmFja2VuZFR5cGVzLCBcQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25z
LCBcQGJhY2tlbmRNZXRob2RzSW1wbCkpOwotICAgIGNsb3NlKCRTT1VSQ0UpOwotICAgIHVuZGVm
KCRTT1VSQ0UpOwotCi0gICAgb3BlbigkSEVBREVSLCAiPiRvdXRwdXRIZWFkZXJzRGlyLyRiYWNr
ZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmlsZSAkb3V0cHV0SGVhZGVy
c0Rpci8kYmFja2VuZENsYXNzTmFtZS5oIjsKLSAgICBwcmludCAkSEVBREVSIGpvaW4oIlxuIiwg
Z2VuZXJhdGVIZWFkZXIoJGJhY2tlbmRDbGFzc05hbWUsICRiYWNrZW5kQ2xhc3NEZWNsYXJhdGlv
biwgXCViYWNrZW5kVHlwZXMsICRiYWNrZW5kQ29uc3RydWN0b3IsIFxAYmFja2VuZENvbnN0YW50
RGVjbGFyYXRpb25zLCBcQGJhY2tlbmRNZXRob2RzLCBqb2luKCJcbiIsIEBiYWNrZW5kRm9vdGVy
KSkpOwotICAgIGNsb3NlKCRIRUFERVIpOwotICAgIHVuZGVmKCRIRUFERVIpOwotCi0gICAgb3Bl
bihteSAkSlNfU1RVQiwgIj4kb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyIpIHx8IGRp
ZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGJhY2tlbmRKU1N0dWJOYW1lLmpzIjsK
LSAgICBwcmludCAkSlNfU1RVQiBqb2luKCJcbiIsIGdlbmVyYXRlQmFja2VuZFN0dWJKUygpKTsK
LSAgICBjbG9zZSgkSlNfU1RVQik7Ci0gICAgdW5kZWYoJEpTX1NUVUIpOwotfQotCi0xOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kMDYwNWExNjc0MWIyM2QyYzFmZWZmYzFhNGZjZDA0NDhkMjcxZDQ5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKQEAgLTAsMCArMSwxNDIzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29w
eXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZwor
aW1wb3J0IG9wdHBhcnNlCitpbXBvcnQganNvbgorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KKwor
Y21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorY21kbGluZV9wYXJzZXIu
YWRkX29wdGlvbigiLS1kZWZpbmVzIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0
cHV0X2hfZGlyIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIi
KQorCit0cnk6CisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5w
YXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpICE9IDEpOgorICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkV4YWN0bHkgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIChmb3VuZCAl
cykiICUgbGVuKGFyZ192YWx1ZXMpKQorICAgIGlucHV0X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFs
dWVzWzBdCisgICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hf
ZGlyCisgICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIK
KyAgICBpZiBub3Qgb3V0cHV0X2hlYWRlcl9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRp
b24oIk91dHB1dCAuaCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIG5vdCBv
dXRwdXRfY3BwX2Rpcm5hbWU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAg
ZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6
ICVzXG5cbiIgJSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNw
ZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2Nw
cF9kaXIgPG91dHB1dF9jcHBfZGlyPiBbLS1kZWZpbmVzIDxkZWZpbmVzIHN0cmluZz5dXG4iKQor
ICAgIGV4aXQoMSkKKworCitkZWYgcGFyc2VfZGVmaW5lcyhzdHIpOgorICAgIGlmIG5vdCBzdHI6
CisgICAgICAgIHJldHVybiB7fQorCisgICAgaXRlbXMgPSBzdHIuc3BsaXQoKQorICAgIHJlc3Vs
dCA9IHt9CisgICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGl0ZW1bMF0gPT0gJyIn
IGFuZCBpdGVtWy0xXSA9PSAnIicgYW5kIGxlbihpdGVtKSA+PSAyOgorICAgICAgICAgICAgaXRl
bSA9IGl0ZW1bMTotMV0KKyAgICAgICAgZXFfcG9zID0gaXRlbS5maW5kKCI9IikKKyAgICAgICAg
aWYgZXFfcG9zID09IC0xOgorICAgICAgICAgICAga2V5ID0gaXRlbQorICAgICAgICAgICAgdmFs
dWUgPSBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXkgPSBpdGVtWzplcV9wb3Nd
CisgICAgICAgICAgICB2YWx1ZV9zdHIgPSBpdGVtW2VxX3BvcyArIDE6XQorICAgICAgICAgICAg
aWYgdmFsdWVfc3RyID09ICIwIjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEZhbHNlCisgICAg
ICAgICAgICBlbGlmIHZhbHVlX3N0ciA9PSAiMSI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBU
cnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2hvdWxkIHdlIHN1cHBv
cnQgb3RoZXIgdmFsdWVzPworICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5yZWNv
Z25pemVkIGRlZmluZSB2YWx1ZTogJyVzJyAoa2V5OiAnJXMnKSIgJSAodmFsdWVfc3RyLCBrZXkp
KQorICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWZp
bmVzX21hcCA9IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKKworCitjbGFzcyBE
b21haW5OYW1lRml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRh
KGNscywgZG9tYWluX25hbWUpOgorICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRf
dHlwZV9tYXA6CisgICAgICAgICAgICBhZ2VudF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21h
cFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVz
ID0gIkluc3BlY3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUKKworICAgICAgICBpZiBkb21haW5f
bmFtZSBpbiBjbHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1l
X3JlcyA9IGNscy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJB
Z2VudCIKKworICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5
cGVfbmFtZSA9IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFt
ZSBpbiBjbHMuaGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFp
bl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucworICAgICAgICAgICAgYWdlbnRfZmll
bGRfbmFtZSA9IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAg
ICAgICAgICAgIGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBu
b3QgZG9tYWluX25hbWUgaW4gY2xzLmRvbWFpbl9kZWZpbmVfbmFtZV9tYXA6CisgICAgICAgICAg
ICAgICAgICAgICMgSGFzIG5vdCBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBzeW1ib2wuCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmaW5l
X25hbWUgPSBjbHMuZG9tYWluX2RlZmluZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKworICAgICAg
ICAgICAgICAgIGlmIG5vdCBkZWZpbmVfbmFtZSBpbiBkZWZpbmVzOgorICAgICAgICAgICAgICAg
ICAgICAjIERpc2FibGVkIHdoZW4gbm90IG1lbnRpb25lZAorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX3ZhbHVlID0gZGVmaW5lc1tkZWZp
bmVfbmFtZV0KKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGJvb2woZGVmaW5lX3ZhbHVlKQor
CisgICAgICAgIHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsi
UnVudGltZSIsICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNl
dChbIkluc3BlY3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3Bl
Y3RvclJlc291cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVy
YXRlIG5hbWVzIGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAg
ICJQYWdlIjogInBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIs
CisgICAgICAgICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjog
ICJyZXNvdXJjZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwK
KyAgICAgICAgIkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBs
aWNhdGlvbkNhY2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjog
ICJkb21BZ2VudCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVn
Z2VyIjogImRlYnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdn
ZXJBZ2VudCIsCisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAg
IldvcmtlciI6ICJ3b3JrZXJBZ2VudCIsCisgICAgfQorCisgICAgZG9tYWluX2RlZmluZV9uYW1l
X21hcCA9IHsKKyAgICAgICAgIkRhdGFiYXNlIjogIkVOQUJMRV9TUUxfREFUQUJBU0UiLAorICAg
ICAgICAiRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAi
RE9NRGVidWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiUHJv
ZmlsZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiV29ya2VyIjog
IkVOQUJMRV9XT1JLRVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlwZShvYmplY3QpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIlcyIpOgorICAgICAg
ICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1hdCA9IHNldHRlcl9m
b3JtYXQKKworICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlw
ZQorCisgICAgZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5zZXR0ZXJfZm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0g
ImJvb2xlYW4iOgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxp
ZiBqc29uX3R5cGUgPT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3Ry
aW5nCisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6Cisg
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJpbnRlZ2VyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
TnVtYmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25v
d24gdHlwZTogJXMiICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToK
KyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywg
cGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2Nf
cGFyYW1fdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2V2ZW50
X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
IGNsYXNzIFN0cmluZyhCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBk
ZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAg
ICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMuX3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKwor
ICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKKworICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgorICAgICAgICAgICAg
cmV0dXJuICJcIlwiIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9q
c19iaW5kX3R5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9w
bGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9
IENQYXJhbVR5cGUoImNvbnN0IFN0cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToK
KyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIkludCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfc2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIjAiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBk
ZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAg
ICAgICAgZGVmYXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xh
c3MgTnVtYmVyKEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYg
Z2V0X2dldHRlcl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIk9iamVjdCIKKworICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKKyAgICAgICAg
ICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVm
IGdldF9jX2luaXRpYWxpemVyKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3Vw
cG9ydGVkIikKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmlu
ZF90eXBlKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKwor
ICAgICAgICBkZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCisKKyAg
ICBjbGFzcyBCb29sKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRl
ZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAg
ICAgaWYgKHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAgICAgICAgICAgICAgICBp
ZiBvcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3Bs
YWluX2NfdHlwZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xz
Ll9wbGFpbl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
Z2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIKKworICAgICAgICBn
ZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJm
YWxzZSIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90
eXBlKCk6CisgICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCisKKyAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKKyAgICAg
ICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUo
ImJvb2wiKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNv
bnN0IiwgIiolcyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgorICAgICAgICBAY2xh
c3NtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBv
cHRpb25hbCk6CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgorICAgICAgICAgICAg
cmV0dXJuICJPYmplY3QiCisKKyAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9u
YW1lCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6
ZXIoKToKKyAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIKKwor
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Cisg
ICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgIGRlZiBpc19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6Cisg
ICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBh
cmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1U
eXBlLk9VVFBVVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAg
ICAgICAgICAgIGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQXJy
YXkiCisKKyAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCisKKyAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKKyAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0
aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKKyAgICAgICAgICAgIHJl
dHVybiAib2JqZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2V2
ZW50X3BhcmFtX2NoZWNrX29wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisg
ICAgICAgIF9wbGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IikKKyAgICAgICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiIpCisKKworY2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CisgICAgSU5QVVQgPSAiaW5w
dXQiCisgICAgT1VUUFVUID0gIm91dHB1dCIKKyAgICBFVkVOVCA9ICJldmVudCIKKworCitjbGFz
cyBUeXBlRGF0YShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpz
b25fZG9tYWluKToKKyAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBlCisgICAgICAg
IHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KKworICAgICAgICBpZiAidHlwZSIgaW4g
anNvbl90eXBlOgorICAgICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUi
XQorICAgICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIp
CisgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKworICAgIGRlZiBnZXRfcmF3X3R5
cGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXworCisKK2NsYXNzIFR5cGVN
YXA6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSk6CisgICAgICAgIHNlbGYubWFwXyA9IHt9
CisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAg
IGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFp
bl9tYXAgPSB7fQorICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFpbl9uYW1lXSA9IGRvbWFpbl9t
YXAKKworICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAg
ICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgorICAgICAgICAgICAg
ICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAgICAgICAgICAgICAgICAg
dHlwZV9kYXRhID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbikKKyAgICAgICAgICAg
ICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCisKKyAgICBkZWYgZ2V0
KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXBf
W2RvbWFpbl9uYW1lXVt0eXBlX25hbWVdCisKKworZGVmIHJlc29sdmVfcGFyYW1fcmF3X3R5cGUo
anNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBpZiAiJHJlZiIgaW4ganNv
bl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0ZXJbIiRyZWYiXQor
ICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9u
YW1lKQorICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldF9yYXdfdHlwZSgpCisgICAgZWxpZiAi
dHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fdHlwZSA9IGpzb25fcGFyYW1l
dGVyWyJ0eXBlIl0KKyAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29uX3R5cGUpCisgICAg
ZWxzZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisKK2RlZiBn
ZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBkb3RfcG9zID0g
anNvbl9yZWYuZmluZCgiLiIpCisgICAgaWYgZG90X3BvcyA9PSAtMToKKyAgICAgICAgZG9tYWlu
X25hbWUgPSBzY29wZV9kb21haW5fbmFtZQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZgor
ICAgIGVsc2U6CisgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9wb3NdCisgICAg
ICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KKworICAgIHJldHVybiB0eXBl
X21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKKworCitpbnB1dF9maWxlID0gb3Blbihp
bnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCitqc29uX3N0cmluZyA9IGlucHV0X2ZpbGUucmVhZCgp
Citqc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCisKKworY2xhc3MgVGVtcGxhdGVz
OgorICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgKKyIiIiAgICBj
bGFzcyAkZG9tYWluQ2xhc3NOYW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgICRkb21haW5DbGFz
c05hbWUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IH0KKyR7ZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnN9ICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKKyAgICB9OworCisgICAgJGRvbWFpbkNsYXNz
TmFtZSogJGRvbWFpbkZpZWxkTmFtZSgpIHsgcmV0dXJuICZtXyRkb21haW5GaWVsZE5hbWU7IH0K
KworIiIiKQorCisgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoCisiIiJ2b2lk
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRtZXRob2ROYW1lKGxv
bmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KQoreworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisKKyAgICBpZiAoISRhZ2VudEZpZWxkKQorICAgICAgICBwcm90b2NvbEVycm9y
cy0+cHVzaFN0cmluZygiJHtkb21haW5OYW1lfSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7
CiskbWV0aG9kT3V0Q29kZQorICAgIEVycm9yU3RyaW5nIGVycm9yOworJG1ldGhvZEluQ29kZQor
aWYgKCFwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgJGFnZW50RmllbGQtPiRtZXRob2RO
YW1lKCZlcnJvciRhZ2VudENhbGxQYXJhbXMpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7cmVzcG9uc2VDb29rfXNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIkZG9tYWluTmFtZS4kbWV0aG9k
TmFtZSIpLCBwcm90b2NvbEVycm9ycywgZXJyb3IpOworfQorIiIiKQorCisgICAgZnJvbnRlbmRf
bWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKCIiInZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OiRkb21h
aW5OYW1lOjokZXZlbnROYW1lKCRwYXJhbWV0ZXJzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+ICR7ZXZlbnROYW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICR7ZXZlbnROYW1lfU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIiRkb21haW5OYW1l
LiRldmVudE5hbWUiKTsKKyRjb2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkK
KyAgICAgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZCgke2V2ZW50TmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisiIiIpCisKKyAgICBm
cm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3RvckZyb250ZW5k
X2gKKyNkZWZpbmUgSW5zcGVjdG9yRnJvbnRlbmRfaAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250
ZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCopOworCisKKyRkb21haW5DbGFzc0xpc3QKK3By
aXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKKyR7ZmllbGREZWNsYXJhdGlvbnN9fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCisiIiIpCisKKyAgICBi
YWNrZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBD
aHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQor
Ly8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXJfaAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisKKyNpbmNs
dWRlIDxQbGF0Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bnNwZWN0b3JBZ2VudDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3RvckFy
cmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworCiskZm9yd2FyZERlY2xhcmF0
aW9ucworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwkY29uc3RydWN0b3JQYXJh
bXMpCisgICAgICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKQorJGNvbnN0cnVjdG9ySW5pdAorICAgIHsgfQorCisgICAgdm9pZCBjbGVhckZy
b250ZW5kKCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KKworICAgIGVudW0g
Q29tbW9uRXJyb3JDb2RlIHsKKyAgICAgICAgUGFyc2VFcnJvciA9IDAsCisgICAgICAgIEludmFs
aWRSZXF1ZXN0LAorICAgICAgICBNZXRob2ROb3RGb3VuZCwKKyAgICAgICAgSW52YWxpZFBhcmFt
cywKKyAgICAgICAgSW50ZXJuYWxFcnJvciwKKyAgICAgICAgU2VydmVyRXJyb3IsCisgICAgICAg
IExhc3RFbnRyeSwKKyAgICB9OworCisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0
IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkgY29uc3Q7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcq
IGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisgICAgdm9pZCBkaXNw
YXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHN0YXRpYyBib29sIGdldENvbW1hbmRO
YW1lKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOworCisgICAgZW51bSBN
ZXRob2ROYW1lcyB7CisKKyRtZXRob2ROYW1lc0VudW1Db250ZW50Cit9OworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbW1hbmROYW1lc1tdOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQg
Z2V0SW50KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGlj
IFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsK
KyAgICBzdGF0aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9ycyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2Us
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBp
bnZvY2F0aW9uRXJyb3IpOworCiskbWV0aG9kRGVjbGFyYXRpb25zCisKKyAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJGZpZWxkRGVjbGFy
YXRpb25zCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJfaCkKKworCisiIiIpCisKKyAgICBiYWNrZW5kX2Nw
cCA9IHN0cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVt
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmgiCiskaW5jbHVkZXMKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Citjb25zdCBjaGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10g
PSB7CiskbWV0aG9kTmFtZURlY2xhcmF0aW9ucworfTsKKworCiskbWV0aG9kcwordm9pZCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7
CisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKKyAgICB0
eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBj
YWxsSWQgPSAwOworCisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBz
dGF0aWMgQ2FsbEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKKyRtZXNzYWdlSGFuZGxlcnMKKyAgICAg
ICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihjb21tYW5kTmFtZXMpIC8gc2l6
ZW9mKGNvbW1hbmROYW1lc1swXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBo
YW5kbGVyc1tpXSk7CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRN
ZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXBh
cnNlZE1lc3NhZ2UpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9y
LCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2Vk
TWVzc2FnZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBh
IEpTT05pZmllZCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7
CisgICAgaWYgKCFjYWxsSWRWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAs
IEludmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElk
KSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3Nh
Z2VPYmplY3QtPmdldCgibWV0aG9kIik7CisgICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcg
cHJvcGVydHkgd2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBT
dHJpbmcgbWV0aG9kOworICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7
CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJU
aGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0
b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNo
TWFwLmVuZCgpKSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9k
Tm90Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9i
amVjdC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRS
ZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCit7CisgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsK
KyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2Nh
dGlvbkVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CisgICAgcmVz
cG9uc2VNZXNzYWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKKyAgICBpZiAobV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5z
ZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3Io
Y29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxs
SWQsIGNvZGUsIGVycm9yTWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBD
b21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChWZWN0b3I8aW50PixzX2NvbW1vbkVycm9ycywpOworICAgIGlmICghc19jb21tb25FcnJvcnMu
c2l6ZSgpKSB7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3
MDApOworICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYw
MCk7CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAx
KTsKKyAgICAgICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7
CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwor
ICAgICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7CisgICAg
fQorICAgIEFTU0VSVChjb2RlID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19j
b21tb25FcnJvcnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0p
OworICAgIGVycm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOworICAgIEFT
U0VSVChlcnJvcik7CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0
YSIsIGRhdGEpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJv
cik7CisgICAgaWYgKGNhbGxJZCkKKyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpj
YWxsSWQpOworICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVj
dG9yVmFsdWU6Om51bGwoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQor
ICAgICAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5k
KG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKworaW50IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQorewor
ICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAg
ICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAgIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAo
IW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJl
cXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2Jq
ZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJl
cicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
b2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVl
SXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9
PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnTnVtYmVyJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQt
PmFzTnVtYmVyKCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAn
TnVtYmVyJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2
YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2
YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQg
PSBmYWxzZTsKKworICAgIFN0cmluZyB2YWx1ZSA9ICIiOworCisgICAgaWYgKCFvYmplY3QpIHsK
KyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJh
bWV0ZXIgaW4gbWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xF
cnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNv
bnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5k
KCk7CisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0g
b2JqZWN0LT5maW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7Cisg
ICAgICAgIGlmICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycg
d2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZh
bHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygm
dmFsdWUpKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1h
dCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycuIiwg
bmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkK
KyAgICAgICAgICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7
CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKwor
ICAgIGJvb2wgdmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlm
ICghdmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1p
c3NpbmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVp
cmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0
YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIElu
c3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZp
bmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYg
KCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3Ry
aW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicgd2FzIG5vdCBm
b3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKSkK
KyAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFt
ZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4iLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAg
ICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmpl
Y3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChw
cm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91
bmQgPSBmYWxzZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICgh
dmFsdWVGb3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3Np
bmcgcGFyYW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3Ry
aW5nKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVk
IHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVj
dG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3Bl
Y3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChu
YW1lKTsKKworICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZh
bHVlRm91bmQpCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnIHdhcyBub3QgZm91bmQu
IiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisK
KyAgICBpZiAoIXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKKyAgICAg
ICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAn
JXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOworICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAq
dmFsdWVGb3VuZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVy
cm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxz
ZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQp
IHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBj
b250YWluZXIuCisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6
OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIg
JyVzJyB3aXRoIHR5cGUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6
Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAg
IGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisg
ICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFy
YW1ldGVyICclcycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFs
dWVJdGVyYXRvci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJy
b3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgbXVzdCBiZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVs
c2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRy
dWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0Q29tbWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBh
cnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFv
YmplY3QtPmdldFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGZyb250ZW5kX2NwcCA9IHN0
cmluZy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1
ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKworCitJbnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiskY29uc3RydWN0b3JJ
bml0eworfQorCiskbWV0aG9kcworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1w
bGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorCisKK0luc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQoreworICAgIHRo
aXMuX2xhc3RDYWxsYmFja0lkID0gMTsKKyAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQg
PSAwOworICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9OworICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNo
ZXJzID0ge307CisgICAgdGhpcy5fZXZlbnRBcmdzID0ge307CiskZGVsZWdhdGVzJGV2ZW50QXJn
cyRkb21haW5EaXNwYXRjaGVycyAgICB9CisKK0luc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlw
ZSA9IHsKKyAgICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAorICAgIGR1bXBJbnNwZWN0b3JQ
cm90b2NvbE1lc3NhZ2VzOiAwLAorCisgICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJhY2tJZCsrOworICAg
ICAgICB0aGlzLl9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigp
IHt9OworICAgICAgICByZXR1cm4gY2FsbGJhY2tJZDsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVy
RGVsZWdhdGU6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgZG9t
YWluQW5kRnVuY3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgi
LiIpOworICAgICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdl
bnQiOworICAgICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQorICAgICAgICAgICAgd2luZG93
W2FnZW50TmFtZV0gPSB7fTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVu
Y3Rpb25bMV1dID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0
U3RyaW5nKTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1d
WyJpbnZva2UiXSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpCisgICAg
fSwKKworICAgIF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFyZ3MsIGNhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcp
OworICAgICAgICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIHRoaXMuX3dyYXBDYWxs
YmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisg
ICAgX3NlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIg
YXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZh
ciByZXF1ZXN0ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICB2YXIgY2FsbGJh
Y2sgPSAoYXJncy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1
bmN0aW9uIikgPyBhcmdzLnBvcCgpIDogMDsKKyAgICAgICAgdmFyIGRvbWFpbkFuZE1ldGhvZCA9
IHJlcXVlc3QubWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE1ldGhvZCA9IGRv
bWFpbkFuZE1ldGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9kWzFdOworCisgICAg
ICAgIHZhciBoYXNQYXJhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5cGU7CisgICAgICAg
ICAgICAgICAgdmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7
CisKKyAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbmFsRmxh
ZykgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjog
SW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCAr
ICInIGNhbGwuIEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmlu
Z2lmeShyZXF1ZXN0LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Mu
c2hpZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1
ZSA9PT0gInVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3Qu
cGFyYW1zW2tleV07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZh
bGlkIHR5cGUgb2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRN
ZXRob2QgKyAiJyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMg
JyIgKyB0eXBlb2YgdmFsdWUgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1zW2tleV0g
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgKCFoYXNQYXJhbXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHJl
cXVlc3QucGFyYW1zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAx
ICYmICFjYWxsYmFjaykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5k
ZWZpbmVkIikgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9y
OiBPcHRpb25hbCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2Qg
KyAiJyBjYWxsIG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIgKyB0eXBlb2Yg
YXJnc1swXSArICInLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2Jq
ZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3dyYXBDYWxsYmFja0FuZFNl
bmRNZXNzYWdlT2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxiYWNrKTsKKworICAg
ICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7CisgICAgICAgICAgICB2YXIg
d3JhcHBlZENhbGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAg
ICAgICAgICAgd3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0Lm1ldGhv
ZDsKKyAgICAgICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUgPSBEYXRlLm5v
dygpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29s
TWVzc2FnZXMpCisgICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0
cmluZ2lmeShtZXNzYWdlT2JqZWN0KSk7CisKKyAgICAgICAgKyt0aGlzLl9wZW5kaW5nUmVzcG9u
c2VzQ291bnQ7CisgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQobWVzc2Fn
ZU9iamVjdCk7CisgICAgfSwKKworICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kOiBmdW5j
dGlvbihtZXNzYWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS50aW1lU3RhbXAobWVz
c2FnZU9iamVjdC5tZXRob2QpOworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5
KG1lc3NhZ2VPYmplY3QpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3Nh
Z2VUb0JhY2tlbmQobWVzc2FnZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRvbWFpbkRpc3Bh
dGNoZXI6IGZ1bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKKyAgICB7CisgICAgICAgIHRoaXMu
X2RvbWFpbkRpc3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOworICAgIH0sCisKKyAgICBk
aXNwYXRjaDogZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmR1bXBJ
bnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImJhY2tl
bmQ6ICIgKyAoKHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNzYWdlIDogSlNPTi5z
dHJpbmdpZnkobWVzc2FnZSkpKTsKKworICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0eXBl
b2YgbWVzc2FnZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7
CisKKyAgICAgICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBqdXN0IGEgcmVzcG9u
c2UgZm9yIHNvbWUgcmVxdWVzdAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3Ip
IHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJvdG9fXyA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkKKyAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuY29kZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1cm4gIlBhcnNlIGVy
cm9yIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMDogcmV0dXJuICJJ
bnZhbGlkIFJlcXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAx
OiByZXR1cm4gIk1ldGhvZCBub3QgZm91bmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgLTMyNjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJvciI7OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNlcnZlciBlcnJvciI7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAg
ICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0iVW5rbm93biBl
cnJvciBjb2RlIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlc2Ny
aXB0aW9uKCkgKyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVzc2FnZSArICIuIiAr
ICh0aGlzLmRhdGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIpOworICAgICAgICAg
ICAgICAgICAgICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldE1lc3NhZ2U6IGZ1bmN0aW9u
KCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMubWVzc2FnZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAw
MCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VP
YmplY3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107
CisgICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKHZhciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCisgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2Fn
ZU9iamVjdC5pZF07CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1w
SW5zcGVjdG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAg
ICAgICAgIHByb2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAtLXRo
aXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5f
Y2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMu
ZHVtcEluc3BlY3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxiYWNrLm1ldGhvZE5h
bWUgKyAiID0gIiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2suc2VuZFJlcXVlc3RU
aW1lKSArICIgKyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5k
aW5nUmVzcG9uc2VzQ291bnQpCisgICAgICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdE
aXNwYXRjaGVzKCk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOwor
ICAgICAgICAgICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07CisgICAgICAgICAgICB2YXIg
ZnVuY3Rpb25OYW1lID0gbWV0aG9kWzFdOworICAgICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBp
biB0aGlzLl9kb21haW5EaXNwYXRjaGVycykpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVy
cm9yKCJQcm90b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21h
aW4gJyIgKyBkb21haW5OYW1lICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3Bh
dGNoZXJzW2RvbWFpbk5hbWVdOworICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb25OYW1lIGluIGRp
c3BhdGNoZXIpKSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJy
b3I6IEF0dGVtcHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1ldGhvZCAnIiArIG1l
c3NhZ2VPYmplY3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmpl
Y3QubWV0aG9kXSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVy
cm9yOiBBdHRlbXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0aG9kICciICsgbWVz
c2FnZU9iamVjdC5tZXRob2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgaWYg
KG1lc3NhZ2VPYmplY3QucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFtTmFtZXMg
PSB0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOworICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFyYW1OYW1lc1tpXV0p
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsK
KyAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAg
ICAgICAgcHJvY2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgIGRp
c3BhdGNoZXJbZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJhbXMpOworCisgICAg
ICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAgICAg
IGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiID0g
IiArIChEYXRlLm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAgICB9CisgICAg
fSwKKworICAgIHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisg
ICAgeworICAgICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2Fn
ZU9iamVjdC5pZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgfSwK
KworICAgIHJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNjcmlwdCkKKyAgICB7
CisgICAgICAgIGlmICghdGhpcy5fc2NyaXB0cykKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMg
PSBbXTsKKworICAgICAgICBpZiAoc2NyaXB0KQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cy5w
dXNoKHNjcmlwdCk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQp
IHsKKyAgICAgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsKKyAgICAgICAgICAg
IHRoaXMuX3NjcmlwdHMgPSBbXQorICAgICAgICAgICAgZm9yICh2YXIgaWQgPSAwOyBpZCA8IHNj
cmlwdHMubGVuZ3RoOyArK2lkKQorICAgICAgICAgICAgICAgICBzY3JpcHRzW2lkXS5jYWxsKHRo
aXMpOworICAgICAgICB9CisgICAgfQorfQorCitJbnNwZWN0b3JCYWNrZW5kID0gbmV3IEluc3Bl
Y3RvckJhY2tlbmRTdHViKCk7IiIiKQorCisgICAgcGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2Rl
ID0gIiIiCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVx
dWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CisgICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Cisi
IiIKKworCit0eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCisKKworY2xhc3MgR2VuZXJhdG9y
OgorICAgIGZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzID0gW10KKyAgICBmcm9udGVuZF9kb21h
aW5fY2xhc3NfbGluZXMgPSBbXQorCisgICAgbWV0aG9kX25hbWVfZW51bV9saXN0ID0gW10KKyAg
ICBiYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhv
ZF9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xh
cmF0aW9uX2xpc3QgPSBbXQorICAgIG1ldGhvZF9oYW5kbGVyX2xpc3QgPSBbXQorICAgIGZyb250
ZW5kX21ldGhvZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QgPSBb
XQorICAgIGJhY2tlbmRfanNfZXZlbnRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19kb21haW5f
ZGlzcGF0Y2hlcl9saXN0ID0gW10KKworICAgIGJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlz
dCA9IFtdCisgICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQorICAgIGJhY2tl
bmRfZmllbGRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9mb3J3YXJkX2xpc3QgPSBbXQorICAgIGJh
Y2tlbmRfaW5jbHVkZV9saXN0ID0gW10KKyAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xp
c3QgPSBbXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnbygpOgorICAgICAgICBmb3Ig
anNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9u
YW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dl
ciA9IGRvbWFpbl9uYW1lLmxvd2VyKCkKKworICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21h
aW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIGlm
IGRvbWFpbl9kYXRhLmlzX2Rpc2FibGVkKGRlZmluZXNfbWFwKToKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorCisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdl
bnRfZmllbGRfbmFtZQorCisgICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25f
bGluZXMgPSBbXQorICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAg
ICAgICAgICAgICAgZm9yIGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAg
ICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21h
aW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQorCisgICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLmFwcGVuZCgiICAgICVz
IG1fJXM7XG4iICUgKGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZV9sb3dlcikpCisgICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdC5hcHBlbmQoIiAg
ICAsIG1fJXMoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKVxuIiAlIGRvbWFpbl9uYW1lX2xvd2Vy
KQorICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMu
YXBwZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9kb21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAor
ICAgICAgICAgICAgICAgICAgICBkb21haW5DbGFzc05hbWU9ZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAgICAgICAgIGRvbWFpbkZpZWxkTmFtZT1kb21haW5fbmFtZV9sb3dlciwKKyAgICAgICAg
ICAgICAgICAgICAgZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnM9am9pbihmcm9udGVu
ZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMsICIiKSkpCisgICAgICAgICAgICBpZiAiY29tbWFu
ZHMiIGluIGpzb25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2NvbW1hbmQgaW4g
anNvbl9kb21haW5bImNvbW1hbmRzIl06CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5w
cm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFt
ZSkKKworICAgICAgICAgICAgaWYgbm90IGRvbWFpbl9kYXRhLnNraXBfanNfYmluZDoKKyAgICAg
ICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LmFw
cGVuZCgiICAgIHRoaXMucmVnaXN0ZXIlc0Rpc3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFp
bkRpc3BhdGNoZXIuYmluZCh0aGlzLCBcIiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWlu
X25hbWUpKQorCisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMgPSBsaXN0KGpzb25fYXBpWyJk
b21haW5zIl0pCisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMuc29ydChrZXk9bGFtYmRhIG86
IG9bImRvbWFpbiJdKQorCisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBzb3J0ZWRfanNvbl9k
b21haW5zOgorICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0K
KworICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2Rh
dGEoZG9tYWluX25hbWUpCisgICAgICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChk
ZWZpbmVzX21hcCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYg
ZG9tYWluX2RhdGEuaGlkZGVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAg
ICBhZ2VudF90eXBlX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF90eXBlX25hbWUKKyAgICAgICAg
ICAgIGFnZW50X2ZpZWxkX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF9maWVsZF9uYW1lCisgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LmFwcGVuZCgi
LCAlcyogJXMiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAg
ICAgICwgbV8lcyglcykiICUgKGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQor
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdC5hcHBlbmQoIiAgICAlcyog
bV8lczsiICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QuYXBwZW5kKCJjbGFzcyAlczsiICUgYWdl
bnRfdHlwZV9uYW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9saXN0
LmFwcGVuZCgiI2luY2x1ZGUgXCIlcy5oXCIiICUgYWdlbnRfdHlwZV9uYW1lKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBwcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1l
LCBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICBldmVudF9uYW1l
ID0ganNvbl9ldmVudFsibmFtZSJdCisgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gW10KKyAgICAg
ICAgbWV0aG9kX2xpbmVfbGlzdCA9IFtdCisgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1f
bGlzdCA9IFtdCisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgorICAgICAg
ICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKKyAgICAgICAg
ICAgIGZvciBqc29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCisKKyAg
ICAgICAgICAgICAgICByYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJh
bWV0ZXIsIGRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICAgICAganNvbl9vcHRpb25hbCA9ICJv
cHRpb25hbCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJd
CisKKyAgICAgICAgICAgICAgICBvcHRpb25hbF9tYXNrID0gcmF3X3R5cGUuaXNfZXZlbnRfcGFy
YW1fY2hlY2tfb3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBlLmdl
dF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAg
ICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQorCisgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBvcHRpb25hbF9tYXNrIGFuZCBqc29uX29wdGlvbmFsCisK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAlIChjX3R5cGUu
Z2V0X3RleHQoKSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICAgICAgc2V0dGVyX2Fy
Z3VtZW50ID0gY190eXBlLmdldF9zZXR0ZXJfZm9ybWF0KCkgJSBwYXJhbWV0ZXJfbmFtZQorCisg
ICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+c2V0JXMoXCIl
c1wiLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3Vt
ZW50KQorICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBz
ZXR0ZXJfY29kZSA9ICgiICAgIGlmICglcylcbiAgICAiICUgcGFyYW1ldGVyX25hbWUpICsgc2V0
dGVyX2NvZGUKKyAgICAgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZChzZXR0ZXJf
Y29kZSkKKworICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBl
bmQoIlwiJXNcIiIgJSBwYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xp
c3QuYXBwZW5kKCIgICAgJXNNZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2Jq
ZWN0KTtcbiIgJSBldmVudF9uYW1lKQorICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRp
b25fbGluZXMuYXBwZW5kKAorICAgICAgICAgICAgIiAgICAgICAgdm9pZCAlcyglcyk7XG4iICUg
KGV2ZW50X25hbWUsIGpvaW4ocGFyYW1ldGVyX2xpc3QsICIsICIpKSkKKworICAgICAgICBHZW5l
cmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9tZXRo
b2Quc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwg
ZXZlbnROYW1lPWV2ZW50X25hbWUsCisgICAgICAgICAgICBwYXJhbWV0ZXJzPWpvaW4ocGFyYW1l
dGVyX2xpc3QsICIsICIpLAorICAgICAgICAgICAgY29kZT1qb2luKG1ldGhvZF9saW5lX2xpc3Qs
ICIiKSkpCisKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZXZlbnRfbGlzdC5hcHBlbmQo
IiAgICB0aGlzLl9ldmVudEFyZ3NbXCIlcy4lc1wiXSA9IFslc107XG4iICUgKAorICAgICAgICAg
ICAgZG9tYWluX25hbWUsIGV2ZW50X25hbWUsIGpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9s
aXN0LCAiLCAiKSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfY29tbWFu
ZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKKyAgICAgICAg
anNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQorICAgICAgICBHZW5lcmF0
b3IubWV0aG9kX25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNfJXNDbWQsIiAlIChk
b21haW5fbmFtZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQorICAgICAgICBHZW5lcmF0b3IubWV0
aG9kX2hhbmRsZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjolc18lcywiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIHZv
aWQgJXNfJXMobG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmpl
Y3QpOyIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBtZXRo
b2RfaW5fY29kZSA9ICIiCisgICAgICAgIG1ldGhvZF9vdXRfY29kZSA9ICIiCisgICAgICAgIGFn
ZW50X2NhbGxfcGFyYW1fbGlzdCA9IFtdCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdCA9IFtd
CisgICAgICAgIHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIiCisgICAgICAgIGpzX3BhcmFtZXRl
cnNfdGV4dCA9ICIiCisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6Cisg
ICAgICAgICAgICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCisgICAg
ICAgICAgICBtZXRob2RfaW5fY29kZSArPSBUZW1wbGF0ZXMucGFyYW1fY29udGFpbmVyX2FjY2Vz
c19jb2RlCisgICAgICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIHJlcXVlc3RNZXNz
YWdlT2JqZWN0IgorICAgICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCisKKyAgICAgICAgICAg
IGZvciBqc29uX3BhcmFtZXRlciBpbiBqc29uX3BhcmFtczoKKyAgICAgICAgICAgICAgICBqc29u
X3BhcmFtX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCisgICAgICAgICAgICAgICAgcGFy
YW1fcmF3X3R5cGUgPSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcGFyYW1ldGVyLCBkb21h
aW5fbmFtZSkKKworICAgICAgICAgICAgICAgIHZhcl90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0
X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuSU5QVVQsIE5vbmUpCisgICAgICAgICAgICAgICAgZ2V0
dGVyX25hbWUgPSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQorCisgICAgICAgICAg
ICAgICAgaWYgIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJb
Im9wdGlvbmFsIl06CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3Zh
bHVlRm91bmQgPSBmYWxzZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVz
IGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBcIiVzXCIsICYlc192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChq
c29uX3BhcmFtX25hbWUsIHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0
dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDogMCIgJSAoanNvbl9w
YXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgY29kZSA9ICgiICAgICVzIGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFp
bmVyUHRyLCBcIiVzXCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdl
dHRlcl9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9
ICIsIGluXyVzIiAlIGpzb25fcGFyYW1fbmFtZQorCisgICAgICAgICAgICAgICAgbWV0aG9kX2lu
X2NvZGUgKz0gY29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBl
bmQocGFyYW0pCisKKyAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlw
ZS5nZXRfanNfYmluZF90eXBlKCkKKyAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIlwi
JXNcIjoge1wib3B0aW9uYWxcIjogJXMsIFwidHlwZVwiOiBcIiVzXCJ9IiAlICgKKyAgICAgICAg
ICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAoInRydWUi
IGlmICgib3B0aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0
aW9uYWwiXSkgZWxzZSAiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICAgICAganNfYmluZF90eXBl
KQorCisgICAgICAgICAgICAgICAganNfcGFyYW1fbGlzdC5hcHBlbmQoanNfcGFyYW1fdGV4dCkK
KworICAgICAgICAgICAganNfcGFyYW1ldGVyc190ZXh0ID0gIiwgXCJwYXJhbXNcIjogeyIgKyBq
b2luKGpzX3BhcmFtX2xpc3QsICIsICIpICsgIn0iCisKKyAgICAgICAgcmVzcG9uc2VfY29va190
ZXh0ID0gIiIKKyAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKKyAgICAgICAg
ICAgIG1ldGhvZF9vdXRfY29kZSArPSAiXG4iCisgICAgICAgICAgICBmb3IganNvbl9yZXR1cm4g
aW4ganNvbl9jb21tYW5kWyJyZXR1cm5zIl06CisKKyAgICAgICAgICAgICAgICBqc29uX3JldHVy
bl9uYW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQorICAgICAgICAgICAgICAgIHJhd190eXBlID0g
cmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShqc29uX3JldHVybiwgZG9tYWluX25hbWUpCisgICAgICAg
ICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQorICAgICAg
ICAgICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0X2NfaW5pdGlhbGl6ZXIoKQorICAg
ICAgICAgICAgICAgIHZhcl90eXBlID0gcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5
cGUuT1VUUFVULCBOb25lKQorCisgICAgICAgICAgICAgICAgY29kZSA9ICIgICAgJXMgb3V0XyVz
ID0gJXM7XG4iICUgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRp
YWxpemVyKQorICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJm91dF8lcyIgJSBqc29uX3JldHVy
bl9uYW1lCisgICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoXCIl
c1wiLCBvdXRfJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwganNvbl9y
ZXR1cm5fbmFtZSkKKyAgICAgICAgICAgICAgICBpZiB2YXJfdHlwZS5nZXRfdGV4dCgpID09ICJi
b29sIiBhbmQgIm9wdGlvbmFsIiBpbiBqc29uX3JldHVybiBhbmQganNvbl9yZXR1cm5bIm9wdGlv
bmFsIl06CisgICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91dF8lcylc
biAgICAiICUganNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisKKyAgICAgICAgICAgICAgICBtZXRo
b2Rfb3V0X2NvZGUgKz0gY29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlz
dC5hcHBlbmQocGFyYW0pCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfY29va19saXN0LmFwcGVu
ZChjb29rKQorICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gIiAgICBpZiAoIXByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHtcbiVzICAgIH1cbiIgJSBq
b2luKHJlc3BvbnNlX2Nvb2tfbGlzdCwgIiIpCisKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
bWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5iYWNrZW5kX21ldGhv
ZC5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLCBt
ZXRob2ROYW1lPWpzb25fY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgYWdlbnRGaWVsZD0ibV8i
ICsgYWdlbnRfZmllbGRfbmFtZSwKKyAgICAgICAgICAgIG1ldGhvZEluQ29kZT1tZXRob2RfaW5f
Y29kZSwKKyAgICAgICAgICAgIG1ldGhvZE91dENvZGU9bWV0aG9kX291dF9jb2RlLAorICAgICAg
ICAgICAgYWdlbnRDYWxsUGFyYW1zPWpvaW4oYWdlbnRfY2FsbF9wYXJhbV9saXN0LCAiIiksCisg
ICAgICAgICAgICByZXF1ZXN0TWVzc2FnZU9iamVjdD1yZXF1ZXN0X21lc3NhZ2VfcGFyYW0sCisg
ICAgICAgICAgICByZXNwb25zZUNvb2s9cmVzcG9uc2VfY29va190ZXh0KSkKKyAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICBc
IiVzLiVzXCIsIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorCisgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCIgICAgICAgIHRo
aXMuX3JlZ2lzdGVyRGVsZWdhdGUoJ3tcIm1ldGhvZFwiOiBcIiVzLiVzXCIlcywgXCJpZFwiOiAw
fScpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNf
dGV4dCkpCisKKworR2VuZXJhdG9yLmdvKCkKKworYmFja2VuZF9oX2ZpbGUgPSBvcGVuKG91dHB1
dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIsICJ3IikK
K2JhY2tlbmRfY3BwX2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuY3BwIiwgInciKQorCitmcm9udGVuZF9oX2ZpbGUgPSBvcGVuKG91
dHB1dF9oZWFkZXJfZGlybmFtZSArICIvSW5zcGVjdG9yRnJvbnRlbmQuaCIsICJ3IikKK2Zyb250
ZW5kX2NwcF9maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckZyb250
ZW5kLmNwcCIsICJ3IikKKworYmFja2VuZF9qc19maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5h
bWUgKyAiL0luc3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInciKQorCisKK2Zyb250ZW5kX2hfZmls
ZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICBm
aWVsZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5l
cywgIiIpLAorICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5k
X2RvbWFpbl9jbGFzc19saW5lcywgIiIpKSkKKworYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxh
dGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29uc3RydWN0b3JJbml0PWpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKKyAgICBjb25z
dHJ1Y3RvclBhcmFtcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX3BhcmFtX2xp
c3QsICIiKSwKKyAgICBtZXRob2ROYW1lc0VudW1Db250ZW50PWpvaW4oR2VuZXJhdG9yLm1ldGhv
ZF9uYW1lX2VudW1fbGlzdCwgIlxuIiksCisgICAgbWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGZpZWxk
RGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdCwgIlxuIiksCisg
ICAgZm9yd2FyZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlz
dCwgIlxuIikpKQorCitmcm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRf
Y3BwLnN1YnN0aXR1dGUoTm9uZSwKKyAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3Iu
ZnJvbnRlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiIiksCisgICAgbWV0aG9kcz1qb2luKEdl
bmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2NwcF9maWxl
LndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0aG9k
TmFtZURlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xh
cmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGluY2x1ZGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRf
aW5jbHVkZV9saXN0LCAiXG4iKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRf
bWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsICJcbiIpLAorICAgIG1lc3NhZ2VIYW5kbGVycz1q
b2luKEdlbmVyYXRvci5tZXRob2RfaGFuZGxlcl9saXN0LCAiXG4iKSkpCisKK2JhY2tlbmRfanNf
ZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9qcy5zdWJzdGl0dXRlKE5vbmUsCisgICAgZGVs
ZWdhdGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCwgIiIpLAor
ICAgIGV2ZW50QXJncz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QsICIiKSwK
KyAgICBkb21haW5EaXNwYXRjaGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9k
aXNwYXRjaGVyX2xpc3QsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLmNsb3NlKCkKK2JhY2tlbmRf
Y3BwX2ZpbGUuY2xvc2UoKQorCitmcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQorZnJvbnRlbmRfY3Bw
X2ZpbGUuY2xvc2UoKQorCitiYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCmluZGV4IDU0ZDJmZTJjZDA1NTY2Y2ZmNzI4MGI5YTZjNDgy
YTM2ZGZhMTFkMTkuLjE1YWJiM2Q1NTY4ZmZjNzRiODBhYjU5NTAwZjJkMGVhZWU0NDFiZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MCw3ICsxNDAsNyBA
QAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAidHlwZSI6ICJib29s
ZWFuIiwgImRlc2NyaXB0aW9uIjogIlRydWUgaW4gY2FzZSBvZiBzZXNzaW9uIGNvb2tpZS4iIH0K
ICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCi0gICAg
ICAgICAgICB9LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMi
OiBbCiAgICAgICAgICAgICB7CkBAIC04NDYsNyArODQ2LDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJpc0xvY2FsU3RvcmFnZSIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3Jp
cHRpb24iOiAiVHJ1ZSBmb3IgbG9jYWwgc3RvcmFnZS4iIH0sCiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiRW50cnkg
aWQgZm9yIGZ1cnRoZXIgcmVmZXJlbmNlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsK
ICAgICAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5l
cmF0ZS1pbnNwZWN0b3ItaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1pZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE3YWU2NjE5ZmIzZGEy
ZmNkYWE5YzBjOGMzMDc5MzQ0ZmFmZDE1NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3Bl
Y3Rvci1pZGwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3Ry
aWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5cwot
Ci1wcm9ncmFtX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKQotaWYgbGVuKHN5cy5h
cmd2KSA8IDQgb3Igc3lzLmFyZ3ZbMV0gIT0gIi1vIjoKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJV
c2FnZTogJXMgLW8gT1VUUFVUX0ZJTEUgSU5QVVRfRklMRVxuIiAlIHByb2dyYW1fbmFtZSkKLSAg
ICBleGl0KDEpCi0KLW91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0KLWlucHV0X3BhdGggPSBzeXMu
YXJndlszXQotCi1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoLCAiciIpCi1qc29uX3N0cmlu
ZyA9IGlucHV0X2ZpbGUucmVhZCgpCi1qc29uX3N0cmluZyA9IGpzb25fc3RyaW5nLnJlcGxhY2Uo
IjogdHJ1ZSIsICI6IFRydWUiKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6
IGZhbHNlIiwgIjogZmFsc2UiKQotanNvbl9hcGkgPSBldmFsKGpzb25fc3RyaW5nKVsiZG9tYWlu
cyJdCi0KLW91dHB1dF9maWxlID0gb3BlbihvdXRwdXRfcGF0aCwgInciKQotb3V0cHV0X2ZpbGUu
d3JpdGUoIiIiLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0g
Ci1tb2R1bGUgY29yZSB7IiIiKQotCi10eXBlX3RyYWl0cyA9IHsKLSAgICAic3RyaW5nIjogIlN0
cmluZyIsCi0gICAgImludGVnZXIiOiAiaW50IiwKLSAgICAibnVtYmVyIjogImRvdWJsZSIsCi0g
ICAgImJvb2xlYW4iOiAiYm9vbGVhbiIsCi0gICAgImFycmF5IjogIkFycmF5IiwKLSAgICAib2Jq
ZWN0IjogIk9iamVjdCIKLX0KLQotcmVmX3R5cGVzID0ge30KLQotbWFjcm9fdHJhaXRzID0gewot
ICAgICJEYXRhYmFzZSI6ICJTUUxfREFUQUJBU0UiLAotICAgICJEZWJ1Z2dlciI6ICJKQVZBU0NS
SVBUX0RFQlVHR0VSIiwKLSAgICAiRE9NRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIs
Ci0gICAgIlByb2ZpbGVyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJXb3JrZXIiOiAi
V09SS0VSUyIKLX0KLQotZGVmIGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5
cGVfaWQpOgotICAgIGlmIHR5cGVfaWQuZmluZCgiLiIpID09IC0xOgotICAgICAgIHJldHVybiAi
JXMuJXMiICUgKGRvbWFpbl9uYW1lLCB0eXBlX2lkKQotICAgIHJldHVybiB0eXBlX2lkCi0gICAg
Ci0KLWRlZiBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBwYXJhbSk6Ci0gICAgaWYgInR5cGUiIGlu
IHBhcmFtOgotICAgICAgICByZXR1cm4gdHlwZV90cmFpdHNbcGFyYW1bInR5cGUiXV0KLSAgICBp
ZiAiJHJlZiIgaW4gcGFyYW06Ci0gICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBl
X2lkKGRvbWFpbl9uYW1lLCBwYXJhbVsiJHJlZiJdKQotICAgICAgICBpZiB0eXBlX2lkIGluIHJl
Zl90eXBlczoKLSAgICAgICAgICAgIHJlZl90eXBlID0gcmVmX3R5cGVzW3R5cGVfaWRdCi0gICAg
ICAgICAgICByZXR1cm4gdHlwZV90cmFpdHNbcmVmX3R5cGVbInR5cGUiXV0KLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHByaW50KCJUeXBlIG5vdCBmb3VuZDogIiArIHR5cGVfaWQpCi0gICAg
ICAgICAgICByZXR1cm4gIiEhIFR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZAotCi1mb3IgZG9t
YWluIGluIGpzb25fYXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAg
IGlmICJ0eXBlcyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgdHlwZSBpbiBkb21haW5bInR5cGVz
Il06Ci0gICAgICAgICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5f
bmFtZSwgdHlwZVsiaWQiXSkKLSAgICAgICAgICAgIHJlZl90eXBlc1t0eXBlX2lkXSA9IHR5cGU7
Ci0KLWZvciBkb21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUgPSBkb21haW5bImRv
bWFpbiJdCi0gICAgaWYgZG9tYWluX25hbWUgaW4gbWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRw
dXRfZmlsZS53cml0ZSgiXG4jaWYgZGVmaW5lZChFTkFCTEVfJXMpICYmIEVOQUJMRV8lcyIgJSAo
bWFjcm9fdHJhaXRzW2RvbWFpbl9uYW1lXSwgbWFjcm9fdHJhaXRzW2RvbWFpbl9uYW1lXSkpCi0g
ICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9SU5TUEVD
VE9SXSAlcyB7IiAlIGRvbWFpbl9uYW1lKQotCi0gICAgaWYgImNvbW1hbmRzIiBpbiBkb21haW46
Ci0gICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpblsiY29tbWFuZHMiXToKLSAgICAgICAgICAg
IHBhcmFtcyA9IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRlcnMiIGluIGNvbW1hbmQpOgot
ICAgICAgICAgICAgICAgIGZvciBpbl9wYXJhbSBpbiBjb21tYW5kWyJwYXJhbWV0ZXJzIl06Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFtKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAg
ICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCJpbiVzICVzICVzIiAlIChvcHRpb25hbCwgcGFy
YW1fdHlwZShkb21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsibmFtZSJdKSkKLSAgICAg
ICAgICAgIGlmICgicmV0dXJucyIgaW4gY29tbWFuZCk6Ci0gICAgICAgICAgICAgICAgZm9yIG91
dF9wYXJhbSBpbiBjb21tYW5kWyJyZXR1cm5zIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgi
b3B0aW9uYWwiIGluIG91dF9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFw
cGVuZCgib3V0JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBv
dXRfcGFyYW0pLCBvdXRfcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZS53
cml0ZSgiXG4gICAgICAgIHZvaWQgJXMoJXMpOyIgJSAoY29tbWFuZFsibmFtZSJdLCAiLCAiLmpv
aW4ocGFyYW1zKSkpCi0KLSAgICBpZiAiZXZlbnRzIiBpbiBkb21haW46Ci0gICAgICAgIGZvciBl
dmVudCBpbiBkb21haW5bImV2ZW50cyJdOgotICAgICAgICAgICAgcGFyYW1zID0gW10KLSAgICAg
ICAgICAgIGlmICgicGFyYW1ldGVycyIgaW4gZXZlbnQpOgotICAgICAgICAgICAgICAgIGZvciBp
bl9wYXJhbSBpbiBldmVudFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAo
Im9wdGlvbmFsIiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25h
bCA9ICIgW29wdGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFw
cGVuZCgib3V0JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBp
bl9wYXJhbSksIGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3Jp
dGUoIlxuICAgICAgICBbZXZlbnRdIHZvaWQgJXMoJXMpOyIgJSAoZXZlbnRbIm5hbWUiXSwgIiwg
Ii5qb2luKHBhcmFtcykpKQotCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgIH07IikKLSAg
ICBpZiBkb21haW5bImRvbWFpbiJdIGluIG1hY3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2Zp
bGUud3JpdGUoIlxuI2VuZGlmIC8vIEVOQUJMRV8lcyIgJSBtYWNyb190cmFpdHNbZG9tYWluWyJk
b21haW4iXV0pCi1vdXRwdXRfZmlsZS53cml0ZSgiXG59XG4iKQotb3V0cHV0X2ZpbGUuY2xvc2Uo
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111828</attachid>
            <date>2011-10-20 13:01:42 -0700</date>
            <delta_ts>2011-10-21 12:18:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69295-20111021000138.patch</filename>
            <type>text/plain</type>
            <size>121916</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NzdiZmQzODU1OThhODcy
Mzc5NGZjNDU2NWQ4ZjI4YTkxOWRhMzVmLi4zOGQyYzllZjI3M2NhODM1ZTFjN2IxMWI3NDc0OWY0
OWViZWUzYWY5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTAtMjAgIFBldGVy
IFJ5YmluICA8cGV0ZXIucnliaW5AZ21haWwuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJlaW1wbGVtZW50IHByb3RvY29sIGJhY2tlbmQvZnJvbnRlbmQgc291cmNlIGdlbmVyYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkyOTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgorCisgICAgICAgIE9sZCAyLXN0YWdl
IHB5dGhvbitwZXJmIGdlbmVyYXRvciB0aGF0IHVzZXMgaW50ZXJtZWRpYXRlIElETCBvdXRwdXQg
aXMKKyAgICAgICAgYmVpbmcgcmVwbGFjZWQgd2l0aCBhIHNvbGlkIHB5dGhvbiBzY3JpcHQuIFRo
aXMgaXMgZm9yIHNpbXBsaWNpdHkgYW5kCisgICAgICAgIGFzIGEgYmFzZSBmb3IgdGhlIGZ1dHVy
ZSBKU09OIHZhbGlkYXRvci4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IENvZGVHZW5lcmF0b3JzLnByaToKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lw
OgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtOiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1pZGw6IFJlbW92ZWQuCisKIDIwMTEtMTAtMjAgIFRvbnkgQ2hh
bmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggYSBjb21waWxlciB3YXJuaW5n
IGluIE1lZGlhU3RyZWFtVHJhY2suY3BwOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhMmZjNWJi
MGUwMDNiMjFiNzg1YzM2M2IwM2ZjZjc2MzYxYzJjODljLi41ZmJjYTMyY2ZjYjg5MjViN2YzYzhi
OWUxN2UzMDlkN2RmYjVmYjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMjIyMSwxNyArMjIy
MSwxMCBAQCBBRERfQ1VTVE9NX0NPTU1BTkQoCiBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5o
KQogCiBBRERfQ1VTVE9NX0NPTU1BTkQoCi0gICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfS9JbnNwZWN0b3IuaWRsCi0gICAgTUFJTl9ERVBFTkRFTkNZIGluc3BlY3Rvci9J
bnNwZWN0b3IuanNvbgotICAgIERFUEVORFMgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL2dlbmVy
YXRlLWluc3BlY3Rvci1pZGwgJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29u
Ci0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vSW5zcGVjdG9yLmlkbCAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24K
LSAgICBWRVJCQVRJTSkKLQotQUREX0NVU1RPTV9DT01NQU5EKAogICAgIE9VVFBVVCAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvckZyb250ZW5kLmgKLSAgICBNQUlO
X0RFUEVOREVOQ1kgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwK
LSAgICBERVBFTkRTICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmlu
ZGluZ3MucGwgJHtTQ1JJUFRTX0JJTkRJTkdTfSAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5wbSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5z
cGVjdG9yLmlkbAotICAgIENPTU1BTkQgJHtQRVJMX0VYRUNVVEFCTEV9IC1JJHtXRUJDT1JFX0RJ
Un0vYmluZGluZ3Mvc2NyaXB0cyAtSSR7V0VCQ09SRV9ESVJ9L2luc3BlY3RvciAke1dFQkNPUkVf
RElSfS9iaW5kaW5ncy9zY3JpcHRzL2dlbmVyYXRlLWJpbmRpbmdzLnBsIC0tZGVmaW5lcyAiJHtG
RUFUVVJFX0RFRklORVNfSkFWQVNDUklQVH0iIC0tZ2VuZXJhdG9yIEluc3BlY3RvciAke0lETF9J
TkNMVURFU30gLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1w
cmVwcm9jZXNzb3IgIiR7Q09ERV9HRU5FUkFUT1JfUFJFUFJPQ0VTU09SfSIgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rvci5pZGwKKyAgICBNQUlOX0RFUEVOREVOQ1kgaW5z
cGVjdG9yL0luc3BlY3Rvci5qc29uCisgICAgREVQRU5EUyAke1dFQkNPUkVfRElSfS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VU
QUJMRX0gJHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkg
JHtXRUJDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyICIk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tb3V0cHV0X2NwcF9kaXIgIiR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1kZWZpbmVzICIke0ZFQVRVUkVfREVGSU5FU19KQVZB
U0NSSVBUfSIKICAgICBWRVJCQVRJTSkKIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUyAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JGcm9udGVuZC5jcHApCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaSBiL1NvdXJjZS9X
ZWJDb3JlL0NvZGVHZW5lcmF0b3JzLnByaQppbmRleCBiOTcyZGM3MTVlMzkzOGZmODI3ZmUwNWNm
OTkzOTE0ZWE0MjQxNDQzLi5mZWViYmEwYzU1MmIzOWIwNDZiMTZlYWQ1YTZiNGM0ZDBhMGZlNWY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Db2RlR2VuZXJhdG9ycy5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvQ29kZUdlbmVyYXRvcnMucHJpCkBAIC02ODMsMjkgKzY4MywxMiBAQCBpbnNw
ZWN0b3JWYWxpZGF0ZS5kZXBlbmRzID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC12ZXJzaW9uCiBpbnNwZWN0b3JWYWxpZGF0ZS53a0FkZE91dHB1dFRvU291cmNl
cyA9IGZhbHNlCiBhZGRFeHRyYUNvbXBpbGVyKGluc3BlY3RvclZhbGlkYXRlKQogCi1pbnNwZWN0
b3JKU09OLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVjdG9yLmlk
bAoraW5zcGVjdG9ySlNPTi5vdXRwdXQgPSAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0lu
c3BlY3RvckZyb250ZW5kLmNwcCAkJHtXQ19HRU5FUkFURURfU09VUkNFU19ESVJ9L0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcAogaW5zcGVjdG9ySlNPTi5pbnB1dCA9IElOU1BFQ1RPUl9K
U09OCi1pbnNwZWN0b3JKU09OLndrU2NyaXB0ID0gJCRQV0QvaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1pZGwKLWluc3BlY3RvckpTT04uY29tbWFuZHMgPSBweXRob24gJCRpbnNwZWN0b3JK
U09OLndrU2NyaXB0IC1vICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVjdG9yLmlk
bCAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KLWluc3BlY3RvckpTT04uZGVwZW5kcyA9
ICQkUFdEL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRsCi1pbnNwZWN0b3JKU09OLndr
QWRkT3V0cHV0VG9Tb3VyY2VzID0gZmFsc2UKK2luc3BlY3RvckpTT04ud2tTY3JpcHQgPSAkJFBX
RC9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQoraW5zcGVjdG9ySlNPTi5jb21t
YW5kcyA9IHB5dGhvbiAkJGluc3BlY3RvckpTT04ud2tTY3JpcHQgJCRQV0QvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyICQkV0NfR0VORVJBVEVEX1NPVVJDRVNfRElSIC0t
b3V0cHV0X2NwcF9kaXIgJCRXQ19HRU5FUkFURURfU09VUkNFU19ESVIgLS1kZWZpbmVzIFwiJCR7
RkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFR9XCIKK2luc3BlY3RvckpTT04uZGVwZW5kcyA9ICQk
aW5zcGVjdG9ySlNPTi53a1NjcmlwdAogYWRkRXh0cmFDb21waWxlcihpbnNwZWN0b3JKU09OKQot
aW5zcGVjdG9ySlNPTi52YXJpYWJsZV9vdXQgPSBJTlNQRUNUT1JfSlNPTl9PVVRQVVQKLQotaW5z
cGVjdG9ySURMLm91dHB1dCA9ICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVjdG9y
RnJvbnRlbmQuY3BwICQke1dDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUn0vSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuY3BwCi1pbnNwZWN0b3JJREwuaW5wdXQgPSBJTlNQRUNUT1JfSlNPTl9PVVRQ
VVQKLWluc3BlY3RvcklETC53a1NjcmlwdCA9ICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvZ2VuZXJh
dGUtYmluZGluZ3MucGwKLWluc3BlY3RvcklETC5jb21tYW5kcyA9IHBlcmwgLUkkJFBXRC9iaW5k
aW5ncy9zY3JpcHRzIC1JJCRQV0QvaW5zcGVjdG9yICQkaW5zcGVjdG9ySURMLndrU2NyaXB0IC0t
ZGVmaW5lcyBcIiQke0ZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUfVwiIC0tZ2VuZXJhdG9yIElu
c3BlY3RvciAtLW91dHB1dERpciAkJFdDX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiAtLXByZXByb2Nl
c3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAke1FNQUtFX0ZJTEVfTkFNRX0KLWluc3BlY3RvcklE
TC5kZXBlbmRzID0gJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtIFwKLSAg
ICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gXAot
ICAgICAgICAgICAgICAkJFBXRC9iaW5kaW5ncy9zY3JpcHRzL0lETFBhcnNlci5wbSBcCi0gICAg
ICAgICAgICAgICQkUFdEL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtIFwKLSAgICAg
ICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9JbkZpbGVzUGFyc2VyLnBtIFwKLSAgICAg
ICAgICAgICAgJCRQV0QvYmluZGluZ3Mvc2NyaXB0cy9wcmVwcm9jZXNzb3IucG0gXAotICAgICAg
ICAgICAgICAkJFBXRC9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gXAotICAgICAgICAgICAgICAk
JFBXRC9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLWlkbAotaW5zcGVjdG9ySURMLndrRXh0
cmFTb3VyY2VzID0gJCRpbnNwZWN0b3JJREwub3V0cHV0Ci1hZGRFeHRyYUNvbXBpbGVyKGluc3Bl
Y3RvcklETCkKIAogaW5zcGVjdG9yQmFja2VuZFN0dWIub3V0cHV0ID0gZ2VuZXJhdGVkL0luc3Bl
Y3RvckJhY2tlbmRTdHViLnFyYwogaW5zcGVjdG9yQmFja2VuZFN0dWIuaW5wdXQgPSBJTlNQRUNU
T1JfQkFDS0VORF9TVFVCX1FSQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNWEy
Y2MxM2Y4ZjEzNmNmMDgwYTQxMWFlMGViMWIwMDViZmY3N2VmZC4uMmQ5NzJlNTc3NjMzZjM2NjI2
MjczNmZlYjc3NjUwZWMxOWY3OGQzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBA
IC05MTIsMTUgKzkxMiwxMiBAQCBhbGwgOiBJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24uaAogSW5z
cGVjdG9yUHJvdG9jb2xWZXJzaW9uLmggOiBJbnNwZWN0b3IuanNvbiBpbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIAlweXRob24gJChXZWJDb3JlKS9pbnNwZWN0
b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24gLW8gSW5zcGVjdG9yUHJvdG9j
b2xWZXJzaW9uLmggJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KIAotSW5zcGVj
dG9yLmlkbCA6IEluc3BlY3Rvci5qc29uIGluc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItaWRs
Ci0JcHl0aG9uICQoV2ViQ29yZSkvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwgLW8g
SW5zcGVjdG9yLmlkbCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgotCiBhbGwg
OiBJbnNwZWN0b3JGcm9udGVuZC5oCiAKLUlOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9ICQo
R0VORVJBVEVfU0NSSVBUUykgaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KK0lO
U1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IGluc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CiAKLUluc3BlY3RvckZyb250ZW5kLmggOiBJbnNwZWN0b3IuaWRsICQoSU5TUEVDVE9S
X0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoY2FsbCBnZW5lcmF0b3Jfc2NyaXB0LCAkKElOU1BFQ1RP
Ul9HRU5FUkFUT1JfU0NSSVBUUykpIC0tb3V0cHV0RGlyIC4gLS1kZWZpbmVzICIkKEZFQVRVUkVf
REVGSU5FUykgTEFOR1VBR0VfSkFWQVNDUklQVCIgLS1nZW5lcmF0b3IgSW5zcGVjdG9yICQ8CitJ
bnNwZWN0b3JGcm9udGVuZC5oIDogSW5zcGVjdG9yLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9S
X1NDUklQVFMpCisJcHl0aG9uICQoV2ViQ29yZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkgJChXZWJDb3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9k
aXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1kZWZpbmVzICIkKEZFQVRVUkVfREVGSU5FUykgTEFO
R1VBR0VfSkFWQVNDUklQVCIKIAogYWxsIDogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCmluZGV4IDA3OTZhYjU0ZTlhMjhmMDE3YTZhY2ZlMWYyNmRkMjMxZjMzMTRi
MmEuLjQ5NWYxZGNkMzllYjEzOGQzMTA1NzRlYTk3OGMwY2I4MmU0Y2M0YWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCkBAIC02ODgsMTEgKzY4OCw4IEBAIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvRXZl
bnRGYWN0b3J5LmNwcDogJChXZWJDb3JlKS9kb20vbWFrZV9ldmVudF9mYWN0b3J5LnBsICQoCiBE
ZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oIDogJChXZWJD
b3JlKS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gJChXZWJDb3JlKS9pbnNwZWN0b3IvZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24KIAkkKFBZVEhPTikgJChXZWJDb3JlKS9pbnNw
ZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24gLW8gJChHRU5TT1VSQ0VT
X1dFQkNPUkUpL0luc3BlY3RvclByb3RvY29sVmVyc2lvbi5oICQoV2ViQ29yZSkvaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uCiAKLURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yLmlkbCA6
ICQoV2ViQ29yZSkvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uICQoV2ViQ29yZSkvaW5zcGVjdG9y
L2dlbmVyYXRlLWluc3BlY3Rvci1pZGwKLQkkKFBZVEhPTikgJChXZWJDb3JlKS9pbnNwZWN0b3Iv
Z2VuZXJhdGUtaW5zcGVjdG9yLWlkbCAtbyAkKEdFTlNPVVJDRVNfV0VCQ09SRSkvSW5zcGVjdG9y
LmlkbCAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgotCi1EZXJpdmVkU291cmNl
cy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDogRGVyaXZlZFNvdXJjZXMv
V2ViQ29yZS9JbnNwZWN0b3IuaWRsICQoU0NSSVBUU19CSU5ESU5HUykgJChXZWJDb3JlKS9pbnNw
ZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQotCSQoQU1fVl9HRU4pJChQRVJMKSAtSSQo
V2ViQ29yZSkvYmluZGluZ3Mvc2NyaXB0cyAtSSQoV2ViQ29yZSkvaW5zcGVjdG9yICQoV2ViQ29y
ZSkvYmluZGluZ3Mvc2NyaXB0cy9nZW5lcmF0ZS1iaW5kaW5ncy5wbCAkKElETF9QQVRIOiU9LS1p
bmNsdWRlICIlIikgLS1vdXRwdXREaXIgIiQoR0VOU09VUkNFU19XRUJDT1JFKSIgLS1kZWZpbmVz
ICJMQU5HVUFHRV9KQVZBU0NSSVBUPTEgJChGRUFUVVJFX0RFRklORVMpIiAtLWdlbmVyYXRvciBJ
bnNwZWN0b3IgJDwKK0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuY3BwOiAkKFdlYkNvcmUpL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiAkKFdlYkNvcmUp
L2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisJJChQWVRIT04pICQoV2ViQ29y
ZSkvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgJDwgLS1vdXRwdXRfaF9kaXIg
JChHRU5TT1VSQ0VTX1dFQkNPUkUpIC0tb3V0cHV0X2NwcF9kaXIgJChHRU5TT1VSQ0VTX1dFQkNP
UkUpIC0tZGVmaW5lcyAiTEFOR1VBR0VfSkFWQVNDUklQVD0xICQoRkVBVFVSRV9ERUZJTkVTKSIK
IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSW5zcGVjdG9yRnJvbnRlbmQuaDogRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAKIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUv
SW5zcGVjdG9yRnJvbnRlbmQuY3BwOiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJh
Y2tlbmRTdHViLmpzCiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmRTdHVi
LmpzOiBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZWU0YzIyNTI3YTA5MmE4
M2M1ZGVmMzMxMGNjNmE0NDdkNzkzZjMwZC4uZTNiNWIzNTA5NTkxZGI3NzVjZTI2MzQzYzE3OGUw
YWIyNjY4YjgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTMz
NiwxNyArMzM2LDI2IEBACiAgIH0sCiAgICd0YXJnZXRzJzogWwogICAgIHsKLSAgICAgICd0YXJn
ZXRfbmFtZSc6ICdnZW5lcmF0ZV9pbnNwZWN0b3JfcHJvdG9jb2xfdmVyc2lvbicsCisgICAgICAn
dGFyZ2V0X25hbWUnOiAnaW5zcGVjdG9yX3Byb3RvY29sX3NvdXJjZXMnLAogICAgICAgJ3R5cGUn
OiAnbm9uZScsCisgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAnZ2VuZXJhdGVfaW5z
cGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nCisgICAgICBdLAogICAgICAgJ2FjdGlvbnMnOiBbCi0g
ICAgICAgICB7Ci0gICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlSW5zcGVjdG9yUHJv
dG9jb2xWZXJzaW9uJywKKyAgICAgICAgeworICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5l
cmF0ZUluc3BlY3RvclByb3RvY29sU291cmNlcycsCiAgICAgICAgICAgJ2lucHV0cyc6IFsKLSAg
ICAgICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNp
b24nLAorICAgICAgICAgICAgIyBGaXJzdCBpbnB1dC4gSXQgc3RhbmRzIGZvciBweXRob24gc2Ny
aXB0IGluIGFjdGlvbiBiZWxvdy4KKyAgICAgICAgICAgICcuLi9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weScsCisgICAgICAgICAgICAjIE90aGVyIGlucHV0cy4gVGhleSBnbyBh
cyBhcmd1bWVudHMgdG8gdGhlIHB5dGhvbiBzY3JpcHQuCiAgICAgICAgICAgICAnLi4vaW5zcGVj
dG9yL0luc3BlY3Rvci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzog
WwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0
b3JQcm90b2NvbFZlcnNpb24uaCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2ViY29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAnLAorICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oJywKKyAgICAgICAgICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJj
b3JlL0luc3BlY3RvckZyb250ZW5kLmNwcCcsCisgICAgICAgICAgICAnPChTSEFSRURfSU5URVJN
RURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvckZyb250ZW5kLmgnLAorICAgICAgICAgICAgJzwo
U0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yQmFja2VuZFN0dWIuanMn
LAogICAgICAgICAgIF0sCiAgICAgICAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgICAgICdn
ZW5lcmF0b3JfaW5jbHVkZV9kaXJzJzogWwpAQCAtMzU0LDI4ICszNjMsMjcgQEAKICAgICAgICAg
ICB9LAogICAgICAgICAgICdhY3Rpb24nOiBbCiAgICAgICAgICAgICAncHl0aG9uJywKLSAgICAg
ICAgICAgICcuLi9pbnNwZWN0b3IvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLXZlcnNpb24n
LAotICAgICAgICAgICAgJy1vJywKLSAgICAgICAgICAgICc8QChfb3V0cHV0cyknLAotICAgICAg
ICAgICAgJzxAKF9pbnB1dHMpJworICAgICAgICAgICAgJzxAKF9pbnB1dHMpJywKKyAgICAgICAg
ICAgICctLW91dHB1dF9oX2RpcicsICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQn
LAorICAgICAgICAgICAgJy0tb3V0cHV0X2NwcF9kaXInLCAnPChTSEFSRURfSU5URVJNRURJQVRF
X0RJUikvd2ViY29yZScsCisgICAgICAgICAgICAnLS1kZWZpbmVzJywgJzwoZmVhdHVyZV9kZWZp
bmVzKSBMQU5HVUFHRV9KQVZBU0NSSVBUJywKICAgICAgICAgICBdLAotICAgICAgICAgICdtZXNz
YWdlJzogJ1ZhbGlkYXRlIGluc3BlY3RvciBwcm90b2NvbCBmb3IgYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkgYW5kIGdlbmVyYXRlIHZlcnNpb24gZmlsZScsCi0gICAgICAgIH0KKyAgICAgICAgICAn
bWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5z
cGVjdG9yLmpzb24nLAorICAgICAgICB9LAogICAgICAgXQogICAgIH0sCiAgICAgewotICAgICAg
J3RhcmdldF9uYW1lJzogJ2luc3BlY3Rvcl9pZGwnLAorICAgICAgJ3RhcmdldF9uYW1lJzogJ2dl
bmVyYXRlX2luc3BlY3Rvcl9wcm90b2NvbF92ZXJzaW9uJywKICAgICAgICd0eXBlJzogJ25vbmUn
LAogICAgICAgJ2FjdGlvbnMnOiBbCi0KLSAgICAgICAgewotICAgICAgICAgICdhY3Rpb25fbmFt
ZSc6ICdnZW5lcmF0ZUluc3BlY3RvclByb3RvY29sSURMJywKKyAgICAgICAgIHsKKyAgICAgICAg
ICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVJbnNwZWN0b3JQcm90b2NvbFZlcnNpb24nLAogICAg
ICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWlu
c3BlY3Rvci1pZGwnLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtdmVyc2lvbicsCiAgICAgICAgICAgICAnLi4vaW5zcGVjdG9yL0luc3BlY3Rv
ci5qc29uJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzogWwotICAgICAgICAg
ICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5zcGVjdG9yLmlkbCcsCisg
ICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0L0luc3BlY3RvclBy
b3RvY29sVmVyc2lvbi5oJywKICAgICAgICAgICBdLAogICAgICAgICAgICd2YXJpYWJsZXMnOiB7
CiAgICAgICAgICAgICAnZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyc6IFsKQEAgLTM4Myw2NSArMzkx
LDE2IEBACiAgICAgICAgICAgfSwKICAgICAgICAgICAnYWN0aW9uJzogWwogICAgICAgICAgICAg
J3B5dGhvbicsCi0gICAgICAgICAgICAnLi4vaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1p
ZGwnLAorICAgICAgICAgICAgJy4uL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtdmVyc2lvbicsCiAgICAgICAgICAgICAnLW8nLAogICAgICAgICAgICAgJzxAKF9vdXRwdXRz
KScsCiAgICAgICAgICAgICAnPEAoX2lucHV0cyknCiAgICAgICAgICAgXSwKLSAgICAgICAgICAn
bWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90b2NvbCBzb3VyY2VzIGZyb20gSW5z
cGVjdG9yLmlkbCcsCisgICAgICAgICAgJ21lc3NhZ2UnOiAnVmFsaWRhdGUgaW5zcGVjdG9yIHBy
b3RvY29sIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBhbmQgZ2VuZXJhdGUgdmVyc2lvbiBm
aWxlJywKICAgICAgICAgfQogICAgICAgXQogICAgIH0sCiAgICAgewotICAgICAgJ3RhcmdldF9u
YW1lJzogJ2luc3BlY3Rvcl9wcm90b2NvbF9zb3VyY2VzJywKLSAgICAgICd0eXBlJzogJ25vbmUn
LAotICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKLSAgICAgICAgJ2luc3BlY3Rvcl9pZGwnLAotICAg
ICAgICAnZ2VuZXJhdGVfaW5zcGVjdG9yX3Byb3RvY29sX3ZlcnNpb24nCi0gICAgICBdLAotICAg
ICAgJ2FjdGlvbnMnOiBbCi0gICAgICAgIHsKLSAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2Vu
ZXJhdGVJbnNwZWN0b3JQcm90b2NvbFNvdXJjZXMnLAotICAgICAgICAgICMgVGhlIHNlY29uZCBp
bnB1dCBpdGVtIHdpbGwgYmUgdXNlZCBhcyBpdGVtIG5hbWUgaW4gdmNwcm9qLgotICAgICAgICAg
ICMgSXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBJbnNwZWN0b3IuaWRsIHRoZXJlIGJlY2F1c2UK
LSAgICAgICAgICAjIGFsbCBpZGwgZmlsZXMgYXJlIG1hcmtpbmcgYXMgZXhjbHVkZWQgYnkgZ3lw
IGdlbmVyYXRvci4KLSAgICAgICAgICAnaW5wdXRzJzogWwotICAgICAgICAgICAgJy4uL2JpbmRp
bmdzL3NjcmlwdHMvZ2VuZXJhdGUtYmluZGluZ3MucGwnLAotICAgICAgICAgICAgJy4uL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtJywKLSAgICAgICAgICAgICcuLi9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0nLAotICAgICAgICAgICAgJy4uL2JpbmRpbmdzL3Nj
cmlwdHMvSURMUGFyc2VyLnBtJywKLSAgICAgICAgICAgICcuLi9iaW5kaW5ncy9zY3JpcHRzL0lE
TFN0cnVjdHVyZS5wbScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikv
d2ViY29yZS9JbnNwZWN0b3IuaWRsJywKLSAgICAgICAgICBdLAotICAgICAgICAgICdvdXRwdXRz
JzogWwotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwJywKLSAgICAgICAgICAgICc8KFNIQVJFRF9JTlRF
Uk1FRElBVEVfRElSKS93ZWJjb3JlL0luc3BlY3RvckJhY2tlbmRTdHViLmpzJywKLSAgICAgICAg
ICAgICc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
Y29yZS9JbnNwZWN0b3JGcm9udGVuZC5jcHAnLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVS
TUVESUFURV9ESVIpL3dlYmtpdC9JbnNwZWN0b3JGcm9udGVuZC5oJywKLSAgICAgICAgICBdLAot
ICAgICAgICAgICd2YXJpYWJsZXMnOiB7Ci0gICAgICAgICAgICAnZ2VuZXJhdG9yX2luY2x1ZGVf
ZGlycyc6IFsKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgfSwKLSAgICAgICAgICAnYWN0aW9u
JzogWwotICAgICAgICAgICAgJ3B5dGhvbicsCi0gICAgICAgICAgICAnc2NyaXB0cy9ydWxlX2Jp
bmRpbmcucHknLAotICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmNv
cmUvSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJ
Uikvd2ViY29yZScsCi0gICAgICAgICAgICAnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0JywKLSAgICAgICAgICAgICctLScsCi0gICAgICAgICAgICAnPEAoX2lucHV0cyknLAotICAg
ICAgICAgICAgJy0tJywKLSAgICAgICAgICAgICctLWRlZmluZXMnLCAnPChmZWF0dXJlX2RlZmlu
ZXMpIExBTkdVQUdFX0pBVkFTQ1JJUFQnLAotICAgICAgICAgICAgJy0tZ2VuZXJhdG9yJywgJ0lu
c3BlY3RvcicsCi0gICAgICAgICAgICAnPEAoZ2VuZXJhdG9yX2luY2x1ZGVfZGlycyknCi0gICAg
ICAgICAgXSwKLSAgICAgICAgICAnbWVzc2FnZSc6ICdHZW5lcmF0aW5nIEluc3BlY3RvciBwcm90
b2NvbCBzb3VyY2VzIGZyb20gSW5zcGVjdG9yLmlkbCcsCi0gICAgICAgIH0sCi0gICAgICBdCi0g
ICAgfSwKLSAgICB7CiAgICAgICAndGFyZ2V0X25hbWUnOiAnaW5qZWN0ZWRfc2NyaXB0X3NvdXJj
ZScsCiAgICAgICAndHlwZSc6ICdub25lJywKICAgICAgICdhY3Rpb25zJzogWwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzJlMjE4M2MxZjI5YzQ2Nzk1ODkyNjA1MGNiZDk4NGNh
OTM5Y2ExOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgL2Rl
di9udWxsCkBAIC0xLDEyMzUgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLSMgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLQotcGFja2FnZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
OwotCi11c2Ugc3RyaWN0OwotCi11c2UgQ2xhc3M6OlN0cnVjdDsKLXVzZSBGaWxlOjpzdGF0Owot
Ci1teSAldHlwZVRyYW5zZm9ybTsKLSR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0g
PSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAot
ICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCi0gICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV9hcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAotfTsKLSR0eXBl
VHJhbnNmb3JteyJDU1MifSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNTU0FnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIsCi0gICAgImRvbWFpbkFj
Y2Vzc29yIiA9PiAibV9jc3NBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkNvbnNvbGUifSA9
IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNvbnNvbGVBZ2VudCIsCi0gICAgImhlYWRl
ciIgPT4gIkluc3BlY3RvckNvbnNvbGVBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2NvbnNvbGVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IlBhZ2UifSA9IHsKLSAgICAi
Zm9yd2FyZCIgPT4gIkluc3BlY3RvclBhZ2VBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3Bl
Y3RvclBhZ2VBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX3BhZ2VBZ2VudCIs
Ci19OwotJHR5cGVUcmFuc2Zvcm17IkRlYnVnZ2VyIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RlYnVnZ2VyQWdlbnQiLAot
fTsKLSR0eXBlVHJhbnNmb3JteyJET01EZWJ1Z2dlciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQuaCIsCi0gICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9kb21EZWJ1Z2dl
ckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiRGF0YWJhc2UifSA9IHsKLSAgICAiZm9yd2Fy
ZCIgPT4gIkluc3BlY3RvckRhdGFiYXNlQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZGF0YWJhc2VB
Z2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAi
SW5zcGVjdG9yRE9NQWdlbnQiLAotICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5o
IiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2RvbUFnZW50IiwKLX07Ci0kdHlwZVRyYW5z
Zm9ybXsiRE9NU3RvcmFnZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Lmgi
LAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZG9tU3RvcmFnZUFnZW50IiwKLX07Ci0kdHlw
ZVRyYW5zZm9ybXsiRmlsZVN5c3RlbSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
RmlsZVN5c3RlbUFnZW50IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yRmlsZVN5c3RlbUFn
ZW50LmgiLAotICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1fZmlsZVN5c3RlbUFnZW50IiwKLX07
Ci0kdHlwZVRyYW5zZm9ybXsiSW5zcGVjdG9yIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNw
ZWN0b3JBZ2VudCIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvckFnZW50LmgiLAotICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3Jt
eyJOZXR3b3JrIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JSZXNvdXJjZUFnZW50
IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5oIiwKLSAgICAiZG9t
YWluQWNjZXNzb3IiID0+ICJtX3Jlc291cmNlQWdlbnQiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJQ
cm9maWxlciJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCIs
Ci0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCIsCi0gICAgImRvbWFp
bkFjY2Vzc29yIiA9PiAibV9wcm9maWxlckFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUnVu
dGltZSJ9ID0gewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yUnVudGltZUFnZW50IiwKLSAg
ICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yUnVudGltZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nl
c3NvciIgPT4gIm1fcnVudGltZUFnZW50IiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiVGltZWxpbmUi
fSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvclRpbWVsaW5lQWdlbnQiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JUaW1lbGluZUFnZW50LmgiLAotICAgICJkb21haW5BY2Nlc3Nv
ciIgPT4gIm1fdGltZWxpbmVBZ2VudCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IldvcmtlciJ9ID0g
ewotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yV29ya2VyQWdlbnQiLAotICAgICJoZWFkZXIi
ID0+ICJJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIiwKLSAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJt
X3dvcmtlckFnZW50IiwKLX07Ci0KLSR0eXBlVHJhbnNmb3JteyJGcm9udGVuZCJ9ID0gewotICAg
ICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yRnJvbnRlbmQiLAotICAgICJoZWFkZXIiID0+ICJJbnNw
ZWN0b3JGcm9udGVuZC5oIiwKLX07Ci0kdHlwZVRyYW5zZm9ybXsiUGFzc1JlZlB0ciJ9ID0gewot
ICAgICJmb3J3YXJkSGVhZGVyIiA9PiAid3RmL1Bhc3NSZWZQdHIuaCIsCi19OwotJHR5cGVUcmFu
c2Zvcm17IlJlZkNvdW50ZWQifSA9IHsKLSAgICAiZm9yd2FyZEhlYWRlciIgPT4gInd0Zi9SZWZD
b3VudGVkLmgiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwi
fSA9IHsKLSAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCIsCi0gICAg
ImhlYWRlciIgPT4gIkluc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oIiwKLX07Ci0kdHlwZVRyYW5z
Zm9ybXsiT2JqZWN0In0gPSB7Ci0gICAgInBhcmFtIiA9PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IiwKLSAgICAidmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiIsCi0g
ICAgImRlZmF1bHRWYWx1ZSIgPT4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiLAotICAgICJm
b3J3YXJkIiA9PiAiSW5zcGVjdG9yT2JqZWN0IiwKLSAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9y
VmFsdWVzLmgiLAotICAgICJKU09OVHlwZSIgPT4gIk9iamVjdCIsCi0gICAgIkpTVHlwZSIgPT4g
Im9iamVjdCIsCi19OwotJHR5cGVUcmFuc2Zvcm17IkFycmF5In0gPSB7Ci0gICAgInBhcmFtIiA9
PiAiUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4iLAotICAgICJ2YXJpYWJsZSIgPT4gIlJlZlB0
cjxJbnNwZWN0b3JBcnJheT4iLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCkiLAotICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXJyYXkiLAotICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JWYWx1ZXMuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiQXJyYXki
LAotICAgICJKU1R5cGUiID0+ICJvYmplY3QiLAotfTsKLSR0eXBlVHJhbnNmb3JteyJWYWx1ZSJ9
ID0gewotICAgICJwYXJhbSIgPT4gIlBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKLSAgICAi
dmFyaWFibGUiID0+ICJSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IiwKLSAgICAiZGVmYXVsdFZhbHVl
IiA9PiAiSW5zcGVjdG9yVmFsdWU6Om51bGwoKSIsCi0gICAgImZvcndhcmQiID0+ICJJbnNwZWN0
b3JWYWx1ZSIsCi0gICAgImhlYWRlciIgPT4gIkluc3BlY3RvclZhbHVlcy5oIiwKLSAgICAiSlNP
TlR5cGUiID0+ICJWYWx1ZSIsCi0gICAgIkpTVHlwZSIgPT4gIiIsCi19OwotJHR5cGVUcmFuc2Zv
cm17IlN0cmluZyJ9ID0gewotICAgICJwYXJhbSIgPT4gImNvbnN0IFN0cmluZyYiLAotICAgICJv
cHRpb25hbF9wYXJhbSIgPT4gImNvbnN0IFN0cmluZyogY29uc3QiLAotICAgICJvcHRpb25hbF92
YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAiU3RyaW5nIiwKLSAgICAi
cmV0dXJuIiA9PiAiU3RyaW5nIiwKLSAgICAiZGVmYXVsdFZhbHVlIiA9PiAiXCJcIiIsCi0gICAg
ImZvcndhcmRIZWFkZXIiID0+ICJQbGF0Zm9ybVN0cmluZy5oIiwKLSAgICAiaGVhZGVyIiA9PiAi
UGxhdGZvcm1TdHJpbmcuaCIsCi0gICAgIkpTT05UeXBlIiA9PiAiU3RyaW5nIiwKLSAgICAiSlNU
eXBlIiA9PiAic3RyaW5nIgotfTsKLSR0eXBlVHJhbnNmb3JteyJsb25nIn0gPSB7Ci0gICAgInBh
cmFtIiA9PiAibG9uZyIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgbG9uZyogY29u
c3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxl
IiA9PiAibG9uZyIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjAiLAotICAgICJmb3J3YXJkIiA9
PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAot
ICAgICJKU1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImludCJ9ID0gewot
ICAgICJwYXJhbSIgPT4gImludCIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgaW50
KiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFy
aWFibGUiID0+ICJpbnQiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwIiwKLSAgICAiZm9yd2Fy
ZCIgPT4gIiIsCi0gICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVy
IiwKLSAgICAiSlNUeXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ1bnNpZ25l
ZCBsb25nIn0gPSB7Ci0gICAgInBhcmFtIiA9PiAidW5zaWduZWQgbG9uZyIsCi0gICAgIm9wdGlv
bmFsX3BhcmFtIiA9PiAiY29uc3QgdW5zaWduZWQgbG9uZyogY29uc3QiLAotICAgICJvcHRpb25h
bF92YWx1ZUFjY2Vzc29yIiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAidW5zaWduZWQgbG9u
ZyIsCi0gICAgImRlZmF1bHRWYWx1ZSIgPT4gIjB1IiwKLSAgICAiZm9yd2FyZCIgPT4gIiIsCi0g
ICAgImhlYWRlciIgPT4gIiIsCi0gICAgIkpTT05UeXBlIiA9PiAiTnVtYmVyIiwKLSAgICAiSlNU
eXBlIiA9PiAibnVtYmVyIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ1bnNpZ25lZCBpbnQifSA9IHsK
LSAgICAicGFyYW0iID0+ICJ1bnNpZ25lZCBpbnQiLAotICAgICJvcHRpb25hbF9wYXJhbSIgPT4g
ImNvbnN0IHVuc2lnbmVkIGludCogY29uc3QiLAotICAgICJvcHRpb25hbF92YWx1ZUFjY2Vzc29y
IiA9PiAiKiIsCi0gICAgInZhcmlhYmxlIiA9PiAidW5zaWduZWQgaW50IiwKLSAgICAiZGVmYXVs
dFZhbHVlIiA9PiAiMHUiLAotICAgICJmb3J3YXJkIiA9PiAiIiwKLSAgICAiaGVhZGVyIiA9PiAi
IiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJKU1R5cGUiID0+ICJudW1iZXIi
Ci19OwotJHR5cGVUcmFuc2Zvcm17ImRvdWJsZSJ9ID0gewotICAgICJwYXJhbSIgPT4gImRvdWJs
ZSIsCi0gICAgIm9wdGlvbmFsX3BhcmFtIiA9PiAiY29uc3QgZG91YmxlKiBjb25zdCIsCi0gICAg
Im9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFyaWFibGUiID0+ICJkb3Vi
bGUiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICIwLjAiLAotICAgICJmb3J3YXJkIiA9PiAiIiwK
LSAgICAiaGVhZGVyIiA9PiAiIiwKLSAgICAiSlNPTlR5cGUiID0+ICJOdW1iZXIiLAotICAgICJK
U1R5cGUiID0+ICJudW1iZXIiCi19OwotJHR5cGVUcmFuc2Zvcm17ImJvb2xlYW4ifSA9IHsKLSAg
ICAicGFyYW0iID0+ICJib29sIiwKLSAgICAib3B0aW9uYWxfcGFyYW0iID0+ICJjb25zdCBib29s
KiBjb25zdCIsCi0gICAgIm9wdGlvbmFsX3ZhbHVlQWNjZXNzb3IiID0+ICIqIiwKLSAgICAidmFy
aWFibGUiPT4gImJvb2wiLAotICAgICJkZWZhdWx0VmFsdWUiID0+ICJmYWxzZSIsCi0gICAgImZv
cndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiLAotICAgICJKU09OVHlwZSIgPT4gIkJv
b2xlYW4iLAotICAgICJKU1R5cGUiID0+ICJib29sZWFuIgotfTsKLSR0eXBlVHJhbnNmb3JteyJ2
b2lkIn0gPSB7Ci0gICAgImZvcndhcmQiID0+ICIiLAotICAgICJoZWFkZXIiID0+ICIiCi19Owot
JHR5cGVUcmFuc2Zvcm17IlZlY3RvciJ9ID0gewotICAgICJoZWFkZXIiID0+ICJ3dGYvVmVjdG9y
LmgiCi19OwotCi0jIERlZmF1bHQgTGljZW5zZSBUZW1wbGF0ZXMKLQotbXkgJGxpY2Vuc2VUZW1w
bGF0ZSA9IDw8ICJFT0YiOwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KLUVPRgotCi1teSAkY29kZUdlbmVyYXRvcjsKLW15ICRvdXRwdXRE
aXI7Ci1teSAkb3V0cHV0SGVhZGVyc0RpcjsKLW15ICR3cml0ZURlcGVuZGVuY2llczsKLW15ICR2
ZXJib3NlOwotCi1teSAkbmFtZXNwYWNlOwotCi1teSAkYmFja2VuZENsYXNzTmFtZTsKLW15ICRi
YWNrZW5kQ2xhc3NEZWNsYXJhdGlvbjsKLW15ICRiYWNrZW5kSlNTdHViTmFtZTsKLW15ICViYWNr
ZW5kVHlwZXM7Ci1teSBAYmFja2VuZE1ldGhvZHM7Ci1teSBAYmFja2VuZE1ldGhvZHNJbXBsOwot
bXkgJWJhY2tlbmRNZXRob2RTaWduYXR1cmVzOwotbXkgJGJhY2tlbmRDb25zdHJ1Y3RvcjsKLW15
IEBiYWNrZW5kQ29uc3RhbnREZWNsYXJhdGlvbnM7Ci1teSBAYmFja2VuZENvbnN0YW50RGVmaW5p
dGlvbnM7Ci1teSBAYmFja2VuZEZvb3RlcjsKLW15IEBiYWNrZW5kSlNTdHViczsKLW15IEBiYWNr
ZW5kSlNFdmVudHM7Ci1teSAlYmFja2VuZERvbWFpbnM7Ci0KLW15ICRmcm9udGVuZENsYXNzTmFt
ZTsKLW15ICVmcm9udGVuZFR5cGVzOwotbXkgQGZyb250ZW5kTWV0aG9kczsKLW15IEBmcm9udGVu
ZEFnZW50RmllbGRzOwotbXkgQGZyb250ZW5kTWV0aG9kc0ltcGw7Ci1teSAlZnJvbnRlbmRNZXRo
b2RTaWduYXR1cmVzOwotbXkgJGZyb250ZW5kQ29uc3RydWN0b3I7Ci1teSBAZnJvbnRlbmRDb25z
dGFudERlY2xhcmF0aW9uczsKLW15IEBmcm9udGVuZENvbnN0YW50RGVmaW5pdGlvbnM7Ci1teSBA
ZnJvbnRlbmRGb290ZXI7Ci1teSBAZnJvbnRlbmREb21haW5zOwotCi0jIERlZmF1bHQgY29uc3Ry
dWN0b3IKLXN1YiBuZXcKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJHJlZmVy
ZW5jZSA9IHsgfTsKLQotICAgICRjb2RlR2VuZXJhdG9yID0gc2hpZnQ7Ci0gICAgJG91dHB1dERp
ciA9IHNoaWZ0OwotICAgICRvdXRwdXRIZWFkZXJzRGlyID0gc2hpZnQ7Ci0gICAgc2hpZnQ7ICMg
JHVzZUxheWVyT25Ub3AKLSAgICBzaGlmdDsgIyAkcHJlcHJvY2Vzc29yCi0gICAgJHdyaXRlRGVw
ZW5kZW5jaWVzID0gc2hpZnQ7Ci0gICAgJHZlcmJvc2UgPSBzaGlmdDsKLQotICAgIGJsZXNzKCRy
ZWZlcmVuY2UsICRvYmplY3QpOwotICAgIHJldHVybiAkcmVmZXJlbmNlOwotfQotCi0jIFBhcmFt
czogJ2lkbERvY3VtZW50JyBzdHJ1Y3QKLXN1YiBHZW5lcmF0ZU1vZHVsZQotewotICAgIG15ICRv
YmplY3QgPSBzaGlmdDsKLSAgICBteSAkZGF0YU5vZGUgPSBzaGlmdDsKLQotICAgICRuYW1lc3Bh
Y2UgPSAkZGF0YU5vZGUtPm1vZHVsZTsKLSAgICAkbmFtZXNwYWNlID1+IHMvY29yZS9XZWJDb3Jl
LzsKLQotICAgICRmcm9udGVuZENsYXNzTmFtZSA9ICJJbnNwZWN0b3JGcm9udGVuZCI7Ci0gICAg
JGZyb250ZW5kQ29uc3RydWN0b3IgPSAiICAgICR7ZnJvbnRlbmRDbGFzc05hbWV9KEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCopOyI7Ci0gICAgcHVzaChAZnJvbnRlbmRGb290ZXIsICJwcml2YXRl
OiIpOwotICAgIHB1c2goQGZyb250ZW5kRm9vdGVyLCAiICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Iik7Ci0gICAgJGZyb250ZW5kVHlwZXN7
IlN0cmluZyJ9ID0gMTsKLSAgICAkZnJvbnRlbmRUeXBlc3siSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsIn0gPSAxOwotICAgICRmcm9udGVuZFR5cGVzeyJQYXNzUmVmUHRyIn0gPSAxOwotCi0gICAg
JGJhY2tlbmRDbGFzc05hbWUgPSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIiOwotICAgICRi
YWNrZW5kQ2xhc3NEZWNsYXJhdGlvbiA9ICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjogcHVi
bGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IjsKLSAgICAkYmFja2Vu
ZEpTU3R1Yk5hbWUgPSAiSW5zcGVjdG9yQmFja2VuZFN0dWIiOwotICAgICRiYWNrZW5kVHlwZXN7
Ikluc3BlY3RvciJ9ID0gMTsKLSAgICAkYmFja2VuZFR5cGVzeyJJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwifSA9IDE7Ci0gICAgJGJhY2tlbmRUeXBlc3siUGFzc1JlZlB0ciJ9ID0gMTsKLSAgICAk
YmFja2VuZFR5cGVzeyJSZWZDb3VudGVkIn0gPSAxOwotICAgICRiYWNrZW5kVHlwZXN7Ik9iamVj
dCJ9ID0gMTsKLX0KLQotIyBQYXJhbXM6ICdpZGxEb2N1bWVudCcgc3RydWN0Ci1zdWIgR2VuZXJh
dGVJbnRlcmZhY2UKLXsKLSAgICBteSAkb2JqZWN0ID0gc2hpZnQ7Ci0gICAgbXkgJGludGVyZmFj
ZSA9IHNoaWZ0OwotICAgIG15ICRkZWZpbmVzID0gc2hpZnQ7Ci0KLSAgICBteSAlYWdlbnQgPSAo
Ci0gICAgICAgIG1ldGhvZERlY2xhcmF0aW9ucyA9PiBbXSwKLSAgICAgICAgbWV0aG9kU2lnbmF0
dXJlcyA9PiB7fQotICAgICk7Ci0gICAgZ2VuZXJhdGVGdW5jdGlvbnMoJGludGVyZmFjZSwgXCVh
Z2VudCk7Ci0gICAgaWYgKEB7JGFnZW50e21ldGhvZERlY2xhcmF0aW9uc319KSB7Ci0gICAgICAg
IHB1c2goQGZyb250ZW5kRG9tYWlucywgJGludGVyZmFjZS0+bmFtZSk7Ci0gICAgICAgIGdlbmVy
YXRlQWdlbnREZWNsYXJhdGlvbigkaW50ZXJmYWNlLCBcJWFnZW50KTsKLSAgICB9Ci19Ci0KLXN1
YiBnZW5lcmF0ZUFnZW50RGVjbGFyYXRpb24KLXsKLSAgICBteSAkaW50ZXJmYWNlID0gc2hpZnQ7
Ci0gICAgbXkgJGFnZW50ID0gc2hpZnQ7Ci0gICAgbXkgJGFnZW50TmFtZSA9ICRpbnRlcmZhY2Ut
Pm5hbWU7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIGNsYXNzICR7YWdlbnROYW1l
fSB7Iik7Ci0gICAgcHVzaChAZnJvbnRlbmRNZXRob2RzLCAiICAgIHB1YmxpYzoiKTsKLSAgICBw
dXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgICAgICR7YWdlbnROYW1lfShJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfSIpOwotICAgIHB1c2goQGZy
b250ZW5kTWV0aG9kcywgQHskYWdlbnQtPnttZXRob2REZWNsYXJhdGlvbnN9fSk7Ci0gICAgcHVz
aChAZnJvbnRlbmRNZXRob2RzLCAiICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfSIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAg
ICBwcml2YXRlOiIpOwotICAgIHB1c2goQGZyb250ZW5kTWV0aG9kcywgIiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsiKTsKLSAgICBw
dXNoKEBmcm9udGVuZE1ldGhvZHMsICIgICAgfTsiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhv
ZHMsICIiKTsKLQotICAgIG15ICRnZXR0ZXJOYW1lID0gbGMoJGFnZW50TmFtZSk7Ci0gICAgcHVz
aChAZnJvbnRlbmRNZXRob2RzLCAiICAgICR7YWdlbnROYW1lfSogJHtnZXR0ZXJOYW1lfSgpIHsg
cmV0dXJuICZtXyR7Z2V0dGVyTmFtZX07IH0iKTsKLSAgICBwdXNoKEBmcm9udGVuZE1ldGhvZHMs
ICIiKTsKLQotICAgIHB1c2goQGZyb250ZW5kRm9vdGVyLCAiICAgICR7YWdlbnROYW1lfSBtXyR7
Z2V0dGVyTmFtZX07Iik7Ci0KLSAgICBwdXNoKEBmcm9udGVuZEFnZW50RmllbGRzLCAibV8ke2dl
dHRlck5hbWV9Iik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZyb250ZW5kQ29uc3RydWN0b3JJbXBsCi17
Ci0gICAgbXkgQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsOwotICAgIHB1c2goQGZyb250ZW5kQ29u
c3RydWN0b3JJbXBsLCAiJHtmcm9udGVuZENsYXNzTmFtZX06OiR7ZnJvbnRlbmRDbGFzc05hbWV9
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwot
ICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAiICAgIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSIpOwotICAgIGZvcmVhY2ggbXkg
JGFnZW50RmllbGQgKEBmcm9udGVuZEFnZW50RmllbGRzKSB7Ci0gICAgICAgIHB1c2goQGZyb250
ZW5kQ29uc3RydWN0b3JJbXBsLCAiICAgICwgJHthZ2VudEZpZWxkfShpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIik7Ci0gICAgfQotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAi
eyIpOwotICAgIHB1c2goQGZyb250ZW5kQ29uc3RydWN0b3JJbXBsLCAifSIpOwotICAgIHJldHVy
biBAZnJvbnRlbmRDb25zdHJ1Y3RvckltcGw7Ci19Ci0KLXN1YiBnZW5lcmF0ZUZ1bmN0aW9ucwot
ewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLQot
ICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRpbnRlcmZhY2UtPmZ1bmN0aW9uc30pIHsKLSAg
ICAgICAgaWYgKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiZXZl
bnQifSkgewotICAgICAgICAgICAgZ2VuZXJhdGVGcm9udGVuZEZ1bmN0aW9uKCRpbnRlcmZhY2Us
ICRmdW5jdGlvbiwgJGFnZW50KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGdlbmVy
YXRlQmFja2VuZEZ1bmN0aW9uKCRpbnRlcmZhY2UsICRmdW5jdGlvbik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBjb2xsZWN0QmFja2VuZEpTU3R1YkZ1bmN0aW9ucygkaW50ZXJmYWNlKTsKLSAg
ICBjb2xsZWN0QmFja2VuZEpTU3R1YkV2ZW50cygkaW50ZXJmYWNlKTsKLX0KLQotc3ViIGdlbmVy
YXRlRnJvbnRlbmRGdW5jdGlvbgotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBt
eSAkZnVuY3Rpb24gPSBzaGlmdDsKLSAgICBteSAkYWdlbnQgPSBzaGlmdDsKLQotICAgIG15ICRm
dW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLQotICAgIG15ICRkb21h
aW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIG15IEBhcmdzRmlsdGVyZWQgPSBncmVwKCRfLT5k
aXJlY3Rpb24gZXEgIm91dCIsIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSk7ICMganVzdCBrZWVw
IG9ubHkgb3V0IHBhcmFtZXRlcnMgZm9yIGZyb250ZW5kIGludGVyZmFjZS4KLSAgICBtYXAoJGZy
b250ZW5kVHlwZXN7JF8tPnR5cGV9ID0gMSwgQGFyZ3NGaWx0ZXJlZCk7ICMgcmVnaXN0ZXIgcmVx
dWlyZWQgdHlwZXMuCi0gICAgbXkgJGFyZ3VtZW50cyA9IGpvaW4oIiwgIiwgbWFwKHBhcmFtVHlw
ZVRyYWl0cygkXywgInBhcmFtIikgLiAiICIgLiAkXy0+bmFtZSwgQGFyZ3NGaWx0ZXJlZCkpOyAj
IHByZXBhcmUgYXJndW1lbnRzIGZvciBmdW5jdGlvbiBzaWduYXR1cmUuCi0KLSAgICBteSAkc2ln
bmF0dXJlID0gIiAgICAgICAgdm9pZCAke2Z1bmN0aW9uTmFtZX0oJHthcmd1bWVudHN9KTsiOwot
ICAgICEkYWdlbnQtPnttZXRob2RTaWduYXR1cmVzfS0+eyRzaWduYXR1cmV9IHx8IGRpZSAiRHVw
bGljYXRlIGZyb250ZW5kIGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2ln
bmF0dXJlJy4iOwotICAgICRhZ2VudC0+e21ldGhvZFNpZ25hdHVyZXN9LT57JHNpZ25hdHVyZX0g
PSAxOwotICAgIHB1c2goQHskYWdlbnQtPnttZXRob2REZWNsYXJhdGlvbnN9fSwgJHNpZ25hdHVy
ZSk7Ci0KLSAgICBteSBAZnVuY3Rpb247Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ2b2lkICR7ZnJv
bnRlbmRDbGFzc05hbWV9Ojoke2RvbWFpbn06OiR7ZnVuY3Rpb25OYW1lfSgke2FyZ3VtZW50c30p
Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICJ7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gJHtmdW5jdGlvbk5hbWV9TWVzc2FnZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgJHtmdW5jdGlv
bk5hbWV9TWVzc2FnZS0+c2V0U3RyaW5nKFwibWV0aG9kXCIsIFwiJGRvbWFpbi4kZnVuY3Rpb25O
YW1lXCIpOyIpOwotICAgIGlmIChzY2FsYXIoQGFyZ3NGaWx0ZXJlZCkpIHsKLSAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLQotICAgICAgICBmb3JlYWNoIG15ICRwYXJh
bWV0ZXIgKEBhcmdzRmlsdGVyZWQpIHsKLSAgICAgICAgICAgIG15ICRvcHRpb25hbCA9ICRwYXJh
bWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJvcHRpb25hbCJ9ID8gImlmICgiIC4gJHBhcmFt
ZXRlci0+bmFtZSAuICIpXG4gICAgICAgICIgOiAiIjsKLSAgICAgICAgICAgIHB1c2goQGZ1bmN0
aW9uLCAiICAgICIgLiAkb3B0aW9uYWwgLiAicGFyYW1zT2JqZWN0LT5zZXQiIC4gcGFyYW1UeXBl
VHJhaXRzKCRwYXJhbWV0ZXIsICJKU09OVHlwZSIpIC4gIihcIiIgLiAkcGFyYW1ldGVyLT5uYW1l
IC4gIlwiLCAiIC4gcGFyYW1UeXBlVHJhaXRzKCRwYXJhbWV0ZXIsICJ2YWx1ZUFjY2Vzc29yIikg
LiAkcGFyYW1ldGVyLT5uYW1lIC4gIik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVu
Y3Rpb24sICIgICAgJHtmdW5jdGlvbk5hbWV9TWVzc2FnZS0+c2V0T2JqZWN0KFwicGFyYW1zXCIs
IHBhcmFtc09iamVjdCk7Iik7Ci0gICAgfQotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgIGlmICht
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICAg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCgke2Z1
bmN0aW9uTmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Iik7Ci0gICAgcHVzaChAZnVuY3Rp
b24sICJ9Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBmcm9udGVuZE1l
dGhvZHNJbXBsLCBAZnVuY3Rpb24pOwotfQotCi1zdWIgY2FtZWxDYXNlCi17Ci0gICAgbXkgJHZh
bHVlID0gc2hpZnQ7Ci0gICAgJHZhbHVlID1+IHMvXGIoXHcpL1xVJDEvZzsgIyBtYWtlIGEgY2Ft
ZWwtY2FzZSBuYW1lIGZvciB0eXBlIG5hbWUKLSAgICAkdmFsdWUgPX4gcy8gLy9nOwotICAgIHJl
dHVybiAkdmFsdWU7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRGdW5jdGlvbgotewotICAgIG15
ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKLQotICAgIG15
ICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKLSAgICBteSAkZnVs
bFF1YWxpZmllZEZ1bmN0aW9uTmFtZSA9ICRpbnRlcmZhY2UtPm5hbWUgLiAiXyIgLiAkZnVuY3Rp
b25OYW1lOwotICAgIG15ICRmdWxsUXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90ID0gJGludGVyZmFj
ZS0+bmFtZSAuICIuIiAuICRmdW5jdGlvbk5hbWU7Ci0KLSAgICBwdXNoKEBiYWNrZW5kQ29uc3Rh
bnREZWNsYXJhdGlvbnMsICIgICAgICAgIGske2Z1bGxRdWFsaWZpZWRGdW5jdGlvbk5hbWV9Q21k
LCIpOwotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiICAgIFwiJHtmdWxs
UXVhbGlmaWVkRnVuY3Rpb25OYW1lRG90fVwiLCIpOwotCi0gICAgbWFwKCRiYWNrZW5kVHlwZXN7
JF8tPnR5cGV9ID0gMSwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsgIyByZWdpc3RlciByZXF1
aXJlZCB0eXBlcwotICAgIG15IEBpbkFyZ3MgPSBncmVwKCRfLT5kaXJlY3Rpb24gZXEgImluIiwg
QHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICBteSBAb3V0QXJncyA9IGdyZXAoJF8tPmRp
cmVjdGlvbiBlcSAib3V0IiwgQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KTsKLSAgICAKLSAgICBt
eSAkc2lnbmF0dXJlID0gIiAgICB2b2lkICR7ZnVsbFF1YWxpZmllZEZ1bmN0aW9uTmFtZX0obG9u
ZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyI7Ci0gICAg
ISRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3ske3NpZ25hdHVyZX19IHx8IGRpZSAiRHVwbGljYXRl
IGZ1bmN0aW9uIHdhcyBkZXRlY3RlZCBmb3Igc2lnbmF0dXJlICckc2lnbmF0dXJlJy4iOwotICAg
ICRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3ske3NpZ25hdHVyZX19ID0gIiRmdWxsUXVhbGlmaWVk
RnVuY3Rpb25OYW1lIjsKLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kcywgJHtzaWduYXR1cmV9KTsK
LQotICAgIG15IEBmdW5jdGlvbjsKLSAgICBteSAkcmVxdWVzdE1lc3NhZ2VPYmplY3QgPSBzY2Fs
YXIoQGluQXJncykgPyAiIHJlcXVlc3RNZXNzYWdlT2JqZWN0IiA6ICIiOwotICAgIHB1c2goQGZ1
bmN0aW9uLCAidm9pZCAke2JhY2tlbmRDbGFzc05hbWV9Ojoke2Z1bGxRdWFsaWZpZWRGdW5jdGlv
bk5hbWV9KGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0
KSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAieyIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAiICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6
Y3JlYXRlKCk7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLQotICAgIG15ICRkb21haW4g
PSAkaW50ZXJmYWNlLT5uYW1lOwotICAgIG15ICRkb21haW5BY2Nlc3NvciA9IHR5cGVUcmFpdHMo
JGRvbWFpbiwgImRvbWFpbkFjY2Vzc29yIik7Ci0gICAgJGJhY2tlbmRUeXBlc3skZG9tYWlufSA9
IDE7Ci0gICAgJGJhY2tlbmREb21haW5zeyRkb21haW59ID0gMTsKLSAgICBwdXNoKEBmdW5jdGlv
biwgIiAgICBpZiAoISRkb21haW5BY2Nlc3NvcikiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAg
ICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoXCIkZG9tYWluIGhhbmRsZXIgaXMgbm90
IGF2YWlsYWJsZS5cIik7Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLQotICAgICMgZGVj
bGFyZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG91dCBhcmd1bWVudHMuCi0gICAgaWYgKHNjYWxhcihA
b3V0QXJncykpIHsKLSAgICAgICAgcHVzaChAZnVuY3Rpb24sIG1hcCgiICAgICIgLiB0eXBlVHJh
aXRzKCRfLT50eXBlLCAidmFyaWFibGUiKSAuICIgb3V0XyIgLiAkXy0+bmFtZSAuICIgPSAiIC4g
dHlwZVRyYWl0cygkXy0+dHlwZSwgImRlZmF1bHRWYWx1ZSIpIC4gIjsiLCBAb3V0QXJncykpOwot
ICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBFcnJvclN0cmluZyBlcnJvcjsiKTsKLSAgICBwdXNoKEBmdW5jdGlvbiwgIiIpOwotCi0g
ICAgbXkgJGluZGVudCA9ICIiOwotICAgIGlmIChzY2FsYXIoQGluQXJncykpIHsKLSAgICAgICAg
cHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gcmVxdWVzdE1lc3NhZ2VPYmplY3QtPmdldE9iamVjdChcInBhcmFtc1wiKTsiKTsKLSAg
ICAgICAgcHVzaChAZnVuY3Rpb24sICIgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Iik7Ci0gICAgICAgIHB1c2goQGZ1bmN0aW9u
LCAiICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOyIpOwotCi0gICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtZXRlciAoQGluQXJncykgewot
ICAgICAgICAgICAgbXkgJG5hbWUgPSAkcGFyYW1ldGVyLT5uYW1lOwotICAgICAgICAgICAgbXkg
JHR5cGUgPSAkcGFyYW1ldGVyLT50eXBlOwotICAgICAgICAgICAgbXkgJHR5cGVTdHJpbmcgPSBj
YW1lbENhc2UoJHBhcmFtZXRlci0+dHlwZSk7Ci0gICAgICAgICAgICBteSAkb3B0aW9uYWxGbGFn
QXJndW1lbnQgPSAiMCI7Ci0gICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57Im9wdGlvbmFsIn0pIHsKLSAgICAgICAgICAgICAgICBwdXNoKEBmdW5jdGlvbiwg
IiAgICBib29sICR7bmFtZX1fdmFsdWVGb3VuZCA9IGZhbHNlOyIpOwotICAgICAgICAgICAgICAg
ICRvcHRpb25hbEZsYWdBcmd1bWVudCA9ICImJHtuYW1lfV92YWx1ZUZvdW5kIjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAiICAgICIgLiB0eXBlVHJhaXRzKCR0
eXBlLCAidmFyaWFibGUiKSAuICIgaW5fJG5hbWUgPSBnZXQkdHlwZVN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIFwiJG5hbWVcIiwgJG9wdGlvbmFsRmxhZ0FyZ3VtZW50LCBwcm90b2NvbEVycm9y
c1B0cik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICAg
ICAgJGluZGVudCA9ICIgICAgIjsKLSAgICB9Ci0KLSAgICBteSAkYXJncyA9IGpvaW4oIiwgIiwK
LSAgICAgICAgICAgICAgICAgICAgKCImZXJyb3IiLAotICAgICAgICAgICAgICAgICAgICAgbWFw
KCgkXy0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Im9wdGlvbmFsIn0gPwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAkXy0+bmFtZSAuICJfdmFsdWVGb3VuZCA/ICZpbl8iIC4gJF8tPm5hbWUgLiAi
IDogMCIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5fIiAuICRfLT5uYW1lKSwgQGlu
QXJncyksCi0gICAgICAgICAgICAgICAgICAgICBtYXAoIiZvdXRfIiAuICRfLT5uYW1lLCBAb3V0
QXJncykpKTsKLQotICAgIHB1c2goQGZ1bmN0aW9uLCAkaW5kZW50IC4gImlmICghcHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSIpOwotICAgIHB1c2goQGZ1bmN0aW9uLCAkaW5kZW50IC4gIiAgICAk
ZG9tYWluQWNjZXNzb3ItPiRmdW5jdGlvbk5hbWUoJGFyZ3MpOyIpOwotICAgIHB1c2goQGZ1bmN0
aW9uLCAiIik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsiKTsKLSAgICBpZiAoc2NhbGFy
KEBvdXRBcmdzKSkgewotICAgICAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBpZiAoIXByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHsiKTsKLSAgICAgICAgZm9yZWFj
aCBteSAkcGFyYW1ldGVyIChAb3V0QXJncykgewotICAgICAgICAgICAgbXkgJG9mZnNldCA9ICIg
ICAgICAgICI7Ci0gICAgICAgICAgICAjIERvbid0IGFkZCBvcHRpb25hbCBib29sZWFuIHBhcmFt
ZXRlciB0byB0aGUgcmVzdWx0IHVubGVzcyBpdCBpcyAidHJ1ZSIKLSAgICAgICAgICAgIGlmICgk
cGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSAmJiAkcGFyYW1ldGVy
LT50eXBlIGVxICJib29sZWFuIikgewotICAgICAgICAgICAgICAgIHB1c2goQGZ1bmN0aW9uLCAk
b2Zmc2V0IC4gImlmIChvdXRfIiAuICRwYXJhbWV0ZXItPm5hbWUgLiAiKSIpOwotICAgICAgICAg
ICAgICAgICRvZmZzZXQgLj0gIiAgICAiOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHVz
aChAZnVuY3Rpb24sICRvZmZzZXQgLiAicmVzdWx0LT5zZXQiIC4gdHlwZVRyYWl0cygkcGFyYW1l
dGVyLT50eXBlLCAiSlNPTlR5cGUiKSAuICIoXCIiIC4gJHBhcmFtZXRlci0+bmFtZSAuICJcIiwg
b3V0XyIgLiAkcGFyYW1ldGVyLT5uYW1lIC4gIik7Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcHVz
aChAZnVuY3Rpb24sICIgICAgfSIpOwotICAgIH0KLSAgICBwdXNoKEBmdW5jdGlvbiwgIiAgICBz
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQsIFN0cmluZzo6Zm9ybWF0KFwiU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkXCIsIFwiJGZ1bGxRdWFsaWZpZWRG
dW5jdGlvbk5hbWVEb3RcIiksIHByb3RvY29sRXJyb3JzLCBlcnJvcik7Iik7Ci0gICAgcHVzaChA
ZnVuY3Rpb24sICJ9Iik7Ci0gICAgcHVzaChAZnVuY3Rpb24sICIiKTsKLSAgICBwdXNoKEBiYWNr
ZW5kTWV0aG9kc0ltcGwsIEBmdW5jdGlvbik7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRTZW5k
UmVzcG9uc2UKLXsKLSAgICBteSAkc2VuZFJlc3BvbnNlID0gPDwgIkVPRiI7Ci0KLXZvaWQgJHti
YWNrZW5kQ2xhc3NOYW1lfTo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMsIEVycm9yU3RyaW5nIGludm9jYXRp
b25FcnJvcikKLXsKLSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdl
LCBwcm90b2NvbEVycm9ycyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGludm9j
YXRpb25FcnJvci5sZW5ndGgoKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2VNZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE9iamVjdCgicmVz
dWx0IiwgcmVzdWx0KTsKLSAgICByZXNwb25zZU1lc3NhZ2UtPnNldE51bWJlcigiaWQiLCBjYWxs
SWQpOwotICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKLX0gICAgCi1FT0YKLSAgICByZXR1cm4gc3BsaXQoIlxuIiwg
JHNlbmRSZXNwb25zZSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVy
cm9yCi17Ci0gICAgbXkgJHJlcG9ydFByb3RvY29sRXJyb3IgPSA8PCAiRU9GIjsKLQotdm9pZCAk
e2JhY2tlbmRDbGFzc05hbWV9OjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdl
KSBjb25zdAotewotICAgIHJlcG9ydFByb3RvY29sRXJyb3IoY2FsbElkLCBjb2RlLCBlcnJvck1l
c3NhZ2UsIDApOwotfQotCi12b2lkICR7YmFja2VuZENsYXNzTmFtZX06OnJlcG9ydFByb3RvY29s
RXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEp
IGNvbnN0Ci17Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8aW50PixzX2NvbW1vbkVy
cm9ycywpOwotICAgIGlmICghc19jb21tb25FcnJvcnMuc2l6ZSgpKSB7Ci0gICAgICAgIHNfY29t
bW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3MDApOwotICAgICAgICBzX2NvbW1vbkVy
cm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7Ci0gICAgICAgIHNfY29tbW9uRXJy
b3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsKLSAgICAgICAgc19jb21tb25FcnJv
cnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7Ci0gICAgICAgIHNfY29tbW9uRXJyb3Jz
Lmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOwotICAgICAgICBzX2NvbW1vbkVycm9ycy5p
bnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7Ci0gICAgfQotICAgIEFTU0VSVChjb2RlID49MCk7
Ci0gICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19jb21tb25FcnJvcnMuc2l6ZSgpKTsKLSAg
ICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlcnJvci0+c2V0TnVt
YmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0pOwotICAgIGVycm9yLT5zZXRTdHJpbmco
Im1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOwotICAgIEFTU0VSVChlcnJvcik7Ci0gICAgaWYgKGRh
dGEpCi0gICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJvcik7Ci0gICAgaWYgKGNhbGxJZCkKLSAg
ICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpjYWxsSWQpOwotICAgIGVsc2UKLSAgICAg
ICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7Ci0gICAg
aWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQotICAgICAgICBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKLX0KLUVPRgotICAgIHJldHVybiBzcGxpdCgiXG4iLCAkcmVwb3J0UHJvdG9jb2xFcnJvcik7
Ci19Ci0KLXN1YiBnZW5lcmF0ZUFyZ3VtZW50R2V0dGVycwotewotICAgIG15ICR0eXBlID0gc2hp
ZnQ7Ci0gICAgbXkgJGpzb24gPSB0eXBlVHJhaXRzKCR0eXBlLCAiSlNPTlR5cGUiKTsKLSAgICBt
eSAkdmFyaWFibGUgPSB0eXBlVHJhaXRzKCR0eXBlLCAidmFyaWFibGUiKTsKLSAgICBteSAkZGVm
YXVsdFZhbHVlID0gdHlwZVRyYWl0cygkdHlwZSwgImRlZmF1bHRWYWx1ZSIpOwotICAgIG15ICRy
ZXR1cm4gID0gdHlwZVRyYWl0cygkdHlwZSwgInJldHVybiIpID8gdHlwZVRyYWl0cygkdHlwZSwg
InJldHVybiIpIDogdHlwZVRyYWl0cygkdHlwZSwgInBhcmFtIik7Ci0KLSAgICBteSAkdHlwZVN0
cmluZyA9IGNhbWVsQ2FzZSgkdHlwZSk7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFy
YXRpb25zLCAiICAgIHN0YXRpYyAkcmV0dXJuIGdldCR0eXBlU3RyaW5nKEluc3BlY3Rvck9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9ycyk7Iik7Ci0gICAgbXkgJGdldHRlckJvZHkgPSA8PCAiRU9G
IjsKLQotJHJldHVybiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JHR5cGVTdHJpbmco
SW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQotewotICAgIEFTU0VSVChwcm90
b2NvbEVycm9ycyk7Ci0KLSAgICBpZiAodmFsdWVGb3VuZCkKLSAgICAgICAgKnZhbHVlRm91bmQg
PSBmYWxzZTsKLQotICAgICR2YXJpYWJsZSB2YWx1ZSA9ICRkZWZhdWx0VmFsdWU7Ci0KLSAgICBp
ZiAoIW9iamVjdCkgewotICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKLSAgICAgICAgICAgIC8v
IFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCi0gICAgICAg
ICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycg
b2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJ1wlcycgd2l0aCB0eXBlICck
anNvbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHZhbHVlOwotICAgIH0KLQotICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gb2JqZWN0LT5lbmQoKTsKLSAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZh
bHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7Ci0KLSAgICBpZiAodmFsdWVJdGVyYXRv
ciA9PSBlbmQpIHsKLSAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQotICAgICAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVzJyB3aXRo
IHR5cGUgJyRqc29uJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAg
ICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNv
bmQtPmFzJGpzb24oJnZhbHVlKSkKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmco
U3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnXCVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBi
ZSAnJGpzb24nLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwotICAgIGVsc2UKLSAgICAgICAgaWYg
KHZhbHVlRm91bmQpCi0gICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7Ci0gICAgcmV0dXJu
IHZhbHVlOwotfQotRU9GCi0KLSAgICByZXR1cm4gc3BsaXQoIlxuIiwgJGdldHRlckJvZHkpOwot
fQotCi1zdWIgZ2VuZXJhdGVCYWNrZW5kRGlzcGF0Y2hlcgotewotICAgIG15IEBib2R5OwotICAg
IG15IEBtYXBFbnRyaWVzID0gbWFwKCIgICAgICAgICYke2JhY2tlbmRDbGFzc05hbWV9OjokXywi
LCBtYXAgKCRiYWNrZW5kTWV0aG9kU2lnbmF0dXJlc3skX30sIEBiYWNrZW5kTWV0aG9kcykpOwot
ICAgIG15ICRtYXBFbnRyaWVzID0gam9pbigiXG4iLCBAbWFwRW50cmllcyk7Ci0KLSAgICBteSAk
YmFja2VuZERpc3BhdGNoZXJCb2R5ID0gPDwgIkVPRiI7Ci12b2lkICR7YmFja2VuZENsYXNzTmFt
ZX06OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBSZWZQdHI8JHtiYWNr
ZW5kQ2xhc3NOYW1lfT4gcHJvdGVjdCA9IHRoaXM7Ci0gICAgdHlwZWRlZiB2b2lkICgke2JhY2tl
bmRDbGFzc05hbWV9OjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBJbnNwZWN0b3JPYmplY3Qq
IG1lc3NhZ2VPYmplY3QpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNw
YXRjaE1hcCwgKTsKLSAgICBsb25nIGNhbGxJZCA9IDA7Ci0KLSAgICBpZiAoZGlzcGF0Y2hNYXAu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBDYWxsSGFuZGxlciBoYW5kbGVyc1tdID0gewot
JG1hcEVudHJpZXMKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihj
b21tYW5kTmFtZXMpIC8gc2l6ZW9mKGNvbW1hbmROYW1lc1swXSk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
Y29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tpXSk7Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNz
YWdlKTsKLSAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcigwLCBQYXJzZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKLSAgICBpZiAoIW1lc3NhZ2VP
YmplY3QpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwg
Ik1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdl
T2JqZWN0LT5nZXQoImlkIik7Ci0gICAgaWYgKCFjYWxsSWRWYWx1ZSkgewotICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90
IGZvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIWNhbGxJZFZhbHVl
LT5hc051bWJlcigmY2FsbElkKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIElu
dmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBt
ZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldCgibWV0aG9kIik7Ci0gICAgaWYgKCFtZXRo
b2RWYWx1ZSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRS
ZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWV0aG9kOwotICAgIGlmICghbWV0aG9kVmFsdWUtPmFz
U3RyaW5nKCZtZXRob2QpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0
cmluZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAg
aWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgTWV0aG9kTm90Rm91bmQsICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3Vu
ZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKml0LT5zZWNvbmQp
KGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQoKSk7Ci19Ci1FT0YKLSAgICByZXR1cm4gc3BsaXQo
IlxuIiwgJGJhY2tlbmREaXNwYXRjaGVyQm9keSk7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRN
ZXNzYWdlUGFyc2VyCi17Ci0gICAgbXkgJG1lc3NhZ2VQYXJzZXJCb2R5ID0gPDwgIkVPRiI7Ci1i
b29sICR7YmFja2VuZENsYXNzTmFtZX06OmdldENvbW1hbmROYW1lKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSwgU3RyaW5nKiByZXN1bHQpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7Ci0gICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2Jq
ZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoIm1ldGhvZCIsIHJlc3VsdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotRU9GCi0gICAg
cmV0dXJuIHNwbGl0KCJcbiIsICRtZXNzYWdlUGFyc2VyQm9keSk7Ci19Ci0KLXN1YiBjb2xsZWN0
QmFja2VuZEpTU3R1YkZ1bmN0aW9ucwotewotICAgIG15ICRpbnRlcmZhY2UgPSBzaGlmdDsKLSAg
ICBteSBAZnVuY3Rpb25zID0gZ3JlcCghJF8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57ImV2ZW50In0sIEB7JGludGVyZmFjZS0+ZnVuY3Rpb25zfSk7Ci0gICAgbXkgJGRvbWFpbiA9
ICRpbnRlcmZhY2UtPm5hbWU7Ci0KLSAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQGZ1bmN0aW9u
cykgewotICAgICAgICBteSAkbmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwotICAg
ICAgICBteSBAaW5BcmdzID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJpbiIsIEB7JGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzfSk7Ci0gICAgICAgIG15ICRhcmd1bWVudE5hbWVzID0gam9pbigKLSAgICAg
ICAgICAgICIsIiwKLSAgICAgICAgICAgIG1hcCgiXCIiIC4gJF8tPm5hbWUgLiAiXCI6IHsiCi0g
ICAgICAgICAgICAgICAgLiAiXCJvcHRpb25hbFwiOiAiIC4gKCRfLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsib3B0aW9uYWwifSA/ICJ0cnVlICIgOiAiZmFsc2UiKSAuICIsICIKLSAgICAgICAgICAg
ICAgICAuICJcInR5cGVcIjogXCIiIC4gdHlwZVRyYWl0cygkXy0+dHlwZSwgIkpTVHlwZSIpIC4g
IlwiIgotICAgICAgICAgICAgICAgIC4gIn0iLAotICAgICAgICAgICAgICAgICBAaW5BcmdzKSk7
Ci0gICAgICAgIHB1c2goQGJhY2tlbmRKU1N0dWJzLCAiICAgIHRoaXMuX3JlZ2lzdGVyRGVsZWdh
dGUoJ3siIC4KLSAgICAgICAgICAgICJcIm1ldGhvZFwiOiBcIiRkb21haW4uJG5hbWVcIiwgIiAu
Ci0gICAgICAgICAgICAoc2NhbGFyKEBpbkFyZ3MpID8gIlwicGFyYW1zXCI6IHskYXJndW1lbnRO
YW1lc30sICIgOiAiIikgLgotICAgICAgICAgICAgIlwiaWRcIjogMCIgLgotICAgICAgICAifScp
OyIpOwotICAgIH0KLX0KLQotc3ViIGNvbGxlY3RCYWNrZW5kSlNTdHViRXZlbnRzCi17Ci0gICAg
bXkgJGludGVyZmFjZSA9IHNoaWZ0OwotICAgIG15IEBmdW5jdGlvbnMgPSBncmVwKCRfLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJldmVudCJ9LCBAeyRpbnRlcmZhY2UtPmZ1bmN0
aW9uc30pOwotICAgIG15ICRkb21haW4gPSAkaW50ZXJmYWNlLT5uYW1lOwotCi0gICAgZm9yZWFj
aCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKLSAgICAgICAgbXkgJG5hbWUgPSAkZG9tYWlu
IC4gIi4iIC4gJGZ1bmN0aW9uLT5zaWduYXR1cmUtPm5hbWU7Ci0gICAgICAgIG15IEBvdXRBcmdz
ID0gZ3JlcCgkXy0+ZGlyZWN0aW9uIGVxICJvdXQiLCBAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30p
OwotICAgICAgICBteSAkYXJndW1lbnROYW1lcyA9IGpvaW4oIiwiLCBtYXAoIlwiIiAuICRfLT5u
YW1lIC4gIlwiIiAsIEBvdXRBcmdzKSk7Ci0gICAgICAgIHB1c2goQGJhY2tlbmRKU0V2ZW50cywg
IiAgICB0aGlzLl9ldmVudEFyZ3NbXCIiIC4gJG5hbWUgLiAiXCJdID0gWyIgLiAkYXJndW1lbnRO
YW1lcyAuIl07Iik7Ci0gICAgfQotfQotCi1zdWIgZ2VuZXJhdGVCYWNrZW5kU3R1YkpTCi17Ci0g
ICAgbXkgJEpTUmVnaXN0ZXJEb21haW5EaXNwYXRjaGVycyA9IGpvaW4oIlxuIiwgbWFwKCIgICAg
dGhpcy5yZWdpc3RlciIgLiAkXyAuICJEaXNwYXRjaGVyID0gdGhpcy5fcmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyLmJpbmQodGhpcywgXCIiIC4gJF8gLiJcIik7IiwgQGZyb250ZW5kRG9tYWlucykp
OwotICAgIG15ICRKU1N0dWJzID0gam9pbigiXG4iLCBAYmFja2VuZEpTU3R1YnMpOwotICAgIG15
ICRKU0V2ZW50cyA9IGpvaW4oIlxuIiwgQGJhY2tlbmRKU0V2ZW50cyk7Ci0gICAgbXkgJGluc3Bl
Y3RvckJhY2tlbmRTdHViSlMgPSA8PCAiRU9GIjsKLSRsaWNlbnNlVGVtcGxhdGUKLQotSW5zcGVj
dG9yQmFja2VuZFN0dWIgPSBmdW5jdGlvbigpCi17Ci0gICAgdGhpcy5fbGFzdENhbGxiYWNrSWQg
PSAxOwotICAgIHRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCA9IDA7Ci0gICAgdGhpcy5fY2Fs
bGJhY2tzID0ge307Ci0gICAgdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnMgPSB7fTsKLSAgICB0aGlz
Ll9ldmVudEFyZ3MgPSB7fTsKLSRKU1N0dWJzCi0kSlNFdmVudHMKLSRKU1JlZ2lzdGVyRG9tYWlu
RGlzcGF0Y2hlcnMKLX0KLQotSW5zcGVjdG9yQmFja2VuZFN0dWIucHJvdG90eXBlID0gewotICAg
IGR1bXBJbnNwZWN0b3JUaW1lU3RhdHM6IDAsCi0gICAgZHVtcEluc3BlY3RvclByb3RvY29sTWVz
c2FnZXM6IDAsCi0KLSAgICBfd3JhcDogZnVuY3Rpb24oY2FsbGJhY2spCi0gICAgewotICAgICAg
ICB2YXIgY2FsbGJhY2tJZCA9IHRoaXMuX2xhc3RDYWxsYmFja0lkKys7Ci0gICAgICAgIHRoaXMu
X2NhbGxiYWNrc1tjYWxsYmFja0lkXSA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCkge307Ci0gICAg
ICAgIHJldHVybiBjYWxsYmFja0lkOwotICAgIH0sCi0KLSAgICBfcmVnaXN0ZXJEZWxlZ2F0ZTog
ZnVuY3Rpb24ocmVxdWVzdFN0cmluZykKLSAgICB7Ci0gICAgICAgIHZhciBkb21haW5BbmRGdW5j
dGlvbiA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZykubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAg
ICAgIHZhciBhZ2VudE5hbWUgPSBkb21haW5BbmRGdW5jdGlvblswXSArICJBZ2VudCI7Ci0gICAg
ICAgIGlmICghd2luZG93W2FnZW50TmFtZV0pCi0gICAgICAgICAgICB3aW5kb3dbYWdlbnROYW1l
XSA9IHt9OwotICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV0g
PSB0aGlzLl9zZW5kTWVzc2FnZVRvQmFja2VuZC5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpOwot
ICAgICAgICB3aW5kb3dbYWdlbnROYW1lXVtkb21haW5BbmRGdW5jdGlvblsxXV1bImludm9rZSJd
ID0gdGhpcy5faW52b2tlLmJpbmQodGhpcywgcmVxdWVzdFN0cmluZykKLSAgICB9LAotCi0gICAg
X2ludm9rZTogZnVuY3Rpb24ocmVxdWVzdFN0cmluZywgYXJncywgY2FsbGJhY2spCi0gICAgewot
ICAgICAgICB2YXIgcmVxdWVzdCA9IEpTT04ucGFyc2UocmVxdWVzdFN0cmluZyk7Ci0gICAgICAg
IHJlcXVlc3QucGFyYW1zID0gYXJnczsKLSAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2Vu
ZE1lc3NhZ2VPYmplY3QocmVxdWVzdCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfc2VuZE1l
c3NhZ2VUb0JhY2tlbmQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBhcmdzID0gQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTsKLSAgICAgICAgdmFyIHJlcXVlc3Qg
PSBKU09OLnBhcnNlKGFyZ3Muc2hpZnQoKSk7Ci0gICAgICAgIHZhciBjYWxsYmFjayA9IChhcmdz
Lmxlbmd0aCAmJiB0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAiZnVuY3Rpb24iKSA/
IGFyZ3MucG9wKCkgOiAwOwotICAgICAgICB2YXIgZG9tYWluQW5kTWV0aG9kID0gcmVxdWVzdC5t
ZXRob2Quc3BsaXQoIi4iKTsKLSAgICAgICAgdmFyIGFnZW50TWV0aG9kID0gZG9tYWluQW5kTWV0
aG9kWzBdICsgIkFnZW50LiIgKyBkb21haW5BbmRNZXRob2RbMV07Ci0KLSAgICAgICAgdmFyIGhh
c1BhcmFtcyA9IGZhbHNlOwotICAgICAgICBpZiAocmVxdWVzdC5wYXJhbXMpIHsKLSAgICAgICAg
ICAgIGZvciAodmFyIGtleSBpbiByZXF1ZXN0LnBhcmFtcykgewotICAgICAgICAgICAgICAgIHZh
ciB0eXBlTmFtZSA9IHJlcXVlc3QucGFyYW1zW2tleV0udHlwZTsKLSAgICAgICAgICAgICAgICB2
YXIgb3B0aW9uYWxGbGFnID0gcmVxdWVzdC5wYXJhbXNba2V5XS5vcHRpb25hbDsKLQotICAgICAg
ICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCAmJiAhb3B0aW9uYWxGbGFnKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIG51
bWJlciBvZiBhcmd1bWVudHMgZm9yIG1ldGhvZCAnIiArIGFnZW50TWV0aG9kICsgIicgY2FsbC4g
SXQgbXVzdCBoYXZlIHRoZSBuZXh0IGFyZ3VtZW50cyAnIiArIEpTT04uc3RyaW5naWZ5KHJlcXVl
c3QucGFyYW1zKSArICInLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gYXJncy5zaGlmdCgpOwot
ICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbEZsYWcgJiYgdHlwZW9mIHZhbHVlID09PSAidW5k
ZWZpbmVkIikgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJhbXNba2V5
XTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZU5hbWUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEludmFsaWQgdHlwZSBv
ZiBhcmd1bWVudCAnIiArIGtleSArICInIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICIn
IGNhbGwuIEl0IG11c3QgYmUgJyIgKyB0eXBlTmFtZSArICInIGJ1dCBpdCBpcyAnIiArIHR5cGVv
ZiB2YWx1ZSArICInLiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmVxdWVzdC5wYXJhbXNba2V5XSA9IHZhbHVlOwot
ICAgICAgICAgICAgICAgIGhhc1BhcmFtcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoIWhhc1BhcmFtcykKLSAgICAgICAgICAgICAgICBkZWxldGUgcmVxdWVzdC5wYXJh
bXM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgIWNhbGxi
YWNrKSB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICJ1bmRlZmluZWQiKSB7
Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IE9wdGlvbmFs
IGNhbGxiYWNrIGFyZ3VtZW50IGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwg
bXVzdCBiZSBhIGZ1bmN0aW9uIGJ1dCBpdHMgdHlwZSBpcyAnIiArIHR5cGVvZiBhcmdzWzBdICsg
IicuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdGhpcy5fd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VPYmplY3QocmVxdWVz
dCwgY2FsbGJhY2spOwotICAgIH0sCi0KLSAgICBfd3JhcENhbGxiYWNrQW5kU2VuZE1lc3NhZ2VP
YmplY3Q6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QsIGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAg
bWVzc2FnZU9iamVjdC5pZCA9IHRoaXMuX3dyYXAoY2FsbGJhY2spOwotCi0gICAgICAgIGlmICh0
aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpIHsKLSAgICAgICAgICAgIHZhciB3cmFwcGVkQ2Fs
bGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5pZF07Ci0gICAgICAgICAgICB3
cmFwcGVkQ2FsbGJhY2subWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QubWV0aG9kOwotICAgICAg
ICAgICAgd3JhcHBlZENhbGxiYWNrLnNlbmRSZXF1ZXN0VGltZSA9IERhdGUubm93KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcykK
LSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJmcm9udGVuZDogIiArIEpTT04uc3RyaW5naWZ5KG1l
c3NhZ2VPYmplY3QpKTsKLQotICAgICAgICArK3RoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudDsK
LSAgICAgICAgdGhpcy5zZW5kTWVzc2FnZU9iamVjdFRvQmFja2VuZChtZXNzYWdlT2JqZWN0KTsK
LSAgICB9LAotCi0gICAgc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQ6IGZ1bmN0aW9uKG1lc3Nh
Z2VPYmplY3QpCi0gICAgewotICAgICAgICBjb25zb2xlLnRpbWVTdGFtcChtZXNzYWdlT2JqZWN0
Lm1ldGhvZCk7Ci0gICAgICAgIHZhciBtZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZU9i
amVjdCk7Ci0gICAgICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5zZW5kTWVzc2FnZVRvQmFja2Vu
ZChtZXNzYWdlKTsKLSAgICB9LAotCi0gICAgX3JlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcjogZnVu
Y3Rpb24oZG9tYWluLCBkaXNwYXRjaGVyKQotICAgIHsKLSAgICAgICAgdGhpcy5fZG9tYWluRGlz
cGF0Y2hlcnNbZG9tYWluXSA9IGRpc3BhdGNoZXI7Ci0gICAgfSwKLQotICAgIGRpc3BhdGNoOiBm
dW5jdGlvbihtZXNzYWdlKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclBy
b3RvY29sTWVzc2FnZXMpCi0gICAgICAgICAgICBjb25zb2xlLmxvZygiYmFja2VuZDogIiArICgo
dHlwZW9mIG1lc3NhZ2UgPT09ICJzdHJpbmciKSA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeSht
ZXNzYWdlKSkpOwotCi0gICAgICAgIHZhciBtZXNzYWdlT2JqZWN0ID0gKHR5cGVvZiBtZXNzYWdl
ID09PSAic3RyaW5nIikgPyBKU09OLnBhcnNlKG1lc3NhZ2UpIDogbWVzc2FnZTsKLQotICAgICAg
ICBpZiAoImlkIiBpbiBtZXNzYWdlT2JqZWN0KSB7IC8vIGp1c3QgYSByZXNwb25zZSBmb3Igc29t
ZSByZXF1ZXN0Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9iamVjdC5lcnJvcikgewotICAgICAg
ICAgICAgICAgIG1lc3NhZ2VPYmplY3QuZXJyb3IuX19wcm90b19fID0gewotICAgICAgICAgICAg
ICAgICAgICBnZXREZXNjcmlwdGlvbjogZnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2godGhpcy5jb2RlKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSAtMzI3MDA6IHJldHVybiAiUGFyc2UgZXJyb3IiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAwOiByZXR1cm4gIkludmFsaWQgUmVx
dWVzdCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2MDE6IHJldHVybiAi
TWV0aG9kIG5vdCBmb3VuZCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAtMzI2
MDI6IHJldHVybiAiSW52YWxpZCBwYXJhbXMiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgLTMyNjAzOiByZXR1cm4gIkludGVybmFsIGVycm9yIjs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSAtMzIwMDA6IHJldHVybiAiU2VydmVyIGVycm9yIjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSwKLQotICAgICAgICAgICAg
ICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRpb24gPSJVbmtub3duIGVycm9yIGNvZGUi
OwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGVzY3JpcHRpb24oKSAr
ICIoIiArIHRoaXMuY29kZSArICIpOiAiICsgdGhpcy5tZXNzYWdlICsgIi4iICsgKHRoaXMuZGF0
YSA/ICIgIiArIHRoaXMuZGF0YS5qb2luKCIgIikgOiAiIik7Ci0gICAgICAgICAgICAgICAgICAg
IH0sCi0KLSAgICAgICAgICAgICAgICAgICAgZ2V0TWVzc2FnZTogZnVuY3Rpb24oKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNz
YWdlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IuY29kZSAhPT0gLTMyMDAwKQotICAgICAg
ICAgICAgICAgICAgICB0aGlzLnJlcG9ydFByb3RvY29sRXJyb3IobWVzc2FnZU9iamVjdCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBhcmd1bWVudHMgPSBbXTsKLSAgICAgICAg
ICAgIGlmIChtZXNzYWdlT2JqZWN0LnJlc3VsdCkgewotICAgICAgICAgICAgICAgIGZvciAodmFy
IGtleSBpbiBtZXNzYWdlT2JqZWN0LnJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzLnB1c2gobWVzc2FnZU9iamVjdC5yZXN1bHRba2V5XSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRoaXMuX2NhbGxiYWNrc1ttZXNzYWdlT2JqZWN0Lmlk
XTsKLSAgICAgICAgICAgIGlmIChjYWxsYmFjaykgewotICAgICAgICAgICAgICAgIHZhciBwcm9j
ZXNzaW5nU3RhcnRUaW1lOwotICAgICAgICAgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JU
aW1lU3RhdHMgJiYgY2FsbGJhY2subWV0aG9kTmFtZSkKLSAgICAgICAgICAgICAgICAgICAgcHJv
Y2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0KLSAgICAgICAgICAgICAgICBhcmd1bWVu
dHMudW5zaGlmdChtZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAgICAgICAgICAgICAgICBjYWxsYmFj
ay5hcHBseShudWxsLCBhcmd1bWVudHMpOwotICAgICAgICAgICAgICAgIC0tdGhpcy5fcGVuZGlu
Z1Jlc3BvbnNlc0NvdW50OwotICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3Nb
bWVzc2FnZU9iamVjdC5pZF07Ci0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVj
dG9yVGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCi0gICAgICAgICAgICAgICAgICAg
IGNvbnNvbGUubG9nKCJ0aW1lLXN0YXRzOiAiICsgY2FsbGJhY2subWV0aG9kTmFtZSArICIgPSAi
ICsgKHByb2Nlc3NpbmdTdGFydFRpbWUgLSBjYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUpICsgIiAr
ICIgKyAoRGF0ZS5ub3coKSAtIHByb2Nlc3NpbmdTdGFydFRpbWUpKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKHRoaXMuX3NjcmlwdHMgJiYgIXRoaXMuX3BlbmRpbmdSZXNwb25z
ZXNDb3VudCkKLSAgICAgICAgICAgICAgICB0aGlzLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMo
KTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
dmFyIG1ldGhvZCA9IG1lc3NhZ2VPYmplY3QubWV0aG9kLnNwbGl0KCIuIik7Ci0gICAgICAgICAg
ICB2YXIgZG9tYWluTmFtZSA9IG1ldGhvZFswXTsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5h
bWUgPSBtZXRob2RbMV07Ci0gICAgICAgICAgICBpZiAoIShkb21haW5OYW1lIGluIHRoaXMuX2Rv
bWFpbkRpc3BhdGNoZXJzKSkgewotICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3Rv
Y29sIEVycm9yOiB0aGUgbWVzc2FnZSBpcyBmb3Igbm9uLWV4aXN0aW5nIGRvbWFpbiAnIiArIGRv
bWFpbk5hbWUgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHZhciBkaXNwYXRjaGVyID0gdGhpcy5fZG9tYWluRGlzcGF0Y2hlcnNbZG9t
YWluTmFtZV07Ci0gICAgICAgICAgICBpZiAoIShmdW5jdGlvbk5hbWUgaW4gZGlzcGF0Y2hlcikp
IHsKLSAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogQXR0ZW1w
dGVkIHRvIGRpc3BhdGNoIGFuIHVuaW1wbGVtZW50ZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVj
dC5tZXRob2QgKyAiJyIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaWYgKCF0aGlzLl9ldmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2Rd
KSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVt
cHRlZCB0byBkaXNwYXRjaCBhbiB1bnNwZWNpZmllZCBtZXRob2QgJyIgKyBtZXNzYWdlT2JqZWN0
Lm1ldGhvZCArICInIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICB2YXIgcGFyYW1zID0gW107Ci0gICAgICAgICAgICBpZiAobWVzc2FnZU9i
amVjdC5wYXJhbXMpIHsKLSAgICAgICAgICAgICAgICB2YXIgcGFyYW1OYW1lcyA9IHRoaXMuX2V2
ZW50QXJnc1ttZXNzYWdlT2JqZWN0Lm1ldGhvZF07Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBwYXJhbU5hbWVzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgICAgICAgICBw
YXJhbXMucHVzaChtZXNzYWdlT2JqZWN0LnBhcmFtc1twYXJhbU5hbWVzW2ldXSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nU3RhcnRUaW1lOwotICAgICAgICAg
ICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclRpbWVTdGF0cykKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzaW5nU3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKLQotICAgICAgICAgICAgZGlzcGF0Y2hlcltm
dW5jdGlvbk5hbWVdLmFwcGx5KGRpc3BhdGNoZXIsIHBhcmFtcyk7Ci0KLSAgICAgICAgICAgIGlm
ICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCi0gICAgICAgICAgICAgICAgY29uc29sZS5s
b2coInRpbWUtc3RhdHM6ICIgKyBtZXNzYWdlT2JqZWN0Lm1ldGhvZCArICIgPSAiICsgKERhdGUu
bm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAg
cmVwb3J0UHJvdG9jb2xFcnJvcjogZnVuY3Rpb24obWVzc2FnZU9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIGNvbnNvbGUuZXJyb3IoIlJlcXVlc3Qgd2l0aCBpZCA9ICIgKyBtZXNzYWdlT2JqZWN0Lmlk
ICsgIiBmYWlsZWQuICIgKyBtZXNzYWdlT2JqZWN0LmVycm9yKTsKLSAgICB9LAotCi0gICAgcnVu
QWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlczogZnVuY3Rpb24oc2NyaXB0KQotICAgIHsKLSAgICAgICAg
aWYgKCF0aGlzLl9zY3JpcHRzKQotICAgICAgICAgICAgdGhpcy5fc2NyaXB0cyA9IFtdOwotCi0g
ICAgICAgIGlmIChzY3JpcHQpCi0gICAgICAgICAgICB0aGlzLl9zY3JpcHRzLnB1c2goc2NyaXB0
KTsKLQotICAgICAgICBpZiAoIXRoaXMuX3BlbmRpbmdSZXNwb25zZXNDb3VudCkgewotICAgICAg
ICAgICAgdmFyIHNjcmlwdHMgPSB0aGlzLl9zY3JpcHRzOwotICAgICAgICAgICAgdGhpcy5fc2Ny
aXB0cyA9IFtdCi0gICAgICAgICAgICBmb3IgKHZhciBpZCA9IDA7IGlkIDwgc2NyaXB0cy5sZW5n
dGg7ICsraWQpCi0gICAgICAgICAgICAgICAgIHNjcmlwdHNbaWRdLmNhbGwodGhpcyk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLUluc3BlY3RvckJhY2tlbmQgPSBuZXcgSW5zcGVjdG9yQmFja2Vu
ZFN0dWIoKTsKLQotRU9GCi0gICAgcmV0dXJuIHNwbGl0KCJcbiIsICRpbnNwZWN0b3JCYWNrZW5k
U3R1YkpTKTsKLX0KLQotc3ViIGdlbmVyYXRlSGVhZGVyCi17Ci0gICAgbXkgJGNsYXNzTmFtZSA9
IHNoaWZ0OwotICAgIG15ICRjbGFzc0RlY2xhcmF0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJHR5cGVz
ID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0cnVjdG9yID0gc2hpZnQ7Ci0gICAgbXkgJGNvbnN0YW50
cyA9IHNoaWZ0OwotICAgIG15ICRtZXRob2RzID0gc2hpZnQ7Ci0gICAgbXkgJGZvb3RlciA9IHNo
aWZ0OwotCi0gICAgbXkgJGZvcndhcmRIZWFkZXJzID0gam9pbigiXG4iLCBzb3J0KG1hcCgiI2lu
Y2x1ZGUgPCIgLiB0eXBlVHJhaXRzKCRfLCAiZm9yd2FyZEhlYWRlciIpIC4gIj4iLCBncmVwKHR5
cGVUcmFpdHMoJF8sICJmb3J3YXJkSGVhZGVyIiksIGtleXMgJXskdHlwZXN9KSkpKTsKLSAgICBt
eSAkZm9yd2FyZERlY2xhcmF0aW9ucyA9IGpvaW4oIlxuIiwgc29ydChtYXAoImNsYXNzICIgLiB0
eXBlVHJhaXRzKCRfLCAiZm9yd2FyZCIpIC4gIjsiLCBncmVwKHR5cGVUcmFpdHMoJF8sICJmb3J3
YXJkIiksIGtleXMgJXskdHlwZXN9KSkpKTsKLSAgICBteSAkY29uc3RhbnREZWNsYXJhdGlvbnMg
PSBqb2luKCJcbiIsIEB7JGNvbnN0YW50c30pOwotICAgIG15ICRtZXRob2RzRGVjbGFyYXRpb25z
ID0gam9pbigiXG4iLCBAeyRtZXRob2RzfSk7Ci0KLSAgICBteSAkaGVhZGVyQm9keSA9IDw8ICJF
T0YiOwotLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLSNpZm5kZWYgJHtjbGFzc05hbWV9X2gKLSNkZWZpbmUgJHtjbGFzc05hbWV9X2gKLQot
JHtmb3J3YXJkSGVhZGVyc30KLQotbmFtZXNwYWNlICRuYW1lc3BhY2UgewotCi0kZm9yd2FyZERl
Y2xhcmF0aW9ucwotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotY2xhc3MgJGNsYXNz
RGVjbGFyYXRpb24gewotcHVibGljOgotJGNvbnN0cnVjdG9yCi0KLSRjb25zdGFudERlY2xhcmF0
aW9ucwotJG1ldGhvZHNEZWNsYXJhdGlvbnMKLQotJGZvb3RlcgotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgJG5hbWVzcGFjZQotI2VuZGlmIC8vICFkZWZpbmVkKCR7Y2xhc3NOYW1lfV9oKQotCi1FT0YK
LSAgICByZXR1cm4gJGhlYWRlckJvZHk7Ci19Ci0KLXN1YiBnZW5lcmF0ZVNvdXJjZQotewotICAg
IG15ICRjbGFzc05hbWUgPSBzaGlmdDsKLSAgICBteSAkdHlwZXMgPSBzaGlmdDsKLSAgICBteSAk
Y29uc3RhbnRzID0gc2hpZnQ7Ci0gICAgbXkgJG1ldGhvZHMgPSBzaGlmdDsKLQotICAgIG15IEBz
b3VyY2VDb250ZW50ID0gc3BsaXQoIlxyIiwgJGxpY2Vuc2VUZW1wbGF0ZSk7Ci0gICAgcHVzaChA
c291cmNlQ29udGVudCwgIlxuI2luY2x1ZGUgXCJjb25maWcuaFwiIik7Ci0gICAgcHVzaChAc291
cmNlQ29udGVudCwgIiNpbmNsdWRlIFwiJGNsYXNzTmFtZS5oXCIiKTsKLSAgICBwdXNoKEBzb3Vy
Y2VDb250ZW50LCAiI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPiIpOwotICAgIHB1c2go
QHNvdXJjZUNvbnRlbnQsICIjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPiIpOwotICAgIHB1
c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiI2lmIEVO
QUJMRShJTlNQRUNUT1IpIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiIpOwotCi0gICAg
bXkgJWhlYWRlcnM7Ci0gICAgZm9yZWFjaCBteSAkdHlwZSAoa2V5cyAleyR0eXBlc30pIHsKLSAg
ICAgICAgJGhlYWRlcnN7IiNpbmNsdWRlIFwiIiAuIHR5cGVUcmFpdHMoJHR5cGUsICJoZWFkZXIi
KSAuICJcIiJ9ID0gMSBpZiAhdHlwZVRyYWl0cygkdHlwZSwgImhlYWRlciIpIGVxICAiIjsKLSAg
ICB9Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgc29ydCBrZXlzICVoZWFkZXJzKTsKLSAgICBw
dXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIm5hbWVz
cGFjZSAkbmFtZXNwYWNlIHsiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAg
cHVzaChAc291cmNlQ29udGVudCwgam9pbigiXG4iLCBAeyRjb25zdGFudHN9KSk7Ci0gICAgcHVz
aChAc291cmNlQ29udGVudCwgIiIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsIEB7JG1ldGhv
ZHN9KTsKLSAgICBwdXNoKEBzb3VyY2VDb250ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29u
dGVudCwgIn0gLy8gbmFtZXNwYWNlICRuYW1lc3BhY2UiKTsKLSAgICBwdXNoKEBzb3VyY2VDb250
ZW50LCAiIik7Ci0gICAgcHVzaChAc291cmNlQ29udGVudCwgIiNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKSIpOwotICAgIHB1c2goQHNvdXJjZUNvbnRlbnQsICIiKTsKLSAgICByZXR1cm4gQHNv
dXJjZUNvbnRlbnQ7Ci19Ci0KLXN1YiB0eXBlVHJhaXRzCi17Ci0gICAgbXkgJHR5cGUgPSBzaGlm
dDsKLSAgICBteSAkdHJhaXQgPSBzaGlmdDsKLSAgICByZXR1cm4gJHR5cGVUcmFuc2Zvcm17JHR5
cGV9LT57JHRyYWl0fTsKLX0KLQotc3ViIHBhcmFtVHlwZVRyYWl0cwotewotICAgIG15ICRwYXJh
bURlc2NyaXB0aW9uID0gc2hpZnQ7Ci0gICAgbXkgJHRyYWl0ID0gc2hpZnQ7Ci0gICAgaWYgKCRw
YXJhbURlc2NyaXB0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsib3B0aW9uYWwifSkgewotICAg
ICAgICBteSAkb3B0aW9uYWxSZXN1bHQgPSB0eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0aW9uLT50
eXBlLCAib3B0aW9uYWxfIiAuICR0cmFpdCk7Ci0gICAgICAgIHJldHVybiAkb3B0aW9uYWxSZXN1
bHQgaWYgZGVmaW5lZCAkb3B0aW9uYWxSZXN1bHQ7Ci0gICAgfQotICAgIG15ICRyZXN1bHQgPSB0
eXBlVHJhaXRzKCRwYXJhbURlc2NyaXB0aW9uLT50eXBlLCAkdHJhaXQpOwotICAgIHJldHVybiBk
ZWZpbmVkICRyZXN1bHQgPyAkcmVzdWx0IDogIiI7Ci19Ci0KLXN1YiBnZW5lcmF0ZUJhY2tlbmRB
Z2VudEZpZWxkc0FuZENvbnN0cnVjdG9yCi17Ci0gICAgbXkgQGFyZ3VtZW50czsKLSAgICBteSBA
ZmllbGRJbml0aWFsaXplcnM7Ci0KLSAgICBwdXNoKEBhcmd1bWVudHMsICJJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCIpOwotICAgIHB1c2goQGZpZWxk
SW5pdGlhbGl6ZXJzLCAiICAgICAgICA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkiKTsKLSAgICBwdXNoKEBiYWNrZW5kRm9vdGVyLCAiICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Iik7Ci0K
LSAgICBmb3JlYWNoIG15ICRkb21haW4gKHNvcnQga2V5cyAlYmFja2VuZERvbWFpbnMpIHsKLSAg
ICAgICAgIyBBZGQgYWdlbnQgZmllbGQgZGVjbGFyYXRpb24gdG8gdGhlIGZvb3Rlci4KLSAgICAg
ICAgbXkgJGFnZW50Q2xhc3NOYW1lID0gdHlwZVRyYWl0cygkZG9tYWluLCAiZm9yd2FyZCIpOwot
ICAgICAgICBteSAkZmllbGQgPSB0eXBlVHJhaXRzKCRkb21haW4sICJkb21haW5BY2Nlc3NvciIp
OwotICAgICAgICBwdXNoKEBiYWNrZW5kRm9vdGVyLCAiICAgICR7YWdlbnRDbGFzc05hbWV9KiAk
e2ZpZWxkfTsiKTsKLQotICAgICAgICAjIEFkZCBhZ2VudCBwYXJhbWV0ZXIgYW5kIGluaXRpYWxp
emVyLgotICAgICAgICBteSAkYXJnID0gc3Vic3RyKCRmaWVsZCwgMik7Ci0gICAgICAgIHB1c2go
QGZpZWxkSW5pdGlhbGl6ZXJzLCAiICAgICAgICAsICR7ZmllbGR9KCR7YXJnfSkiKTsKLSAgICAg
ICAgcHVzaChAYXJndW1lbnRzLCAiJHthZ2VudENsYXNzTmFtZX0qICR7YXJnfSIpOwotICAgIH0K
LQotICAgIG15ICRhcmd1bWVudFN0cmluZyA9IGpvaW4oIiwgIiwgQGFyZ3VtZW50cyk7Ci0KLSAg
ICBteSBAYmFja2VuZEhlYWQ7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgJHtiYWNrZW5k
Q2xhc3NOYW1lfSgke2FyZ3VtZW50U3RyaW5nfSkiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
QGZpZWxkSW5pdGlhbGl6ZXJzKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICB7IH0iKTsK
LSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAg
IHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSAwOyB9
Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwg
IiAgICBlbnVtIENvbW1vbkVycm9yQ29kZSB7Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIg
ICAgICAgIFBhcnNlRXJyb3IgPSAwLCIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAg
ICBJbnZhbGlkUmVxdWVzdCwiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICAgICAgTWV0
aG9kTm90Rm91bmQsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludmFsaWRQ
YXJhbXMsIik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIEludGVybmFsRXJyb3Is
Iik7Ci0gICAgcHVzaChAYmFja2VuZEhlYWQsICIgICAgICAgIFNlcnZlckVycm9yLCIpOwotICAg
IHB1c2goQGJhY2tlbmRIZWFkLCAiICAgICAgICBMYXN0RW50cnksIik7Ci0gICAgcHVzaChAYmFj
a2VuZEhlYWQsICIgICAgfTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1
c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25n
KiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpIGNvbnN0OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgcmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSwgY29u
c3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGRhdGEp
IGNvbnN0OyIpOwotICAgIHB1c2goQGJhY2tlbmRIZWFkLCAiICAgIHZvaWQgZGlzcGF0Y2goY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiAgICBzdGF0
aWMgYm9vbCBnZXRDb21tYW5kTmFtZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFN0cmluZyogcmVz
dWx0KTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kSGVhZCwgIiIpOwotICAgIHB1c2goQGJhY2tlbmRI
ZWFkLCAiICAgIGVudW0gTWV0aG9kTmFtZXMgeyIpOwotICAgICRiYWNrZW5kQ29uc3RydWN0b3Ig
PSBqb2luKCJcbiIsIEBiYWNrZW5kSGVhZCk7Ci19Ci0KLXN1YiBmaW5pc2gKLXsKLSAgICBteSAk
b2JqZWN0ID0gc2hpZnQ7Ci0KLSAgICBwdXNoKEBiYWNrZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRl
QmFja2VuZERpc3BhdGNoZXIoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5l
cmF0ZUJhY2tlbmRTZW5kUmVzcG9uc2UoKSk7Ci0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBs
LCBnZW5lcmF0ZUJhY2tlbmRSZXBvcnRQcm90b2NvbEVycm9yKCkpOwotICAgIHVuc2hpZnQoQGZy
b250ZW5kTWV0aG9kc0ltcGwsIGdlbmVyYXRlRnJvbnRlbmRDb25zdHJ1Y3RvckltcGwoKSwgIiIp
OwotCi0gICAgb3BlbihteSAkU09VUkNFLCAiPiRvdXRwdXREaXIvJGZyb250ZW5kQ2xhc3NOYW1l
LmNwcCIpIHx8IGRpZSAiQ291bGRuJ3Qgb3BlbiBmaWxlICRvdXRwdXREaXIvJGZyb250ZW5kQ2xh
c3NOYW1lLmNwcCI7Ci0gICAgcHJpbnQgJFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRlU291cmNl
KCRmcm9udGVuZENsYXNzTmFtZSwgXCVmcm9udGVuZFR5cGVzLCBcQGZyb250ZW5kQ29uc3RhbnRE
ZWZpbml0aW9ucywgXEBmcm9udGVuZE1ldGhvZHNJbXBsKSk7Ci0gICAgY2xvc2UoJFNPVVJDRSk7
Ci0gICAgdW5kZWYoJFNPVVJDRSk7Ci0KLSAgICBvcGVuKG15ICRIRUFERVIsICI+JG91dHB1dEhl
YWRlcnNEaXIvJGZyb250ZW5kQ2xhc3NOYW1lLmgiKSB8fCBkaWUgIkNvdWxkbid0IG9wZW4gZmls
ZSAkb3V0cHV0SGVhZGVyc0Rpci8kZnJvbnRlbmRDbGFzc05hbWUuaCI7Ci0gICAgcHJpbnQgJEhF
QURFUiBnZW5lcmF0ZUhlYWRlcigkZnJvbnRlbmRDbGFzc05hbWUsICRmcm9udGVuZENsYXNzTmFt
ZSwgXCVmcm9udGVuZFR5cGVzLCAkZnJvbnRlbmRDb25zdHJ1Y3RvciwgXEBmcm9udGVuZENvbnN0
YW50RGVjbGFyYXRpb25zLCBcQGZyb250ZW5kTWV0aG9kcywgam9pbigiXG4iLCBAZnJvbnRlbmRG
b290ZXIpKTsKLSAgICBjbG9zZSgkSEVBREVSKTsKLSAgICB1bmRlZigkSEVBREVSKTsKLQotICAg
IHVuc2hpZnQoQGJhY2tlbmRDb25zdGFudERlZmluaXRpb25zLCAiY29uc3QgY2hhciogSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmROYW1lc1tdID0geyIpOwotICAgIHB1c2goQGJh
Y2tlbmRDb25zdGFudERlZmluaXRpb25zLCAifTsiKTsKLSAgICBwdXNoKEBiYWNrZW5kQ29uc3Rh
bnREZWZpbml0aW9ucywgIiIpOwotCi0gICAgIyBNYWtlIGRpc3BhdGNoZXIgbWV0aG9kcyBwcml2
YXRlIG9uIHRoZSBiYWNrZW5kLgotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9u
cywgIn07Iik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiIik7Ci0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBjb21tYW5kTmFtZXNbXTsiKTsgICAgCi0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVj
bGFyYXRpb25zLCAiIik7Ci0gICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAi
cHJpdmF0ZToiKTsKLQotICAgIGZvcmVhY2ggbXkgJHR5cGUgKGtleXMgJWJhY2tlbmRUeXBlcykg
ewotICAgICAgICBpZiAodHlwZVRyYWl0cygkdHlwZSwgIkpTT05UeXBlIikpIHsKLSAgICAgICAg
ICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgZ2VuZXJhdGVBcmd1bWVudEdldHRlcnMoJHR5
cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1c2goQGJhY2tlbmRDb25zdGFudERlY2xh
cmF0aW9ucywgIiAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0
aW9uRXJyb3IpOyIpOwotCi0gICAgZ2VuZXJhdGVCYWNrZW5kQWdlbnRGaWVsZHNBbmRDb25zdHJ1
Y3RvcigpOwotCi0gICAgcHVzaChAYmFja2VuZE1ldGhvZHNJbXBsLCBnZW5lcmF0ZUJhY2tlbmRN
ZXNzYWdlUGFyc2VyKCkpOwotICAgIHB1c2goQGJhY2tlbmRNZXRob2RzSW1wbCwgIiIpOwotCi0g
ICAgcHVzaChAYmFja2VuZENvbnN0YW50RGVjbGFyYXRpb25zLCAiIik7Ci0KLSAgICBvcGVuKCRT
T1VSQ0UsICI+JG91dHB1dERpci8kYmFja2VuZENsYXNzTmFtZS5jcHAiKSB8fCBkaWUgIkNvdWxk
bid0IG9wZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5kQ2xhc3NOYW1lLmNwcCI7Ci0gICAgcHJp
bnQgJFNPVVJDRSBqb2luKCJcbiIsIGdlbmVyYXRlU291cmNlKCRiYWNrZW5kQ2xhc3NOYW1lLCBc
JWJhY2tlbmRUeXBlcywgXEBiYWNrZW5kQ29uc3RhbnREZWZpbml0aW9ucywgXEBiYWNrZW5kTWV0
aG9kc0ltcGwpKTsKLSAgICBjbG9zZSgkU09VUkNFKTsKLSAgICB1bmRlZigkU09VUkNFKTsKLQot
ICAgIG9wZW4oJEhFQURFUiwgIj4kb3V0cHV0SGVhZGVyc0Rpci8kYmFja2VuZENsYXNzTmFtZS5o
IikgfHwgZGllICJDb3VsZG4ndCBvcGVuIGZpbGUgJG91dHB1dEhlYWRlcnNEaXIvJGJhY2tlbmRD
bGFzc05hbWUuaCI7Ci0gICAgcHJpbnQgJEhFQURFUiBqb2luKCJcbiIsIGdlbmVyYXRlSGVhZGVy
KCRiYWNrZW5kQ2xhc3NOYW1lLCAkYmFja2VuZENsYXNzRGVjbGFyYXRpb24sIFwlYmFja2VuZFR5
cGVzLCAkYmFja2VuZENvbnN0cnVjdG9yLCBcQGJhY2tlbmRDb25zdGFudERlY2xhcmF0aW9ucywg
XEBiYWNrZW5kTWV0aG9kcywgam9pbigiXG4iLCBAYmFja2VuZEZvb3RlcikpKTsKLSAgICBjbG9z
ZSgkSEVBREVSKTsKLSAgICB1bmRlZigkSEVBREVSKTsKLQotICAgIG9wZW4obXkgJEpTX1NUVUIs
ICI+JG91dHB1dERpci8kYmFja2VuZEpTU3R1Yk5hbWUuanMiKSB8fCBkaWUgIkNvdWxkbid0IG9w
ZW4gZmlsZSAkb3V0cHV0RGlyLyRiYWNrZW5kSlNTdHViTmFtZS5qcyI7Ci0gICAgcHJpbnQgJEpT
X1NUVUIgam9pbigiXG4iLCBnZW5lcmF0ZUJhY2tlbmRTdHViSlMoKSk7Ci0gICAgY2xvc2UoJEpT
X1NUVUIpOwotICAgIHVuZGVmKCRKU19TVFVCKTsKLX0KLQotMTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDFm
M2I4NGZiODRiMTI0ODg0ZjYxZTRhN2ZmNDE0NzEzOTVhZTVlOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CkBAIC0w
LDAgKzEsMTQyNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJpbmcKK2ltcG9ydCBvcHRwYXJz
ZQorZnJvbSBzdHJpbmcgaW1wb3J0IGpvaW4KK3RyeToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0
IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KKworY21kbGluZV9w
YXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorY21kbGluZV9wYXJzZXIuYWRkX29wdGlv
bigiLS1kZWZpbmVzIikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGly
IikKK2NtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIiKQorCit0cnk6
CisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9hcmdz
KCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpICE9IDEpOgorICAgICAgICByYWlzZSBFeGNlcHRp
b24oIkV4YWN0bHkgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIChmb3VuZCAlcykiICUgbGVu
KGFyZ192YWx1ZXMpKQorICAgIGlucHV0X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFsdWVzWzBdCisg
ICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hfZGlyCisgICAg
b3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIKKyAgICBpZiBu
b3Qgb3V0cHV0X2hlYWRlcl9kaXJuYW1lOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1
dCAuaCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIG5vdCBvdXRwdXRfY3Bw
X2Rpcm5hbWU6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAgZGlyZWN0b3J5
IG11c3QgYmUgc3BlY2lmaWVkIikKK2V4Y2VwdCBFeGNlcHRpb24sIGU6CisgICAgc3lzLnN0ZGVy
ci53cml0ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzXG5cbiIg
JSBlKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNwZWN0b3IuanNv
biAtLW91dHB1dF9oX2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2NwcF9kaXIgPG91
dHB1dF9jcHBfZGlyPiBbLS1kZWZpbmVzIDxkZWZpbmVzIHN0cmluZz5dXG4iKQorICAgIGV4aXQo
MSkKKworCitkZWYgcGFyc2VfZGVmaW5lcyhzdHIpOgorICAgIGlmIG5vdCBzdHI6CisgICAgICAg
IHJldHVybiB7fQorCisgICAgaXRlbXMgPSBzdHIuc3BsaXQoKQorICAgIHJlc3VsdCA9IHt9Cisg
ICAgZm9yIGl0ZW0gaW4gaXRlbXM6CisgICAgICAgIGlmIGl0ZW1bMF0gPT0gJyInIGFuZCBpdGVt
Wy0xXSA9PSAnIicgYW5kIGxlbihpdGVtKSA+PSAyOgorICAgICAgICAgICAgaXRlbSA9IGl0ZW1b
MTotMV0KKyAgICAgICAgZXFfcG9zID0gaXRlbS5maW5kKCI9IikKKyAgICAgICAgaWYgZXFfcG9z
ID09IC0xOgorICAgICAgICAgICAga2V5ID0gaXRlbQorICAgICAgICAgICAgdmFsdWUgPSBUcnVl
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrZXkgPSBpdGVtWzplcV9wb3NdCisgICAgICAg
ICAgICB2YWx1ZV9zdHIgPSBpdGVtW2VxX3BvcyArIDE6XQorICAgICAgICAgICAgaWYgdmFsdWVf
c3RyID09ICIwIjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IEZhbHNlCisgICAgICAgICAgICBl
bGlmIHZhbHVlX3N0ciA9PSAiMSI6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBUcnVlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgU2hvdWxkIHdlIHN1cHBvcnQgb3RoZXIg
dmFsdWVzPworICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5yZWNvZ25pemVkIGRl
ZmluZSB2YWx1ZTogJyVzJyAoa2V5OiAnJXMnKSIgJSAodmFsdWVfc3RyLCBrZXkpKQorICAgICAg
ICByZXN1bHRba2V5XSA9IHZhbHVlCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWZpbmVzX21hcCA9
IHBhcnNlX2RlZmluZXMoYXJnX29wdGlvbnMuZGVmaW5lcykKKworCitjbGFzcyBEb21haW5OYW1l
Rml4ZXM6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9t
YWluX25hbWUpOgorICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBjbHMuYWdlbnRfdHlwZV9tYXA6
CisgICAgICAgICAgICBhZ2VudF9uYW1lX3JlcyA9IGNscy5hZ2VudF90eXBlX21hcFtkb21haW5f
bmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFnZW50X25hbWVfcmVzID0gIkluc3Bl
Y3RvciVzQWdlbnQiICUgZG9tYWluX25hbWUKKworICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBj
bHMuYWdlbnRfZmllbGRfbmFtZV9tYXA6CisgICAgICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IGNs
cy5hZ2VudF9maWVsZF9uYW1lX21hcFtkb21haW5fbmFtZV0KKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGZpZWxkX25hbWVfcmVzID0gZG9tYWluX25hbWUubG93ZXIoKSArICJBZ2VudCIKKwor
ICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKKyAgICAgICAgICAgIGFnZW50X3R5cGVfbmFtZSA9
IGFnZW50X25hbWVfcmVzCisgICAgICAgICAgICBoaWRkZW4gPSBkb21haW5fbmFtZSBpbiBjbHMu
aGlkZGVuX2RvbWFpbnMKKyAgICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFpbl9uYW1lIGlu
IGNscy5za2lwX2pzX2JpbmRfZG9tYWlucworICAgICAgICAgICAgYWdlbnRfZmllbGRfbmFtZSA9
IGZpZWxkX25hbWVfcmVzCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAg
IGRlZiBpc19kaXNhYmxlZChkZWZpbmVzKToKKyAgICAgICAgICAgICAgICBpZiBub3QgZG9tYWlu
X25hbWUgaW4gY2xzLmRvbWFpbl9kZWZpbmVfbmFtZV9tYXA6CisgICAgICAgICAgICAgICAgICAg
ICMgSGFzIG5vdCBjb3JyZXNwb25kaW5nIHByZXByb2Nlc3NvciBzeW1ib2wuCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX25hbWUgPSBj
bHMuZG9tYWluX2RlZmluZV9uYW1lX21hcFtkb21haW5fbmFtZV0KKworICAgICAgICAgICAgICAg
IGlmIG5vdCBkZWZpbmVfbmFtZSBpbiBkZWZpbmVzOgorICAgICAgICAgICAgICAgICAgICAjIERp
c2FibGVkIHdoZW4gbm90IG1lbnRpb25lZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1
ZQorCisgICAgICAgICAgICAgICAgZGVmaW5lX3ZhbHVlID0gZGVmaW5lc1tkZWZpbmVfbmFtZV0K
KyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGJvb2woZGVmaW5lX3ZhbHVlKQorCisgICAgICAg
IHJldHVybiBSZXMKKworICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsiUnVudGltZSIs
ICJDU1MiLCAiRE9NRGVidWdnZXIiXSkKKyAgICBoaWRkZW5fZG9tYWlucyA9IHNldChbIkluc3Bl
Y3RvciJdKQorICAgIGFnZW50X3R5cGVfbWFwID0geyJOZXR3b3JrIjogIkluc3BlY3RvclJlc291
cmNlQWdlbnQifQorCisgICAgIyBUT0RPOiBnZXQgcmlkIG9mIHRoaXMsIGdlbmVyYXRlIG5hbWVz
IGluc3RlYWQuCisgICAgYWdlbnRfZmllbGRfbmFtZV9tYXAgPSB7CisgICAgICAgICJQYWdlIjog
InBhZ2VBZ2VudCIsCisgICAgICAgICJSdW50aW1lIjogInJ1bnRpbWVBZ2VudCIsCisgICAgICAg
ICJDb25zb2xlIjogImNvbnNvbGVBZ2VudCIsCisgICAgICAgICJOZXR3b3JrIjogICJyZXNvdXJj
ZUFnZW50IiwKKyAgICAgICAgIkRhdGFiYXNlIjogICJkYXRhYmFzZUFnZW50IiwKKyAgICAgICAg
IkRPTVN0b3JhZ2UiOiAgImRvbVN0b3JhZ2VBZ2VudCIsCisgICAgICAgICJBcHBsaWNhdGlvbkNh
Y2hlIjogICJhcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAorICAgICAgICAiRE9NIjogICJkb21BZ2Vu
dCIsCisgICAgICAgICJDU1MiOiAgImNzc0FnZW50IiwKKyAgICAgICAgIkRlYnVnZ2VyIjogImRl
YnVnZ2VyQWdlbnQiLAorICAgICAgICAiRE9NRGVidWdnZXIiOiAiZG9tRGVidWdnZXJBZ2VudCIs
CisgICAgICAgICJQcm9maWxlciI6ICJwcm9maWxlckFnZW50IiwKKyAgICAgICAgIldvcmtlciI6
ICJ3b3JrZXJBZ2VudCIsCisgICAgfQorCisgICAgZG9tYWluX2RlZmluZV9uYW1lX21hcCA9IHsK
KyAgICAgICAgIkRhdGFiYXNlIjogIkVOQUJMRV9TUUxfREFUQUJBU0UiLAorICAgICAgICAiRGVi
dWdnZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiRE9NRGVidWdn
ZXIiOiAiRU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiUHJvZmlsZXIiOiAi
RU5BQkxFX0pBVkFTQ1JJUFRfREVCVUdHRVIiLAorICAgICAgICAiV29ya2VyIjogIkVOQUJMRV9X
T1JLRVJTIiwKKyAgICB9CisKKworY2xhc3MgQ1BhcmFtVHlwZShvYmplY3QpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0eXBlLCBzZXR0ZXJfZm9ybWF0PSIlcyIpOgorICAgICAgICBzZWxmLnR5
cGUgPSB0eXBlCisgICAgICAgIHNlbGYuc2V0dGVyX2Zvcm1hdCA9IHNldHRlcl9mb3JtYXQKKwor
ICAgIGRlZiBnZXRfdGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudHlwZQorCisgICAg
ZGVmIGdldF9zZXR0ZXJfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zZXR0ZXJf
Zm9ybWF0CisKKworY2xhc3MgUmF3VHlwZXMob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIGdldChqc29uX3R5cGUpOgorICAgICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4i
OgorICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKKyAgICAgICAgZWxpZiBqc29uX3R5
cGUgPT0gInN0cmluZyI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCisgICAg
ICAgIGVsaWYganNvbl90eXBlID09ICJhcnJheSI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlw
ZXMuQXJyYXkKKyAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6CisgICAgICAgICAg
ICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0CisgICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRl
Z2VyIjoKKyAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKyAgICAgICAgZWxpZiBqc29u
X3R5cGUgPT0gIm51bWJlciI6CisgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZTog
JXMiICUganNvbl90eXBlKQorCisgICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToKKyAgICAgICAg
QGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19wYXJhbV90eXBlKGNscywgcGFyYW1fdHlw
ZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgcmV0dXJuIGNscy5kZWZhdWx0X2NfcGFyYW1fdHlw
ZQorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFtX2No
ZWNrX29wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGNsYXNzIFN0
cmluZyhCYXNlVHlwZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2Nf
cGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUsIG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBh
cmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
X3JlZl9jX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNs
cy5fcGxhaW5fY190eXBlCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0
X2dldHRlcl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKKworICAgICAgICBn
ZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJc
IlwiIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5
cGUoKToKKyAgICAgICAgICAgIHJldHVybiAic3RyaW5nIgorCisgICAgICAgIF9wbGFpbl9jX3R5
cGUgPSBDUGFyYW1UeXBlKCJTdHJpbmciKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5
cGUoImNvbnN0IFN0cmluZyYiKQorCisgICAgY2xhc3MgSW50KEJhc2VUeXBlKToKKyAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6CisgICAgICAgICAg
ICByZXR1cm4gIkludCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRf
c2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgorCisgICAgICAgIEBz
dGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6CisgICAgICAgICAg
ICByZXR1cm4gIjAiCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2pz
X2JpbmRfdHlwZSgpOgorICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCisKKyAgICAgICAgZGVm
YXVsdF9jX3BhcmFtX3R5cGUgPSBDUGFyYW1UeXBlKCJpbnQiKQorCisgICAgY2xhc3MgTnVtYmVy
KEJhc2VUeXBlKToKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2dldHRl
cl9uYW1lKCk6CisgICAgICAgICAgICByZXR1cm4gIk9iamVjdCIKKworICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVy
biAiTnVtYmVyIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGdldF9jX2lu
aXRpYWxpemVyKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikK
KworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6
CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKKworICAgICAgICBk
ZWZhdWx0X2NfcGFyYW1fdHlwZSA9IENQYXJhbVR5cGUoImRvdWJsZSIpCisKKyAgICBjbGFzcyBC
b29sKEJhc2VUeXBlKToKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBnZXRfY19w
YXJhbV90eXBlKGNscywgcGFyYW1fdHlwZSwgb3B0aW9uYWwpOgorICAgICAgICAgICAgaWYgKHBh
cmFtX3R5cGUgPT0gUGFyYW1UeXBlLkVWRU5UKToKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5fcmVmX2NfdHlwZQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlw
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9j
X3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfZ2V0dGVyX25h
bWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIKKworICAgICAgICBnZXRfc2V0dGVy
X25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfY19pbml0aWFsaXplcigpOgorICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKKwor
ICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Cisg
ICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCisKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICBkZWYgaXNfZXZlbnRfcGFyYW1fY2hlY2tfb3B0aW9uYWwoKToKKyAgICAgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICAgICAgX3BsYWluX2NfdHlwZSA9IENQYXJhbVR5cGUoImJvb2wiKQor
ICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoImNvbnN0IGJvb2wqIGNvbnN0IiwgIiol
cyIpCisKKyAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgorICAgICAgICBAY2xhc3NtZXRob2QK
KyAgICAgICAgZGVmIGdldF9jX3BhcmFtX3R5cGUoY2xzLCBwYXJhbV90eXBlLCBvcHRpb25hbCk6
CisgICAgICAgICAgICBpZiBwYXJhbV90eXBlID09IFBhcmFtVHlwZS5FVkVOVDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLl9yZWZfY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiBjbHMuX3BsYWluX2NfdHlwZQorCisgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgorICAgICAgICAgICAgcmV0dXJuICJP
YmplY3QiCisKKyAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCisKKyAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKKyAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIKKworICAgICAgICBA
c3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6CisgICAgICAgICAg
ICByZXR1cm4gIm9iamVjdCIKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBp
c19ldmVudF9wYXJhbV9jaGVja19vcHRpb25hbCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUK
KworICAgICAgICBfcGxhaW5fY190eXBlID0gQ1BhcmFtVHlwZSgiUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4iKQorICAgICAgICBfcmVmX2NfdHlwZSA9IENQYXJhbVR5cGUoIlBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiIpCisKKyAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6CisgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfcGFyYW1fdHlwZShjbHMsIHBhcmFtX3R5cGUs
IG9wdGlvbmFsKToKKyAgICAgICAgICAgIGlmIHBhcmFtX3R5cGUgPT0gUGFyYW1UeXBlLk9VVFBV
VDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl9wbGFpbl9jX3R5cGUKKyAgICAgICAgICAg
IGVsaWYgcGFyYW1fdHlwZSA9PSBQYXJhbVR5cGUuSU5QVVQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNscy5fcGxhaW5fY190eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJldHVybiBjbHMuX3JlZl9jX3R5cGUKKworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAg
IGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKKyAgICAgICAgICAgIHJldHVybiAiQXJyYXkiCisKKyAg
ICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCisKKyAgICAgICAgQHN0YXRp
Y21ldGhvZAorICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKKyAgICAgICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIgorCisgICAgICAgIEBzdGF0aWNtZXRob2QK
KyAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKKyAgICAgICAgICAgIHJldHVybiAib2Jq
ZWN0IgorCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGlzX2V2ZW50X3BhcmFt
X2NoZWNrX29wdGlvbmFsKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIF9w
bGFpbl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IikKKyAgICAg
ICAgX3JlZl9jX3R5cGUgPSBDUGFyYW1UeXBlKCJQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiIp
CisKKworY2xhc3MgUGFyYW1UeXBlKG9iamVjdCk6CisgICAgSU5QVVQgPSAiaW5wdXQiCisgICAg
T1VUUFVUID0gIm91dHB1dCIKKyAgICBFVkVOVCA9ICJldmVudCIKKworCitjbGFzcyBUeXBlRGF0
YShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWlu
KToKKyAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBlCisgICAgICAgIHNlbGYuanNv
bl9kb21haW5fID0ganNvbl9kb21haW4KKworICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBl
OgorICAgICAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQorICAgICAg
ICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCisgICAgICAg
IHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKKworICAgIGRlZiBnZXRfcmF3X3R5cGUoc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXworCisKK2NsYXNzIFR5cGVNYXA6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGFwaSk6CisgICAgICAgIHNlbGYubWFwXyA9IHt9CisgICAgICAg
IGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9u
YW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCisKKyAgICAgICAgICAgIGRvbWFpbl9tYXAgPSB7
fQorICAgICAgICAgICAgc2VsZi5tYXBfW2RvbWFpbl9uYW1lXSA9IGRvbWFpbl9tYXAKKworICAg
ICAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKKyAgICAgICAgICAgICAgICBmb3Ig
anNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgorICAgICAgICAgICAgICAgICAgICB0
eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KKyAgICAgICAgICAgICAgICAgICAgdHlwZV9kYXRh
ID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbikKKyAgICAgICAgICAgICAgICAgICAg
ZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCisKKyAgICBkZWYgZ2V0KHNlbGYsIGRv
bWFpbl9uYW1lLCB0eXBlX25hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9u
YW1lXVt0eXBlX25hbWVdCisKKworZGVmIHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJh
bWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBpZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0
ZXI6CisgICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0ZXJbIiRyZWYiXQorICAgICAgICB0
eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQorICAg
ICAgICByZXR1cm4gdHlwZV9kYXRhLmdldF9yYXdfdHlwZSgpCisgICAgZWxpZiAidHlwZSIgaW4g
anNvbl9wYXJhbWV0ZXI6CisgICAgICAgIGpzb25fdHlwZSA9IGpzb25fcGFyYW1ldGVyWyJ0eXBl
Il0KKyAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29uX3R5cGUpCisgICAgZWxzZToKKyAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQorCisKK2RlZiBnZXRfcmVmX2Rh
dGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKKyAgICBkb3RfcG9zID0ganNvbl9yZWYu
ZmluZCgiLiIpCisgICAgaWYgZG90X3BvcyA9PSAtMToKKyAgICAgICAgZG9tYWluX25hbWUgPSBz
Y29wZV9kb21haW5fbmFtZQorICAgICAgICB0eXBlX25hbWUgPSBqc29uX3JlZgorICAgIGVsc2U6
CisgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9wb3NdCisgICAgICAgIHR5cGVf
bmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KKworICAgIHJldHVybiB0eXBlX21hcC5nZXQo
ZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKKworCitpbnB1dF9maWxlID0gb3BlbihpbnB1dF9qc29u
X2ZpbGVuYW1lLCAiciIpCitqc29uX3N0cmluZyA9IGlucHV0X2ZpbGUucmVhZCgpCitqc29uX2Fw
aSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCisKKworY2xhc3MgVGVtcGxhdGVzOgorICAgIGZy
b250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0ZSgKKyIiIiAgICBjbGFzcyAkZG9t
YWluQ2xhc3NOYW1lIHsKKyAgICBwdWJsaWM6CisgICAgICAgICRkb21haW5DbGFzc05hbWUoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KKyR7ZnJv
bnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnN9ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQorICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKKyAgICB9OworCisgICAgJGRvbWFpbkNsYXNzTmFtZSogJGRv
bWFpbkZpZWxkTmFtZSgpIHsgcmV0dXJuICZtXyRkb21haW5GaWVsZE5hbWU7IH0KKworIiIiKQor
CisgICAgYmFja2VuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoCisiIiJ2b2lkIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9XyRtZXRob2ROYW1lKGxvbmcgY2FsbElk
LCBJbnNwZWN0b3JPYmplY3QqJHJlcXVlc3RNZXNzYWdlT2JqZWN0KQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisKKyAgICBpZiAoISRhZ2VudEZpZWxkKQorICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0
cmluZygiJHtkb21haW5OYW1lfSBoYW5kbGVyIGlzIG5vdCBhdmFpbGFibGUuIik7CiskbWV0aG9k
T3V0Q29kZQorICAgIEVycm9yU3RyaW5nIGVycm9yOworJG1ldGhvZEluQ29kZQoraWYgKCFwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpCisgICAgJGFnZW50RmllbGQtPiRtZXRob2ROYW1lKCZlcnJv
ciRhZ2VudENhbGxQYXJhbXMpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7cmVzcG9uc2VDb29rfXNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdCwgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIkZG9tYWluTmFtZS4kbWV0aG9kTmFtZSIpLCBw
cm90b2NvbEVycm9ycywgZXJyb3IpOworfQorIiIiKQorCisgICAgZnJvbnRlbmRfbWV0aG9kID0g
c3RyaW5nLlRlbXBsYXRlKCIiInZvaWQgSW5zcGVjdG9yRnJvbnRlbmQ6OiRkb21haW5OYW1lOjok
ZXZlbnROYW1lKCRwYXJhbWV0ZXJzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+ICR7
ZXZlbnROYW1lfU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICR7ZXZl
bnROYW1lfU1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIiwgIiRkb21haW5OYW1lLiRldmVudE5h
bWUiKTsKKyRjb2RlICAgIGlmIChtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkKKyAgICAgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZCgke2V2ZW50
TmFtZX1NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisiIiIpCisKKyAgICBmcm9udGVuZF9o
ID0gc3RyaW5nLlRlbXBsYXRlKCIiIi8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQ2hyb21pdW0g
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCisjaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKKyNkZWZp
bmUgSW5zcGVjdG9yRnJvbnRlbmRfaAorCisjaW5jbHVkZSA8UGxhdGZvcm1TdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEluc3BlY3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworY2xhc3Mg
SW5zcGVjdG9yT2JqZWN0OworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3Mg
SW5zcGVjdG9yRnJvbnRlbmQgeworcHVibGljOgorICAgIEluc3BlY3RvckZyb250ZW5kKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCopOworCisKKyRkb21haW5DbGFzc0xpc3QKK3ByaXZhdGU6Cisg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
KyR7ZmllbGREZWNsYXJhdGlvbnN9fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCisiIiIpCisKKyAgICBiYWNrZW5kX2gg
PSBzdHJpbmcuVGVtcGxhdGUoIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKyNpZm5kZWYgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJf
aAorI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcl9oCisKKyNpbmNsdWRlIDxQbGF0
Zm9ybVN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnNwZWN0b3JB
Z2VudDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3RvckFycmF5OworY2xh
c3MgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworCiskZm9yd2FyZERlY2xhcmF0aW9ucworCit0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiB7Citw
dWJsaWM6CisgICAgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwkY29uc3RydWN0b3JQYXJhbXMpCisgICAg
ICAgIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KQorJGNvbnN0cnVjdG9ySW5pdAorICAgIHsgfQorCisgICAgdm9pZCBjbGVhckZyb250ZW5kKCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IDA7IH0KKworICAgIGVudW0gQ29tbW9uRXJy
b3JDb2RlIHsKKyAgICAgICAgUGFyc2VFcnJvciA9IDAsCisgICAgICAgIEludmFsaWRSZXF1ZXN0
LAorICAgICAgICBNZXRob2ROb3RGb3VuZCwKKyAgICAgICAgSW52YWxpZFBhcmFtcywKKyAgICAg
ICAgSW50ZXJuYWxFcnJvciwKKyAgICAgICAgU2VydmVyRXJyb3IsCisgICAgICAgIExhc3RFbnRy
eSwKKyAgICB9OworCisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkg
Y29uc3Q7CisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNh
bGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gZGF0YSkgY29uc3Q7CisgICAgdm9pZCBkaXNwYXRjaChjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHN0YXRpYyBib29sIGdldENvbW1hbmROYW1lKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgU3RyaW5nKiByZXN1bHQpOworCisgICAgZW51bSBNZXRob2ROYW1l
cyB7CisKKyRtZXRob2ROYW1lc0VudW1Db250ZW50Cit9OworCisgICAgc3RhdGljIGNvbnN0IGNo
YXIqIGNvbW1hbmROYW1lc1tdOworCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZ2V0SW50KElu
c3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7CisgICAgc3RhdGljIFN0cmluZyBn
ZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0
aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9ycyk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9u
RXJyb3IpOworCiskbWV0aG9kRGVjbGFyYXRpb25zCisKKyAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworJGZpZWxkRGVjbGFyYXRpb25zCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXJfaCkKKworCisiIiIpCisKKyAgICBiYWNrZW5kX2NwcCA9IHN0cmlu
Zy5UZW1wbGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmgiCiskaW5jbHVkZXMKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBj
aGFyKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZE5hbWVzW10gPSB7CiskbWV0
aG9kTmFtZURlY2xhcmF0aW9ucworfTsKKworCiskbWV0aG9kcwordm9pZCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCA9IHRoaXM7CisgICAgdHlw
ZWRlZiB2b2lkIChJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25n
IGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0KiBtZXNzYWdlT2JqZWN0KTsKKyAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICk7CisgICAgbG9uZyBjYWxsSWQgPSAw
OworCisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgQ2Fs
bEhhbmRsZXIgaGFuZGxlcnNbXSA9IHsKKyRtZXNzYWdlSGFuZGxlcnMKKyAgICAgICAgfTsKKyAg
ICAgICAgc2l6ZV90IGxlbmd0aCA9IHNpemVvZihjb21tYW5kTmFtZXMpIC8gc2l6ZW9mKGNvbW1h
bmROYW1lc1swXSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kp
CisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZE5hbWVzW2ldLCBoYW5kbGVyc1tp
XSk7CisgICAgfQorCisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlID0g
SW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBpZiAoIXBhcnNlZE1lc3Nh
Z2UpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigwLCBQYXJzZUVycm9yLCAiTWVzc2Fn
ZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlT2JqZWN0ID0gcGFyc2VkTWVzc2FnZS0+
YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKKyAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcigwLCBJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmll
ZCBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4gY2FsbElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXQoImlkIik7CisgICAgaWYg
KCFjYWxsSWRWYWx1ZSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRS
ZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc051bWJlcigmY2FsbElkKSkgeworICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKDAsIEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2Yg
J2lkJyBwcm9wZXJ0eSBtdXN0IGJlIG51bWJlciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3Qt
PmdldCgibWV0aG9kIik7CisgICAgaWYgKCFtZXRob2RWYWx1ZSkgeworICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkg
d2Fzbid0IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBTdHJpbmcgbWV0
aG9kOworICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCZtZXRob2QpKSB7CisgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBv
ZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmluZyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBk
aXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgp
KSB7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgTWV0aG9kTm90Rm91bmQs
ICInIiArIG1ldGhvZCArICInIHdhc24ndCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgKCgqdGhpcykuKml0LT5zZWNvbmQpKGNhbGxJZCwgbWVzc2FnZU9iamVjdC5nZXQo
KSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShs
b25nIGNhbGxJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzLCBFcnJvclN0cmluZyBpbnZvY2F0aW9uRXJyb3IpCit7CisgICAgaWYgKHByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
dmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3BvbnNlTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzcG9u
c2VNZXNzYWdlLT5zZXRPYmplY3QoInJlc3VsdCIsIHJlc3VsdCk7CisgICAgcmVzcG9uc2VNZXNz
YWdlLT5zZXROdW1iZXIoImlkIiwgY2FsbElkKTsKKyAgICBpZiAobV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpCisgICAgICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpIGNvbnN0Cit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGNvZGUs
IGVycm9yTWVzc2FnZSwgMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJv
ckNvZGUgY29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGRhdGEpIGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8
aW50PixzX2NvbW1vbkVycm9ycywpOworICAgIGlmICghc19jb21tb25FcnJvcnMuc2l6ZSgpKSB7
CisgICAgICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChQYXJzZUVycm9yLCAtMzI3MDApOworICAg
ICAgICBzX2NvbW1vbkVycm9ycy5pbnNlcnQoSW52YWxpZFJlcXVlc3QsIC0zMjYwMCk7CisgICAg
ICAgIHNfY29tbW9uRXJyb3JzLmluc2VydChNZXRob2ROb3RGb3VuZCwgLTMyNjAxKTsKKyAgICAg
ICAgc19jb21tb25FcnJvcnMuaW5zZXJ0KEludmFsaWRQYXJhbXMsIC0zMjYwMik7CisgICAgICAg
IHNfY29tbW9uRXJyb3JzLmluc2VydChJbnRlcm5hbEVycm9yLCAtMzI2MDMpOworICAgICAgICBz
X2NvbW1vbkVycm9ycy5pbnNlcnQoU2VydmVyRXJyb3IsIC0zMjAwMCk7CisgICAgfQorICAgIEFT
U0VSVChjb2RlID49MCk7CisgICAgQVNTRVJUKCh1bnNpZ25lZCljb2RlIDwgc19jb21tb25FcnJv
cnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQoc19jb21tb25FcnJvcnNbY29kZV0pOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBlcnJvci0+c2V0TnVtYmVyKCJjb2RlIiwgc19jb21tb25FcnJvcnNbY29kZV0pOworICAgIGVy
cm9yLT5zZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3NhZ2UpOworICAgIEFTU0VSVChlcnJv
cik7CisgICAgaWYgKGRhdGEpCisgICAgICAgIGVycm9yLT5zZXRBcnJheSgiZGF0YSIsIGRhdGEp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1lc3NhZ2UtPnNldE9iamVjdCgiZXJyb3IiLCBlcnJvcik7CisgICAg
aWYgKGNhbGxJZCkKKyAgICAgICAgbWVzc2FnZS0+c2V0TnVtYmVyKCJpZCIsICpjYWxsSWQpOwor
ICAgIGVsc2UKKyAgICAgICAgbWVzc2FnZS0+c2V0VmFsdWUoImlkIiwgSW5zcGVjdG9yVmFsdWU6
Om51bGwoKSk7CisgICAgaWYgKG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKQorICAgICAgICBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKK30KKworaW50IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRJbnQoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VS
VChwcm90b2NvbEVycm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVl
Rm91bmQgPSBmYWxzZTsKKworICAgIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAoIW9iamVjdCkg
eworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAgICAgICAgIC8vIFJlcXVpcmVkIHBh
cmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIuCisgICAgICAgICAgICBwcm90b2Nv
bEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3Qg
Y29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ051bWJlcicuIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5l
bmQoKTsKKyAgICBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3Ig
PSBvYmplY3QtPmZpbmQobmFtZSk7CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsK
KyAgICAgICAgaWYgKCF2YWx1ZUZvdW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnTnVtYmVy
JyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgICAgICByZXR1cm4g
dmFsdWU7CisgICAgfQorCisgICAgaWYgKCF2YWx1ZUl0ZXJhdG9yLT5zZWNvbmQtPmFzTnVtYmVy
KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmluZzo6Zm9y
bWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnTnVtYmVyJy4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5k
KQorICAgICAgICAgICAgKnZhbHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30K
KworU3RyaW5nIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9y
cyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsK
KworICAgIFN0cmluZyB2YWx1ZSA9ICIiOworCisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAg
aWYgKCF2YWx1ZUZvdW5kKSB7CisgICAgICAgICAgICAvLyBSZXF1aXJlZCBwYXJhbWV0ZXIgaW4g
bWlzc2luZyBwYXJhbXMgY29udGFpbmVyLgorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1
c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVx
dWlyZWQgcGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdTdHJpbmcnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBJ
bnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG9iamVjdC0+ZW5kKCk7CisgICAg
SW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVyYXRvciB2YWx1ZUl0ZXJhdG9yID0gb2JqZWN0LT5m
aW5kKG5hbWUpOworCisgICAgaWYgKHZhbHVlSXRlcmF0b3IgPT0gZW5kKSB7CisgICAgICAgIGlm
ICghdmFsdWVGb3VuZCkKKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBm
b3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc1N0cmluZygmdmFsdWUpKQor
ICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1l
dGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycuIiwgbmFtZS51dGY4
KCkuZGF0YSgpKSk7CisgICAgZWxzZQorICAgICAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAg
ICAgICp2YWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK2Jvb2wgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisKKyAgICBp
ZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAgIGJvb2wg
dmFsdWUgPSBmYWxzZTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVG
b3VuZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFy
YW1zIGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0
cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFt
ZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicuIiwgbmFtZS51dGY4KCkuZGF0YSgpKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIEluc3BlY3Rvck9i
amVjdDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gb2JqZWN0LT5lbmQoKTsKKyAgICBJbnNwZWN0b3JP
YmplY3Q6OmNvbnN0X2l0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSBvYmplY3QtPmZpbmQobmFtZSk7
CisKKyAgICBpZiAodmFsdWVJdGVyYXRvciA9PSBlbmQpIHsKKyAgICAgICAgaWYgKCF2YWx1ZUZv
dW5kKQorICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3Jt
YXQoIlBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnQm9vbGVhbicgd2FzIG5vdCBmb3VuZC4iLCBu
YW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAg
IGlmICghdmFsdWVJdGVyYXRvci0+c2Vjb25kLT5hc0Jvb2xlYW4oJnZhbHVlKSkKKyAgICAgICAg
cHJvdG9jb2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMn
IGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4iLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlmICh2YWx1ZUZvdW5kKQorICAgICAgICAgICAgKnZh
bHVlRm91bmQgPSB0cnVlOworICAgIHJldHVybiB2YWx1ZTsKK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVy
cm9ycyk7CisKKyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxz
ZTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmICghdmFsdWVGb3Vu
ZCkgeworICAgICAgICAgICAgLy8gUmVxdWlyZWQgcGFyYW1ldGVyIGluIG1pc3NpbmcgcGFyYW1z
IGNvbnRhaW5lci4KKyAgICAgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNoU3RyaW5nKFN0cmlu
Zzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRl
ciAnJXMnIHdpdGggdHlwZSAnT2JqZWN0Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVj
dDo6Y29uc3RfaXRlcmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKwor
ICAgIGlmICh2YWx1ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQp
CisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
UGFyYW1ldGVyICclcycgd2l0aCB0eXBlICdPYmplY3QnIHdhcyBub3QgZm91bmQuIiwgbmFtZS51
dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICBpZiAo
IXZhbHVlSXRlcmF0b3ItPnNlY29uZC0+YXNPYmplY3QoJnZhbHVlKSkKKyAgICAgICAgcHJvdG9j
b2xFcnJvcnMtPnB1c2hTdHJpbmcoU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3
cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdPYmplY3QnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOwor
ICAgIGVsc2UKKyAgICAgICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3Vu
ZCA9IHRydWU7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
QXJyYXkqIHByb3RvY29sRXJyb3JzKQoreworICAgIEFTU0VSVChwcm90b2NvbEVycm9ycyk7CisK
KyAgICBpZiAodmFsdWVGb3VuZCkKKyAgICAgICAgKnZhbHVlRm91bmQgPSBmYWxzZTsKKworICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpIHsKKyAgICAg
ICAgICAgIC8vIFJlcXVpcmVkIHBhcmFtZXRlciBpbiBtaXNzaW5nIHBhcmFtcyBjb250YWluZXIu
CisgICAgICAgICAgICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgi
J3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRo
IHR5cGUgJ0FycmF5Jy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgSW5zcGVjdG9yT2JqZWN0Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBvYmplY3QtPmVuZCgpOworICAgIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRl
cmF0b3IgdmFsdWVJdGVyYXRvciA9IG9iamVjdC0+ZmluZChuYW1lKTsKKworICAgIGlmICh2YWx1
ZUl0ZXJhdG9yID09IGVuZCkgeworICAgICAgICBpZiAoIXZhbHVlRm91bmQpCisgICAgICAgICAg
ICBwcm90b2NvbEVycm9ycy0+cHVzaFN0cmluZyhTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICcl
cycgd2l0aCB0eXBlICdBcnJheScgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKworICAgIGlmICghdmFsdWVJdGVyYXRv
ci0+c2Vjb25kLT5hc0FycmF5KCZ2YWx1ZSkpCisgICAgICAgIHByb3RvY29sRXJyb3JzLT5wdXNo
U3RyaW5nKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQg
bXVzdCBiZSAnQXJyYXknLiIsIG5hbWUudXRmOCgpLmRhdGEoKSkpOworICAgIGVsc2UKKyAgICAg
ICAgaWYgKHZhbHVlRm91bmQpCisgICAgICAgICAgICAqdmFsdWVGb3VuZCA9IHRydWU7CisgICAg
cmV0dXJuIHZhbHVlOworfQorYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29t
bWFuZE5hbWUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTiht
ZXNzYWdlKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFvYmplY3QtPmdl
dFN0cmluZygibWV0aG9kIiwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1w
bGF0ZSgiIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKworCitJ
bnNwZWN0b3JGcm9udGVuZDo6SW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCisgICAgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpCiskY29uc3RydWN0b3JJbml0eworfQor
CiskbWV0aG9kcworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQorIiIiKQorCisgICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZSgiIiIv
LyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgor
CisKK0luc3BlY3RvckJhY2tlbmRTdHViID0gZnVuY3Rpb24oKQoreworICAgIHRoaXMuX2xhc3RD
YWxsYmFja0lkID0gMTsKKyAgICB0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQgPSAwOworICAg
IHRoaXMuX2NhbGxiYWNrcyA9IHt9OworICAgIHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzID0ge307
CisgICAgdGhpcy5fZXZlbnRBcmdzID0ge307CiskZGVsZWdhdGVzJGV2ZW50QXJncyRkb21haW5E
aXNwYXRjaGVycyAgICB9CisKK0luc3BlY3RvckJhY2tlbmRTdHViLnByb3RvdHlwZSA9IHsKKyAg
ICBkdW1wSW5zcGVjdG9yVGltZVN0YXRzOiAwLAorICAgIGR1bXBJbnNwZWN0b3JQcm90b2NvbE1l
c3NhZ2VzOiAwLAorCisgICAgX3dyYXA6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLl9sYXN0Q2FsbGJhY2tJZCsrOworICAgICAgICB0aGlz
Ll9jYWxsYmFja3NbY2FsbGJhY2tJZF0gPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9OworICAg
ICAgICByZXR1cm4gY2FsbGJhY2tJZDsKKyAgICB9LAorCisgICAgX3JlZ2lzdGVyRGVsZWdhdGU6
IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcpCisgICAgeworICAgICAgICB2YXIgZG9tYWluQW5kRnVu
Y3Rpb24gPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpLm1ldGhvZC5zcGxpdCgiLiIpOworICAg
ICAgICB2YXIgYWdlbnROYW1lID0gZG9tYWluQW5kRnVuY3Rpb25bMF0gKyAiQWdlbnQiOworICAg
ICAgICBpZiAoIXdpbmRvd1thZ2VudE5hbWVdKQorICAgICAgICAgICAgd2luZG93W2FnZW50TmFt
ZV0gPSB7fTsKKyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1d
ID0gdGhpcy5fc2VuZE1lc3NhZ2VUb0JhY2tlbmQuYmluZCh0aGlzLCByZXF1ZXN0U3RyaW5nKTsK
KyAgICAgICAgd2luZG93W2FnZW50TmFtZV1bZG9tYWluQW5kRnVuY3Rpb25bMV1dWyJpbnZva2Ui
XSA9IHRoaXMuX2ludm9rZS5iaW5kKHRoaXMsIHJlcXVlc3RTdHJpbmcpCisgICAgfSwKKworICAg
IF9pbnZva2U6IGZ1bmN0aW9uKHJlcXVlc3RTdHJpbmcsIGFyZ3MsIGNhbGxiYWNrKQorICAgIHsK
KyAgICAgICAgdmFyIHJlcXVlc3QgPSBKU09OLnBhcnNlKHJlcXVlc3RTdHJpbmcpOworICAgICAg
ICByZXF1ZXN0LnBhcmFtcyA9IGFyZ3M7CisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNl
bmRNZXNzYWdlT2JqZWN0KHJlcXVlc3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3NlbmRN
ZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgYXJncyA9IEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CisgICAgICAgIHZhciByZXF1ZXN0
ID0gSlNPTi5wYXJzZShhcmdzLnNoaWZ0KCkpOworICAgICAgICB2YXIgY2FsbGJhY2sgPSAoYXJn
cy5sZW5ndGggJiYgdHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gImZ1bmN0aW9uIikg
PyBhcmdzLnBvcCgpIDogMDsKKyAgICAgICAgdmFyIGRvbWFpbkFuZE1ldGhvZCA9IHJlcXVlc3Qu
bWV0aG9kLnNwbGl0KCIuIik7CisgICAgICAgIHZhciBhZ2VudE1ldGhvZCA9IGRvbWFpbkFuZE1l
dGhvZFswXSArICJBZ2VudC4iICsgZG9tYWluQW5kTWV0aG9kWzFdOworCisgICAgICAgIHZhciBo
YXNQYXJhbXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHJlcXVlc3QucGFyYW1zKSB7CisgICAgICAg
ICAgICBmb3IgKHZhciBrZXkgaW4gcmVxdWVzdC5wYXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2
YXIgdHlwZU5hbWUgPSByZXF1ZXN0LnBhcmFtc1trZXldLnR5cGU7CisgICAgICAgICAgICAgICAg
dmFyIG9wdGlvbmFsRmxhZyA9IHJlcXVlc3QucGFyYW1zW2tleV0ub3B0aW9uYWw7CisKKyAgICAg
ICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbmFsRmxhZykgeworICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90b2NvbCBFcnJvcjogSW52YWxpZCBu
dW1iZXIgb2YgYXJndW1lbnRzIGZvciBtZXRob2QgJyIgKyBhZ2VudE1ldGhvZCArICInIGNhbGwu
IEl0IG11c3QgaGF2ZSB0aGUgbmV4dCBhcmd1bWVudHMgJyIgKyBKU09OLnN0cmluZ2lmeShyZXF1
ZXN0LnBhcmFtcykgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGFyZ3Muc2hpZnQoKTsK
KyAgICAgICAgICAgICAgICBpZiAob3B0aW9uYWxGbGFnICYmIHR5cGVvZiB2YWx1ZSA9PT0gInVu
ZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFyYW1zW2tl
eV07CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IHR5cGVOYW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBJbnZhbGlkIHR5cGUg
b2YgYXJndW1lbnQgJyIgKyBrZXkgKyAiJyBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAi
JyBjYWxsLiBJdCBtdXN0IGJlICciICsgdHlwZU5hbWUgKyAiJyBidXQgaXQgaXMgJyIgKyB0eXBl
b2YgdmFsdWUgKyAiJy4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJlcXVlc3QucGFyYW1zW2tleV0gPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBoYXNQYXJhbXMgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKCFoYXNQYXJhbXMpCisgICAgICAgICAgICAgICAgZGVsZXRlIHJlcXVlc3QucGFy
YW1zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmICFjYWxs
YmFjaykgeworICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdICE9PSAidW5kZWZpbmVkIikg
eworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBPcHRpb25h
bCBjYWxsYmFjayBhcmd1bWVudCBmb3IgbWV0aG9kICciICsgYWdlbnRNZXRob2QgKyAiJyBjYWxs
IG11c3QgYmUgYSBmdW5jdGlvbiBidXQgaXRzIHR5cGUgaXMgJyIgKyB0eXBlb2YgYXJnc1swXSAr
ICInLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHRoaXMuX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdlT2JqZWN0KHJlcXVl
c3QsIGNhbGxiYWNrKTsKKyAgICB9LAorCisgICAgX3dyYXBDYWxsYmFja0FuZFNlbmRNZXNzYWdl
T2JqZWN0OiBmdW5jdGlvbihtZXNzYWdlT2JqZWN0LCBjYWxsYmFjaykKKyAgICB7CisgICAgICAg
IG1lc3NhZ2VPYmplY3QuaWQgPSB0aGlzLl93cmFwKGNhbGxiYWNrKTsKKworICAgICAgICBpZiAo
dGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKSB7CisgICAgICAgICAgICB2YXIgd3JhcHBlZENh
bGxiYWNrID0gdGhpcy5fY2FsbGJhY2tzW21lc3NhZ2VPYmplY3QuaWRdOworICAgICAgICAgICAg
d3JhcHBlZENhbGxiYWNrLm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZDsKKyAgICAg
ICAgICAgIHdyYXBwZWRDYWxsYmFjay5zZW5kUmVxdWVzdFRpbWUgPSBEYXRlLm5vdygpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMp
CisgICAgICAgICAgICBjb25zb2xlLmxvZygiZnJvbnRlbmQ6ICIgKyBKU09OLnN0cmluZ2lmeSht
ZXNzYWdlT2JqZWN0KSk7CisKKyAgICAgICAgKyt0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQ7
CisgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2VPYmplY3RUb0JhY2tlbmQobWVzc2FnZU9iamVjdCk7
CisgICAgfSwKKworICAgIHNlbmRNZXNzYWdlT2JqZWN0VG9CYWNrZW5kOiBmdW5jdGlvbihtZXNz
YWdlT2JqZWN0KQorICAgIHsKKyAgICAgICAgY29uc29sZS50aW1lU3RhbXAobWVzc2FnZU9iamVj
dC5tZXRob2QpOworICAgICAgICB2YXIgbWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VP
YmplY3QpOworICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3Quc2VuZE1lc3NhZ2VUb0JhY2tl
bmQobWVzc2FnZSk7CisgICAgfSwKKworICAgIF9yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXI6IGZ1
bmN0aW9uKGRvbWFpbiwgZGlzcGF0Y2hlcikKKyAgICB7CisgICAgICAgIHRoaXMuX2RvbWFpbkRp
c3BhdGNoZXJzW2RvbWFpbl0gPSBkaXNwYXRjaGVyOworICAgIH0sCisKKyAgICBkaXNwYXRjaDog
ZnVuY3Rpb24obWVzc2FnZSkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JQ
cm90b2NvbE1lc3NhZ2VzKQorICAgICAgICAgICAgY29uc29sZS5sb2coImJhY2tlbmQ6ICIgKyAo
KHR5cGVvZiBtZXNzYWdlID09PSAic3RyaW5nIikgPyBtZXNzYWdlIDogSlNPTi5zdHJpbmdpZnko
bWVzc2FnZSkpKTsKKworICAgICAgICB2YXIgbWVzc2FnZU9iamVjdCA9ICh0eXBlb2YgbWVzc2Fn
ZSA9PT0gInN0cmluZyIpID8gSlNPTi5wYXJzZShtZXNzYWdlKSA6IG1lc3NhZ2U7CisKKyAgICAg
ICAgaWYgKCJpZCIgaW4gbWVzc2FnZU9iamVjdCkgeyAvLyBqdXN0IGEgcmVzcG9uc2UgZm9yIHNv
bWUgcmVxdWVzdAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICBtZXNzYWdlT2JqZWN0LmVycm9yLl9fcHJvdG9fXyA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgZ2V0RGVzY3JpcHRpb246IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKHRoaXMuY29kZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNzAwOiByZXR1cm4gIlBhcnNlIGVycm9yIjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0zMjYwMDogcmV0dXJuICJJbnZhbGlkIFJl
cXVlc3QiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMyNjAxOiByZXR1cm4g
Ik1ldGhvZCBub3QgZm91bmQiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTMy
NjAyOiByZXR1cm4gIkludmFsaWQgcGFyYW1zIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIC0zMjYwMzogcmV0dXJuICJJbnRlcm5hbCBlcnJvciI7OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgLTMyMDAwOiByZXR1cm4gIlNlcnZlciBlcnJvciI7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg
ICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0aW9uID0iVW5rbm93biBlcnJvciBjb2Rl
IjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERlc2NyaXB0aW9uKCkg
KyAiKCIgKyB0aGlzLmNvZGUgKyAiKTogIiArIHRoaXMubWVzc2FnZSArICIuIiArICh0aGlzLmRh
dGEgPyAiICIgKyB0aGlzLmRhdGEuam9pbigiICIpIDogIiIpOworICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgIGdldE1lc3NhZ2U6IGZ1bmN0aW9uKCkKKyAgICAg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVz
c2FnZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmVycm9yLmNvZGUgIT09IC0zMjAwMCkKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRQcm90b2NvbEVycm9yKG1lc3NhZ2VPYmplY3QpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgYXJndW1lbnRzID0gW107CisgICAgICAg
ICAgICBpZiAobWVzc2FnZU9iamVjdC5yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBrZXkgaW4gbWVzc2FnZU9iamVjdC5yZXN1bHQpCisgICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50cy5wdXNoKG1lc3NhZ2VPYmplY3QucmVzdWx0W2tleV0pOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB0aGlzLl9jYWxsYmFja3NbbWVzc2FnZU9iamVjdC5p
ZF07CisgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJv
Y2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5kdW1wSW5zcGVjdG9y
VGltZVN0YXRzICYmIGNhbGxiYWNrLm1ldGhvZE5hbWUpCisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3NpbmdTdGFydFRpbWUgPSBEYXRlLm5vdygpOworCisgICAgICAgICAgICAgICAgYXJndW1l
bnRzLnVuc2hpZnQobWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAtLXRoaXMuX3BlbmRp
bmdSZXNwb25zZXNDb3VudDsKKyAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2tz
W21lc3NhZ2VPYmplY3QuaWRdOworCisgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHVtcEluc3Bl
Y3RvclRpbWVTdGF0cyAmJiBjYWxsYmFjay5tZXRob2ROYW1lKQorICAgICAgICAgICAgICAgICAg
ICBjb25zb2xlLmxvZygidGltZS1zdGF0czogIiArIGNhbGxiYWNrLm1ldGhvZE5hbWUgKyAiID0g
IiArIChwcm9jZXNzaW5nU3RhcnRUaW1lIC0gY2FsbGJhY2suc2VuZFJlcXVlc3RUaW1lKSArICIg
KyAiICsgKERhdGUubm93KCkgLSBwcm9jZXNzaW5nU3RhcnRUaW1lKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICh0aGlzLl9zY3JpcHRzICYmICF0aGlzLl9wZW5kaW5nUmVzcG9u
c2VzQ291bnQpCisgICAgICAgICAgICAgICAgdGhpcy5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVz
KCk7CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHZhciBtZXRob2QgPSBtZXNzYWdlT2JqZWN0Lm1ldGhvZC5zcGxpdCgiLiIpOworICAgICAgICAg
ICAgdmFyIGRvbWFpbk5hbWUgPSBtZXRob2RbMF07CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25O
YW1lID0gbWV0aG9kWzFdOworICAgICAgICAgICAgaWYgKCEoZG9tYWluTmFtZSBpbiB0aGlzLl9k
b21haW5EaXNwYXRjaGVycykpIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJQcm90
b2NvbCBFcnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJyIgKyBk
b21haW5OYW1lICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXIgZGlzcGF0Y2hlciA9IHRoaXMuX2RvbWFpbkRpc3BhdGNoZXJzW2Rv
bWFpbk5hbWVdOworICAgICAgICAgICAgaWYgKCEoZnVuY3Rpb25OYW1lIGluIGRpc3BhdGNoZXIp
KSB7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiUHJvdG9jb2wgRXJyb3I6IEF0dGVt
cHRlZCB0byBkaXNwYXRjaCBhbiB1bmltcGxlbWVudGVkIG1ldGhvZCAnIiArIG1lc3NhZ2VPYmpl
Y3QubWV0aG9kICsgIiciKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmICghdGhpcy5fZXZlbnRBcmdzW21lc3NhZ2VPYmplY3QubWV0aG9k
XSkgeworICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlByb3RvY29sIEVycm9yOiBBdHRl
bXB0ZWQgdG8gZGlzcGF0Y2ggYW4gdW5zcGVjaWZpZWQgbWV0aG9kICciICsgbWVzc2FnZU9iamVj
dC5tZXRob2QgKyAiJyIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IFtdOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VP
YmplY3QucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFyIHBhcmFtTmFtZXMgPSB0aGlzLl9l
dmVudEFyZ3NbbWVzc2FnZU9iamVjdC5tZXRob2RdOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgcGFyYW1OYW1lcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1zLnB1c2gobWVzc2FnZU9iamVjdC5wYXJhbXNbcGFyYW1OYW1lc1tpXV0pOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ1N0YXJ0VGltZTsKKyAgICAgICAg
ICAgIGlmICh0aGlzLmR1bXBJbnNwZWN0b3JUaW1lU3RhdHMpCisgICAgICAgICAgICAgICAgcHJv
Y2Vzc2luZ1N0YXJ0VGltZSA9IERhdGUubm93KCk7CisKKyAgICAgICAgICAgIGRpc3BhdGNoZXJb
ZnVuY3Rpb25OYW1lXS5hcHBseShkaXNwYXRjaGVyLCBwYXJhbXMpOworCisgICAgICAgICAgICBp
ZiAodGhpcy5kdW1wSW5zcGVjdG9yVGltZVN0YXRzKQorICAgICAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJ0aW1lLXN0YXRzOiAiICsgbWVzc2FnZU9iamVjdC5tZXRob2QgKyAiID0gIiArIChEYXRl
Lm5vdygpIC0gcHJvY2Vzc2luZ1N0YXJ0VGltZSkpOworICAgICAgICB9CisgICAgfSwKKworICAg
IHJlcG9ydFByb3RvY29sRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2VPYmplY3QpCisgICAgeworICAg
ICAgICBjb25zb2xlLmVycm9yKCJSZXF1ZXN0IHdpdGggaWQgPSAiICsgbWVzc2FnZU9iamVjdC5p
ZCArICIgZmFpbGVkLiAiICsgbWVzc2FnZU9iamVjdC5lcnJvcik7CisgICAgfSwKKworICAgIHJ1
bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXM6IGZ1bmN0aW9uKHNjcmlwdCkKKyAgICB7CisgICAgICAg
IGlmICghdGhpcy5fc2NyaXB0cykKKyAgICAgICAgICAgIHRoaXMuX3NjcmlwdHMgPSBbXTsKKwor
ICAgICAgICBpZiAoc2NyaXB0KQorICAgICAgICAgICAgdGhpcy5fc2NyaXB0cy5wdXNoKHNjcmlw
dCk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9wZW5kaW5nUmVzcG9uc2VzQ291bnQpIHsKKyAgICAg
ICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fc2NyaXB0czsKKyAgICAgICAgICAgIHRoaXMuX3Nj
cmlwdHMgPSBbXQorICAgICAgICAgICAgZm9yICh2YXIgaWQgPSAwOyBpZCA8IHNjcmlwdHMubGVu
Z3RoOyArK2lkKQorICAgICAgICAgICAgICAgICBzY3JpcHRzW2lkXS5jYWxsKHRoaXMpOworICAg
ICAgICB9CisgICAgfQorfQorCitJbnNwZWN0b3JCYWNrZW5kID0gbmV3IEluc3BlY3RvckJhY2tl
bmRTdHViKCk7IiIiKQorCisgICAgcGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlID0gIiIiCisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gcmVxdWVzdE1lc3Nh
Z2VPYmplY3QtPmdldE9iamVjdCgicGFyYW1zIik7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisiIiIKKworCit0
eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGkpCisKKworY2xhc3MgR2VuZXJhdG9yOgorICAgIGZy
b250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzID0gW10KKyAgICBmcm9udGVuZF9kb21haW5fY2xhc3Nf
bGluZXMgPSBbXQorCisgICAgbWV0aG9kX25hbWVfZW51bV9saXN0ID0gW10KKyAgICBiYWNrZW5k
X21ldGhvZF9kZWNsYXJhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9pbXBsZW1l
bnRhdGlvbl9saXN0ID0gW10KKyAgICBiYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xp
c3QgPSBbXQorICAgIG1ldGhvZF9oYW5kbGVyX2xpc3QgPSBbXQorICAgIGZyb250ZW5kX21ldGhv
ZF9saXN0ID0gW10KKyAgICBiYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QgPSBbXQorICAgIGJh
Y2tlbmRfanNfZXZlbnRfbGlzdCA9IFtdCisgICAgYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hl
cl9saXN0ID0gW10KKworICAgIGJhY2tlbmRfY29uc3RydWN0b3JfcGFyYW1fbGlzdCA9IFtdCisg
ICAgYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQorICAgIGJhY2tlbmRfZmllbGRf
bGlzdCA9IFtdCisgICAgYmFja2VuZF9mb3J3YXJkX2xpc3QgPSBbXQorICAgIGJhY2tlbmRfaW5j
bHVkZV9saXN0ID0gW10KKyAgICBmcm9udGVuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QgPSBbXQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBnbygpOgorICAgICAgICBmb3IganNvbl9kb21h
aW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKKyAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNv
bl9kb21haW5bImRvbWFpbiJdCisgICAgICAgICAgICBkb21haW5fbmFtZV9sb3dlciA9IGRvbWFp
bl9uYW1lLmxvd2VyKCkKKworICAgICAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5OYW1lRml4
ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIGlmIGRvbWFpbl9k
YXRhLmlzX2Rpc2FibGVkKGRlZmluZXNfbWFwKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
CisgICAgICAgICAgICBhZ2VudF9maWVsZF9uYW1lID0gZG9tYWluX2RhdGEuYWdlbnRfZmllbGRf
bmFtZQorCisgICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMgPSBb
XQorICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46CisgICAgICAgICAgICAg
ICAgZm9yIGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgorICAgICAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwg
ZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQorCisgICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmZyb250ZW5kX2NsYXNzX2ZpZWxkX2xpbmVzLmFwcGVuZCgiICAgICVzIG1fJXM7XG4i
ICUgKGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZV9sb3dlcikpCisgICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmZyb250ZW5kX2NvbnN0cnVjdG9yX2luaXRfbGlzdC5hcHBlbmQoIiAgICAsIG1fJXMo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKVxuIiAlIGRvbWFpbl9uYW1lX2xvd2VyKQorICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMuYXBwZW5kKFRl
bXBsYXRlcy5mcm9udGVuZF9kb21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAorICAgICAgICAg
ICAgICAgICAgICBkb21haW5DbGFzc05hbWU9ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgIGRvbWFpbkZpZWxkTmFtZT1kb21haW5fbmFtZV9sb3dlciwKKyAgICAgICAgICAgICAgICAg
ICAgZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnM9am9pbihmcm9udGVuZF9tZXRob2Rf
ZGVjbGFyYXRpb25fbGluZXMsICIiKSkpCisgICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpz
b25fZG9tYWluOgorICAgICAgICAgICAgICAgIGZvciBqc29uX2NvbW1hbmQgaW4ganNvbl9kb21h
aW5bImNvbW1hbmRzIl06CisgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2Nv
bW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkKKworICAg
ICAgICAgICAgaWYgbm90IGRvbWFpbl9kYXRhLnNraXBfanNfYmluZDoKKyAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5fZGlzcGF0Y2hlcl9saXN0LmFwcGVuZCgiICAg
IHRoaXMucmVnaXN0ZXIlc0Rpc3BhdGNoZXIgPSB0aGlzLl9yZWdpc3RlckRvbWFpbkRpc3BhdGNo
ZXIuYmluZCh0aGlzLCBcIiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWUpKQor
CisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMgPSBsaXN0KGpzb25fYXBpWyJkb21haW5zIl0p
CisgICAgICAgIHNvcnRlZF9qc29uX2RvbWFpbnMuc29ydChrZXk9bGFtYmRhIG86IG9bImRvbWFp
biJdKQorCisgICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBzb3J0ZWRfanNvbl9kb21haW5zOgor
ICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KKworICAgICAg
ICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWlu
X25hbWUpCisgICAgICAgICAgICBpZiBkb21haW5fZGF0YS5pc19kaXNhYmxlZChkZWZpbmVzX21h
cCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgZG9tYWluX2Rh
dGEuaGlkZGVuOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhZ2VudF90
eXBlX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF90eXBlX25hbWUKKyAgICAgICAgICAgIGFnZW50
X2ZpZWxkX25hbWUgPSBkb21haW5fZGF0YS5hZ2VudF9maWVsZF9uYW1lCisgICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9wYXJhbV9saXN0LmFwcGVuZCgiLCAlcyogJXMi
ICUgKGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9jb25zdHJ1Y3Rvcl9pbml0X2xpc3QuYXBwZW5kKCIgICAgICAgICwgbV8l
cyglcykiICUgKGFnZW50X2ZpZWxkX25hbWUsIGFnZW50X2ZpZWxkX25hbWUpKQorICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdC5hcHBlbmQoIiAgICAlcyogbV8lczsiICUg
KGFnZW50X3R5cGVfbmFtZSwgYWdlbnRfZmllbGRfbmFtZSkpCisgICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9mb3J3YXJkX2xpc3QuYXBwZW5kKCJjbGFzcyAlczsiICUgYWdlbnRfdHlwZV9u
YW1lKQorICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9saXN0LmFwcGVuZCgi
I2luY2x1ZGUgXCIlcy5oXCIiICUgYWdlbnRfdHlwZV9uYW1lKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBwcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVu
ZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMpOgorICAgICAgICBldmVudF9uYW1lID0ganNvbl9l
dmVudFsibmFtZSJdCisgICAgICAgIHBhcmFtZXRlcl9saXN0ID0gW10KKyAgICAgICAgbWV0aG9k
X2xpbmVfbGlzdCA9IFtdCisgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtd
CisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2V2ZW50OgorICAgICAgICAgICAgbWV0
aG9kX2xpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKKyAgICAgICAgICAgIGZvciBq
c29uX3BhcmFtZXRlciBpbiBqc29uX2V2ZW50WyJwYXJhbWV0ZXJzIl06CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCisKKyAgICAgICAgICAg
ICAgICByYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRv
bWFpbl9uYW1lKQorCisgICAgICAgICAgICAgICAganNvbl9vcHRpb25hbCA9ICJvcHRpb25hbCIg
aW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdCisKKyAgICAg
ICAgICAgICAgICBvcHRpb25hbF9tYXNrID0gcmF3X3R5cGUuaXNfZXZlbnRfcGFyYW1fY2hlY2tf
b3B0aW9uYWwoKQorICAgICAgICAgICAgICAgIGNfdHlwZSA9IHJhd190eXBlLmdldF9jX3BhcmFt
X3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBqc29uX29wdGlvbmFsKQorCisgICAgICAgICAgICAgICAg
c2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQorCisgICAgICAgICAgICAg
ICAgb3B0aW9uYWwgPSBvcHRpb25hbF9tYXNrIGFuZCBqc29uX29wdGlvbmFsCisKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVzIiAlIChjX3R5cGUuZ2V0X3RleHQo
KSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0g
Y190eXBlLmdldF9zZXR0ZXJfZm9ybWF0KCkgJSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAg
ICAgICAgc2V0dGVyX2NvZGUgPSAiICAgIHBhcmFtc09iamVjdC0+c2V0JXMoXCIlc1wiLCAlcyk7
XG4iICUgKHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3VtZW50KQorICAg
ICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfY29k
ZSA9ICgiICAgIGlmICglcylcbiAgICAiICUgcGFyYW1ldGVyX25hbWUpICsgc2V0dGVyX2NvZGUK
KyAgICAgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZChzZXR0ZXJfY29kZSkKKwor
ICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNc
IiIgJSBwYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5k
KCIgICAgJXNNZXNzYWdlLT5zZXRPYmplY3QoXCJwYXJhbXNcIiwgcGFyYW1zT2JqZWN0KTtcbiIg
JSBldmVudF9uYW1lKQorICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMu
YXBwZW5kKAorICAgICAgICAgICAgIiAgICAgICAgdm9pZCAlcyglcyk7XG4iICUgKGV2ZW50X25h
bWUsIGpvaW4ocGFyYW1ldGVyX2xpc3QsICIsICIpKSkKKworICAgICAgICBHZW5lcmF0b3IuZnJv
bnRlbmRfbWV0aG9kX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5mcm9udGVuZF9tZXRob2Quc3Vic3Rp
dHV0ZShOb25lLAorICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwgZXZlbnROYW1l
PWV2ZW50X25hbWUsCisgICAgICAgICAgICBwYXJhbWV0ZXJzPWpvaW4ocGFyYW1ldGVyX2xpc3Qs
ICIsICIpLAorICAgICAgICAgICAgY29kZT1qb2luKG1ldGhvZF9saW5lX2xpc3QsICIiKSkpCisK
KyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZXZlbnRfbGlzdC5hcHBlbmQoIiAgICB0aGlz
Ll9ldmVudEFyZ3NbXCIlcy4lc1wiXSA9IFslc107XG4iICUgKAorICAgICAgICAgICAgZG9tYWlu
X25hbWUsIGV2ZW50X25hbWUsIGpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0LCAiLCAi
KSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2Nv
bW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9maWVsZF9uYW1lKToKKyAgICAgICAganNvbl9jb21t
YW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQorICAgICAgICBHZW5lcmF0b3IubWV0aG9k
X25hbWVfZW51bV9saXN0LmFwcGVuZCgiICAgICAgICBrJXNfJXNDbWQsIiAlIChkb21haW5fbmFt
ZSwganNvbl9jb21tYW5kWyJuYW1lIl0pKQorICAgICAgICBHZW5lcmF0b3IubWV0aG9kX2hhbmRs
ZXJfbGlzdC5hcHBlbmQoIiAgICAgICAgJkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolc18l
cywiICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCisgICAgICAgIEdlbmVyYXRv
ci5iYWNrZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saXN0LmFwcGVuZCgiICAgIHZvaWQgJXNfJXMo
bG9uZyBjYWxsSWQsIEluc3BlY3Rvck9iamVjdCogcmVxdWVzdE1lc3NhZ2VPYmplY3QpOyIgJSAo
ZG9tYWluX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKKworICAgICAgICBtZXRob2RfaW5fY29k
ZSA9ICIiCisgICAgICAgIG1ldGhvZF9vdXRfY29kZSA9ICIiCisgICAgICAgIGFnZW50X2NhbGxf
cGFyYW1fbGlzdCA9IFtdCisgICAgICAgIHJlc3BvbnNlX2Nvb2tfbGlzdCA9IFtdCisgICAgICAg
IHJlcXVlc3RfbWVzc2FnZV9wYXJhbSA9ICIiCisgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9
ICIiCisgICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6CisgICAgICAgICAg
ICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCisgICAgICAgICAgICBt
ZXRob2RfaW5fY29kZSArPSBUZW1wbGF0ZXMucGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlCisg
ICAgICAgICAgICByZXF1ZXN0X21lc3NhZ2VfcGFyYW0gPSAiIHJlcXVlc3RNZXNzYWdlT2JqZWN0
IgorICAgICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCisKKyAgICAgICAgICAgIGZvciBqc29u
X3BhcmFtZXRlciBpbiBqc29uX3BhcmFtczoKKyAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25h
bWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCisgICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5
cGUgPSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkK
KworICAgICAgICAgICAgICAgIHZhcl90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2NfcGFyYW1f
dHlwZShQYXJhbVR5cGUuSU5QVVQsIE5vbmUpCisgICAgICAgICAgICAgICAgZ2V0dGVyX25hbWUg
PSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQorCisgICAgICAgICAgICAgICAgaWYg
Im9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFs
Il06CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3ZhbHVlRm91bmQg
PSBmYWxzZTtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVzIGluXyVzID0g
Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBcIiVzXCIsICYlc192YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9yc1B0cik7XG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChqc29uX3BhcmFt
X25hbWUsIHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUs
IGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDogMCIgJSAoanNvbl9wYXJhbV9uYW1l
LCBqc29uX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgY29kZSA9ICgiICAgICVzIGluXyVzID0gZ2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBc
IiVzXCIsIDAsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh2YXJfdHlwZS5nZXRfdGV4dCgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1l
LCBqc29uX3BhcmFtX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIsIGluXyVz
IiAlIGpzb25fcGFyYW1fbmFtZQorCisgICAgICAgICAgICAgICAgbWV0aG9kX2luX2NvZGUgKz0g
Y29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0p
CisKKyAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlwZS5nZXRfanNf
YmluZF90eXBlKCkKKyAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIlwiJXNcIjoge1wi
b3B0aW9uYWxcIjogJXMsIFwidHlwZVwiOiBcIiVzXCJ9IiAlICgKKyAgICAgICAgICAgICAgICAg
ICAganNvbl9wYXJhbV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAoInRydWUiIGlmICgib3B0
aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXSkg
ZWxzZSAiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICAgICAganNfYmluZF90eXBlKQorCisgICAg
ICAgICAgICAgICAganNfcGFyYW1fbGlzdC5hcHBlbmQoanNfcGFyYW1fdGV4dCkKKworICAgICAg
ICAgICAganNfcGFyYW1ldGVyc190ZXh0ID0gIiwgXCJwYXJhbXNcIjogeyIgKyBqb2luKGpzX3Bh
cmFtX2xpc3QsICIsICIpICsgIn0iCisKKyAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gIiIK
KyAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKKyAgICAgICAgICAgIG1ldGhv
ZF9vdXRfY29kZSArPSAiXG4iCisgICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9j
b21tYW5kWyJyZXR1cm5zIl06CisKKyAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0g
anNvbl9yZXR1cm5bIm5hbWUiXQorICAgICAgICAgICAgICAgIHJhd190eXBlID0gcmVzb2x2ZV9w
YXJhbV9yYXdfdHlwZShqc29uX3JldHVybiwgZG9tYWluX25hbWUpCisgICAgICAgICAgICAgICAg
c2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQorICAgICAgICAgICAgICAg
IGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0X2NfaW5pdGlhbGl6ZXIoKQorICAgICAgICAgICAg
ICAgIHZhcl90eXBlID0gcmF3X3R5cGUuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuT1VUUFVU
LCBOb25lKQorCisgICAgICAgICAgICAgICAgY29kZSA9ICIgICAgJXMgb3V0XyVzID0gJXM7XG4i
ICUgKHZhcl90eXBlLmdldF90ZXh0KCksIGpzb25fcmV0dXJuX25hbWUsIGluaXRpYWxpemVyKQor
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCisg
ICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoXCIlc1wiLCBvdXRf
JXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwganNvbl9yZXR1cm5fbmFt
ZSkKKyAgICAgICAgICAgICAgICBpZiB2YXJfdHlwZS5nZXRfdGV4dCgpID09ICJib29sIiBhbmQg
Im9wdGlvbmFsIiBpbiBqc29uX3JldHVybiBhbmQganNvbl9yZXR1cm5bIm9wdGlvbmFsIl06Cisg
ICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKG91dF8lcylcbiAgICAiICUg
anNvbl9yZXR1cm5fbmFtZSkgKyBjb29rCisKKyAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X2Nv
ZGUgKz0gY29kZQorICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQo
cGFyYW0pCisgICAgICAgICAgICAgICAgcmVzcG9uc2VfY29va19saXN0LmFwcGVuZChjb29rKQor
ICAgICAgICAgICAgcmVzcG9uc2VfY29va190ZXh0ID0gIiAgICBpZiAoIXByb3RvY29sRXJyb3Jz
LT5sZW5ndGgoKSAmJiAhZXJyb3IubGVuZ3RoKCkpIHtcbiVzICAgIH1cbiIgJSBqb2luKHJlc3Bv
bnNlX2Nvb2tfbGlzdCwgIiIpCisKKyAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2lt
cGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5iYWNrZW5kX21ldGhvZC5zdWJzdGl0
dXRlKE5vbmUsCisgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLCBtZXRob2ROYW1l
PWpzb25fY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgYWdlbnRGaWVsZD0ibV8iICsgYWdlbnRf
ZmllbGRfbmFtZSwKKyAgICAgICAgICAgIG1ldGhvZEluQ29kZT1tZXRob2RfaW5fY29kZSwKKyAg
ICAgICAgICAgIG1ldGhvZE91dENvZGU9bWV0aG9kX291dF9jb2RlLAorICAgICAgICAgICAgYWdl
bnRDYWxsUGFyYW1zPWpvaW4oYWdlbnRfY2FsbF9wYXJhbV9saXN0LCAiIiksCisgICAgICAgICAg
ICByZXF1ZXN0TWVzc2FnZU9iamVjdD1yZXF1ZXN0X21lc3NhZ2VfcGFyYW0sCisgICAgICAgICAg
ICByZXNwb25zZUNvb2s9cmVzcG9uc2VfY29va190ZXh0KSkKKyAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfbWV0aG9kX25hbWVfZGVjbGFyYXRpb25fbGlzdC5hcHBlbmQoIiAgICBcIiVzLiVzXCIs
IiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQorCisgICAgICAgIEdlbmVyYXRv
ci5iYWNrZW5kX2pzX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCIgICAgICAgIHRoaXMuX3JlZ2lz
dGVyRGVsZWdhdGUoJ3tcIm1ldGhvZFwiOiBcIiVzLiVzXCIlcywgXCJpZFwiOiAwfScpO1xuIiAl
IChkb21haW5fbmFtZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCkpCisK
KworR2VuZXJhdG9yLmdvKCkKKworYmFja2VuZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFkZXJf
ZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIsICJ3IikKK2JhY2tlbmRf
Y3BwX2ZpbGUgPSBvcGVuKG91dHB1dF9jcHBfZGlybmFtZSArICIvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuY3BwIiwgInciKQorCitmcm9udGVuZF9oX2ZpbGUgPSBvcGVuKG91dHB1dF9oZWFk
ZXJfZGlybmFtZSArICIvSW5zcGVjdG9yRnJvbnRlbmQuaCIsICJ3IikKK2Zyb250ZW5kX2NwcF9m
aWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0luc3BlY3RvckZyb250ZW5kLmNwcCIs
ICJ3IikKKworYmFja2VuZF9qc19maWxlID0gb3BlbihvdXRwdXRfY3BwX2Rpcm5hbWUgKyAiL0lu
c3BlY3RvckJhY2tlbmRTdHViLmpzIiwgInciKQorCisKK2Zyb250ZW5kX2hfZmlsZS53cml0ZShU
ZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCisgICAgICAgICBmaWVsZERlY2xh
cmF0aW9ucz1qb2luKEdlbmVyYXRvci5mcm9udGVuZF9jbGFzc19maWVsZF9saW5lcywgIiIpLAor
ICAgICAgICAgZG9tYWluQ2xhc3NMaXN0PWpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9j
bGFzc19saW5lcywgIiIpKSkKKworYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tl
bmRfaC5zdWJzdGl0dXRlKE5vbmUsCisgICAgY29uc3RydWN0b3JJbml0PWpvaW4oR2VuZXJhdG9y
LmJhY2tlbmRfY29uc3RydWN0b3JfaW5pdF9saXN0LCAiXG4iKSwKKyAgICBjb25zdHJ1Y3RvclBh
cmFtcz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2NvbnN0cnVjdG9yX3BhcmFtX2xpc3QsICIiKSwK
KyAgICBtZXRob2ROYW1lc0VudW1Db250ZW50PWpvaW4oR2VuZXJhdG9yLm1ldGhvZF9uYW1lX2Vu
dW1fbGlzdCwgIlxuIiksCisgICAgbWV0aG9kRGVjbGFyYXRpb25zPWpvaW4oR2VuZXJhdG9yLmJh
Y2tlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpc3QsICJcbiIpLAorICAgIGZpZWxkRGVjbGFyYXRp
b25zPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfZmllbGRfbGlzdCwgIlxuIiksCisgICAgZm9yd2Fy
ZERlY2xhcmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2ZvcndhcmRfbGlzdCwgIlxuIikp
KQorCitmcm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfY3BwLnN1YnN0
aXR1dGUoTm9uZSwKKyAgICBjb25zdHJ1Y3RvckluaXQ9am9pbihHZW5lcmF0b3IuZnJvbnRlbmRf
Y29uc3RydWN0b3JfaW5pdF9saXN0LCAiIiksCisgICAgbWV0aG9kcz1qb2luKEdlbmVyYXRvci5m
cm9udGVuZF9tZXRob2RfbGlzdCwgIlxuIikpKQorCitiYWNrZW5kX2NwcF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCisgICAgbWV0aG9kTmFtZURlY2xh
cmF0aW9ucz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9uYW1lX2RlY2xhcmF0aW9uX2xp
c3QsICJcbiIpLAorICAgIGluY2x1ZGVzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfaW5jbHVkZV9s
aXN0LCAiXG4iKSwKKyAgICBtZXRob2RzPWpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2lt
cGxlbWVudGF0aW9uX2xpc3QsICJcbiIpLAorICAgIG1lc3NhZ2VIYW5kbGVycz1qb2luKEdlbmVy
YXRvci5tZXRob2RfaGFuZGxlcl9saXN0LCAiXG4iKSkpCisKK2JhY2tlbmRfanNfZmlsZS53cml0
ZShUZW1wbGF0ZXMuYmFja2VuZF9qcy5zdWJzdGl0dXRlKE5vbmUsCisgICAgZGVsZWdhdGVzPWpv
aW4oR2VuZXJhdG9yLmJhY2tlbmRfanNfaW5pdGlhbGl6ZXJfbGlzdCwgIiIpLAorICAgIGV2ZW50
QXJncz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2V2ZW50X2xpc3QsICIiKSwKKyAgICBkb21h
aW5EaXNwYXRjaGVycz1qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9kaXNwYXRjaGVy
X2xpc3QsICIiKSkpCisKK2JhY2tlbmRfaF9maWxlLmNsb3NlKCkKK2JhY2tlbmRfY3BwX2ZpbGUu
Y2xvc2UoKQorCitmcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQorZnJvbnRlbmRfY3BwX2ZpbGUuY2xv
c2UoKQorCitiYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCmluZGV4IDA3MDVmNjAxZjg1YTk5MTY4NTA3YWE2ZGMxNGVkMWM1ZTQ0MTMx
ZGIuLmM1NWJlNDBiMTViZDIxY2U5YzAxNmE1ODliN2IyMzg1Zjg1OTZmN2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNlc3Npb24iLCAidHlwZSI6ICJib29sZWFuIiwgImRl
c2NyaXB0aW9uIjogIlRydWUgaW4gY2FzZSBvZiBzZXNzaW9uIGNvb2tpZS4iIH0KICAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgICAgICJoaWRkZW4iOiB0cnVlCi0gICAgICAgICAgICB9
LAorICAgICAgICAgICAgfQogICAgICAgICBdLAogICAgICAgICAiY29tbWFuZHMiOiBbCiAgICAg
ICAgICAgICB7CkBAIC04NDgsNyArODQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJpc0xvY2FsU3RvcmFnZSIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAi
VHJ1ZSBmb3IgbG9jYWwgc3RvcmFnZS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiRW50cnkgaWQgZm9yIGZ1
cnRoZXIgcmVmZXJlbmNlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJjb21tYW5kcyI6IFsKICAgICAgICAg
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9nZW5lcmF0ZS1pbnNw
ZWN0b3ItaWRsIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1p
ZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE3YWU2NjE5ZmIzZGEyZmNkYWE5YzBj
OGMzMDc5MzQ0ZmFmZDE1NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2dlbmVyYXRlLWluc3BlY3Rvci1pZGwK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0j
IENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwot
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jIAotIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
IyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4K
LSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIyAKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5cwotCi1wcm9ncmFt
X25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKF9fZmlsZV9fKQotaWYgbGVuKHN5cy5hcmd2KSA8IDQg
b3Igc3lzLmFyZ3ZbMV0gIT0gIi1vIjoKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogJXMg
LW8gT1VUUFVUX0ZJTEUgSU5QVVRfRklMRVxuIiAlIHByb2dyYW1fbmFtZSkKLSAgICBleGl0KDEp
Ci0KLW91dHB1dF9wYXRoID0gc3lzLmFyZ3ZbMl0KLWlucHV0X3BhdGggPSBzeXMuYXJndlszXQot
Ci1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9wYXRoLCAiciIpCi1qc29uX3N0cmluZyA9IGlucHV0
X2ZpbGUucmVhZCgpCi1qc29uX3N0cmluZyA9IGpzb25fc3RyaW5nLnJlcGxhY2UoIjogdHJ1ZSIs
ICI6IFRydWUiKQotanNvbl9zdHJpbmcgPSBqc29uX3N0cmluZy5yZXBsYWNlKCI6IGZhbHNlIiwg
IjogZmFsc2UiKQotanNvbl9hcGkgPSBldmFsKGpzb25fc3RyaW5nKVsiZG9tYWlucyJdCi0KLW91
dHB1dF9maWxlID0gb3BlbihvdXRwdXRfcGF0aCwgInciKQotb3V0cHV0X2ZpbGUud3JpdGUoIiIi
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0gCi1tb2R1bGUg
Y29yZSB7IiIiKQotCi10eXBlX3RyYWl0cyA9IHsKLSAgICAic3RyaW5nIjogIlN0cmluZyIsCi0g
ICAgImludGVnZXIiOiAiaW50IiwKLSAgICAibnVtYmVyIjogImRvdWJsZSIsCi0gICAgImJvb2xl
YW4iOiAiYm9vbGVhbiIsCi0gICAgImFycmF5IjogIkFycmF5IiwKLSAgICAib2JqZWN0IjogIk9i
amVjdCIKLX0KLQotcmVmX3R5cGVzID0ge30KLQotbWFjcm9fdHJhaXRzID0gewotICAgICJEYXRh
YmFzZSI6ICJTUUxfREFUQUJBU0UiLAotICAgICJEZWJ1Z2dlciI6ICJKQVZBU0NSSVBUX0RFQlVH
R0VSIiwKLSAgICAiRE9NRGVidWdnZXIiOiAiSkFWQVNDUklQVF9ERUJVR0dFUiIsCi0gICAgIlBy
b2ZpbGVyIjogIkpBVkFTQ1JJUFRfREVCVUdHRVIiLAotICAgICJXb3JrZXIiOiAiV09SS0VSUyIK
LX0KLQotZGVmIGZ1bGxfcXVhbGlmaWVkX3R5cGVfaWQoZG9tYWluX25hbWUsIHR5cGVfaWQpOgot
ICAgIGlmIHR5cGVfaWQuZmluZCgiLiIpID09IC0xOgotICAgICAgIHJldHVybiAiJXMuJXMiICUg
KGRvbWFpbl9uYW1lLCB0eXBlX2lkKQotICAgIHJldHVybiB0eXBlX2lkCi0gICAgCi0KLWRlZiBw
YXJhbV90eXBlKGRvbWFpbl9uYW1lLCBwYXJhbSk6Ci0gICAgaWYgInR5cGUiIGluIHBhcmFtOgot
ICAgICAgICByZXR1cm4gdHlwZV90cmFpdHNbcGFyYW1bInR5cGUiXV0KLSAgICBpZiAiJHJlZiIg
aW4gcGFyYW06Ci0gICAgICAgIHR5cGVfaWQgPSBmdWxsX3F1YWxpZmllZF90eXBlX2lkKGRvbWFp
bl9uYW1lLCBwYXJhbVsiJHJlZiJdKQotICAgICAgICBpZiB0eXBlX2lkIGluIHJlZl90eXBlczoK
LSAgICAgICAgICAgIHJlZl90eXBlID0gcmVmX3R5cGVzW3R5cGVfaWRdCi0gICAgICAgICAgICBy
ZXR1cm4gdHlwZV90cmFpdHNbcmVmX3R5cGVbInR5cGUiXV0KLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHByaW50KCJUeXBlIG5vdCBmb3VuZDogIiArIHR5cGVfaWQpCi0gICAgICAgICAgICBy
ZXR1cm4gIiEhIFR5cGUgbm90IGZvdW5kOiAiICsgdHlwZV9pZAotCi1mb3IgZG9tYWluIGluIGpz
b25fYXBpOgotICAgIGRvbWFpbl9uYW1lID0gZG9tYWluWyJkb21haW4iXQotICAgIGlmICJ0eXBl
cyIgaW4gZG9tYWluOgotICAgICAgICBmb3IgdHlwZSBpbiBkb21haW5bInR5cGVzIl06Ci0gICAg
ICAgICAgICB0eXBlX2lkID0gZnVsbF9xdWFsaWZpZWRfdHlwZV9pZChkb21haW5fbmFtZSwgdHlw
ZVsiaWQiXSkKLSAgICAgICAgICAgIHJlZl90eXBlc1t0eXBlX2lkXSA9IHR5cGU7Ci0KLWZvciBk
b21haW4gaW4ganNvbl9hcGk6Ci0gICAgZG9tYWluX25hbWUgPSBkb21haW5bImRvbWFpbiJdCi0g
ICAgaWYgZG9tYWluX25hbWUgaW4gbWFjcm9fdHJhaXRzOgotICAgICAgICBvdXRwdXRfZmlsZS53
cml0ZSgiXG4jaWYgZGVmaW5lZChFTkFCTEVfJXMpICYmIEVOQUJMRV8lcyIgJSAobWFjcm9fdHJh
aXRzW2RvbWFpbl9uYW1lXSwgbWFjcm9fdHJhaXRzW2RvbWFpbl9uYW1lXSkpCi0gICAgb3V0cHV0
X2ZpbGUud3JpdGUoIlxuICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9SU5TUEVDVE9SXSAlcyB7
IiAlIGRvbWFpbl9uYW1lKQotCi0gICAgaWYgImNvbW1hbmRzIiBpbiBkb21haW46Ci0gICAgICAg
IGZvciBjb21tYW5kIGluIGRvbWFpblsiY29tbWFuZHMiXToKLSAgICAgICAgICAgIHBhcmFtcyA9
IFtdCi0gICAgICAgICAgICBpZiAoInBhcmFtZXRlcnMiIGluIGNvbW1hbmQpOgotICAgICAgICAg
ICAgICAgIGZvciBpbl9wYXJhbSBpbiBjb21tYW5kWyJwYXJhbWV0ZXJzIl06Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICgib3B0aW9uYWwiIGluIGluX3BhcmFtKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wdGlvbmFsID0gIiBbb3B0aW9uYWxdIgotICAgICAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSAiIgotICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMuYXBwZW5kKCJpbiVzICVzICVzIiAlIChvcHRpb25hbCwgcGFyYW1fdHlwZShk
b21haW5fbmFtZSwgaW5fcGFyYW0pLCBpbl9wYXJhbVsibmFtZSJdKSkKLSAgICAgICAgICAgIGlm
ICgicmV0dXJucyIgaW4gY29tbWFuZCk6Ci0gICAgICAgICAgICAgICAgZm9yIG91dF9wYXJhbSBp
biBjb21tYW5kWyJyZXR1cm5zIl06Ci0gICAgICAgICAgICAgICAgICAgIGlmICgib3B0aW9uYWwi
IGluIG91dF9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIgW29w
dGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgib3V0
JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBvdXRfcGFyYW0p
LCBvdXRfcGFyYW1bIm5hbWUiXSkpCi0gICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgiXG4g
ICAgICAgIHZvaWQgJXMoJXMpOyIgJSAoY29tbWFuZFsibmFtZSJdLCAiLCAiLmpvaW4ocGFyYW1z
KSkpCi0KLSAgICBpZiAiZXZlbnRzIiBpbiBkb21haW46Ci0gICAgICAgIGZvciBldmVudCBpbiBk
b21haW5bImV2ZW50cyJdOgotICAgICAgICAgICAgcGFyYW1zID0gW10KLSAgICAgICAgICAgIGlm
ICgicGFyYW1ldGVycyIgaW4gZXZlbnQpOgotICAgICAgICAgICAgICAgIGZvciBpbl9wYXJhbSBp
biBldmVudFsicGFyYW1ldGVycyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAoIm9wdGlvbmFs
IiBpbiBpbl9wYXJhbSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9ICIgW29w
dGlvbmFsXSIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9wdGlvbmFsID0gIiIKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgib3V0
JXMgJXMgJXMiICUgKG9wdGlvbmFsLCBwYXJhbV90eXBlKGRvbWFpbl9uYW1lLCBpbl9wYXJhbSks
IGluX3BhcmFtWyJuYW1lIl0pKQotICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAg
ICAgICBbZXZlbnRdIHZvaWQgJXMoJXMpOyIgJSAoZXZlbnRbIm5hbWUiXSwgIiwgIi5qb2luKHBh
cmFtcykpKQotCi0gICAgb3V0cHV0X2ZpbGUud3JpdGUoIlxuICAgIH07IikKLSAgICBpZiBkb21h
aW5bImRvbWFpbiJdIGluIG1hY3JvX3RyYWl0czoKLSAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUo
IlxuI2VuZGlmIC8vIEVOQUJMRV8lcyIgJSBtYWNyb190cmFpdHNbZG9tYWluWyJkb21haW4iXV0p
Ci1vdXRwdXRfZmlsZS53cml0ZSgiXG59XG4iKQotb3V0cHV0X2ZpbGUuY2xvc2UoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>