<?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>229378</bug_id>
          
          <creation_ts>2021-08-21 18:28:42 -0700</creation_ts>
          <short_desc>Shadertoy &quot;truchet district&quot; fails to compile with error: Internal error compiling shader with Metal backend&quot;</short_desc>
          <delta_ts>2021-11-22 23:58:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>Safari Technology Preview</version>
          <rep_platform>Mac (Apple Silicon)</rep_platform>
          <op_sys>macOS 11</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>222812</blocked>
    
    <blocked>231682</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Lionel Lemarie">bugs.webkit</reporter>
          <assigned_to name="Kyle Piddington">kpiddington</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>garettbass</cc>
    
    <cc>gman</cc>
    
    <cc>jonlee</cc>
    
    <cc>kbr</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>kpiddington</cc>
    
    <cc>rigel</cc>
    
    <cc>spreadpando</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1786202</commentid>
    <comment_count>0</comment_count>
    <who name="Lionel Lemarie">bugs.webkit</who>
    <bug_when>2021-08-21 18:28:42 -0700</bug_when>
    <thetext>The ShaderToy “truchet district” at https://www.shadertoy.com/view/ss3GRN fails to compile with error:
	Unknown error: Internal error compiling shader with Metal backend.
	Unknown error: Please submit this shader, or website as a bug to https://bugs.webkit.org

Repro: 
- Go to https://www.shadertoy.com/view/ss3GRN
- The shader compiles automatically and displays the error message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786465</commentid>
    <comment_count>1</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-23 10:28:54 -0700</bug_when>
    <thetext>Thanks for the report. Will investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786472</commentid>
    <comment_count>2</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-23 10:45:46 -0700</bug_when>
    <thetext>Seems like the case where GLSL reserved words are different to MSL reserved words.
probable repro:

 float or = 1.;

IMO the design should be so that MSL output shouldn&apos;t have any user-definable names in production builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1786804</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-08-24 10:40:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/82299053&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787035</commentid>
    <comment_count>4</comment_count>
      <attachid>436355</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-08-24 17:50:41 -0700</bug_when>
    <thetext>Created attachment 436355
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787036</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-08-24 17:51:28 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787049</commentid>
    <comment_count>6</comment_count>
      <attachid>436355</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-08-24 18:22:11 -0700</bug_when>
    <thetext>Comment on attachment 436355
Patch

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

This looks fine assuming it passes tests. Can you please add a test for this under LayoutTests/webgl/pending/conformance/ or conformance2/ , as Kimmo&apos;s done recently? That way we&apos;ll make sure to upstream it later. Thanks.

&gt; Source/ThirdParty/ANGLE/ChangeLog:6
&gt; +        Change TranslatorMetalDirect to append &apos;_u_&apos; to all user defined variables. Clean up builtins like samplers and ANGLE structs that were being

Could you rewrite this to say something like &quot;prefix all user defined variables with &apos;_u_&apos;&quot;? That&apos;ll make the comment match the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787153</commentid>
    <comment_count>7</comment_count>
      <attachid>436355</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-25 06:41:40 -0700</bug_when>
    <thetext>Comment on attachment 436355
Patch

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

Other code uses kUserDefinedName, so if we&apos;re using &quot;_u_&quot; then we could use &quot;_u&quot; instead. However, I think &quot;u_&quot; or &quot;u&quot; would be more appropriate.

I&apos;m not 100% sure what the distinction with BuiltIn and AngleInternal is. However, the AngleUniform (driver uniform) struct looks strange since all the  names are AngleInternal except stuff modified here.

If BuiltIn is &quot;GLSL built-in variable or function&quot;, then marking these BuiltIn is perhaps not appropriate and AngleInternal should be used?

If BuiltIn is &quot;symbols present but not declarable as GLSL&quot;, then BuiltIn is perhaps appropriate? 

The variable names introduced here start to get a bit wild:
a -&gt; _u_a
thread -&gt; _u_uthread         # (somehow u appears)
ANGLE_thread -&gt; _u__1_thread            # As per Name replacing ANGLE_ and all that.. 
_1_thread -&gt; _u__1_thread         # Collides with ANGLE_thread if that was the second  symbol that was renamed.

Would there be some possibility to simplify?

The test could introduce similar file to float-constant-expressions.html
there you could generate the test cases like so:

   var cases = [&apos;and&apos;, &apos;thread&apos;, &apos;INT_MAX&apos;, &apos;Pragma&apos;, &apos;_Pragma&apos;, ..]

Then use `cases`to generate the shaders for GLSLConformanceTester.runRenderTests . The fShaderSource can be used to define the source string.

&gt; Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/Name.cpp:78
&gt; +                out &lt;&lt; &quot;_u_&quot; &lt;&lt; mRawName;

This introduces beginning underscore as well as double underscores, which neither are strictly speaking valid c++.
&quot;&quot;&quot;
Also, all identifiers that contain a double underscore __ in any position and each identifier that begins with an underscore followed by an uppercase letter is always reserved and all identifiers that begin with an underscore are reserved for use as names in the global namespace. See identifiers for more details.
&quot;&quot;&quot;
https://en.cppreference.com/w/cpp/keyword</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787395</commentid>
    <comment_count>8</comment_count>
      <attachid>436445</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-08-25 17:23:55 -0700</bug_when>
    <thetext>Created attachment 436445
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787414</commentid>
    <comment_count>9</comment_count>
      <attachid>436445</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-08-25 18:23:28 -0700</bug_when>
    <thetext>Comment on attachment 436445
Patch

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

Kimmo had some detailed comments so let&apos;s let him reply again. A couple more small comments.

&gt; Source/ThirdParty/ANGLE/ChangeLog:6
&gt; +        Change TranslatorMetalDirect to append &apos;_u&apos; to all user defined variables. Clean up builtins like samplers and ANGLE structs that were being

&quot;Change TranslatorMetalDirect to prefix all user defined variables with &apos;_u&apos;&quot;?

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:20
&gt; +    constexpr char kUserDefinedNamePrefix[] = &quot;_u&quot;;

Does this have to be equivalent to some other constant somewhere else in the code? If so could you please add a comment pointing to it, or ideally find a place where it can be shared?

&gt; Tools/MiniBrowser/MiniBrowser.xcodeproj/xcshareddata/xcschemes/MiniBrowser.xcscheme:37
&gt; +      launchStyle = &quot;1&quot;

Was this change intentional?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1787681</commentid>
    <comment_count>10</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-26 10:58:34 -0700</bug_when>
    <thetext>shader-with-non-reserved-words.html could be the test to copy to webgl/pending add the test keywords..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788228</commentid>
    <comment_count>11</comment_count>
      <attachid>436691</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-08-27 16:41:19 -0700</bug_when>
    <thetext>Created attachment 436691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788251</commentid>
    <comment_count>12</comment_count>
      <attachid>436696</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-08-27 17:31:00 -0700</bug_when>
    <thetext>Created attachment 436696
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788476</commentid>
    <comment_count>13</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-30 05:10:20 -0700</bug_when>
    <thetext>Currently shader-with-reserved-words.html tests following possible implementations:
- d3d
- various versions of GLSL 

So it would be logical to add tests to that.
It would then test also:
- MSL

To edit the test case, currently my idea of it is:
1) fork the test
2) modify the test
3) upstream the test
4) rebase the test suite
5) delete the forked test

So to do steps 1+2, you would do something like:


ditto LayoutTests/webgl/2.0.y/conformance/glsl/misc/shader-with-reserved-words.html LayoutTests/webgl/pending/conformance/glsl/misc/
vim LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-reserved-words.html                                                 
# For each line containing path ../../../, remove one &quot;../&quot;


ditto LayoutTests/webgl/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words.html LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/                               
vim LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words.html

# Add your test cases as new cases.


For my entertainment, maybe you could add few C++ symbols that are obviously not part of MSL filter lists, but which would be problematic in naive implementation. Examples of the latter are for example &quot;INT_MAX&quot; and &quot;_Pragma&quot;, &quot;__attribute__&quot;, &quot;__file__&quot;, &quot;ANGLE_1&quot;, .

(E.g. We know we have a filter list in c++, and if a word exists in that list, it gets rewritten and we know this. It&apos;s good to test that filter list but we know it&apos;s a no-op and it was already working. The primary test objective would be the items obviously not in the filter list.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1788478</commentid>
    <comment_count>14</comment_count>
      <attachid>436696</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-08-30 05:33:08 -0700</bug_when>
    <thetext>Comment on attachment 436696
Patch

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

&gt; Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp:71
&gt; +constexpr Name kFlippedPointCoordName(&quot;flippedPointCoord&quot;, SymbolType::BuiltIn);

It&apos;s still unclear why something goes UserDefined -&gt; BuiltIn 
and something goes UserDefined -&gt; AngleInternal

Most of these, I would imagine, are still &quot;AngleInternal&quot;, e.g. they don&apos;t exist in GLSL (if the interpretation of BuiltIn is that BuiltIns are in GLSL).

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:261
&gt; +                       &lt;&lt; &quot;ANGLE_vertexOut.&quot; &lt;&lt; kUserDefinedNamePrefix  &lt;&lt; varying.name;

So this one seems to indicate that we don&apos;t put the prefix in the correct place, in the `varying.mappedName` ?
Not sure if it should be blocking the review, but if you know where the mappedName is correctly populated, might as well use the intended logic?

varying.name == the name in the user program
varying.mappedName == the name in the output program

Vulkan is using the mappedName

&gt; LayoutTests/ChangeLog:14
&gt; +        (error):

Long list of copied test functions isn&apos;t useful, so typically these are removed.

&gt; LayoutTests/webgl/pending/conformance/glsl/misc/shader-with-metal-reserved-words-expected.txt:1
&gt; +This test runs the WebGL Test listed below in an iframe and reports PASS or FAIL.

Your commit is missing the test driver that generates this file.

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-metal-reserved-words.html:3
&gt; +/*

So this could be just the shader-with-reserved-words.html.

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/resources/webgl-test-utils.js:4
&gt; +** Permission is hereby granted, free of charge, to any person obtaining a

This file is already in the pending/ directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792922</commentid>
    <comment_count>15</comment_count>
      <attachid>438030</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-13 05:15:20 -0700</bug_when>
    <thetext>Created attachment 438030
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792923</commentid>
    <comment_count>16</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-09-13 05:16:48 -0700</bug_when>
    <thetext>I updated the patch to contain the test and the test runner.
The test fails when run with WebGL2, the code needs a bit of polish still.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1793129</commentid>
    <comment_count>17</comment_count>
      <attachid>438030</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2021-09-13 15:46:28 -0700</bug_when>
    <thetext>Comment on attachment 438030
Patch

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

Once this is passing tests, looks good to me. A couple of small questions/comments. r+

&gt; Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp:71
&gt; +constexpr Name kFlippedFragCoordName(&quot;flippedFragCoord&quot;, SymbolType::BuiltIn);

Curious why these two synthetic names use BuiltIn rather than AngleInternal.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:26
&gt; +        // The length of a string defined as a char array is the size of the array minus 1 (the

The indentation looks strange here.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:264
&gt; +                       &lt;&lt; &quot;ANGLE_vertexOut.&quot; &lt;&lt; kUserDefinedNamePrefix &lt;&lt; varying.name;

Would it be possible to match the reflow of the earlier code to make the single kUserDefinedNamePrefix addition more clear?

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:4
&gt; +** Copyright (c) 2012 The Khronos Group Inc.

2021

The copyright block was shortened recently. Could you take the one from a newer test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1795869</commentid>
    <comment_count>18</comment_count>
    <who name="">rigel</who>
    <bug_when>2021-09-21 17:11:58 -0700</bug_when>
    <thetext>I am seeing what I believe is the same issue for this library: https://github.com/squarefeet/ShaderParticleEngine

Demo here: http://squarefeet.github.io/ShaderParticleEngine/examples/basic.html

I can confirm both the Shader Particle Engine demo and the shadertoy link work on the latest Safari Technology Preview (Release 132, Safari 15.4, WebKit 16613.1.1.5) on macOS 11.5.2 but fail on iOS 15.0 and 15.1 dev beta.

Is this patch currently included in 15.1 dev beta?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1796676</commentid>
    <comment_count>19</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-09-23 14:48:07 -0700</bug_when>
    <thetext>(In reply to rigel from comment #18)
&gt; I am seeing what I believe is the same issue for this library:
&gt; https://github.com/squarefeet/ShaderParticleEngine
&gt; 
&gt; Demo here:
&gt; http://squarefeet.github.io/ShaderParticleEngine/examples/basic.html
&gt; 
&gt; I can confirm both the Shader Particle Engine demo and the shadertoy link
&gt; work on the latest Safari Technology Preview (Release 132, Safari 15.4,
&gt; WebKit 16613.1.1.5) on macOS 11.5.2 but fail on iOS 15.0 and 15.1 dev beta.
&gt; 
&gt; Is this patch currently included in 15.1 dev beta?

This patch isn&apos;t currently included. We&apos;ll have it in shortly!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797111</commentid>
    <comment_count>20</comment_count>
      <attachid>439225</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-09-24 18:30:09 -0700</bug_when>
    <thetext>Created attachment 439225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800314</commentid>
    <comment_count>21</comment_count>
      <attachid>440129</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-10-04 17:43:39 -0700</bug_when>
    <thetext>Created attachment 440129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800343</commentid>
    <comment_count>22</comment_count>
      <attachid>440129</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2021-10-04 18:38:48 -0700</bug_when>
    <thetext>Comment on attachment 440129
Patch

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

&gt; Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect.cpp:-23
&gt; -#include &quot;compiler/translator/TranslatorMetalDirect/RewriteKeywords.h&quot;

Is this file still used now? This seems to be the only file that uses the now-removed function.

&gt; Source/ThirdParty/ANGLE/src/compiler/translator/TranslatorMetalDirect/Name.cpp:72
&gt; +            out &lt;&lt; mRawName;

include ASSERT() here also?

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/mtl_glslang_mtl_utils.mm:28
&gt; +        return N - 1;

nit: inconsistent tab spacing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800350</commentid>
    <comment_count>23</comment_count>
      <attachid>440129</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-10-04 19:08:26 -0700</bug_when>
    <thetext>Comment on attachment 440129
Patch

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

&gt; Source/ThirdParty/ANGLE/ChangeLog:9
&gt; +        Change TranslatorMetalDirect to prefix &apos;_u&apos; to all user defined variables.

I think you could have used &quot;_webgl_&quot; as a prefix since that is explicitly forbidden in WebGL content.
https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.17

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:175
&gt; +var badWords = [
&gt; +  { words:  MetalWords }
&gt; +];

Since there is only one entry in this array, maybe just declare

const badWords = [
 ... all the metal names...
];

and then...

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:179
&gt; +var checkedWords = {};

Do you need this variable? I think if you iterate through all the elements in the array you&apos;ll never hit the same word twice.

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:181
&gt; +var src = [];

I would call this sources.

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:185
&gt; +  src.push({vsrc: vsrc, fsrc: fsrc});

You can do src.push({vsrc, fsrc})

(if the variable holding the value has the same name as the key, you only have to give the name - it will become name: name automatically)

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:188
&gt; +var badWordNdx = 0;

I don&apos;t think you change this, so just have badWords as the array.

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:204
&gt; +  var list = badWords[badWordNdx].words;
&gt; +  if (listNdx &gt;= list.length) {
&gt; +    ++badWordNdx;
&gt; +    if (badWordNdx &gt;= badWords.length) {
&gt; +      finishTest();
&gt; +      return;
&gt; +    }
&gt; +    listNdx = 0;
&gt; +    list = badWords[badWordNdx].words;
&gt; +  }
&gt; +  testWord(list[listNdx]);
&gt; +  ++listNdx;
&gt; +  setTimeout(testNextWord, 0);

This would become:

function testNextWord() {
  if (listNdx &gt;= badWords.length) {
    finishTest();
    return;
  }

  testWord(badWords[listNdx++])
  setTimeout(testNextWord, 0);
}

&gt; LayoutTests/webgl/pending/resources/webgl_test_files/conformance/glsl/misc/shader-with-reserved-words-2.html:218
&gt; +  for (var ii = 0; ii &lt; src.length; ++ii) {
&gt; +    var vs = src[ii].vsrc.replace(/\$replaceMe/g, word);
&gt; +    var fs = src[ii].fsrc.replace(/\$replaceMe/g, word);

Just FYI, you can avoid the ii variable with:

sources.forEach(src =&gt; {
  const vs = src.vsrc.....
  ...
});</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1800716</commentid>
    <comment_count>24</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-10-05 12:51:14 -0700</bug_when>
    <thetext>
&gt; I think you could have used &quot;_webgl_&quot; as a prefix since that is explicitly
&gt; forbidden in WebGL content.
&gt; https://www.khronos.org/registry/webgl/specs/latest/1.0/#6.17

The problem is the second underscore. Double underscores are reserved for macros, so any user variables like _foo will turn into _webgl__foo
This is one of the main reasons the prefix is _u, instead of _u_.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801318</commentid>
    <comment_count>25</comment_count>
      <attachid>440435</attachid>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-10-06 13:40:42 -0700</bug_when>
    <thetext>Created attachment 440435
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1801357</commentid>
    <comment_count>26</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-06 14:45:25 -0700</bug_when>
    <thetext>Committed r283667 (242607@main): &lt;https://commits.webkit.org/242607@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 440435.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808546</commentid>
    <comment_count>27</comment_count>
    <who name="Kyle Piddington">kpiddington</who>
    <bug_when>2021-10-25 13:13:56 -0700</bug_when>
    <thetext>*** Bug 232169 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817401</commentid>
    <comment_count>28</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-11-22 23:58:37 -0800</bug_when>
    <thetext>*** Bug 233405 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436355</attachid>
            <date>2021-08-24 17:50:41 -0700</date>
            <delta_ts>2021-08-25 17:23:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210824175040.patch</filename>
            <type>text/plain</type>
            <size>6833</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYWRmYTNjMGZlMzUxNTczZTZjMTRhZTNmYmM1ODIzNDI5ZTBkZTliMy4uZjYyNGRlN2YwZjYw
ZTU0ZjkyZjE2NjU0NGZhMDM4NzA2NGQyYzk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTI0ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisKKyAgICAgICAgQ2hhbmdlIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCB0byBhcHBlbmQgJ191XycgdG8gYWxsIHVzZXIgZGVmaW5lZCB2YXJpYWJsZXMuIENsZWFu
IHVwIGJ1aWx0aW5zIGxpa2Ugc2FtcGxlcnMgYW5kIEFOR0xFIHN0cnVjdHMgdGhhdCB3ZXJlIGJl
aW5nCisgICAgICAgIGFjY2lkZW50bHkgcHJvbW90ZWQgdG8gdXNlckRlZmluZWQgdmFyaWFibGVz
LgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9j
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmNwcDoKKyAgICAg
ICAgKE5hbWU6OmVtaXQgY29uc3QpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwOgorICAgICAgICAoU3ltYm9sRW52
OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0U2FtcGxlclN0cnVjdCk6
CisgICAgICAgIChzaDo6R2V0VGV4dHVyZVR5cGVOYW1lKToKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tOgorICAgICAgICAocng6
Om10bDo6R2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdPdXRwdXQpOgorCiAyMDIxLTA4
LTE3ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgW01ldGFs
IEFOR0xFXSBGaXggb3Zlci1hdXRvcmVsZWFzZSBvZiByeDo6RGlzcGxheU10bDo6Z2V0TWV0YWxE
ZXZpY2VNYXRjaGluZ0F0dHJpYnV0ZSgpIGFuZCB2YXJpb3VzIE9iamVjdGl2ZS1DIGxlYWtzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAppbmRleCA1NWQ0
NzI1NTA2Mzk0Njg1MzI0MGZlODRjOWFmMzUxYzUxZmU4Y2QzLi5lODU1ZjEwOGUwNWVjZmNhMmE4
YTcwOTQ4YmY5ZWVhMGY3YThmM2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC5jcHAKQEAgLTU5LDggKzU5LDggQEAgbmFtZXNwYWNlIHNoCiBuYW1lc3Bh
Y2UKIHsKIAotY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2si
LCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Ci1jb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJ
REZpZWxkKCJlbXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citj
b25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIsIFN5bWJvbFR5
cGU6OkJ1aWx0SW4pOworY29uc3RleHByIE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0
ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlwZTo6QnVpbHRJbik7CiBjb25zdGV4cHIgTmFtZSBrU2Ft
cGxlTWFza1dyaXRlRnVuY05hbWUoIndyaXRlU2FtcGxlTWFzayIsIFN5bWJvbFR5cGU6OkFuZ2xl
SW50ZXJuYWwpOwogI2lmIDAKIGNvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1l
KCJEaXNjYXJkV3JhcHBlciIpOwpAQCAtNjgsOCArNjgsOCBAQCBjb25zdGV4cHIgTmFtZSBrRGlz
Y2FyZFdyYXBwZXJGdW5jTmFtZSgiRGlzY2FyZFdyYXBwZXIiKTsKIGNvbnN0ZXhwciBOYW1lIGtF
bXVsYXRlZERlcHRoUmFuZ2VQYXJhbXMoIkRlcHRoUmFuZ2VQYXJhbXMiKTsKIGNvbnN0ZXhwciBO
YW1lIGtVbmlmb3Jtc0Jsb2NrTmFtZSgiQW5nbGVVbmlmb3JtcyIpOwogY29uc3RleHByIE5hbWUg
a1VuaWZvcm1zVmFyTmFtZShrVW5pZm9ybXNWYXIpOwotY29uc3RleHByIE5hbWUga0ZsaXBwZWRQ
b2ludENvb3JkTmFtZSgiZmxpcHBlZFBvaW50Q29vcmQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5l
ZCk7Ci1jb25zdGV4cHIgTmFtZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRGcmFnQ29v
cmQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZFBv
aW50Q29vcmROYW1lKCJmbGlwcGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwor
Y29uc3RleHByIE5hbWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwg
U3ltYm9sVHlwZTo6QnVpbHRJbik7CiAKIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUga2dsX1Zl
cnRleElETWV0YWwoCiAgICAgQnVpbHRJbklkOjpnbF9WZXJ0ZXhJRCwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9OYW1lLmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmNwcAppbmRleCAwN2M1ZDE4
NWU2ZmFkMzc1NjllZmNiZDg1NWYyYWU0MDFlNjQzYzhhLi4xMjlhZmY3ZjBjODZlNWQzYTk4Yzgz
YjgwYjkwMmY4NzU4MGQxN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNs
YXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCkBAIC02OSwxMSArNjksMTkgQEAgdm9pZCBOYW1lOjpl
bWl0KFRJbmZvU2lua0Jhc2UgJm91dCkgY29uc3QKICAgICBzd2l0Y2ggKG1TeW1ib2xUeXBlKQog
ICAgIHsKICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgorICAgICAgICAgICAgb3V0
IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQ6CiAgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwot
ICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgaWYobVJhd05hbWUgIT0g
Im1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8PCAiX3VfIiA8PCBt
UmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKLQogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CiAg
ICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAgICAgICAgaWYgKG1S
YXdOYW1lLmJlZ2luc1dpdGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAppbmRl
eCAyZmQwOTExNjUwMjQ0ZDk0OGQxZDA0ODQwYjFiMzVmODA3YjhlN2QwLi45MzdhYTVmNDhjMTA0
ODdjZTQ5MmUxYjQ5YTYxOTA0ZmE5YjM5YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApAQCAtMzkxLDEyICsz
OTEsMTIgQEAgY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNp
Y1R5cGUgc2FtcGxlclR5cGUpCiAgICAgewogICAgICAgICBhdXRvICp0ZXh0dXJlVHlwZSA9IG5l
dyBUVHlwZShzYW1wbGVyVHlwZSk7CiAgICAgICAgIGF1dG8gKnRleHR1cmUgICAgID0gbmV3IFRG
aWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtOb1NvdXJjZUxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpC
dWlsdEluKTsKICAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4dHVyZSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOwogCiAgICAgICAgIGF1dG8gKnNhbXBsZXIgPQogICAgICAgICAgICAgbmV3IFRGaWVs
ZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFsc2UpLCBJbW11dGFibGVTdHJpbmco
InNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAga05vU291cmNlTG9jLCBTeW1ib2xU
eXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICAgIGtOb1NvdXJjZUxvYywg
U3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50ZXIoKnNhbXBsZXIsIEFk
ZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAogICAgICAgICBzdGQ6OnN0cmluZyBlbnZOYW1lOwpAQCAt
NDE1LDcgKzQxNSw3IEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCgpCiAgICAgaWYgKCFtU2FtcGxlcikKICAgICB7CiAgICAgICAgIG1TYW1wbGVyID0gbmV3
IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJtZXRhbDo6c2FtcGxl
ciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGRMaXN0KCks
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKICAgICB9CiAgICAg
cmV0dXJuICptU2FtcGxlcjsKIH0KQEAgLTcwMSw1ICs3MDEsNSBAQCBOYW1lIHNoOjpHZXRUZXh0
dXJlVHlwZU5hbWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKIAogI3VuZGVmIEhBTkRMRV9URVhU
VVJFX05BTUUKIAotICAgIHJldHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVk
KTsKKyAgICByZXR1cm4gTmFtZShuYW1lLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCmluZGV4IDc5
MTI4NWJiNDVmOWU4NjM0ODNhNDBkOGU3MDA5NTU2Y2YxMGVlNTIuLjE5N2FiZmRlYjYyOWIwNzdj
MTEwMTI4ZGZlMGNlMzEwYmFkY2M2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5tbQpAQCAtMjU4LDcgKzI1OCw3IEBAIHN0ZDo6c3RyaW5n
IEdlbmVyYXRlVHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5nT3V0cHV0KGNvbnN0IGdsOjpUcmFuc2Zv
cm1GZWVkYmFja1ZhCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJdICsgKGdsX1ZlcnRleElE
ICsgQU5HTEVfaW5zdGFuY2VJZE1vZCAqICIKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFO
R0xFXyIgPDwgc3RkOjpzdHJpbmcoc2g6OmtVbmlmb3Jtc1ZhcikgPDwgIi5BTkdMRV94ZmJWZXJ0
aWNlc1BlckRyYXcpICogIiA8PCBzdHJpZGUKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAr
ICIgPDwgb2Zmc2V0IDw8ICJdID0gIiA8PCAiYXNfdHlwZTxmbG9hdD4iIDw8ICIoIgotICAgICAg
ICAgICAgICAgICAgICAgICA8PCAiQU5HTEVfdmVydGV4T3V0LiIgPDwgdmFyeWluZy5uYW1lOwor
ICAgICAgICAgICAgICAgICAgICAgICA8PCAiQU5HTEVfdmVydGV4T3V0Ll91XyIgPDwgdmFyeWlu
Zy5uYW1lOyAvLyJfdV8gaXMgZm9yICd1c2VyIGRlZmluZWQgdmFyaWFibGUnCiAKICAgICAgICAg
ICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KCkpCiAgICAgICAgICAgICAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436445</attachid>
            <date>2021-08-25 17:23:55 -0700</date>
            <delta_ts>2021-08-27 16:41:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210825172354.patch</filename>
            <type>text/plain</type>
            <size>7976</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYWRmYTNjMGZlMzUxNTczZTZjMTRhZTNmYmM1ODIzNDI5ZTBkZTliMy4uNDE2NTUyOWM4Yzky
MTFmNTExOTg2YWRjNDRmMDFhNDMxNTAxNDdlMiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTI0ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisKKyAgICAgICAgQ2hhbmdlIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCB0byBhcHBlbmQgJ191JyB0byBhbGwgdXNlciBkZWZpbmVkIHZhcmlhYmxlcy4gQ2xlYW4g
dXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQgQU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVp
bmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3RlZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMu
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwOgorICAgICAg
ICAoTmFtZTo6ZW1pdCBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHA6CisgICAgICAgIChTeW1ib2xFbnY6
OmdldFRleHR1cmVFbnYpOgorICAgICAgICAoU3ltYm9sRW52OjpnZXRTYW1wbGVyU3RydWN0KToK
KyAgICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6
bXRsOjpHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ091dHB1dCk6CisKIDIwMjEtMDgt
MTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWV0YWwg
QU5HTEVdIEZpeCBvdmVyLWF1dG9yZWxlYXNlIG9mIHJ4OjpEaXNwbGF5TXRsOjpnZXRNZXRhbERl
dmljZU1hdGNoaW5nQXR0cmlidXRlKCkgYW5kIHZhcmlvdXMgT2JqZWN0aXZlLUMgbGVha3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCmluZGV4IDU1ZDQ3
MjU1MDYzOTQ2ODUzMjQwZmU4NGM5YWYzNTFjNTFmZThjZDMuLjIxMTdjMDk5MjA0OGUyNjUyZjJi
MTIxODg5MjFiYjUxNWFkMTE0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0LmNwcApAQCAtNTksOCArNTksOCBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFj
ZQogewogCi1jb25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlE
RmllbGQoImVtdWxhdGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2Nv
bnN0ZXhwciBOYW1lIGtDb3ZlcmFnZU1hc2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxkKCJl
bXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKIGNvbnN0ZXhw
ciBOYW1lIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSgid3JpdGVTYW1wbGVNYXNrIiwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAjaWYgMAogY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFw
cGVyRnVuY05hbWUoIkRpc2NhcmRXcmFwcGVyIik7CkBAIC02OCw4ICs2OCw4IEBAIGNvbnN0ZXhw
ciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBlciIpOwogY29uc3Rl
eHByIE5hbWUga0VtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcygiRGVwdGhSYW5nZVBhcmFtcyIpOwog
Y29uc3RleHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CiBjb25z
dGV4cHIgTmFtZSBrVW5pZm9ybXNWYXJOYW1lKGtVbmlmb3Jtc1Zhcik7Ci1jb25zdGV4cHIgTmFt
ZSBrRmxpcHBlZFBvaW50Q29vcmROYW1lKCJmbGlwcGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
QnVpbHRJbik7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRG
cmFnQ29vcmQiLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIAogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSBrZ2xfVmVydGV4SURNZXRhbCgKICAgICBCdWlsdEluSWQ6OmdsX1ZlcnRleElELApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCmlu
ZGV4IDA3YzVkMTg1ZTZmYWQzNzU2OWVmY2JkODU1ZjJhZTQwMWU2NDNjOGEuLmQ3YTkyZGEzNTJm
NGViZDEwZTBlNDY5NzdiZjdmZjVkMjY1MzEyMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKQEAgLTY5LDExICs2OSwxOSBAQCB2
b2lkIE5hbWU6OmVtaXQoVEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAogICAgIHN3aXRjaCAobVN5
bWJvbFR5cGUpCiAgICAgewogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46CisgICAg
ICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZDoKICAgICAgICAgICAgIEFTU0VSVCghbVJhd05hbWUu
ZW1wdHkoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICBpZiht
UmF3TmFtZSAhPSAibWFpbiIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8
IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IG1SYXdO
YW1lOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBT
eW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgogICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5l
bXB0eSgpKTsKICAgICAgICAgICAgIGlmIChtUmF3TmFtZS5iZWdpbnNXaXRoKGtBbmdsZUludGVy
bmFsUHJlZml4KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwIGIvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKaW5kZXggMmZkMDkxMTY1MDI0NGQ5NDhkMWQwNDg0MGIx
YjM1ZjgwN2I4ZTdkMC4uOTM3YWE1ZjQ4YzEwNDg3Y2U0OTJlMWI0OWE2MTkwNGZhOWIzOWE5MyAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0
b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
L1N5bWJvbEVudi5jcHAKQEAgLTM5MSwxMiArMzkxLDEyIEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5
bWJvbEVudjo6Z2V0VGV4dHVyZUVudihUQmFzaWNUeXBlIHNhbXBsZXJUeXBlKQogICAgIHsKICAg
ICAgICAgYXV0byAqdGV4dHVyZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOwogICAgICAg
ICBhdXRvICp0ZXh0dXJlICAgICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0
cmluZygidGV4dHVyZSIpLCBrTm9Tb3VyY2VMb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50
ZXIoKnRleHR1cmUsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAogICAgICAgICBhdXRvICpzYW1w
bGVyID0KICAgICAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0
KCksIGZhbHNlKSwgSW1tdXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgIGtOb1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgICAgICAg
ICAgICAgICAgICAgICBrTm9Tb3VyY2VMb2MsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwogICAgICAg
ICBtYXJrQXNQb2ludGVyKCpzYW1wbGVyLCBBZGRyZXNzU3BhY2U6OlRocmVhZCk7CiAKICAgICAg
ICAgc3RkOjpzdHJpbmcgZW52TmFtZTsKQEAgLTQxNSw3ICs0MTUsNyBAQCBjb25zdCBUU3RydWN0
dXJlICZTeW1ib2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QoKQogICAgIGlmICghbVNhbXBsZXIpCiAg
ICAgewogICAgICAgICBtU2FtcGxlciA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIElt
bXV0YWJsZVN0cmluZygibWV0YWw6OnNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZExpc3QoKSwgU3ltYm9s
VHlwZTo6QnVpbHRJbik7CiAgICAgfQogICAgIHJldHVybiAqbVNhbXBsZXI7CiB9CkBAIC03MDEs
NSArNzAxLDUgQEAgTmFtZSBzaDo6R2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxl
clR5cGUpCiAKICN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCiAKLSAgICByZXR1cm4gTmFtZShu
YW1lLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgcmV0dXJuIE5hbWUobmFtZSwgU3lt
Ym9sVHlwZTo6QnVpbHRJbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9n
bHNsYW5nX210bF91dGlscy5tbQppbmRleCA3OTEyODViYjQ1ZjllODYzNDgzYTQwZDhlNzAwOTU1
NmNmMTBlZTUyLi43YzI5NTViMGVhZDVhNGE0YjNjZWQ2MzBmNjkzMDI4ZmNkZjg4MDU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0
YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KQEAg
LTE3LDcgKzE3LDcgQEAgbmFtZXNwYWNlCiB7CiAgICAgY29uc3RleHByIGNoYXIga1hmYkJpbmRp
bmdzTWFya2VyW10gICAgPSAiQEBYRkItQmluZGluZ3NAQCI7CiAgICAgY29uc3RleHByIGNoYXIg
a1hmYk91dE1hcmtlcltdICAgICA9ICJBTkdMRV9AQFhGQi1PVVRAQCI7Ci0KKyAgICBjb25zdGV4
cHIgY2hhciBrVXNlckRlZmluZWROYW1lUHJlZml4W10gPSAiX3UiOwogdGVtcGxhdGUgPHNpemVf
dCBOPgogY29uc3RleHByIHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtOXSkKIHsK
QEAgLTI1OCw3ICsyNTgsNyBAQCBzdGQ6OnN0cmluZyBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNr
VmFyeWluZ091dHB1dChjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYQogICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiXSArIChnbF9WZXJ0ZXhJRCArIEFOR0xFX2luc3RhbmNlSWRNb2QgKiAi
CiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5nKHNoOjpr
VW5pZm9ybXNWYXIpIDw8ICIuQU5HTEVfeGZiVmVydGljZXNQZXJEcmF3KSAqICIgPDwgc3RyaWRl
CiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IG9mZnNldCA8PCAiXSA9ICIgPDwg
ImFzX3R5cGU8ZmxvYXQ+IiA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFOR0xF
X3ZlcnRleE91dC4iIDw8IHZhcnlpbmcubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgPDwg
IkFOR0xFX3ZlcnRleE91dC4iIDw8IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggIDw8IHZhcnlpbmcu
bmFtZTsKIAogICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkoKSkKICAgICAgICAg
ICAgICAgICB7CmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9NaW5pQnJvd3Nlci54Y29k
ZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9NaW5pQnJvd3Nlci54Y3NjaGVtZSBiL1Rvb2xz
L01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVz
L01pbmlCcm93c2VyLnhjc2NoZW1lCmluZGV4IDAzYzViMjFhOGUwY2JlZTM1MzIxNGFiMzMxZTQ3
YTg0NGU1ZDdiOWQuLjExN2IyOWEwYzg5MWYwYmE0NjRlMTI2NjAwYWQxNzY1YTk5MTg0YzEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL01pbmlCcm93c2VyLnhjc2NoZW1lCisrKyBiL1Rvb2xzL01pbmlCcm93
c2VyL01pbmlCcm93c2VyLnhjb2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL01pbmlCcm93
c2VyLnhjc2NoZW1lCkBAIC0zNCw3ICszNCw3IEBACiAgICAgICBidWlsZENvbmZpZ3VyYXRpb24g
PSAiRGVidWciCiAgICAgICBzZWxlY3RlZERlYnVnZ2VySWRlbnRpZmllciA9ICJYY29kZS5EZWJ1
Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExEQiIKICAgICAgIHNlbGVjdGVkTGF1bmNoZXJJZGVu
dGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCIgotICAgICAg
bGF1bmNoU3R5bGUgPSAiMCIKKyAgICAgIGxhdW5jaFN0eWxlID0gIjEiCiAgICAgICB1c2VDdXN0
b21Xb3JraW5nRGlyZWN0b3J5ID0gIk5PIgogICAgICAgaWdub3Jlc1BlcnNpc3RlbnRTdGF0ZU9u
TGF1bmNoID0gIk5PIgogICAgICAgZGVidWdEb2N1bWVudFZlcnNpb25pbmcgPSAiWUVTIgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436691</attachid>
            <date>2021-08-27 16:41:19 -0700</date>
            <delta_ts>2021-08-27 17:30:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210827164118.patch</filename>
            <type>text/plain</type>
            <size>144959</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYWRmYTNjMGZlMzUxNTczZTZjMTRhZTNmYmM1ODIzNDI5ZTBkZTliMy4uNDIwM2I5ZGFiYmQw
NDZiYjAxNmVlOTA4ZWY1OTIwMzRmNTY5ZWZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTI0ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisKKyAgICAgICAgQ2hhbmdlIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCB0byBwcmVmaXggJ191JyB0byBhbGwgdXNlciBkZWZpbmVkIHZhcmlhYmxlcy4gQ2xlYW4g
dXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQgQU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVp
bmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3RlZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMu
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwOgorICAgICAg
ICAoTmFtZTo6ZW1pdCBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHA6CisgICAgICAgIChTeW1ib2xFbnY6
OmdldFRleHR1cmVFbnYpOgorICAgICAgICAoU3ltYm9sRW52OjpnZXRTYW1wbGVyU3RydWN0KToK
KyAgICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6
bXRsOjpHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ091dHB1dCk6CisKIDIwMjEtMDgt
MTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWV0YWwg
QU5HTEVdIEZpeCBvdmVyLWF1dG9yZWxlYXNlIG9mIHJ4OjpEaXNwbGF5TXRsOjpnZXRNZXRhbERl
dmljZU1hdGNoaW5nQXR0cmlidXRlKCkgYW5kIHZhcmlvdXMgT2JqZWN0aXZlLUMgbGVha3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCmluZGV4IDU1ZDQ3
MjU1MDYzOTQ2ODUzMjQwZmU4NGM5YWYzNTFjNTFmZThjZDMuLmE4MmZiNTYzNDQ1ZTAxNDRjN2Zi
N2MyNjYzOWMxMzc4MzgxMWZkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0LmNwcApAQCAtNTksOCArNTksOCBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFj
ZQogewogCi1jb25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlE
RmllbGQoImVtdWxhdGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2Nv
bnN0ZXhwciBOYW1lIGtDb3ZlcmFnZU1hc2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxkKCJl
bXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKIGNvbnN0ZXhw
ciBOYW1lIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSgid3JpdGVTYW1wbGVNYXNrIiwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAjaWYgMAogY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFw
cGVyRnVuY05hbWUoIkRpc2NhcmRXcmFwcGVyIik7CkBAIC02OCw4ICs2OCw4IEBAIGNvbnN0ZXhw
ciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBlciIpOwogY29uc3Rl
eHByIE5hbWUga0VtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcygiRGVwdGhSYW5nZVBhcmFtcyIpOwog
Y29uc3RleHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CiBjb25z
dGV4cHIgTmFtZSBrVW5pZm9ybXNWYXJOYW1lKGtVbmlmb3Jtc1Zhcik7Ci1jb25zdGV4cHIgTmFt
ZSBrRmxpcHBlZFBvaW50Q29vcmROYW1lKCJmbGlwcGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
QnVpbHRJbik7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRG
cmFnQ29vcmQiLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIAogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSBrZ2xfVmVydGV4SURNZXRhbCgKICAgICBCdWlsdEluSWQ6OmdsX1ZlcnRleElELApAQCAt
ODc3LDcgKzg3Nyw2IEBAIHN0YXRpYyBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+IEdldE1zbEtl
eXdvcmRzKCkKICAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaG9ydCIpOwogICAgIGtleXdvcmRzLmVt
cGxhY2UoInNpZ25lZCIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInNpemVfdCIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoInNpemVvZiIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YWdlX2lu
Iik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fzc2VydCIpOwogICAgIGtleXdvcmRz
LmVtcGxhY2UoInN0YXRpY19jYXN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKaW5kZXggMDdjNWQxODVlNmZhZDM3NTY5ZWZjYmQ4
NTVmMmFlNDAxZTY0M2M4YS4uZDdhOTJkYTM1MmY0ZWJkMTBlMGU0Njk3N2JmN2ZmNWQyNjUzMTIx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcApAQCAtNjksMTEgKzY5LDE5IEBAIHZvaWQgTmFtZTo6ZW1pdChUSW5mb1NpbmtCYXNl
ICZvdXQpIGNvbnN0CiAgICAgc3dpdGNoIChtU3ltYm9sVHlwZSkKICAgICB7CiAgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKyAgICAgICAgICAgIG91dCA8PCBtUmF3TmFtZTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkOgog
ICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKLSAgICAgICAgICAgIG91dCA8
PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIGlmKG1SYXdOYW1lICE9ICJtYWluIikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwga1VzZXJEZWZpbmVkTmFtZVByZWZpeCA8PCBt
UmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKLQogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CiAg
ICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAgICAgICAgaWYgKG1S
YXdOYW1lLmJlZ2luc1dpdGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAppbmRl
eCAyZmQwOTExNjUwMjQ0ZDk0OGQxZDA0ODQwYjFiMzVmODA3YjhlN2QwLi45MzdhYTVmNDhjMTA0
ODdjZTQ5MmUxYjQ5YTYxOTA0ZmE5YjM5YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApAQCAtMzkxLDEyICsz
OTEsMTIgQEAgY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNp
Y1R5cGUgc2FtcGxlclR5cGUpCiAgICAgewogICAgICAgICBhdXRvICp0ZXh0dXJlVHlwZSA9IG5l
dyBUVHlwZShzYW1wbGVyVHlwZSk7CiAgICAgICAgIGF1dG8gKnRleHR1cmUgICAgID0gbmV3IFRG
aWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtOb1NvdXJjZUxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpC
dWlsdEluKTsKICAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4dHVyZSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOwogCiAgICAgICAgIGF1dG8gKnNhbXBsZXIgPQogICAgICAgICAgICAgbmV3IFRGaWVs
ZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFsc2UpLCBJbW11dGFibGVTdHJpbmco
InNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAga05vU291cmNlTG9jLCBTeW1ib2xU
eXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICAgIGtOb1NvdXJjZUxvYywg
U3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50ZXIoKnNhbXBsZXIsIEFk
ZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAogICAgICAgICBzdGQ6OnN0cmluZyBlbnZOYW1lOwpAQCAt
NDE1LDcgKzQxNSw3IEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCgpCiAgICAgaWYgKCFtU2FtcGxlcikKICAgICB7CiAgICAgICAgIG1TYW1wbGVyID0gbmV3
IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJtZXRhbDo6c2FtcGxl
ciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGRMaXN0KCks
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKICAgICB9CiAgICAg
cmV0dXJuICptU2FtcGxlcjsKIH0KQEAgLTcwMSw1ICs3MDEsNSBAQCBOYW1lIHNoOjpHZXRUZXh0
dXJlVHlwZU5hbWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKIAogI3VuZGVmIEhBTkRMRV9URVhU
VVJFX05BTUUKIAotICAgIHJldHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVk
KTsKKyAgICByZXR1cm4gTmFtZShuYW1lLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCmluZGV4IDc5
MTI4NWJiNDVmOWU4NjM0ODNhNDBkOGU3MDA5NTU2Y2YxMGVlNTIuLjFlZmFkNzM1NTc3OTQyMDlh
NjY1NzVkYTZkYzFmYmJlNzAxZWQwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5tbQpAQCAtMTcsNyArMTcsNyBAQCBuYW1lc3BhY2UKIHsK
ICAgICBjb25zdGV4cHIgY2hhciBrWGZiQmluZGluZ3NNYXJrZXJbXSAgICA9ICJAQFhGQi1CaW5k
aW5nc0BAIjsKICAgICBjb25zdGV4cHIgY2hhciBrWGZiT3V0TWFya2VyW10gICAgID0gIkFOR0xF
X0BAWEZCLU9VVEBAIjsKLQorICAgIGNvbnN0ZXhwciBjaGFyIGtVc2VyRGVmaW5lZE5hbWVQcmVm
aXhbXSA9ICJfdSI7IC8vRGVmaW5lZCBpbiBHTFNMQU5HL1NoYWRlckxhbmcuaAogdGVtcGxhdGUg
PHNpemVfdCBOPgogY29uc3RleHByIHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtO
XSkKIHsKQEAgLTI1OCw3ICsyNTgsNyBAQCBzdGQ6OnN0cmluZyBHZW5lcmF0ZVRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ091dHB1dChjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYQogICAgICAg
ICAgICAgICAgICAgICAgICA8PCAiXSArIChnbF9WZXJ0ZXhJRCArIEFOR0xFX2luc3RhbmNlSWRN
b2QgKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5n
KHNoOjprVW5pZm9ybXNWYXIpIDw8ICIuQU5HTEVfeGZiVmVydGljZXNQZXJEcmF3KSAqICIgPDwg
c3RyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IG9mZnNldCA8PCAiXSA9
ICIgPDwgImFzX3R5cGU8ZmxvYXQ+IiA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwg
IkFOR0xFX3ZlcnRleE91dC4iIDw8IHZhcnlpbmcubmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgPDwgIkFOR0xFX3ZlcnRleE91dC4iIDw8IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggIDw8IHZh
cnlpbmcubmFtZTsKIAogICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkoKSkKICAg
ICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2ZkMDgwZTFlNmNmNTZhOWZlM2ZjNGJjZGJhMDA2YTYw
MGQ3ZjFjOC4uNDk5MjMzMjg3MWYwMjQxOGFmNGFlNTA1N2EzN2IwYTg3MmY5ZmY5YSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0NSBAQAorMjAyMS0wOC0yNCAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFNoYWRlcnRveSAidHJ1Y2hldCBkaXN0cmljdCIgZmFp
bHMgdG8gY29tcGlsZSB3aXRoIGVycm9yOiBJbnRlcm5hbCBlcnJvciBjb21waWxpbmcgc2hhZGVy
IHdpdGggTWV0YWwgYmFja2VuZCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyOTM3OAorCisgICAgICAgIEFkZCB0ZXN0cyBhbmQgc3VwcG9ydCBmaWxl
cyB0byBydW4gcGVuZGluZyB0ZXN0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5j
ZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtbWV0YWwtcmVzZXJ2ZWQtd29yZHMuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qczogQWRkZWQuCisgICAgICAgIChs
b2cpOgorICAgICAgICAoZXJyb3IpOgorICAgICAgICAobG9nZ2luZ09mZik6CisgICAgICAgIChn
bEVudW1Ub1N0cmluZyk6CisgICAgICAgIChnZXRMYXN0RXJyb3IpOgorICAgICAgICAoZW5kc1dp
dGgpOgorICAgICAgICAoc3RhcnRzV2l0aCk6CisgICAgICAgIChzZXR1cFNpbXBsZVRleHR1cmVW
ZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIp
OgorICAgICAgICAoc2V0dXBOb1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlcik6CisgICAgICAg
IChzZXR1cFNpbXBsZVZlcnRleENvbG9yVmVydGV4U2hhZGVyKToKKyAgICAgICAgKHNldHVwU2lt
cGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlcik6CisgICAgICAgIChzZXR1cFNpbXBsZUNvbG9y
VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHNldHVwU2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlcik6
CisgICAgICAgIChzZXR1cFByb2dyYW0pOgorICAgICAgICAoc2V0dXBOb1RleENvb3JkVGV4dHVy
ZVByb2dyYW0pOgorICAgICAgICAoc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSk6CisgICAgICAg
IChzZXR1cFNpbXBsZVZlcnRleENvbG9yUHJvZ3JhbSk6CisgICAgICAgIChzZXR1cFNpbXBsZUNv
bG9yUHJvZ3JhbSk6CisgICAgICAgIChzZXR1cFVuaXRRdWFkKToKKyAgICAgICAgKHNldHVwVW5p
dFF1YWRXaXRoVGV4Q29vcmRzKToKKyAgICAgICAgKHNldHVwUXVhZCk6CisgICAgICAgIChzZXR1
cFRleHR1cmVkUXVhZCk6CisgICAgICAgIChzZXR1cENvbG9yUXVhZCk6CisgICAgICAgIChzZXR1
cFRleHR1cmVkUXVhZFdpdGhUZXhDb29yZHMpOgorICAgICAgICAoc2V0dXBJbmRleGVkUXVhZCk6
CisgICAgICAgIChzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMpOgorICAgICAgICAoZ2xUeXBl
VG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChnZXRCeXRlc1BlckNvbXBvbmVudCk6CisgICAg
ICAgIChnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbCk6CisgICAgICAgIChmaWxsVGV4dHVy
ZSk6CisgICAgICAgIChjcmVhdGVDb2xvcmVkVGV4dHVyZSk6CisgICAgICAgICh1Ynl0ZVRvRmxv
YXQpOgorICAgICAgICAodWJ5dGVDb2xvclRvRmxvYXRDb2xvcik6CisgICAgICAgIChzZXRGbG9h
dERyYXdDb2xvcik6CisgICAgICAgIChzZXRVQnl0ZURyYXdDb2xvcik6CisgICAgICAgIChkcmF3
RmxvYXRDb2xvclF1YWQpOgorICAgICAgICAoZHJhd1VCeXRlQ29sb3JRdWFkKToKKyAgICAgICAg
KGRyYXdVbml0UXVhZCk6CisgICAgICAgIChjbGVhckFuZERyYXdVbml0UXVhZCk6CisgICAgICAg
IChkcmF3SW5kZXhlZFF1YWQpOgorICAgICAgICAoY2xlYXJBbmREcmF3SW5kZXhlZFF1YWQpOgor
ICAgICAgICAoY2xpcFRvUmFuZ2UpOgorICAgICAgICAoaXNXZWJHTENvbnRleHQpOgorICAgICAg
ICAoY2hlY2tDYW52YXNSZWN0Q29sb3IpOgorICAgICAgICAoY2hlY2tDYW52YXNSZWN0KToKKyAg
ICAgICAgKGNoZWNrQ2FudmFzKToKKyAgICAgICAgKGNoZWNrQXJlYUluQW5kT3V0KToKKyAgICAg
ICAgKGltYWdlLm9ubG9hZCk6CisgICAgICAgIChsb2FkVGV4dHVyZSk6CisgICAgICAgIChjaGVj
a1RleHR1cmVTaXplKToKKyAgICAgICAgKHNoYWxsb3dDb3B5T2JqZWN0KToKKyAgICAgICAgKGhh
c0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSk6CisgICAgICAgIChnZXRVcmxPcHRpb25zKToKKyAg
ICAgICAgKGNyZWF0ZTNEQ29udGV4dCk6CisgICAgICAgIChjcmVhdGVHTEVycm9yV3JhcHBlcik6
CisgICAgICAgIChjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3Iu
d3JhcC5nZXRFcnJvcik6CisgICAgICAgIChjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRU
aHJvd3NPbkdMRXJyb3IpOgorICAgICAgICAoc2hvdWxkR2VuZXJhdGVHTEVycm9yKToKKyAgICAg
ICAgKHNob3VsZFRocm93T3JHZW5lcmF0ZUdMRXJyb3IpOgorICAgICAgICAoZ2xFcnJvclNob3Vs
ZEJlKToKKyAgICAgICAgKGxpbmtQcm9ncmFtKToKKyAgICAgICAgKHRyeS5yZXF1ZXN0Lm9ucmVh
ZHlzdGF0ZWNoYW5nZSk6CisgICAgICAgIChsb2FkVGV4dEZpbGVBc3luYyk6CisgICAgICAgIChn
ZXRGaWxlTGlzdEltcGwpOgorICAgICAgICAoZ2V0RmlsZUxpc3RBc3luYyk6CisgICAgICAgIChy
ZWFkRmlsZSk6CisgICAgICAgIChyZWFkRmlsZUxpc3QpOgorICAgICAgICAobG9hZFNoYWRlcik6
CisgICAgICAgIChsb2FkU2hhZGVyRnJvbUZpbGUpOgorICAgICAgICAoZ2V0U2NyaXB0KToKKyAg
ICAgICAgKGxvYWRTaGFkZXJGcm9tU2NyaXB0KToKKyAgICAgICAgKGxvYWRTdGFuZGFyZFByb2dy
YW0pOgorICAgICAgICAobG9hZFByb2dyYW1Gcm9tRmlsZSk6CisgICAgICAgIChsb2FkUHJvZ3Jh
bUZyb21TY3JpcHQpOgorICAgICAgICAoY3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChsb2FkUHJv
Z3JhbSk6CisgICAgICAgIChsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RFcnJvcik6CisgICAg
ICAgIChnZXRBY3RpdmVNYXApOgorICAgICAgICAoZ2V0QXR0cmliTWFwKToKKyAgICAgICAgKGdl
dFVuaWZvcm1NYXApOgorICAgICAgICAoZ2V0QmFzZVBhdGgpOgorICAgICAgICAobG9hZFN0YW5k
YXJkVmVydGV4U2hhZGVyKToKKyAgICAgICAgKGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyKToK
KyAgICAgICAgKGltZy5vbmxvYWQpOgorICAgICAgICAobG9hZEltYWdlQXN5bmMpOgorICAgICAg
ICAoaW1hZ2VMb2FkZWQpOgorICAgICAgICAobG9hZEltYWdlc0FzeW5jKToKKyAgICAgICAgKGdl
dFVybEFyZ3VtZW50cyk6CisgICAgICAgIChlbHNlLmltZy5vbmVycm9yKToKKyAgICAgICAgKG1h
a2VJbWFnZSk6CisgICAgICAgIChtYWtlSW1hZ2VGcm9tQ2FudmFzKToKKyAgICAgICAgKGVsc2Uu
dmlkLm9uZXJyb3IpOgorICAgICAgICAobWFrZVZpZGVvKToKKyAgICAgICAgKGluc2VydEltYWdl
KToKKyAgICAgICAgKGFkZFNoYWRlclNvdXJjZSk6CisgICAgICAgIChhZGRTaGFkZXJTb3VyY2Vz
KToKKyAgICAgICAgKGR1bXBTaGFkZXJzSW5mbyk6CisgICAgICAgIChnZXRTdXBwb3J0ZWRFeHRl
bnNpb25XaXRoS25vd25QcmVmaXhlcyk6CisgICAgICAgIChnZXRFeHRlbnNpb25XaXRoS25vd25Q
cmVmaXhlcyk6CisgICAgICAgICh1bnByZWZpeCk6CisgICAgICAgIChnZXRFeHRlbnNpb25QcmVm
aXhlZE5hbWVzKToKKyAgICAgICAgKHJlcGxhY2VQYXJhbXMpOgorICAgICAgICAodXBwZXJDYXNl
Rmlyc3RMZXR0ZXIpOgorICAgICAgICAoZ2V0UHJlZml4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChy
ZXF1ZXN0QW5pbUZyYW1lKToKKyAgICAgICAgKGNhbmNlbEFuaW1GcmFtZSk6CisgICAgICAgIChy
ZXF1ZXN0RnVsbFNjcmVlbik6CisgICAgICAgIChjYW5jZWxGdWxsU2NyZWVuKToKKyAgICAgICAg
KGdldEZ1bGxTY3JlZW5TdGF0ZSk6CisgICAgICAgIChvbkZ1bGxTY3JlZW5DaGFuZ2UpOgorICAg
ICAgICAodG9nZ2xlRnVsbFNjcmVlbik6CisgICAgICAgIChzZXR1cEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoY291bnREb3duKToKKyAgICAgICAgKHdhaXRGb3JDb21wb3NpdGUpOgorICAgICAgICAo
c2V0WmVyb1RpbWVvdXQpOgorICAgICAgICAocnVuTmV4dFN0ZXApOgorICAgICAgICAocnVuU3Rl
cHMpOgorICAgICAgICAobWF5YmVDYWxsQ2FsbGJhY2spOgorICAgICAgICAocGxheWluZ0xpc3Rl
bmVyKToKKyAgICAgICAgKHRpbWV1cGRhdGVMaXN0ZW5lcik6CisgICAgICAgIChzdGFydFBsYXlp
bmdBbmRXYWl0Rm9yVmlkZW8pOgorICAgICAgICAoZ2V0SG9zdCk6CisgICAgICAgIChnZXRCYXNl
RG9tYWluKToKKyAgICAgICAgKHJ1bm5pbmdPbkxvY2FsaG9zdCk6CisgICAgICAgIChnZXRMb2Nh
bENyb3NzT3JpZ2luKToKKyAgICAgICAgKGdldFJlbGF0aXZlUGF0aCk6CisgICAgICAgIChzZXR1
cEltYWdlRm9yQ3Jvc3NPcmlnaW5UZXN0KToKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxzKToKKwog
MjAyMS0wOC0xOCAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXVtXUEVdIEdhcmRlbmluZyBvZiBsYXlvdXQgdGVzdHMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLW1ldGFsLXJl
c2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNzA4MTBlZjk4ZDZjYTk1YjIw
NmY2YjA5ZDk1YjlhZDM5N2M1YTRjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtbWV0YWwtcmVzZXJ2
ZWQtd29yZHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTE4IEBACitUaGlzIHRlc3QgcnVucyB0
aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mg
b3IgRkFJTC4KKworVGVzdDogLi4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLmh0bWwK
K1sgMTogUEFTUyBdIHNoYWRlciB3aXRoOiAnYWxpZ25hcycgY29tcGlsZWQKK1sgMjogUEFTUyBd
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wg
ZXJyb3JzCitbIDM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FsaWduYXMnIGNvbXBpbGVkCitbIDQ6
IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJl
IG5vIEdMIGVycm9ycworWyA1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdhbGlnbmFzJyBjb21waWxl
ZAorWyA2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNzogUEFTUyBdIHNoYWRlciB3aXRoOiAnYWxpZ25hcycg
Y29tcGlsZWQKK1sgODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2Fs
aWdub2YnIGNvbXBpbGVkCitbIDEwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTE6IFBBU1MgXSBzaGFkZXIg
d2l0aDogJ2FsaWdub2YnIGNvbXBpbGVkCitbIDEyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTM6IFBBU1Mg
XSBzaGFkZXIgd2l0aDogJ2FsaWdub2YnIGNvbXBpbGVkCitbIDE0OiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
MTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FsaWdub2YnIGNvbXBpbGVkCitbIDE2OiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgMTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FzX3R5cGUnIGNvbXBpbGVkCitbIDE4
OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBi
ZSBubyBHTCBlcnJvcnMKK1sgMTk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FzX3R5cGUnIGNvbXBp
bGVkCitbIDIwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FzX3R5
cGUnIGNvbXBpbGVkCitbIDIyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjM6IFBBU1MgXSBzaGFkZXIgd2l0
aDogJ2FzX3R5cGUnIGNvbXBpbGVkCitbIDI0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjU6IFBBU1MgXSBz
aGFkZXIgd2l0aDogJ2FuZCcgY29tcGlsZWQKK1sgMjY6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAyNzogUEFT
UyBdIHNoYWRlciB3aXRoOiAnYW5kJyBjb21waWxlZAorWyAyODogUEFTUyBdIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI5
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdhbmQnIGNvbXBpbGVkCitbIDMwOiBQQVNTIF0gZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMK
K1sgMzE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2FuZCcgY29tcGlsZWQKK1sgMzI6IFBBU1MgXSBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVy
cm9ycworWyAzMzogUEFTUyBdIHNoYWRlciB3aXRoOiAnYXV0bycgY29tcGlsZWQKK1sgMzQ6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyAzNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnYXV0bycgY29tcGlsZWQKK1sg
MzY6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxk
IGJlIG5vIEdMIGVycm9ycworWyAzNzogUEFTUyBdIHNoYWRlciB3aXRoOiAnYXV0bycgY29tcGls
ZWQKK1sgMzg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAzOTogUEFTUyBdIHNoYWRlciB3aXRoOiAnYXV0bycg
Y29tcGlsZWQKK1sgNDA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0MTogUEFTUyBdIHNoYWRlciB3aXRoOiAn
Y2F0Y2gnIGNvbXBpbGVkCitbIDQyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDM6IFBBU1MgXSBzaGFkZXIg
d2l0aDogJ2NhdGNoJyBjb21waWxlZAorWyA0NDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ1OiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdjYXRjaCcgY29tcGlsZWQKK1sgNDY6IFBBU1MgXSBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0Nzog
UEFTUyBdIHNoYWRlciB3aXRoOiAnY2F0Y2gnIGNvbXBpbGVkCitbIDQ4OiBQQVNTIF0gZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMK
K1sgNDk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NoYXInIGNvbXBpbGVkCitbIDUwOiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgNTE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NoYXInIGNvbXBpbGVkCitbIDUyOiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgNTM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NoYXInIGNvbXBpbGVkCitb
IDU0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgNTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NoYXInIGNvbXBp
bGVkCitbIDU2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NvbnN0
X2Nhc3QnIGNvbXBpbGVkCitbIDU4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNTk6IFBBU1MgXSBzaGFkZXIg
d2l0aDogJ2NvbnN0X2Nhc3QnIGNvbXBpbGVkCitbIDYwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNjE6IFBB
U1MgXSBzaGFkZXIgd2l0aDogJ2NvbnN0X2Nhc3QnIGNvbXBpbGVkCitbIDYyOiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgNjM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NvbnN0X2Nhc3QnIGNvbXBpbGVkCitbIDY0
OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBi
ZSBubyBHTCBlcnJvcnMKK1sgNjU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NvbnN0YW50JyBjb21w
aWxlZAorWyA2NjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDY3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdjb25z
dGFudCcgY29tcGlsZWQKK1sgNjg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA2OTogUEFTUyBdIHNoYWRlciB3
aXRoOiAnY29uc3RhbnQnIGNvbXBpbGVkCitbIDcwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNzE6IFBBU1Mg
XSBzaGFkZXIgd2l0aDogJ2NvbnN0YW50JyBjb21waWxlZAorWyA3MjogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDczOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdjb25zdGV4cHInIGNvbXBpbGVkCitbIDc0OiBQQVNT
IF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBH
TCBlcnJvcnMKK1sgNzU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2NvbnN0ZXhwcicgY29tcGlsZWQK
K1sgNzY6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hv
dWxkIGJlIG5vIEdMIGVycm9ycworWyA3NzogUEFTUyBdIHNoYWRlciB3aXRoOiAnY29uc3RleHBy
JyBjb21waWxlZAorWyA3ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDc5OiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdjb25zdGV4cHInIGNvbXBpbGVkCitbIDgwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgODE6IFBBU1MgXSBz
aGFkZXIgd2l0aDogJ2RlY2x0eXBlJyBjb21waWxlZAorWyA4MjogUEFTUyBdIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDgz
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdkZWNsdHlwZScgY29tcGlsZWQKK1sgODQ6IFBBU1MgXSBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVy
cm9ycworWyA4NTogUEFTUyBdIHNoYWRlciB3aXRoOiAnZGVjbHR5cGUnIGNvbXBpbGVkCitbIDg2
OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBi
ZSBubyBHTCBlcnJvcnMKK1sgODc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2RlY2x0eXBlJyBjb21w
aWxlZAorWyA4ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDg5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdkZWxl
dGUnIGNvbXBpbGVkCitbIDkwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgOTE6IFBBU1MgXSBzaGFkZXIgd2l0
aDogJ2RlbGV0ZScgY29tcGlsZWQKK1sgOTI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA5MzogUEFTUyBdIHNo
YWRlciB3aXRoOiAnZGVsZXRlJyBjb21waWxlZAorWyA5NDogUEFTUyBdIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDk1OiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICdkZWxldGUnIGNvbXBpbGVkCitbIDk2OiBQQVNTIF0gZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMK
K1sgOTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2RldmljZScgY29tcGlsZWQKK1sgOTg6IFBBU1Mg
XSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdM
IGVycm9ycworWyA5OTogUEFTUyBdIHNoYWRlciB3aXRoOiAnZGV2aWNlJyBjb21waWxlZAorWyAx
MDA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxk
IGJlIG5vIEdMIGVycm9ycworWyAxMDE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2RldmljZScgY29t
cGlsZWQKK1sgMTAyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTAzOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdk
ZXZpY2UnIGNvbXBpbGVkCitbIDEwNDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDEwNTogUEFTUyBdIHNoYWRl
ciB3aXRoOiAnZHluYW1pY19jYXN0JyBjb21waWxlZAorWyAxMDY6IFBBU1MgXSBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAx
MDc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2R5bmFtaWNfY2FzdCcgY29tcGlsZWQKK1sgMTA4OiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgMTA5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdkeW5hbWljX2Nhc3QnIGNv
bXBpbGVkCitbIDExMDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDExMTogUEFTUyBdIHNoYWRlciB3aXRoOiAn
ZHluYW1pY19jYXN0JyBjb21waWxlZAorWyAxMTI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxMTM6IFBBU1Mg
XSBzaGFkZXIgd2l0aDogJ2V4cGxpY2l0JyBjb21waWxlZAorWyAxMTQ6IFBBU1MgXSBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycwor
WyAxMTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2V4cGxpY2l0JyBjb21waWxlZAorWyAxMTY6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyAxMTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2V4cGxpY2l0JyBjb21waWxl
ZAorWyAxMTg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxMTk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2V4cGxp
Y2l0JyBjb21waWxlZAorWyAxMjA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxMjE6IFBBU1MgXSBzaGFkZXIg
d2l0aDogJ2V4cG9ydCcgY29tcGlsZWQKK1sgMTIyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTIzOiBQQVNT
IF0gc2hhZGVyIHdpdGg6ICdleHBvcnQnIGNvbXBpbGVkCitbIDEyNDogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDEyNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnZXhwb3J0JyBjb21waWxlZAorWyAxMjY6IFBBU1Mg
XSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdM
IGVycm9ycworWyAxMjc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2V4cG9ydCcgY29tcGlsZWQKK1sg
MTI4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMTI5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdmcmFnbWVudCcg
Y29tcGlsZWQKK1sgMTMwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTMxOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdmcmFnbWVudCcgY29tcGlsZWQKK1sgMTMyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTMzOiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdmcmFnbWVudCcgY29tcGlsZWQKK1sgMTM0OiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
MTM1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdmcmFnbWVudCcgY29tcGlsZWQKK1sgMTM2OiBQQVNT
IF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBH
TCBlcnJvcnMKK1sgMTM3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdmcmllbmQnIGNvbXBpbGVkCitb
IDEzODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91
bGQgYmUgbm8gR0wgZXJyb3JzCitbIDEzOTogUEFTUyBdIHNoYWRlciB3aXRoOiAnZnJpZW5kJyBj
b21waWxlZAorWyAxNDA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxNDE6IFBBU1MgXSBzaGFkZXIgd2l0aDog
J2ZyaWVuZCcgY29tcGlsZWQKK1sgMTQyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTQzOiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICdmcmllbmQnIGNvbXBpbGVkCitbIDE0NDogUEFTUyBdIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDE0NTog
UEFTUyBdIHNoYWRlciB3aXRoOiAnaW50MTZfdCcgY29tcGlsZWQKK1sgMTQ2OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMTQ3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdpbnQxNl90JyBjb21waWxlZAorWyAxNDg6
IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJl
IG5vIEdMIGVycm9ycworWyAxNDk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2ludDE2X3QnIGNvbXBp
bGVkCitbIDE1MDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDE1MTogUEFTUyBdIHNoYWRlciB3aXRoOiAnaW50
MTZfdCcgY29tcGlsZWQKK1sgMTUyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTUzOiBQQVNTIF0gc2hhZGVy
IHdpdGg6ICdpbnQzMl90JyBjb21waWxlZAorWyAxNTQ6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxNTU6IFBB
U1MgXSBzaGFkZXIgd2l0aDogJ2ludDMyX3QnIGNvbXBpbGVkCitbIDE1NjogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDE1NzogUEFTUyBdIHNoYWRlciB3aXRoOiAnaW50MzJfdCcgY29tcGlsZWQKK1sgMTU4OiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgMTU5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdpbnQzMl90JyBjb21waWxl
ZAorWyAxNjA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxNjE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2ludDY0
X3QnIGNvbXBpbGVkCitbIDE2MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDE2MzogUEFTUyBdIHNoYWRlciB3
aXRoOiAnaW50NjRfdCcgY29tcGlsZWQKK1sgMTY0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTY1OiBQQVNT
IF0gc2hhZGVyIHdpdGg6ICdpbnQ2NF90JyBjb21waWxlZAorWyAxNjY6IFBBU1MgXSBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycwor
WyAxNjc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2ludDY0X3QnIGNvbXBpbGVkCitbIDE2ODogUEFT
UyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8g
R0wgZXJyb3JzCitbIDE2OTogUEFTUyBdIHNoYWRlciB3aXRoOiAnaW50OF90JyBjb21waWxlZAor
WyAxNzA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hv
dWxkIGJlIG5vIEdMIGVycm9ycworWyAxNzE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2ludDhfdCcg
Y29tcGlsZWQKK1sgMTcyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTczOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdpbnQ4X3QnIGNvbXBpbGVkCitbIDE3NDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDE3NTogUEFTUyBdIHNo
YWRlciB3aXRoOiAnaW50OF90JyBjb21waWxlZAorWyAxNzY6IFBBU1MgXSBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxNzc6
IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2tlcm5lbCcgY29tcGlsZWQKK1sgMTc4OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMTc5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdrZXJuZWwnIGNvbXBpbGVkCitbIDE4MDog
UEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUg
bm8gR0wgZXJyb3JzCitbIDE4MTogUEFTUyBdIHNoYWRlciB3aXRoOiAna2VybmVsJyBjb21waWxl
ZAorWyAxODI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAxODM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ2tlcm5l
bCcgY29tcGlsZWQKK1sgMTg0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTg1OiBQQVNTIF0gc2hhZGVyIHdp
dGg6ICdtYWluMCcgY29tcGlsZWQKK1sgMTg2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTg3OiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdtYWluMCcgY29tcGlsZWQKK1sgMTg4OiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTg5
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdtYWluMCcgY29tcGlsZWQKK1sgMTkwOiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMTkxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdtYWluMCcgY29tcGlsZWQKK1sgMTkyOiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgMTkzOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdtZXRhbCcgY29tcGlsZWQK
K1sgMTk0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTk1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdtZXRhbCcg
Y29tcGlsZWQKK1sgMTk2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTk3OiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdtZXRhbCcgY29tcGlsZWQKK1sgMTk4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMTk5OiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICdtZXRhbCcgY29tcGlsZWQKK1sgMjAwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjAxOiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICdtdXRhYmxlJyBjb21waWxlZAorWyAyMDI6IFBBU1MgXSBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9y
cworWyAyMDM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ211dGFibGUnIGNvbXBpbGVkCitbIDIwNDog
UEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUg
bm8gR0wgZXJyb3JzCitbIDIwNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnbXV0YWJsZScgY29tcGls
ZWQKK1sgMjA2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjA3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdtdXRh
YmxlJyBjb21waWxlZAorWyAyMDg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAyMDk6IFBBU1MgXSBzaGFkZXIg
d2l0aDogJ25ldycgY29tcGlsZWQKK1sgMjEwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjExOiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICduZXcnIGNvbXBpbGVkCitbIDIxMjogUEFTUyBdIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDIxMzog
UEFTUyBdIHNoYWRlciB3aXRoOiAnbmV3JyBjb21waWxlZAorWyAyMTQ6IFBBU1MgXSBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycwor
WyAyMTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ25ldycgY29tcGlsZWQKK1sgMjE2OiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgMjE3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdub2V4Y2VwdCcgY29tcGlsZWQKK1sg
MjE4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMjE5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdub2V4Y2VwdCcg
Y29tcGlsZWQKK1sgMjIwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjIxOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdub2V4Y2VwdCcgY29tcGlsZWQKK1sgMjIyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjIzOiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdub2V4Y2VwdCcgY29tcGlsZWQKK1sgMjI0OiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
MjI1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdudWxscHRyX3QnIGNvbXBpbGVkCitbIDIyNjogUEFT
UyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8g
R0wgZXJyb3JzCitbIDIyNzogUEFTUyBdIHNoYWRlciB3aXRoOiAnbnVsbHB0cl90JyBjb21waWxl
ZAorWyAyMjg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAyMjk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ251bGxw
dHJfdCcgY29tcGlsZWQKK1sgMjMwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjMxOiBQQVNTIF0gc2hhZGVy
IHdpdGg6ICdudWxscHRyX3QnIGNvbXBpbGVkCitbIDIzMjogUEFTUyBdIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDIzMzog
UEFTUyBdIHNoYWRlciB3aXRoOiAnbnVsbHB0cicgY29tcGlsZWQKK1sgMjM0OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMjM1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdudWxscHRyJyBjb21waWxlZAorWyAyMzY6
IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJl
IG5vIEdMIGVycm9ycworWyAyMzc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ251bGxwdHInIGNvbXBp
bGVkCitbIDIzODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDIzOTogUEFTUyBdIHNoYWRlciB3aXRoOiAnbnVs
bHB0cicgY29tcGlsZWQKK1sgMjQwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjQxOiBQQVNTIF0gc2hhZGVy
IHdpdGg6ICdvcGVyYXRvcicgY29tcGlsZWQKK1sgMjQyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjQzOiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICdvcGVyYXRvcicgY29tcGlsZWQKK1sgMjQ0OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMjQ1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvcGVyYXRvcicgY29tcGlsZWQKK1sgMjQ2
OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBi
ZSBubyBHTCBlcnJvcnMKK1sgMjQ3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvcGVyYXRvcicgY29t
cGlsZWQKK1sgMjQ4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjQ5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdv
dmVycmlkZScgY29tcGlsZWQKK1sgMjUwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjUxOiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICdvdmVycmlkZScgY29tcGlsZWQKK1sgMjUyOiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjUz
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvdmVycmlkZScgY29tcGlsZWQKK1sgMjU0OiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgMjU1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvdmVycmlkZScgY29tcGlsZWQKK1sg
MjU2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMjU3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvcicgY29tcGls
ZWQKK1sgMjU4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjU5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdvcicg
Y29tcGlsZWQKK1sgMjYwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjYxOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICdvcicgY29tcGlsZWQKK1sgMjYyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVl
OiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjYzOiBQQVNTIF0gc2hhZGVy
IHdpdGg6ICdvcicgY29tcGlsZWQKK1sgMjY0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjY1OiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdwcml2YXRlJyBjb21waWxlZAorWyAyNjY6IFBBU1MgXSBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAy
Njc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3ByaXZhdGUnIGNvbXBpbGVkCitbIDI2ODogUEFTUyBd
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wg
ZXJyb3JzCitbIDI2OTogUEFTUyBdIHNoYWRlciB3aXRoOiAncHJpdmF0ZScgY29tcGlsZWQKK1sg
MjcwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMjcxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdwcml2YXRlJyBj
b21waWxlZAorWyAyNzI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAyNzM6IFBBU1MgXSBzaGFkZXIgd2l0aDog
J3Byb3RlY3RlZCcgY29tcGlsZWQKK1sgMjc0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjc1OiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICdwcm90ZWN0ZWQnIGNvbXBpbGVkCitbIDI3NjogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDI3NzogUEFTUyBdIHNoYWRlciB3aXRoOiAncHJvdGVjdGVkJyBjb21waWxlZAorWyAyNzg6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyAyNzk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3Byb3RlY3RlZCcgY29tcGls
ZWQKK1sgMjgwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMjgxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdwdHJk
aWZmX3QnIGNvbXBpbGVkCitbIDI4MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI4MzogUEFTUyBdIHNoYWRl
ciB3aXRoOiAncHRyZGlmZl90JyBjb21waWxlZAorWyAyODQ6IFBBU1MgXSBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAyODU6
IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3B0cmRpZmZfdCcgY29tcGlsZWQKK1sgMjg2OiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgMjg3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdwdHJkaWZmX3QnIGNvbXBpbGVkCitb
IDI4ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91
bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI4OTogUEFTUyBdIHNoYWRlciB3aXRoOiAncmF5X2RhdGEn
IGNvbXBpbGVkCitbIDI5MDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI5MTogUEFTUyBdIHNoYWRlciB3aXRo
OiAncmF5X2RhdGEnIGNvbXBpbGVkCitbIDI5MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI5MzogUEFTUyBd
IHNoYWRlciB3aXRoOiAncmF5X2RhdGEnIGNvbXBpbGVkCitbIDI5NDogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDI5NTogUEFTUyBdIHNoYWRlciB3aXRoOiAncmF5X2RhdGEnIGNvbXBpbGVkCitbIDI5NjogUEFT
UyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8g
R0wgZXJyb3JzCitbIDI5NzogUEFTUyBdIHNoYWRlciB3aXRoOiAncmVnaXN0ZXInIGNvbXBpbGVk
CitbIDI5ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBz
aG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDI5OTogUEFTUyBdIHNoYWRlciB3aXRoOiAncmVnaXN0
ZXInIGNvbXBpbGVkCitbIDMwMDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMwMTogUEFTUyBdIHNoYWRlciB3
aXRoOiAncmVnaXN0ZXInIGNvbXBpbGVkCitbIDMwMjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBl
Y3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMwMzogUEFT
UyBdIHNoYWRlciB3aXRoOiAncmVnaXN0ZXInIGNvbXBpbGVkCitbIDMwNDogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDMwNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnc2lnbmVkJyBjb21waWxlZAorWyAzMDY6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyAzMDc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3NpZ25lZCcgY29tcGlsZWQK
K1sgMzA4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzA5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdzaWduZWQn
IGNvbXBpbGVkCitbIDMxMDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMxMTogUEFTUyBdIHNoYWRlciB3aXRo
OiAnc2lnbmVkJyBjb21waWxlZAorWyAzMTI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAzMTM6IFBBU1MgXSBz
aGFkZXIgd2l0aDogJ3NpemVfdCcgY29tcGlsZWQKK1sgMzE0OiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzE1
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdzaXplX3QnIGNvbXBpbGVkCitbIDMxNjogUEFTUyBdIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJy
b3JzCitbIDMxNzogUEFTUyBdIHNoYWRlciB3aXRoOiAnc2l6ZV90JyBjb21waWxlZAorWyAzMTg6
IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJl
IG5vIEdMIGVycm9ycworWyAzMTk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3NpemVfdCcgY29tcGls
ZWQKK1sgMzIwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzIxOiBGQUlMIF0gc2hhZGVyIHdpdGg6ICdzaXpl
b2YnIGZhaWxlZCB0byBjb21waWxlCitbIDMyMjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMyMzogRkFJTCBd
IHNoYWRlciB3aXRoOiAnc2l6ZW9mJyBmYWlsZWQgdG8gY29tcGlsZQorWyAzMjQ6IFBBU1MgXSBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVy
cm9ycworWyAzMjU6IEZBSUwgXSBzaGFkZXIgd2l0aDogJ3NpemVvZicgZmFpbGVkIHRvIGNvbXBp
bGUKK1sgMzI2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzI3OiBGQUlMIF0gc2hhZGVyIHdpdGg6ICdzaXpl
b2YnIGZhaWxlZCB0byBjb21waWxlCitbIDMyODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMyOTogUEFTUyBd
IHNoYWRlciB3aXRoOiAnc3RhZ2VfaW4nIGNvbXBpbGVkCitbIDMzMDogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDMzMTogUEFTUyBdIHNoYWRlciB3aXRoOiAnc3RhZ2VfaW4nIGNvbXBpbGVkCitbIDMzMjogUEFT
UyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8g
R0wgZXJyb3JzCitbIDMzMzogUEFTUyBdIHNoYWRlciB3aXRoOiAnc3RhZ2VfaW4nIGNvbXBpbGVk
CitbIDMzNDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBz
aG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMzNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnc3RhZ2Vf
aW4nIGNvbXBpbGVkCitbIDMzNjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTog
Tk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDMzNzogUEFTUyBdIHNoYWRlciB3
aXRoOiAnc3RhdGljX2Fzc2VydCcgY29tcGlsZWQKK1sgMzM4OiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzM5
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdzdGF0aWNfYXNzZXJ0JyBjb21waWxlZAorWyAzNDA6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyAzNDE6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3N0YXRpY19hc3NlcnQnIGNv
bXBpbGVkCitbIDM0MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM0MzogUEFTUyBdIHNoYWRlciB3aXRoOiAn
c3RhdGljX2Fzc2VydCcgY29tcGlsZWQKK1sgMzQ0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzQ1OiBQQVNT
IF0gc2hhZGVyIHdpdGg6ICdzdGF0aWNfY2FzdCcgY29tcGlsZWQKK1sgMzQ2OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgMzQ3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdzdGF0aWNfY2FzdCcgY29tcGlsZWQKK1sg
MzQ4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMzQ5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdzdGF0aWNfY2Fz
dCcgY29tcGlsZWQKK1sgMzUwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzUxOiBQQVNTIF0gc2hhZGVyIHdp
dGg6ICdzdGF0aWNfY2FzdCcgY29tcGlsZWQKK1sgMzUyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzUzOiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICd0aHJlYWRfbG9jYWwnIGNvbXBpbGVkCitbIDM1NDogUEFTUyBd
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wg
ZXJyb3JzCitbIDM1NTogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyZWFkX2xvY2FsJyBjb21waWxl
ZAorWyAzNTY6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
c2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAzNTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3RocmVh
ZF9sb2NhbCcgY29tcGlsZWQKK1sgMzU4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzU5OiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICd0aHJlYWRfbG9jYWwnIGNvbXBpbGVkCitbIDM2MDogUEFTUyBdIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitb
IDM2MTogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyZWFkJyBjb21waWxlZAorWyAzNjI6IFBBU1Mg
XSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdM
IGVycm9ycworWyAzNjM6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3RocmVhZCcgY29tcGlsZWQKK1sg
MzY0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgMzY1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd0aHJlYWQnIGNv
bXBpbGVkCitbIDM2NjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM2NzogUEFTUyBdIHNoYWRlciB3aXRoOiAn
dGhyZWFkJyBjb21waWxlZAorWyAzNjg6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyAzNjk6IFBBU1MgXSBzaGFk
ZXIgd2l0aDogJ3RocmVhZGdyb3VwX2ltYWdlYmxvY2snIGNvbXBpbGVkCitbIDM3MDogUEFTUyBd
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wg
ZXJyb3JzCitbIDM3MTogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyZWFkZ3JvdXBfaW1hZ2VibG9j
aycgY29tcGlsZWQKK1sgMzcyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzczOiBQQVNTIF0gc2hhZGVyIHdp
dGg6ICd0aHJlYWRncm91cF9pbWFnZWJsb2NrJyBjb21waWxlZAorWyAzNzQ6IFBBU1MgXSBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9y
cworWyAzNzU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3RocmVhZGdyb3VwX2ltYWdlYmxvY2snIGNv
bXBpbGVkCitbIDM3NjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM3NzogUEFTUyBdIHNoYWRlciB3aXRoOiAn
dGhyZWFkZ3JvdXAnIGNvbXBpbGVkCitbIDM3ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM3OTogUEFTUyBd
IHNoYWRlciB3aXRoOiAndGhyZWFkZ3JvdXAnIGNvbXBpbGVkCitbIDM4MDogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDM4MTogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyZWFkZ3JvdXAnIGNvbXBpbGVkCitbIDM4
MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQg
YmUgbm8gR0wgZXJyb3JzCitbIDM4MzogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyZWFkZ3JvdXAn
IGNvbXBpbGVkCitbIDM4NDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM4NTogUEFTUyBdIHNoYWRlciB3aXRo
OiAndGhyb3cnIGNvbXBpbGVkCitbIDM4NjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM4NzogUEFTUyBdIHNo
YWRlciB3aXRoOiAndGhyb3cnIGNvbXBpbGVkCitbIDM4ODogUEFTUyBdIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM4OTog
UEFTUyBdIHNoYWRlciB3aXRoOiAndGhyb3cnIGNvbXBpbGVkCitbIDM5MDogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDM5MTogUEFTUyBdIHNoYWRlciB3aXRoOiAndGhyb3cnIGNvbXBpbGVkCitbIDM5MjogUEFT
UyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8g
R0wgZXJyb3JzCitbIDM5MzogUEFTUyBdIHNoYWRlciB3aXRoOiAndHJ5JyBjb21waWxlZAorWyAz
OTQ6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxk
IGJlIG5vIEdMIGVycm9ycworWyAzOTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3RyeScgY29tcGls
ZWQKK1sgMzk2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgMzk3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd0cnkn
IGNvbXBpbGVkCitbIDM5ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDM5OTogUEFTUyBdIHNoYWRlciB3aXRo
OiAndHJ5JyBjb21waWxlZAorWyA0MDA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0MDE6IFBBU1MgXSBzaGFk
ZXIgd2l0aDogJ3R5cGVpZCcgY29tcGlsZWQKK1sgNDAyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDAzOiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICd0eXBlaWQnIGNvbXBpbGVkCitbIDQwNDogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDQwNTogUEFTUyBdIHNoYWRlciB3aXRoOiAndHlwZWlkJyBjb21waWxlZAorWyA0MDY6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyA0MDc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3R5cGVpZCcgY29tcGlsZWQK
K1sgNDA4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDA5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd0eXBlbmFt
ZScgY29tcGlsZWQKK1sgNDEwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDExOiBQQVNTIF0gc2hhZGVyIHdp
dGg6ICd0eXBlbmFtZScgY29tcGlsZWQKK1sgNDEyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDEzOiBQQVNT
IF0gc2hhZGVyIHdpdGg6ICd0eXBlbmFtZScgY29tcGlsZWQKK1sgNDE0OiBQQVNTIF0gZ2V0RXJy
b3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMK
K1sgNDE1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd0eXBlbmFtZScgY29tcGlsZWQKK1sgNDE2OiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgNDE3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1Y2hhcicgY29tcGlsZWQK
K1sgNDE4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDE5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1Y2hhcicg
Y29tcGlsZWQKK1sgNDIwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDIxOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICd1Y2hhcicgY29tcGlsZWQKK1sgNDIyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDIzOiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICd1Y2hhcicgY29tcGlsZWQKK1sgNDI0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDI1OiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MTZfdCcgY29tcGlsZWQKK1sgNDI2OiBQQVNTIF0gZ2V0
RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJv
cnMKK1sgNDI3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MTZfdCcgY29tcGlsZWQKK1sgNDI4
OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBi
ZSBubyBHTCBlcnJvcnMKK1sgNDI5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MTZfdCcgY29t
cGlsZWQKK1sgNDMwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDMxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1
aW50MTZfdCcgY29tcGlsZWQKK1sgNDMyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDMzOiBQQVNTIF0gc2hh
ZGVyIHdpdGg6ICd1aW50MzJfdCcgY29tcGlsZWQKK1sgNDM0OiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDM1
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MzJfdCcgY29tcGlsZWQKK1sgNDM2OiBQQVNTIF0g
Z2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBl
cnJvcnMKK1sgNDM3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MzJfdCcgY29tcGlsZWQKK1sg
NDM4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgNDM5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50MzJfdCcg
Y29tcGlsZWQKK1sgNDQwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDQxOiBQQVNTIF0gc2hhZGVyIHdpdGg6
ICd1aW50NjRfdCcgY29tcGlsZWQKK1sgNDQyOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDQzOiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICd1aW50NjRfdCcgY29tcGlsZWQKK1sgNDQ0OiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
NDQ1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50NjRfdCcgY29tcGlsZWQKK1sgNDQ2OiBQQVNT
IF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBH
TCBlcnJvcnMKK1sgNDQ3OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50NjRfdCcgY29tcGlsZWQK
K1sgNDQ4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDQ5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50OF90
JyBjb21waWxlZAorWyA0NTA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5P
X0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0NTE6IFBBU1MgXSBzaGFkZXIgd2l0
aDogJ3VpbnQ4X3QnIGNvbXBpbGVkCitbIDQ1MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3Rl
ZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ1MzogUEFTUyBd
IHNoYWRlciB3aXRoOiAndWludDhfdCcgY29tcGlsZWQKK1sgNDU0OiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
NDU1OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1aW50OF90JyBjb21waWxlZAorWyA0NTY6IFBBU1Mg
XSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdM
IGVycm9ycworWyA0NTc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3VzaG9ydCcgY29tcGlsZWQKK1sg
NDU4OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgNDU5OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd1c2hvcnQnIGNv
bXBpbGVkCitbIDQ2MDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ2MTogUEFTUyBdIHNoYWRlciB3aXRoOiAn
dXNob3J0JyBjb21waWxlZAorWyA0NjI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0NjM6IFBBU1MgXSBzaGFk
ZXIgd2l0aDogJ3VzaG9ydCcgY29tcGlsZWQKK1sgNDY0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4
cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDY1OiBQ
QVNTIF0gc2hhZGVyIHdpdGg6ICd2ZXJ0ZXgnIGNvbXBpbGVkCitbIDQ2NjogUEFTUyBdIGdldEVy
cm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
CitbIDQ2NzogUEFTUyBdIHNoYWRlciB3aXRoOiAndmVydGV4JyBjb21waWxlZAorWyA0Njg6IFBB
U1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5v
IEdMIGVycm9ycworWyA0Njk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3ZlcnRleCcgY29tcGlsZWQK
K1sgNDcwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNo
b3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDcxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd2ZXJ0ZXgn
IGNvbXBpbGVkCitbIDQ3MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ3MzogUEFTUyBdIHNoYWRlciB3aXRo
OiAndmlydHVhbCcgY29tcGlsZWQKK1sgNDc0OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDc1OiBQQVNTIF0g
c2hhZGVyIHdpdGg6ICd2aXJ0dWFsJyBjb21waWxlZAorWyA0NzY6IFBBU1MgXSBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0
Nzc6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3ZpcnR1YWwnIGNvbXBpbGVkCitbIDQ3ODogUEFTUyBd
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wg
ZXJyb3JzCitbIDQ3OTogUEFTUyBdIHNoYWRlciB3aXRoOiAndmlydHVhbCcgY29tcGlsZWQKK1sg
NDgwOiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3Vs
ZCBiZSBubyBHTCBlcnJvcnMKK1sgNDgxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd3Y2hhcl90JyBj
b21waWxlZAorWyA0ODI6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VS
Uk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0ODM6IFBBU1MgXSBzaGFkZXIgd2l0aDog
J3djaGFyX3QnIGNvbXBpbGVkCitbIDQ4NDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ4NTogUEFTUyBdIHNo
YWRlciB3aXRoOiAnd2NoYXJfdCcgY29tcGlsZWQKK1sgNDg2OiBQQVNTIF0gZ2V0RXJyb3Igd2Fz
IGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDg3
OiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd3Y2hhcl90JyBjb21waWxlZAorWyA0ODg6IFBBU1MgXSBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVy
cm9ycworWyA0ODk6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3hvcicgY29tcGlsZWQKK1sgNDkwOiBQ
QVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBu
byBHTCBlcnJvcnMKK1sgNDkxOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICd4b3InIGNvbXBpbGVkCitb
IDQ5MjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91
bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ5MzogUEFTUyBdIHNoYWRlciB3aXRoOiAneG9yJyBjb21w
aWxlZAorWyA0OTQ6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9S
IDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA0OTU6IFBBU1MgXSBzaGFkZXIgd2l0aDogJ3hv
cicgY29tcGlsZWQKK1sgNDk2OiBQQVNTIF0gZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBO
T19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sgNDk3OiBQQVNTIF0gc2hhZGVyIHdp
dGg6ICdOQU4nIGNvbXBpbGVkCitbIDQ5ODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDQ5OTogUEFTUyBdIHNo
YWRlciB3aXRoOiAnTkFOJyBjb21waWxlZAorWyA1MDA6IFBBU1MgXSBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogc2hvdWxkIGJlIG5vIEdMIGVycm9ycworWyA1MDE6IFBB
U1MgXSBzaGFkZXIgd2l0aDogJ05BTicgY29tcGlsZWQKK1sgNTAyOiBQQVNTIF0gZ2V0RXJyb3Ig
d2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IHNob3VsZCBiZSBubyBHTCBlcnJvcnMKK1sg
NTAzOiBQQVNTIF0gc2hhZGVyIHdpdGg6ICdOQU4nIGNvbXBpbGVkCitbIDUwNDogUEFTUyBdIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJy
b3JzCitbIDUwNTogUEFTUyBdIHNoYWRlciB3aXRoOiAnSU5GSU5JVFknIGNvbXBpbGVkCitbIDUw
NjogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQg
YmUgbm8gR0wgZXJyb3JzCitbIDUwNzogUEFTUyBdIHNoYWRlciB3aXRoOiAnSU5GSU5JVFknIGNv
bXBpbGVkCitbIDUwODogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJS
T1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDUwOTogUEFTUyBdIHNoYWRlciB3aXRoOiAn
SU5GSU5JVFknIGNvbXBpbGVkCitbIDUxMDogUEFTUyBdIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDUxMTogUEFTUyBdIHNo
YWRlciB3aXRoOiAnSU5GSU5JVFknIGNvbXBpbGVkCitbIDUxMjogUEFTUyBdIGdldEVycm9yIHdh
cyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiBzaG91bGQgYmUgbm8gR0wgZXJyb3JzCitbIDUx
MzogUEFTUyBdIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCitbIEZBSUwgXSA0IGZhaWx1cmVz
IHJlcG9ydGVkCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLW1l
dGFsLXJlc2VydmVkLXdvcmRzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291
cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1t
ZXRhbC1yZXNlcnZlZC13b3Jkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxOWJkNWNhOGY4MjZjN2MyYmJi
NzJjMjE1MDM4OWQxYWMzNTQ5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlz
Yy9zaGFkZXItd2l0aC1tZXRhbC1yZXNlcnZlZC13b3Jkcy5odG1sCkBAIC0wLDAgKzEsMjYxIEBA
Cis8IS0tCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEtocm9ub3MgR3JvdXAgSW5j
LgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kL29y
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0ZXJpYWxzIiksIHRv
IGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyoq
IHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn
ZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGll
cyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
IE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisqKiB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoqIGluIGFsbCBjb3Bp
ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4KKyoqCisqKiBUSEUg
TUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL
SU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRP
IFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorKiog
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBP
RiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBP
UiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhFIFVTRSBPUiBPVEhF
UiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLS0+CisKKzwhRE9DVFlQRSBodG1s
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBH
TFNMIENvbmZvcm1hbmNlIFRlc3RzIC0gTm9uIFJlc2VydmVkIFdvcmRzPC90aXRsZT4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIi8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3Jlc291cmNlcy9nbHNs
LWZlYXR1cmUtdGVzdHMuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvd2Vi
Z2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0i
dmVydGV4U2hhZGVyMCIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorc3Ry
dWN0ICRyZXBsYWNlTWUgeworICB2ZWM0ICRyZXBsYWNlTWU7Cit9Oworc3RydWN0IEZvbyB7Cisg
ICRyZXBsYWNlTWUgJHJlcGxhY2VNZTsKK307CithdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsKK3Zv
aWQgbWFpbigpCit7CisgICAgRm9vIGY7CisgICAgZi4kcmVwbGFjZU1lLiRyZXBsYWNlTWUgPSBw
b3NpdGlvbjsKKyAgICBnbF9Qb3NpdGlvbiA9IGYuJHJlcGxhY2VNZS4kcmVwbGFjZU1lOworfQor
PC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjAiIHR5cGU9InRleHQvc29tZXRo
aW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordmVjNCAkcmVw
bGFjZU1lKCkgeworICAgIHJldHVybiB2ZWM0KDAsMSwwLDEpOworfQordm9pZCBtYWluKCkKK3sK
KyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1lKCk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQg
aWQ9InZlcnRleFNoYWRlcjEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4K
K2F0dHJpYnV0ZSB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0
aW9uID0gJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFk
ZXIxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKK3ZlYzQgZm9vKHZlYzQgJHJlcGxhY2VNZSkgeworICByZXR1cm4gJHJlcGxh
Y2VNZTsKK30KK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gZm9vKHZlYzQoMSww
LDEsMSkpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIyIiB0eXBlPSJ0
ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+Cit2YXJ5aW5nIHZlYzQgJHJlcGxhY2VNZTsK
K2F0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlv
biA9IHBvc2l0aW9uOworICAgICRyZXBsYWNlTWUgPSBwb3NpdGlvbjsKK30KKzwvc2NyaXB0Pgor
PHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2
YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZhcnlpbmcgdmVjNCAkcmVwbGFj
ZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1lOworfQor
PC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIzIiB0eXBlPSJ0ZXh0L3NvbWV0aGlu
Zy1ub3QtamF2YXNjcmlwdCI+CithdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsKK3ZvaWQgbWFpbigp
Cit7CisgICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBp
ZD0iZnJhZ21lbnRTaGFkZXIzIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+
CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3VuaWZvcm0gdmVjNCAkcmVwbGFjZU1lOwordm9p
ZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1lOworfQorPC9zY3JpcHQ+
Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit2YXIgTWV0YWxXb3JkcyA9IFsKKyAgImFsaWdu
YXMiLAorICAiYWxpZ25vZiIsCisgICJhc190eXBlIiwKKyAgImFuZCIsCisgICJhdXRvIiwKKyAg
ImNhdGNoIiwKKyAgImNoYXIiLAorICAiY29uc3RfY2FzdCIsCisgICJjb25zdGFudCIsCisgICJj
b25zdGV4cHIiLAorICAiZGVjbHR5cGUiLAorICAiZGVsZXRlIiwKKyAgImRldmljZSIsCisgICJk
eW5hbWljX2Nhc3QiLAorICAiZXhwbGljaXQiLAorICAiZXhwb3J0IiwKKyAgImZyYWdtZW50IiwK
KyAgImZyaWVuZCIsCisgICJpbnQxNl90IiwKKyAgImludDMyX3QiLAorICAiaW50NjRfdCIsCisg
ICJpbnQ4X3QiLAorICAia2VybmVsIiwKKyAgIm1haW4wIiwKKyAgIm1ldGFsIiwKKyAgIm11dGFi
bGUiLAorICAibmV3IiwKKyAgIm5vZXhjZXB0IiwKKyAgIm51bGxwdHJfdCIsCisgICJudWxscHRy
IiwKKyAgIm9wZXJhdG9yIiwKKyAgIm92ZXJyaWRlIiwKKyAgIm9yIiwKKyAgInByaXZhdGUiLAor
ICAicHJvdGVjdGVkIiwKKyAgInB0cmRpZmZfdCIsCisgICJyYXlfZGF0YSIsCisgICJyZWdpc3Rl
ciIsCisgICJzaWduZWQiLAorICAic2l6ZV90IiwKKyAgInNpemVvZiIsCisgICJzdGFnZV9pbiIs
CisgICJzdGF0aWNfYXNzZXJ0IiwKKyAgInN0YXRpY19jYXN0IiwKKyAgInRocmVhZF9sb2NhbCIs
CisgICJ0aHJlYWQiLAorICAidGhyZWFkZ3JvdXBfaW1hZ2VibG9jayIsCisgICJ0aHJlYWRncm91
cCIsCisgICJ0aHJvdyIsCisgICJ0cnkiLAorICAidHlwZWlkIiwKKyAgInR5cGVuYW1lIiwKKyAg
InVjaGFyIiwKKyAgInVpbnQxNl90IiwKKyAgInVpbnQzMl90IiwKKyAgInVpbnQ2NF90IiwKKyAg
InVpbnQ4X3QiLAorICAidXNob3J0IiwKKyAgInZlcnRleCIsCisgICJ2aXJ0dWFsIiwKKyAgIndj
aGFyX3QiLAorICAieG9yIiwKKyAgIk5BTiIsCisgICJJTkZJTklUWSIKK107CisKKworZGVzY3Jp
cHRpb24oKTsKKwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFyIGdsID0gd3R1LmNyZWF0
ZTNEQ29udGV4dCgpOworCit2YXIgYmFkV29yZHMgPSBbCisgIHsgd29yZHM6ICBNZXRhbFdvcmRz
IH0KK107CisKKworCit2YXIgY2hlY2tlZFdvcmRzID0ge307CisKK3ZhciBzcmMgPSBbXTsKK2Zv
ciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgIHZhciB2c3JjID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInZlcnRleFNoYWRlciIgKyBpaSkudGV4dDsKKyAgdmFyIGZzcmMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhZ21lbnRTaGFkZXIiICsgaWkpLnRleHQ7CisgIHNyYy5w
dXNoKHt2c3JjOiB2c3JjLCBmc3JjOiBmc3JjfSk7Cit9CisKK3ZhciBiYWRXb3JkTmR4ID0gMDsK
K3ZhciBsaXN0TmR4ID0gMDsKKworZnVuY3Rpb24gdGVzdE5leHRXb3JkKCkgeworICB2YXIgbGlz
dCA9IGJhZFdvcmRzW2JhZFdvcmROZHhdLndvcmRzOworICBpZiAobGlzdE5keCA+PSBsaXN0Lmxl
bmd0aCkgeworICAgICsrYmFkV29yZE5keDsKKyAgICBpZiAoYmFkV29yZE5keCA+PSBiYWRXb3Jk
cy5sZW5ndGgpIHsKKyAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbGlzdE5keCA9IDA7CisgICAgbGlzdCA9IGJhZFdvcmRzW2JhZFdvcmROZHhdLndvcmRzOwor
ICB9CisgIHRlc3RXb3JkKGxpc3RbbGlzdE5keF0pOworICArK2xpc3ROZHg7CisgIHNldFRpbWVv
dXQodGVzdE5leHRXb3JkLCAwKTsKK30KK3Rlc3ROZXh0V29yZCgpOworCitmdW5jdGlvbiB0ZXN0
V29yZCh3b3JkKSB7CisgIGlmICh3b3JkIGluIGNoZWNrZWRXb3JkcykgeworICAgIHJldHVybjsK
KyAgfQorICBjaGVja2VkV29yZHNbd29yZF0gPSB0cnVlOworICBkZWJ1ZygiIik7CisgIGRlYnVn
KCJ0ZXN0aW5nOiAiICsgd29yZCk7CisKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNyYy5sZW5n
dGg7ICsraWkpIHsKKyAgICB2YXIgdnMgPSBzcmNbaWldLnZzcmMucmVwbGFjZSgvXCRyZXBsYWNl
TWUvZywgd29yZCk7CisgICAgdmFyIGZzID0gc3JjW2lpXS5mc3JjLnJlcGxhY2UoL1wkcmVwbGFj
ZU1lL2csIHdvcmQpOworCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIHZhciBwcm9ncmFt
ID0gd3R1LmxvYWRQcm9ncmFtKGdsLCB2cywgZnMsIGZ1bmN0aW9uKG1zZykgeworICAgICAgZGVi
dWcobXNnKTsKKyAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9LCB0cnVlKTsKKyAgICBpZiAo
c3VjY2VzcykgeworICAgICAgdGVzdFBhc3NlZCgic2hhZGVyIHdpdGg6ICciICsgd29yZCArICIn
IGNvbXBpbGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoInNoYWRlciB3aXRo
OiAnIiArIHdvcmQgKyAiJyBmYWlsZWQgdG8gY29tcGlsZSIpOworICAgIH0KKyAgICBpZiAocHJv
Z3JhbSkgeworICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICB9CisgICAgd3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
Iik7CisgIH0KK30KKworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgorCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Bl
bmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvcmVzb3VyY2VzL3dl
YmdsLXRlc3QtdXRpbHMuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93
ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ1MDdlYTQxMjgwMjZjODM1ZGMyNWM2ZDc2ZTEwNGI1YjI1YTg0NzYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJn
bF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL3Jlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzCkBA
IC0wLDAgKzEsMjgxMyBAQAorLyoKKyoqIENvcHlyaWdodCAoYykgMjAxMiBUaGUgS2hyb25vcyBH
cm91cCBJbmMuCisqKgorKiogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyoqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy
ZSBhbmQvb3IgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyoqICJNYXRlcmlh
bHMiKSwgdG8gZGVhbCBpbiB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1
ZGluZworKiogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2Rp
ZnksIG1lcmdlLCBwdWJsaXNoLAorKiogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNl
bGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMsIGFuZCB0bworKiogcGVybWl0IHBlcnNvbnMgdG8g
d2hvbSB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyoq
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyoqCisqKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorKiogaW4g
YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTWF0ZXJpYWxzLgorKioK
KyoqIFRIRSBNQVRFUklBTFMgQVJFIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsCisqKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyoqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyoqIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig
QU5ZCisqKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g
QUNUSU9OIE9GIENPTlRSQUNULAorKiogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwg
T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyoqIE1BVEVSSUFMUyBPUiBUSEUgVVNF
IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBNQVRFUklBTFMuCisqLwordmFyIFdlYkdMVGVzdFV0
aWxzID0gKGZ1bmN0aW9uKCkgeworInVzZSBzdHJpY3QiOworCisvKioKKyAqIFdyYXBwZWQgbG9n
Z2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9n
LgorICovCit2YXIgbG9nID0gZnVuY3Rpb24obXNnKSB7CisgIGlmICh3aW5kb3cuY29uc29sZSAm
JiB3aW5kb3cuY29uc29sZS5sb2cpIHsKKyAgICB3aW5kb3cuY29uc29sZS5sb2cobXNnKTsKKyAg
fQorfTsKKworLyoqCisgKiBXcmFwcGVkIGxvZ2dpbmcgZnVuY3Rpb24uCisgKiBAcGFyYW0ge3N0
cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGxvZy4KKyAqLwordmFyIGVycm9yID0gZnVuY3Rpb24o
bXNnKSB7CisgIGlmICh3aW5kb3cuY29uc29sZSkgeworICAgIGlmICh3aW5kb3cuY29uc29sZS5l
cnJvcikgeworICAgICAgd2luZG93LmNvbnNvbGUuZXJyb3IobXNnKTsKKyAgICB9CisgICAgZWxz
ZSBpZiAod2luZG93LmNvbnNvbGUubG9nKSB7CisgICAgICB3aW5kb3cuY29uc29sZS5sb2cobXNn
KTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogVHVybiBvZmYgYWxsIGxvZ2dpbmcuCisgKi8K
K3ZhciBsb2dnaW5nT2ZmID0gZnVuY3Rpb24oKSB7CisgIGxvZyA9IGZ1bmN0aW9uKCkge307Cisg
IGVycm9yID0gZnVuY3Rpb24oKSB7fTsKK307CisKKy8qKgorICogQ29udmVydHMgYSBXZWJHTCBl
bnVtIHRvIGEgc3RyaW5nLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1
ZSBUaGUgZW51bSB2YWx1ZS4KKyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVudW0gYXMgYSBzdHJp
bmcuCisgKi8KK3ZhciBnbEVudW1Ub1N0cmluZyA9IGZ1bmN0aW9uKGdsLCB2YWx1ZSkgeworICAv
LyBPcHRpbWl6YXRpb24gZm9yIHRoZSBtb3N0IGNvbW1vbiBlbnVtOgorICBpZiAodmFsdWUgPT09
IGdsLk5PX0VSUk9SKSB7CisgICAgcmV0dXJuICJOT19FUlJPUiI7CisgIH0KKyAgZm9yICh2YXIg
cCBpbiBnbCkgeworICAgIGlmIChnbFtwXSA9PSB2YWx1ZSkgeworICAgICAgcmV0dXJuIHA7Cisg
ICAgfQorICB9CisgIHJldHVybiAiMHgiICsgdmFsdWUudG9TdHJpbmcoMTYpOworfTsKKwordmFy
IGxhc3RFcnJvciA9ICIiOworCisvKioKKyAqIFJldHVybnMgdGhlIGxhc3QgY29tcGlsZXIvbGlu
a2VyIGVycm9yLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgbGFzdCBjb21waWxlci9saW5rZXIg
ZXJyb3IuCisgKi8KK3ZhciBnZXRMYXN0RXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgcmV0dXJuIGxh
c3RFcnJvcjsKK307CisKKy8qKgorICogV2hldGhlciBhIGhheXN0YWNrIGVuZHMgd2l0aCBhIG5l
ZWRsZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCisgKiBA
cGFyYW0ge3N0cmluZ30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2ggZm9yLgorICogQHBhcmFtIHti
b29sZWFufSBUcnVlIGlmIGhheXN0YWNrIGVuZHMgd2l0aCBuZWVkbGUuCisgKi8KK3ZhciBlbmRz
V2l0aCA9IGZ1bmN0aW9uKGhheXN0YWNrLCBuZWVkbGUpIHsKKyAgcmV0dXJuIGhheXN0YWNrLnN1
YnN0cihoYXlzdGFjay5sZW5ndGggLSBuZWVkbGUubGVuZ3RoKSA9PT0gbmVlZGxlOworfTsKKwor
LyoqCisgKiBXaGV0aGVyIGEgaGF5c3RhY2sgc3RhcnRzIHdpdGggYSBuZWVkbGUuCisgKiBAcGFy
YW0ge3N0cmluZ30gaGF5c3RhY2sgU3RyaW5nIHRvIHNlYXJjaAorICogQHBhcmFtIHtzdHJpbmd9
IG5lZWRsZSBTdHJpbmcgdG8gc2VhcmNoIGZvci4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gVHJ1ZSBp
ZiBoYXlzdGFjayBzdGFydHMgd2l0aCBuZWVkbGUuCisgKi8KK3ZhciBzdGFydHNXaXRoID0gZnVu
Y3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICByZXR1cm4gaGF5c3RhY2suc3Vic3RyKDAsIG5l
ZWRsZS5sZW5ndGgpID09PSBuZWVkbGU7Cit9OworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBm
b3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVU
ZXh0dXJlVmVydGV4U2hhZGVyID0gWworICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycsCisg
ICdhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7JywKKyAgJ3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsn
LAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247JywK
KyAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8q
KgorICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCisgKiBAdHlwZSB7
c3RyaW5nfQorICovCit2YXIgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyID0gWworICAncHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gc2FtcGxlcjJEIHRleDsnLAorICAn
dmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9G
cmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTsnLAorICAnfSddLmpvaW4oJ1xu
Jyk7CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlLgorICog
QHR5cGUge3N0cmluZ30KKyAqLwordmFyIG5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyID0g
WworICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29v
cmQ7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9u
OycsCisgICcgICAgdGV4Q29vcmQgPSB2UG9zaXRpb24ueHkgKiAwLjUgKyAwLjU7JywKKyAgJ30n
XS5qb2luKCdcbicpOworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgYSB1bmlmb3JtIGNv
bG9yLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZUNvbG9yVmVydGV4U2hhZGVy
ID0gWworICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycsCisgICd2b2lkIG1haW4oKSB7JywK
KyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisK
Ky8qKgorICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBl
IHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyID0gWworICAncHJl
Y2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gdmVjNCB1X2NvbG9yOycsCisgICd2
b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHVfY29sb3I7JywKKyAgJ30n
XS5qb2luKCdcbicpOworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgdmVydGV4IGNvbG9y
cy4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNo
YWRlciA9IFsKKyAgJ2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAnYXR0cmlidXRlIHZl
YzQgYV9jb2xvcjsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigp
IHsnLAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICcgICAgdl9jb2xvciA9
IGFfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hh
ZGVyIGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBs
ZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAn
ICAgIGdsX0ZyYWdEYXRhWzBdID0gdl9jb2xvcjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8q
KgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfQorICovCit2YXIgc2V0dXBTaW1wbGVUZXh0
dXJlVmVydGV4U2hhZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAgICByZXR1cm4gbG9hZFNoYWRlcihn
bCwgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUik7Cit9OworCisv
KioKKyAqIENyZWF0ZXMgYSBzaW1wbGUgdGV4dHVyZSBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFy
YW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQg
dG8gdXNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfQorICovCit2YXIgc2V0dXBTaW1wbGVU
ZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICAgIHJldHVybiBsb2FkU2hh
ZGVyKAorICAgICAgICBnbCwgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyLCBnbC5GUkFHTUVO
VF9TSEFERVIpOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgdGV4dHVyZSB2ZXJ0ZXggc2hhZGVy
IHRoYXQgZG9lc24ndCBuZWVkIHRleGNvb3Jkcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcmV0dXJu
IHshV2ViR0xTaGFkZXJ9CisgKi8KK3ZhciBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hh
ZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAgICByZXR1cm4gbG9hZFNoYWRlcihnbCwgbm9UZXhDb29y
ZFRleHR1cmVWZXJ0ZXhTaGFkZXIsIGdsLlZFUlRFWF9TSEFERVIpOworfTsKKworLyoqCisgKiBD
cmVhdGVzIGEgc2ltcGxlIHZlcnRleCBjb2xvciB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHsh
V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVz
ZS4KKyAqIEByZXR1cm4geyFXZWJHTFNoYWRlcn0KKyAqLwordmFyIHNldHVwU2ltcGxlVmVydGV4
Q29sb3JWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICAgIHJldHVybiBsb2FkU2hhZGVy
KGdsLCBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUik7Cit9
OworCisvKioKKyAqIENyZWF0ZXMgYSBzaW1wbGUgdmVydGV4IGNvbG9yIGZyYWdtZW50IHNoYWRl
ci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9CisgKi8KK3ZhciBz
ZXR1cFNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICAg
IHJldHVybiBsb2FkU2hhZGVyKAorICAgICAgICBnbCwgc2ltcGxlVmVydGV4Q29sb3JGcmFnbWVu
dFNoYWRlciwgZ2wuRlJBR01FTlRfU0hBREVSKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNp
bXBsZSBjb2xvciB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1cm4geyFX
ZWJHTFNoYWRlcn0KKyAqLwordmFyIHNldHVwU2ltcGxlQ29sb3JWZXJ0ZXhTaGFkZXIgPSBmdW5j
dGlvbihnbCkgeworICAgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaW1wbGVDb2xvclZlcnRleFNo
YWRlciwgZ2wuVkVSVEVYX1NIQURFUik7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBzaW1wbGUg
Y29sb3IgZnJhZ21lbnQgc2hhZGVyLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1cm4geyFXZWJH
TFNoYWRlcn0KKyAqLwordmFyIHNldHVwU2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlciA9IGZ1bmN0
aW9uKGdsKSB7CisgICAgcmV0dXJuIGxvYWRTaGFkZXIoCisgICAgICAgIGdsLCBzaW1wbGVDb2xv
ckZyYWdtZW50U2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIpOworfTsKKworLyoqCisgKiBDcmVh
dGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgc2hhZGVycywgYmluZHMgYXR0cmliIGxvY2F0aW9ucywg
bGlua3MgdGhlCisgKiBwcm9ncmFtIGFuZCBjYWxscyB1c2VQcm9ncmFtLgorICogQHBhcmFtIHsh
V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVz
ZS4KKyAqIEBwYXJhbSB7IUFycmF5LjwhV2ViR0xTaGFkZXJ8c3RyaW5nPn0gc2hhZGVycyBUaGUg
c2hhZGVycyB0bworICogICAgICAgIGF0dGFjaCwgb3IgdGhlIHNvdXJjZSwgb3IgdGhlIGlkIG9m
IGEgc2NyaXB0IHRvIGdldAorICogICAgICAgIHRoZSBzb3VyY2UgZnJvbS4KKyAqIEBwYXJhbSB7
IUFycmF5LjxzdHJpbmc+fSBvcHRfYXR0cmlicyBUaGUgYXR0cmlicyBuYW1lcy4KKyAqIEBwYXJh
bSB7IUFycmF5LjxudW1iZXI+fSBvcHRfbG9jYXRpb25zIFRoZSBsb2NhdGlvbnMgZm9yIHRoZSBh
dHRyaWJzLgorICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxv
ZyBzaGFkZXIgc291cmNlLgorICovCit2YXIgc2V0dXBQcm9ncmFtID0gZnVuY3Rpb24oCisgICAg
Z2wsIHNoYWRlcnMsIG9wdF9hdHRyaWJzLCBvcHRfbG9jYXRpb25zLCBvcHRfbG9nU2hhZGVycykg
eworICB2YXIgcmVhbFNoYWRlcnMgPSBbXTsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9n
cmFtKCk7CisgIHZhciBzaGFkZXJDb3VudCA9IDA7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBz
aGFkZXJzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBzaGFkZXIgPSBzaGFkZXJzW2lpXTsKKyAg
ICB2YXIgc2hhZGVyVHlwZSA9IHVuZGVmaW5lZDsKKyAgICBpZiAodHlwZW9mIHNoYWRlciA9PSAn
c3RyaW5nJykgeworICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChz
aGFkZXIpOworICAgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQudHlwZSAh
PSAieC1zaGFkZXIveC12ZXJ0ZXgiICYmIGVsZW1lbnQudHlwZSAhPSAieC1zaGFkZXIveC1mcmFn
bWVudCIpCisgICAgICAgICAgc2hhZGVyVHlwZSA9IGlpID8gZ2wuRlJBR01FTlRfU0hBREVSIDog
Z2wuVkVSVEVYX1NIQURFUjsKKyAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlckZyb21TY3JpcHQo
Z2wsIHNoYWRlciwgc2hhZGVyVHlwZSwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7CisgICAg
ICB9IGVsc2UgaWYgKGVuZHNXaXRoKHNoYWRlciwgIi52ZXJ0IikpIHsKKyAgICAgICAgc2hhZGVy
ID0gbG9hZFNoYWRlckZyb21GaWxlKGdsLCBzaGFkZXIsIGdsLlZFUlRFWF9TSEFERVIsIHVuZGVm
aW5lZCwgb3B0X2xvZ1NoYWRlcnMpOworICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChzaGFkZXIs
ICIuZnJhZyIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgc2hh
ZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRlcnMpOworICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlcihnbCwgc2hhZGVyLCBpaSA/
IGdsLkZSQUdNRU5UX1NIQURFUiA6IGdsLlZFUlRFWF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0X2xv
Z1NoYWRlcnMpOworICAgICAgfQorICAgIH0gZWxzZSBpZiAob3B0X2xvZ1NoYWRlcnMpIHsKKyAg
ICAgIHRocm93ICdTaGFkZXIgc291cmNlIGxvZ2dpbmcgcmVxdWVzdGVkIGJ1dCBubyBzaGFkZXIg
c291cmNlIHByb3ZpZGVkJzsKKyAgICB9CisgICAgaWYgKHNoYWRlcikgeworICAgICAgKytzaGFk
ZXJDb3VudDsKKyAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIH0K
KyAgfQorICBpZiAoc2hhZGVyQ291bnQgIT0gMikgeworICAgIGVycm9yKCJFcnJvciBpbiBjb21w
aWxpbmcgc2hhZGVyIik7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgaWYgKG9wdF9hdHRyaWJz
KSB7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG9wdF9hdHRyaWJzLmxlbmd0aDsgKytpaSkg
eworICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKAorICAgICAgICAgIHByb2dyYW0sCisgICAg
ICAgICAgb3B0X2xvY2F0aW9ucyA/IG9wdF9sb2NhdGlvbnNbaWldIDogaWksCisgICAgICAgICAg
b3B0X2F0dHJpYnNbaWldKTsKKyAgICB9CisgIH0KKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7
CisKKyAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVzCisgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9n
cmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTsKKyAgaWYgKCFsaW5rZWQpIHsK
KyAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgIGxhc3RF
cnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nIChwcm9ncmFtKTsKKyAgICAgIGVycm9yKCJFcnJv
ciBpbiBwcm9ncmFtIGxpbmtpbmc6IiArIGxhc3RFcnJvcik7CisKKyAgICAgIGdsLmRlbGV0ZVBy
b2dyYW0ocHJvZ3JhbSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGdsLnVzZVByb2dy
YW0ocHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEg
c2ltcGxlIHRleHR1cmUgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcmV0dXJuIHtXZWJH
TFByb2dyYW19CisgKi8KK3ZhciBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0
aW9uKGdsKSB7CisgIHZhciB2cyA9IHNldHVwTm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXIo
Z2wpOworICB2YXIgZnMgPSBzZXR1cFNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlcihnbCk7Cisg
IGlmICghdnMgfHwgIWZzKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdmFyIHByb2dyYW0g
PSBzZXR1cFByb2dyYW0oCisgICAgICBnbCwKKyAgICAgIFt2cywgZnNdLAorICAgICAgWyd2UG9z
aXRpb24nXSwKKyAgICAgIFswXSk7CisgIGlmICghcHJvZ3JhbSkgeworICAgIGdsLmRlbGV0ZVNo
YWRlcihmcyk7CisgICAgZ2wuZGVsZXRlU2hhZGVyKHZzKTsKKyAgfQorICBnbC51c2VQcm9ncmFt
KHByb2dyYW0pOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNp
bXBsZSB0ZXh0dXJlIHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9
IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9
IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgor
ICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRp
b24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICovCit2
YXIgc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9z
aXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAgb3B0X3Bvc2l0aW9uTG9j
YXRpb24gPSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICBvcHRfdGV4Y29vcmRMb2NhdGlv
biA9IG9wdF90ZXhjb29yZExvY2F0aW9uIHx8IDE7CisgIHZhciB2cyA9IHNldHVwU2ltcGxlVGV4
dHVyZVZlcnRleFNoYWRlcihnbCk7CisgIHZhciBmcyA9IHNldHVwU2ltcGxlVGV4dHVyZUZyYWdt
ZW50U2hhZGVyKGdsKTsKKyAgaWYgKCF2cyB8fCAhZnMpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAg
fQorICB2YXIgcHJvZ3JhbSA9IHNldHVwUHJvZ3JhbSgKKyAgICAgIGdsLAorICAgICAgW3ZzLCBm
c10sCisgICAgICBbJ3ZQb3NpdGlvbicsICd0ZXhDb29yZDAnXSwKKyAgICAgIFtvcHRfcG9zaXRp
b25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKKyAgaWYgKCFwcm9ncmFtKSB7Cisg
ICAgZ2wuZGVsZXRlU2hhZGVyKGZzKTsKKyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9Cisg
IGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisg
KiBDcmVhdGVzIGEgc2ltcGxlIHZlcnRleCBjb2xvciBwcm9ncmFtLgorICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0
aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdmVydGV4Q29sb3JMb2Nh
dGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uCisgKiAgICAgICAgZm9yIHZlcnRleCBjb2xvcnMuCisg
KiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBsZVZlcnRleENvbG9y
UHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3Zl
cnRleENvbG9yTG9jYXRpb24pIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRp
b25Mb2NhdGlvbiB8fCAwOworICBvcHRfdmVydGV4Q29sb3JMb2NhdGlvbiA9IG9wdF92ZXJ0ZXhD
b2xvckxvY2F0aW9uIHx8IDE7CisgIHZhciB2cyA9IHNldHVwU2ltcGxlVmVydGV4Q29sb3JWZXJ0
ZXhTaGFkZXIoZ2wpOworICB2YXIgZnMgPSBzZXR1cFNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRT
aGFkZXIoZ2wpOworICBpZiAoIXZzIHx8ICFmcykgeworICAgIHJldHVybiBudWxsOworICB9Cisg
IHZhciBwcm9ncmFtID0gc2V0dXBQcm9ncmFtKAorICAgICAgZ2wsCisgICAgICBbdnMsIGZzXSwK
KyAgICAgIFsndlBvc2l0aW9uJywgJ2FfY29sb3InXSwKKyAgICAgIFtvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3ZlcnRleENvbG9yTG9jYXRpb25dKTsKKyAgaWYgKCFwcm9ncmFtKSB7CisgICAg
Z2wuZGVsZXRlU2hhZGVyKGZzKTsKKyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9CisgIGds
LnVzZVByb2dyYW0ocHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBD
cmVhdGVzIGEgc2ltcGxlIGNvbG9yIHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFt
IHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBv
c2l0aW9uLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBTaW1wbGVD
b2xvclByb2dyYW0gPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24pIHsKKyAgb3B0
X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICB2YXIgdnMg
PSBzZXR1cFNpbXBsZUNvbG9yVmVydGV4U2hhZGVyKGdsKTsKKyAgdmFyIGZzID0gc2V0dXBTaW1w
bGVDb2xvckZyYWdtZW50U2hhZGVyKGdsKTsKKyAgaWYgKCF2cyB8fCAhZnMpIHsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorICB2YXIgcHJvZ3JhbSA9IHNldHVwUHJvZ3JhbSgKKyAgICAgIGdsLAor
ICAgICAgW3ZzLCBmc10sCisgICAgICBbJ3ZQb3NpdGlvbiddLAorICAgICAgW29wdF9wb3NpdGlv
bkxvY2F0aW9uXSk7CisgIGlmICghcHJvZ3JhbSkgeworICAgIGdsLmRlbGV0ZVNoYWRlcihmcyk7
CisgICAgZ2wuZGVsZXRlU2hhZGVyKHZzKTsKKyAgfQorICBnbC51c2VQcm9ncmFtKHByb2dyYW0p
OworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBidWZmZXJzIGZvciBh
IHRleHR1cmVkIHVuaXQgcXVhZCBhbmQgYXR0YWNoZXMgdGhlbSB0byB2ZXJ0ZXggYXR0cmlicy4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24g
VGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0
X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMu
CisgKiBAcmV0dXJuIHshQXJyYXkuPFdlYkdMQnVmZmVyPn0gVGhlIGJ1ZmZlciBvYmplY3RzIHRo
YXQgd2VyZQorICogICAgICBjcmVhdGVkLgorICovCit2YXIgc2V0dXBVbml0UXVhZCA9IGZ1bmN0
aW9uKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAg
cmV0dXJuIHNldHVwVW5pdFF1YWRXaXRoVGV4Q29vcmRzKGdsLCBbIDAuMCwgMC4wIF0sIFsgMS4w
LCAxLjAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wb3NpdGlv
bkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbik7Cit9OworCisvKioKKyAqIENyZWF0ZXMg
YnVmZmVycyBmb3IgYSB0ZXh0dXJlZCB1bml0IHF1YWQgd2l0aCBzcGVjaWZpZWQgbG93ZXIgbGVm
dAorICogYW5kIHVwcGVyIHJpZ2h0IHRleHR1cmUgY29vcmRpbmF0ZXMsIGFuZCBhdHRhY2hlcyB0
aGVtIHRvIHZlcnRleAorICogYXR0cmlicy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFB
cnJheS48bnVtYmVyPn0gbG93ZXJMZWZ0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVz
IGZvciB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0g
dXBwZXJSaWdodFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVwcGVy
IHJpZ2h0IGNvcm5lci4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBU
aGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
dGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4K
KyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgYnVmZmVyIG9iamVjdHMgdGhh
dCB3ZXJlCisgKiAgICAgIGNyZWF0ZWQuCisgKi8KK3ZhciBzZXR1cFVuaXRRdWFkV2l0aFRleENv
b3JkcyA9IGZ1bmN0aW9uKAorICAgIGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRU
ZXhDb29yZHMsCisgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9u
KSB7CisgIHJldHVybiBzZXR1cFF1YWQoZ2wsIHsKKyAgICBwb3NpdGlvbkxvY2F0aW9uOiBvcHRf
cG9zaXRpb25Mb2NhdGlvbiB8fCAwLAorICAgIHRleGNvb3JkTG9jYXRpb246IG9wdF90ZXhjb29y
ZExvY2F0aW9uIHx8IDEsCisgICAgbG93ZXJMZWZ0VGV4Q29vcmRzOiBsb3dlckxlZnRUZXhDb29y
ZHMsCisgICAgdXBwZXJSaWdodFRleENvb3JkczogdXBwZXJSaWdodFRleENvb3JkcywKKyAgfSk7
Cit9OworCisvKioKKyAqIE1ha2VzIGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0geyFPYmplY3R9IG9wdGlvbnMuCisgKgorICogc2NhbGU6IHNj
YWxlIHRvIG11bHRpcGxlIHVuaXQgcXVhZCB2YWx1ZXMgYnkuIGRlZmF1bHQgMS4wLgorICogcG9z
aXRpb25Mb2NhdGlvbjogYXR0cmlidXRlIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIHRleGNv
b3JkTG9jYXRpb246IGF0dHJpYnV0ZSBsb2NhdGlvbiBmb3IgdGV4Y29vcmRzLgorICogICAgIElm
IHRoaXMgZG9lcyBub3QgZXhpc3Qgbm8gdGV4dHVyZSBjb29yZHMgYXJlIGNyZWF0ZWQuCisgKiBs
b3dlckxlZnRUZXhDb29yZHM6IGFuIGFycmF5IG9mIDIgdmFsdWVzIGZvciB0aGUKKyAqICAgICBs
b3dlckxlZnRUZXhDb29yZHMuCisgKiB1cHBlclJpZ2h0VGV4Q29vcmRzOiBhbiBhcnJheSBvZiAy
IHZhbHVlcyBmb3IgdGhlCisgKiAgICAgdXBwZXJSaWdodFRleENvb3Jkcy4KKyAqLwordmFyIHNl
dHVwUXVhZCA9IGZ1bmN0aW9uKGdsLCBvcHRpb25zKSB7CisgIHZhciBwb3NpdGlvbkxvY2F0aW9u
ID0gb3B0aW9ucy5wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHZhciBzY2FsZSA9IG9wdGlvbnMu
c2NhbGUgfHwgMTsKKworICB2YXIgb2JqZWN0cyA9IFtdOworCisgIHZhciB2ZXJ0ZXhPYmplY3Qg
PSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZl
cnRleE9iamVjdCk7CisgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQz
MkFycmF5KFsKKyAgICAgICAxLjAgKiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAg
KiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2Fs
ZSwKKyAgICAgICAxLjAgKiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAgKiBzY2Fs
ZSAsIC0xLjAgKiBzY2FsZSwKKyAgICAgICAxLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZSxdKSwg
Z2wuU1RBVElDX0RSQVcpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkxv
Y2F0aW9uKTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAyLCBn
bC5GTE9BVCwgZmFsc2UsIDAsIDApOworICBvYmplY3RzLnB1c2godmVydGV4T2JqZWN0KTsKKwor
ICBpZiAob3B0aW9ucy50ZXhjb29yZExvY2F0aW9uICE9PSB1bmRlZmluZWQpIHsKKyAgICB2YXIg
bGx4ID0gb3B0aW9ucy5sb3dlckxlZnRUZXhDb29yZHNbMF07CisgICAgdmFyIGxseSA9IG9wdGlv
bnMubG93ZXJMZWZ0VGV4Q29vcmRzWzFdOworICAgIHZhciB1cnggPSBvcHRpb25zLnVwcGVyUmln
aHRUZXhDb29yZHNbMF07CisgICAgdmFyIHVyeSA9IG9wdGlvbnMudXBwZXJSaWdodFRleENvb3Jk
c1sxXTsKKworICAgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBn
bC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICBnbC5idWZm
ZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIHVyeCwg
dXJ5LAorICAgICAgICBsbHgsIHVyeSwKKyAgICAgICAgbGx4LCBsbHksCisgICAgICAgIHVyeCwg
dXJ5LAorICAgICAgICBsbHgsIGxseSwKKyAgICAgICAgdXJ4LCBsbHldKSwgZ2wuU1RBVElDX0RS
QVcpOworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdGlvbnMudGV4Y29vcmRMb2Nh
dGlvbik7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRpb25zLnRleGNvb3JkTG9jYXRp
b24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgb2JqZWN0cy5wdXNoKHZlcnRleE9i
amVjdCk7CisgIH0KKworICByZXR1cm4gb2JqZWN0czsKK307CisKKy8qKgorICogQ3JlYXRlcyBh
IHByb2dyYW0gYW5kIGJ1ZmZlcnMgZm9yIHJlbmRlcmluZyBhIHRleHR1cmVkIHF1YWQuCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBh
dHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAgICAgcG9zaXRpb24uIERlZmF1bHQgPSAwLgorICog
QHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24g
Zm9yCisgKiAgICAgICAgdGV4dHVyZSBjb29yZHMuIERlZmF1bHQgPSAxLgorICogQHJldHVybiB7
IVdlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwVGV4dHVyZWRRdWFkID0gZnVuY3Rpb24oCisg
ICAgZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikgeworICB2
YXIgcHJvZ3JhbSA9IHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW0oCisgICAgICBnbCwgb3B0X3Bv
c2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgc2V0dXBVbml0UXVhZChn
bCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgcmV0dXJu
IHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBidWZmZXJzIGZv
ciByZW5kZXJpbmcgYSBjb2xvciBxdWFkLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlv
bi4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cENvbG9yUXVhZCA9
IGZ1bmN0aW9uKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbikgeworICBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHZhciBwcm9ncmFtID0gc2V0dXBT
aW1wbGVDb2xvclByb2dyYW0oZ2wpOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRpb25M
b2NhdGlvbik7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgcHJv
Z3JhbSBhbmQgYnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVyZWQgcXVhZCB3aXRoCisgKiBz
cGVjaWZpZWQgbG93ZXIgbGVmdCBhbmQgdXBwZXIgcmlnaHQgdGV4dHVyZSBjb29yZGluYXRlcy4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gbG93ZXJMZWZ0VGV4
Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgbG93ZXIgbGVmdCBjb3JuZXIu
CisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gdXBwZXJSaWdodFRleENvb3JkcyBUaGUgdGV4
dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVwcGVyIHJpZ2h0IGNvcm5lci4KKyAqIEBwYXJhbSB7
bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3Np
dGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmli
IGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19
CisgKi8KK3ZhciBzZXR1cFRleHR1cmVkUXVhZFdpdGhUZXhDb29yZHMgPSBmdW5jdGlvbigKKyAg
ICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRzLAorICAgIG9wdF9w
b3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikgeworICB2YXIgcHJvZ3JhbSA9
IHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW0oCisgICAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRp
b24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgc2V0dXBVbml0UXVhZFdpdGhUZXhDb29yZHMo
Z2wsIGxvd2VyTGVmdFRleENvb3JkcywgdXBwZXJSaWdodFRleENvb3JkcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0
aW9uKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSB1bml0IHF1
YWQgd2l0aCBvbmx5IHBvc2l0aW9ucyBvZiBhIGdpdmVuIHJlc29sdXRpb24uCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHtudW1iZXJ9IGdyaWRSZXMgVGhlIHJlc29sdXRpb24gb2YgdGhlIG1l
c2ggZ3JpZCwKKyAqICAgICBleHByZXNzZWQgaW4gdGhlIG51bWJlciBvZiBxdWFkcyBhY3Jvc3Mg
YW5kIGRvd24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0
dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKi8KK3ZhciBzZXR1cEluZGV4ZWRRdWFkID0g
ZnVuY3Rpb24gKAorICAgIGdsLCBncmlkUmVzLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X2Zs
aXBPZGRUcmlhbmdsZXMpIHsKKyAgcmV0dXJuIHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucyhn
bCwKKyAgICB7IGdyaWRSZXM6IGdyaWRSZXMsCisgICAgICBwb3NpdGlvbkxvY2F0aW9uOiBvcHRf
cG9zaXRpb25Mb2NhdGlvbiwKKyAgICAgIGZsaXBPZGRUcmlhbmdsZXM6IG9wdF9mbGlwT2RkVHJp
YW5nbGVzCisgICAgfSk7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBxdWFkIHdpdGggdmFyaW91
cyBvcHRpb25zLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IU9iamVjdCkgb3B0aW9ucyBU
aGUgb3B0aW9ucy4gU2VlIGJlbG93LgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59
IFRoZSBjcmVhdGVkIGJ1ZmZlcnMuCisgKiAgICAgW3Bvc2l0aW9ucywgPGNvbG9ycz4sIGluZGlj
ZXNdCisgKgorICogT3B0aW9uczoKKyAqICAgZ3JpZFJlczogbnVtYmVyIG9mIHF1YWRzIGFjcm9z
cyBhbmQgZG93biBncmlkLgorICogICBwb3NpdGlvbkxvY2F0aW9uOiBhdHRyaWIgbG9jYXRpb24g
Zm9yIHBvc2l0aW9uCisgKiAgIGZsaXBPZGRUcmlhbmdsZXM6IHJldmVyc2Ugb3JkZXIgb2YgdmVy
dGljZXMgb2YgZXZlcnkgb3RoZXIKKyAqICAgICAgIHRyaWFuZ2xlCisgKiAgIHBvc2l0aW9uT2Zm
c2V0OiBvZmZzZXQgYWRkZWQgdG8gZWFjaCB2ZXJ0ZXgKKyAqICAgcG9zaXRpb25NdWx0OiBtdWx0
aXBpZXIgZm9yIGVhY2ggdmVydGV4CisgKiAgIGNvbG9yTG9jYXRpb246IGF0dHJpYiBsb2NhdGlv
biBmb3IgdmVydGV4IGNvbG9ycy4gSWYKKyAqICAgICAgdW5kZWZpbmVkIG5vIHZlcnRleCBjb2xv
cnMgd2lsbCBiZSBjcmVhdGVkLgorICovCit2YXIgc2V0dXBJbmRleGVkUXVhZFdpdGhPcHRpb25z
ID0gZnVuY3Rpb24gKGdsLCBvcHRpb25zKSB7CisgIHZhciBwb3NpdGlvbkxvY2F0aW9uID0gb3B0
aW9ucy5wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHZhciBvYmplY3RzID0gW107CisKKyAgdmFy
IGdyaWRSZXMgPSBvcHRpb25zLmdyaWRSZXMgfHwgMTsKKyAgdmFyIHBvc2l0aW9uT2Zmc2V0ID0g
b3B0aW9ucy5wb3NpdGlvbk9mZnNldCB8fCAwOworICB2YXIgcG9zaXRpb25NdWx0ID0gb3B0aW9u
cy5wb3NpdGlvbk11bHQgfHwgMTsKKyAgdmFyIHZlcnRzQWNyb3NzID0gZ3JpZFJlcyArIDE7Cisg
IHZhciBudW1WZXJ0cyA9IHZlcnRzQWNyb3NzICogdmVydHNBY3Jvc3M7CisgIHZhciBwb3NpdGlv
bnMgPSBuZXcgRmxvYXQzMkFycmF5KG51bVZlcnRzICogMyk7CisgIHZhciBpbmRpY2VzID0gbmV3
IFVpbnQxNkFycmF5KDYgKiBncmlkUmVzICogZ3JpZFJlcyk7CisgIHZhciBwb2Zmc2V0ID0gMDsK
KworICBmb3IgKHZhciB5eSA9IDA7IHl5IDw9IGdyaWRSZXM7ICsreXkpIHsKKyAgICBmb3IgKHZh
ciB4eCA9IDA7IHh4IDw9IGdyaWRSZXM7ICsreHgpIHsKKyAgICAgIHBvc2l0aW9uc1twb2Zmc2V0
ICsgMF0gPSAoLTEgKyAyICogeHggLyBncmlkUmVzKSAqIHBvc2l0aW9uTXVsdCArIHBvc2l0aW9u
T2Zmc2V0OworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAxXSA9ICgtMSArIDIgKiB5eSAvIGdy
aWRSZXMpICogcG9zaXRpb25NdWx0ICsgcG9zaXRpb25PZmZzZXQ7CisgICAgICBwb3NpdGlvbnNb
cG9mZnNldCArIDJdID0gMDsKKworICAgICAgcG9mZnNldCArPSAzOworICAgIH0KKyAgfQorCisg
IHZhciBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9C
VUZGRVIsIGJ1Zik7CisgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBwb3NpdGlvbnMs
IGdsLlNUQVRJQ19EUkFXKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25M
b2NhdGlvbik7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMywg
Z2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgb2JqZWN0cy5wdXNoKGJ1Zik7CisKKyAgaWYgKG9w
dGlvbnMuY29sb3JMb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIGNvbG9ycyA9IG5l
dyBGbG9hdDMyQXJyYXkobnVtVmVydHMgKiA0KTsKKyAgICBmb3IgKHZhciB5eSA9IDA7IHl5IDw9
IGdyaWRSZXM7ICsreXkpIHsKKyAgICAgIGZvciAodmFyIHh4ID0gMDsgeHggPD0gZ3JpZFJlczsg
Kyt4eCkgeworICAgICAgICBpZiAob3B0aW9ucy5jb2xvciAhPT0gdW5kZWZpbmVkKSB7CisgICAg
ICAgICAgY29sb3JzW3BvZmZzZXQgKyAwXSA9IG9wdGlvbnMuY29sb3JbMF07CisgICAgICAgICAg
Y29sb3JzW3BvZmZzZXQgKyAxXSA9IG9wdGlvbnMuY29sb3JbMV07CisgICAgICAgICAgY29sb3Jz
W3BvZmZzZXQgKyAyXSA9IG9wdGlvbnMuY29sb3JbMl07CisgICAgICAgICAgY29sb3JzW3BvZmZz
ZXQgKyAzXSA9IG9wdGlvbnMuY29sb3JbM107CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
Y29sb3JzW3BvZmZzZXQgKyAwXSA9IHh4IC8gZ3JpZFJlczsKKyAgICAgICAgICBjb2xvcnNbcG9m
ZnNldCArIDFdID0geXkgLyBncmlkUmVzOworICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMl0g
PSAoeHggLyBncmlkUmVzKSAqICh5eSAvIGdyaWRSZXMpOworICAgICAgICAgIGNvbG9yc1twb2Zm
c2V0ICsgM10gPSAoeXkgJSAyKSAqIDAuNSArIDAuNTsKKyAgICAgICAgfQorICAgICAgICBwb2Zm
c2V0ICs9IDQ7CisgICAgICB9CisgICAgfQorCisgICAgdmFyIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZl
cigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICAgIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBn
bC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcHRpb25zLmNvbG9yTG9jYXRpb24pOworICAgIGds
LnZlcnRleEF0dHJpYlBvaW50ZXIob3B0aW9ucy5jb2xvckxvY2F0aW9uLCA0LCBnbC5GTE9BVCwg
ZmFsc2UsIDAsIDApOworICAgIG9iamVjdHMucHVzaChidWYpOworICB9CisKKyAgdmFyIHRiYXNl
ID0gMDsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGdyaWRSZXM7ICsreXkpIHsKKyAgICB2YXIg
aW5kZXggPSB5eSAqIHZlcnRzQWNyb3NzOworICAgIGZvciAodmFyIHh4ID0gMDsgeHggPCBncmlk
UmVzOyArK3h4KSB7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMF0gPSBpbmRleCArIDA7CisgICAg
ICBpbmRpY2VzW3RiYXNlICsgMV0gPSBpbmRleCArIDE7CisgICAgICBpbmRpY2VzW3RiYXNlICsg
Ml0gPSBpbmRleCArIHZlcnRzQWNyb3NzOworICAgICAgaW5kaWNlc1t0YmFzZSArIDNdID0gaW5k
ZXggKyB2ZXJ0c0Fjcm9zczsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4ICsgMTsK
KyAgICAgIGluZGljZXNbdGJhc2UgKyA1XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworCisg
ICAgICBpZiAob3B0aW9ucy5mbGlwT2RkVHJpYW5nbGVzKSB7CisgICAgICAgIGluZGljZXNbdGJh
c2UgKyA0XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworICAgICAgICBpbmRpY2VzW3RiYXNl
ICsgNV0gPSBpbmRleCArIDE7CisgICAgICB9CisKKyAgICAgIGluZGV4ICs9IDE7CisgICAgICB0
YmFzZSArPSA2OworICAgIH0KKyAgfQorCisgIHZhciBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsK
KyAgZ2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKKyAgZ2wuYnVm
ZmVyRGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcp
OworICBvYmplY3RzLnB1c2goYnVmKTsKKworICByZXR1cm4gb2JqZWN0czsKK307CisKKy8qKgor
ICogUmV0dXJucyB0aGUgY29uc3RydWN0b3IgZm9yIGEgdHlwZWQgYXJyYXkgdGhhdCBjb3JyZXNw
b25kcyB0byB0aGUgZ2l2ZW4KKyAqIFdlYkdMIHR5cGUuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorICogQHBhcmFtIHtudW1i
ZXJ9IHR5cGUgVGhlIFdlYkdMIHR5cGUgKGVnLCBnbC5VTlNJR05FRF9CWVRFKQorICogQHJldHVy
biB7IUNvbnN0cnVjdG9yfSBUaGUgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IgdGhhdAorICogICAg
ICBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gdHlwZS4KKyAqLwordmFyIGdsVHlwZVRvVHlwZWRB
cnJheVR5cGUgPSBmdW5jdGlvbihnbCwgdHlwZSkgeworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIGdsLkJZVEU6CisgICAgICByZXR1cm4gd2luZG93LkludDhBcnJheTsKKyAgICBjYXNlIGds
LlVOU0lHTkVEX0JZVEU6CisgICAgICByZXR1cm4gd2luZG93LlVpbnQ4QXJyYXk7CisgICAgY2Fz
ZSBnbC5TSE9SVDoKKyAgICAgIHJldHVybiB3aW5kb3cuSW50MTZBcnJheTsKKyAgICBjYXNlIGds
LlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hP
UlRfNV81XzVfMToKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDE2QXJyYXk7CisgICAgY2FzZSBn
bC5JTlQ6CisgICAgICByZXR1cm4gd2luZG93LkludDMyQXJyYXk7CisgICAgY2FzZSBnbC5VTlNJ
R05FRF9JTlQ6CisgICAgICByZXR1cm4gd2luZG93LlVpbnQzMkFycmF5OworICAgIGRlZmF1bHQ6
CisgICAgICB0aHJvdyAndW5rbm93biBnbCB0eXBlICcgKyBnbEVudW1Ub1N0cmluZyhnbCwgdHlw
ZSk7CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBj
b21wb25lbnQgZm9yIGEgZ2l2ZW4gV2ViR0wgdHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge0dMZW51
bX0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJu
IHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGNvbXBvbmVudC4KKyAqLwordmFyIGdl
dEJ5dGVzUGVyQ29tcG9uZW50ID0gZnVuY3Rpb24oZ2wsIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBnbC5CWVRFOgorICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAg
IHJldHVybiAxOworICAgIGNhc2UgZ2wuU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9S
VDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgZ2wuVU5TSUdO
RURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Cisg
ICAgICByZXR1cm4gMjsKKyAgICBjYXNlIGdsLklOVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lO
VDoKKyAgICAgIHJldHVybiA0OworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAndW5rbm93biBn
bCB0eXBlICcgKyBnbEVudW1Ub1N0cmluZyhnbCwgdHlwZSk7CisgIH0KK307CisKKy8qKgorICog
UmV0dXJucyB0aGUgbnVtYmVyIG9mIHR5cGVkIGFycmF5IGVsZW1lbnRzIHBlciBwaXhlbCBmb3Ig
YSBnaXZlbiBXZWJHTAorICogZm9ybWF0L3R5cGUgY29tYmluYXRpb24uIFRoZSBjb3JyZXNwb25k
aW5nIHR5cGVkIGFycmF5IHR5cGUgY2FuIGJlIGRldGVybWluZWQKKyAqIGJ5IGNhbGxpbmcgZ2xU
eXBlVG9UeXBlZEFycmF5VHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge0dMZW51bX0gZm9ybWF0IFRo
ZSBXZWJHTCBmb3JtYXQgKGVnLCBnbC5SR0JBKQorICogQHBhcmFtIHtHTGVudW19IHR5cGUgVGhl
IFdlYkdMIHR5cGUgKGVnLCBnbC5VTlNJR05FRF9CWVRFKQorICogQHJldHVybiB7bnVtYmVyfSBU
aGUgbnVtYmVyIG9mIHR5cGVkIGFycmF5IGVsZW1lbnRzIHBlciBwaXhlbC4KKyAqLwordmFyIGdl
dFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVsID0gZnVuY3Rpb24oZ2wsIGZvcm1hdCwgdHlwZSkg
eworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0JZ
VEU6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgJ25vdCBhIGdsIHR5
cGUgZm9yIGNvbG9yIGluZm9ybWF0aW9uICcgKyBnbEVudW1Ub1N0cmluZyhnbCwgdHlwZSk7Cisg
IH0KKworICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgZ2wuUkdCQToKKyAgICAgIHJldHVy
biA0OworICAgIGNhc2UgZ2wuUkdCOgorICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBnbC5MVU1J
TkFOQ0VfQUxQSEE6CisgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIGdsLkxVTUlOQU5DRToKKyAg
ICBjYXNlIGdsLkFMUEhBOgorICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgIHRo
cm93ICd1bmtub3duIGdsIGZvcm1hdCAnICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIGZvcm1hdCk7Cisg
IH0KK307CisKKy8qKgorICogRmlsbHMgdGhlIGdpdmVuIHRleHR1cmUgd2l0aCBhIHNvbGlkIGNv
bG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMVGV4dHVyZX0gdGV4IFRoZSB0
ZXh0dXJlIHRvIGZpbGwuCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIHdpZHRoIG9mIHRo
ZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgVGhlIGhlaWdo
dCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0g
Y29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgd2l0aC4KKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1l
bnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9sZXZl
bCBUaGUgbGV2ZWwgb2YgdGhlIHRleHR1cmUgdG8gZmlsbC4gRGVmYXVsdCA9IDAuCisgKiBAcGFy
YW0ge251bWJlcn0gb3B0X2Zvcm1hdCBUaGUgZm9ybWF0IGZvciB0aGUgdGV4dHVyZS4KKyAqLwor
dmFyIGZpbGxUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29sb3Is
IG9wdF9sZXZlbCwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUpIHsKKyAgb3B0X2xldmVsID0gb3B0X2xl
dmVsIHx8IDA7CisgIG9wdF9mb3JtYXQgPSBvcHRfZm9ybWF0IHx8IGdsLlJHQkE7CisgIG9wdF90
eXBlID0gb3B0X3R5cGUgfHwgZ2wuVU5TSUdORURfQllURTsKKyAgdmFyIHBhY2sgPSBnbC5nZXRQ
YXJhbWV0ZXIoZ2wuVU5QQUNLX0FMSUdOTUVOVCk7CisgIHZhciBudW1Db21wb25lbnRzID0gY29s
b3IubGVuZ3RoOworICB2YXIgYnl0ZXNQZXJDb21wb25lbnQgPSBnZXRCeXRlc1BlckNvbXBvbmVu
dChnbCwgb3B0X3R5cGUpOworICB2YXIgcm93U2l6ZSA9IG51bUNvbXBvbmVudHMgKiB3aWR0aCAq
IGJ5dGVzUGVyQ29tcG9uZW50OworICB2YXIgcGFkZGVkUm93U2l6ZSA9IE1hdGguZmxvb3IoKHJv
d1NpemUgKyBwYWNrIC0gMSkgLyBwYWNrKSAqIHBhY2s7CisgIHZhciBzaXplID0gcm93U2l6ZSAr
IChoZWlnaHQgLSAxKSAqIHBhZGRlZFJvd1NpemU7CisgIHNpemUgPSBNYXRoLmZsb29yKChzaXpl
ICsgYnl0ZXNQZXJDb21wb25lbnQgLSAxKSAvIGJ5dGVzUGVyQ29tcG9uZW50KSAqIGJ5dGVzUGVy
Q29tcG9uZW50OworICB2YXIgYnVmID0gbmV3IChnbFR5cGVUb1R5cGVkQXJyYXlUeXBlKGdsLCBv
cHRfdHlwZSkpKHNpemUpOworICBmb3IgKHZhciB5eSA9IDA7IHl5IDwgaGVpZ2h0OyArK3l5KSB7
CisgICAgdmFyIG9mZiA9IHl5ICogcGFkZGVkUm93U2l6ZTsKKyAgICBmb3IgKHZhciB4eCA9IDA7
IHh4IDwgd2lkdGg7ICsreHgpIHsKKyAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1Db21w
b25lbnRzOyArK2pqKSB7CisgICAgICAgIGJ1ZltvZmYrK10gPSBjb2xvcltqal07CisgICAgICB9
CisgICAgfQorICB9CisgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CisgIGds
LnRleEltYWdlMkQoCisgICAgICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIG9wdF9mb3JtYXQs
IHdpZHRoLCBoZWlnaHQsIDAsCisgICAgICBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKK307
CisKKy8qKgorICogQ3JlYXRlcyBhIHRleHR1cmUgYW5kIGZpbGxzIGl0IHdpdGggYSBzb2xpZCBj
b2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggVGhlIHdpZHRo
IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgVGhl
IGhlaWdodCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgd2l0aC4gQSA0IGVsZW1lbnQgYXJyYXkKKyAq
ICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICog
QHJldHVybiB7IVdlYkdMVGV4dHVyZX0KKyAqLwordmFyIGNyZWF0ZUNvbG9yZWRUZXh0dXJlID0g
ZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7CisgIHZhciB0ZXggPSBnbC5jcmVh
dGVUZXh0dXJlKCk7CisgIGZpbGxUZXh0dXJlKGdsLCB0ZXgsIHdpZHRoLCBoZWlnaHQsIGNvbG9y
KTsKKyAgcmV0dXJuIHRleDsKK307CisKK3ZhciB1Ynl0ZVRvRmxvYXQgPSBmdW5jdGlvbihjKSB7
CisgIHJldHVybiBjIC8gMjU1OworfTsKKwordmFyIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IgPSBm
dW5jdGlvbihjb2xvcikgeworICB2YXIgZmxvYXRDb2xvciA9IFtdOworICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgY29sb3IubGVuZ3RoOyArK2lpKSB7CisgICAgZmxvYXRDb2xvcltpaV0gPSB1Ynl0
ZVRvRmxvYXQoY29sb3JbaWldKTsKKyAgfQorICByZXR1cm4gZmxvYXRDb2xvcjsKK307CisKKy8q
KgorICogU2V0cyB0aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0
byBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPiBjb2xv
ciA0IGVsZW1lbnQgYXJyYXkgb2YgMC0xIGNvbG9yCisgKiAgICAgIGNvbXBvbmVudHMuCisgKi8K
K3ZhciBzZXRGbG9hdERyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICB2YXIgcHJv
Z3JhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOworICB2YXIgY29sb3JM
b2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidV9jb2xvciIpOworICBn
bC51bmlmb3JtNGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKK307CisKKy8qKgorICogU2V0cyB0
aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBjb2xvci4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPiBjb2xvciA0IGVsZW1lbnQg
YXJyYXkgb2YgMC0yNTUgY29sb3IKKyAqICAgICAgY29tcG9uZW50cy4KKyAqLwordmFyIHNldFVC
eXRlRHJhd0NvbG9yID0gZnVuY3Rpb24oZ2wsIGNvbG9yKSB7CisgIHNldEZsb2F0RHJhd0NvbG9y
KGdsLCB1Ynl0ZUNvbG9yVG9GbG9hdENvbG9yKGNvbG9yKSk7Cit9OworCisvKioKKyAqIERyYXdz
IGEgcHJldmlvdXNseSBzZXR1cCBxdWFkIGluIHRoZSBnaXZlbiBjb2xvci4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGRyYXcg
d2l0aC4gQSA0CisgKiAgICAgICAgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMg
aW4gdGhlIHJhbmdlIDAgdG8KKyAqICAgICAgICAxLgorICovCit2YXIgZHJhd0Zsb2F0Q29sb3JR
dWFkID0gZnVuY3Rpb24oZ2wsIGNvbG9yKSB7CisgIHZhciBwcm9ncmFtID0gZ2wuZ2V0UGFyYW1l
dGVyKGdsLkNVUlJFTlRfUFJPR1JBTSk7CisgIHZhciBjb2xvckxvY2F0aW9uID0gZ2wuZ2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sICJ1X2NvbG9yIik7CisgIGdsLnVuaWZvcm00ZnYoY29sb3JM
b2NhdGlvbiwgY29sb3IpOworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Cit9
OworCisKKy8qKgorICogRHJhd3MgYSBwcmV2aW91c2x5IHNldHVwIHF1YWQgaW4gdGhlIGdpdmVu
IGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xv
ciBUaGUgY29sb3IgdG8gZHJhdyB3aXRoLiBBIDQKKyAqICAgICAgICBlbGVtZW50IGFycmF5IHdo
ZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0bworICogICAgICAgIDI1NS4KKyAq
LwordmFyIGRyYXdVQnl0ZUNvbG9yUXVhZCA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICBkcmF3
RmxvYXRDb2xvclF1YWQoZ2wsIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IoY29sb3IpKTsKK307CisK
Ky8qKgorICogRHJhd3MgYSBwcmV2aW91c2x5IHNldHVwVW5pdFF1YWQuCisgKiBAcGFyYW0geyFX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgorICovCit2YXIgZHJhd1VuaXRRdWFkID0gZnVuY3Rpb24oZ2wpIHsKKyAgZ2wuZHJhd0FycmF5
cyhnbC5UUklBTkdMRVMsIDAsIDYpOworfTsKKworLyoqCisgKiBDbGVhcnMgdGhlbiBEcmF3cyBh
IHByZXZpb3VzbHkgc2V0dXBVbml0UXVhZC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFB
cnJheS48bnVtYmVyPn0gb3B0X2NvbG9yIFRoZSBjb2xvciB0byBmaWxsIGNsZWFyIHdpdGggYmVm
b3JlCisgKiAgICAgICAgZHJhd2luZy4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVt
ZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCisgKiAgICAgICAgMjU1LiBEZWZhdWx0IFsyNTUsIDI1
NSwgMjU1LCAyNTVdCisgKi8KK3ZhciBjbGVhckFuZERyYXdVbml0UXVhZCA9IGZ1bmN0aW9uKGds
LCBvcHRfY29sb3IpIHsKKyAgb3B0X2NvbG9yID0gb3B0X2NvbG9yIHx8IFsyNTUsIDI1NSwgMjU1
LCAyNTVdOworICBnbC5jbGVhckNvbG9yKAorICAgICAgb3B0X2NvbG9yWzBdIC8gMjU1LAorICAg
ICAgb3B0X2NvbG9yWzFdIC8gMjU1LAorICAgICAgb3B0X2NvbG9yWzJdIC8gMjU1LAorICAgICAg
b3B0X2NvbG9yWzNdIC8gMjU1KTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGds
LkRFUFRIX0JVRkZFUl9CSVQpOworICBkcmF3VW5pdFF1YWQoZ2wpOworfTsKKworLyoqCisgKiBE
cmF3cyBhIHF1YWQgcHJldmlvdXNseSBzZXR1cCB3aXRoIHNldHVwSW5kZXhlZFF1YWQuCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IGdyaWRSZXMgUmVzb2x1dGlvbiBvZiBncmlk
LgorICovCit2YXIgZHJhd0luZGV4ZWRRdWFkID0gZnVuY3Rpb24oZ2wsIGdyaWRSZXMpIHsKKyAg
Z2wuZHJhd0VsZW1lbnRzKGdsLlRSSUFOR0xFUywgZ3JpZFJlcyAqIGdyaWRSZXMgKiA2LCBnbC5V
TlNJR05FRF9TSE9SVCwgMCk7Cit9OworCisvKioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1
cEluZGV4ZWRRdWFkCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IGdyaWRSZXMg
UmVzb2x1dGlvbiBvZiBncmlkLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9jb2xv
ciBUaGUgY29sb3IgdG8gZmlsbCBjbGVhciB3aXRoIGJlZm9yZQorICogICAgICAgIGRyYXdpbmcu
IEEgNCBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0
bworICogICAgICAgIDI1NS4gRGVmYXVsdCBbMjU1LCAyNTUsIDI1NSwgMjU1XQorICovCit2YXIg
Y2xlYXJBbmREcmF3SW5kZXhlZFF1YWQgPSBmdW5jdGlvbihnbCwgZ3JpZFJlcywgb3B0X2NvbG9y
KSB7CisgIG9wdF9jb2xvciA9IG9wdF9jb2xvciB8fCBbMjU1LCAyNTUsIDI1NSwgMjU1XTsKKyAg
Z2wuY2xlYXJDb2xvcigKKyAgICAgIG9wdF9jb2xvclswXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xv
clsxXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsyXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsz
XSAvIDI1NSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZG
RVJfQklUKTsKKyAgZHJhd0luZGV4ZWRRdWFkKGdsLCBncmlkUmVzKTsKK307CisKKy8qKgorICog
Q2xpcHMgYSByYW5nZSB0byBtaW4sIG1heAorICogKEVnLiBjbGlwVG9SYW5nZSgtNSw3LDAsMjAp
IHdvdWxkIHJldHVybiB7dmFsdWU6MCxleHRlbnQ6Mn0KKyAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1
ZSBzdGFydCBvZiByYW5nZQorICogQHBhcmFtIHtudW1iZXJ9IGV4dGVudCBleHRlbnQgb2YgcmFu
Z2UKKyAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gbWluLgorICogQHBhcmFtIHtudW1iZXJ9IG1heCBt
YXguCisgKiBAcmV0dXJuIHshe3ZhbHVlOm51bWJlcixleHRlbnQ6bnVtYmVyfSBUaGUgY2xpcHBl
ZCB2YWx1ZS4KKyAqLwordmFyIGNsaXBUb1JhbmdlID0gZnVuY3Rpb24odmFsdWUsIGV4dGVudCwg
bWluLCBtYXgpIHsKKyAgaWYgKHZhbHVlIDwgbWluKSB7CisgICAgZXh0ZW50IC09IG1pbiAtIHZh
bHVlOworICAgIHZhbHVlID0gbWluOworICB9CisgIHZhciBlbmQgPSB2YWx1ZSArIGV4dGVudDsK
KyAgaWYgKGVuZCA+IG1heCkgeworICAgIGV4dGVudCAtPSBlbmQgLSBtYXg7CisgIH0KKyAgaWYg
KGV4dGVudCA8IDApIHsKKyAgICB2YWx1ZSA9IG1heDsKKyAgICBleHRlbnQgPSAwOworICB9Cisg
IHJldHVybiB7dmFsdWU6dmFsdWUsIGV4dGVudDogZXh0ZW50fTsKK307CisKKy8qKgorICogRGV0
ZXJtaW5lcyBpZiB0aGUgcGFzc2VkIGNvbnRleHQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQKKyAqIG9yIGxhdGVyIHZhcmlhbnQgKGxpa2UgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCkKKyAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dH0gY3R4IFRoZSBjb250
ZXh0IHRvIGNoZWNrLgorICovCit2YXIgaXNXZWJHTENvbnRleHQgPSBmdW5jdGlvbihjdHgpIHsK
KyAgaWYgKGN0eCBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dCkKKyAgICByZXR1cm4g
dHJ1ZTsKKworICBpZiAoJ1dlYkdMMlJlbmRlcmluZ0NvbnRleHQnIGluIHdpbmRvdyAmJiBjdHgg
aW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KQorICAgIHJldHVybiB0cnVlOworCisg
IHJldHVybiBmYWxzZTsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYSBwb3J0aW9uIG9mIGEg
Y2FudmFzIG9yIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgZnJhbWVidWZmZXIgaXMgMSBjb2xvci4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkR9IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3IgMkQgY29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdpb24gdG8g
Y2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lvbiB0byBj
aGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNvbnRleHQgb3Ig
dG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0LgorICogQHBh
cmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7
bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHshQXJy
YXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBlY3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkg
d2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1Lgor
ICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVy
cm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqIEBwYXJh
bSB7IWZ1bmN0aW9uKCl9IHNhbWVGbiBGdW5jdGlvbiB0byBjYWxsIGlmIGFsbCBwaXhlbHMKKyAq
ICAgICAgICBhcmUgdGhlIHNhbWUgYXMgY29sb3IuCisgKiBAcGFyYW0geyFmdW5jdGlvbigpfSBk
aWZmZXJlbnRGbiBGdW5jdGlvbiB0byBjYWxsIGlmIGEgcGl4ZWwKKyAqICAgICAgICBpcyBkaWZm
ZXJlbnQgdGhhbiBjb2xvcgorICogQHBhcmFtIHshZnVuY3Rpb24oKX0gbG9nRm4gRnVuY3Rpb24g
dG8gY2FsbCBmb3IgbG9nZ2luZy4KKyAqIEBwYXJhbSB7VWludDhBcnJheX0gb3B0X3JlYWRCYWNr
QnVmIHR5cGljYWxseSBwYXNzZWQgdG8gcmV1c2UgZXhpc3RpbmcKKyAqICAgICAgICBidWZmZXIg
d2hpbGUgcmVhZGluZyBiYWNrIHBpeGVscy4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVjdENvbG9y
ID0gZnVuY3Rpb24oZ2wsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5n
ZSwgc2FtZUZuLCBkaWZmZXJlbnRGbiwgbG9nRm4sIG9wdF9yZWFkQmFja0J1ZikgeworICBpZiAo
aXNXZWJHTENvbnRleHQoZ2wpICYmICFnbC5nZXRQYXJhbWV0ZXIoZ2wuRlJBTUVCVUZGRVJfQklO
RElORykpIHsKKyAgICAvLyBXZSdyZSByZWFkaW5nIHRoZSBiYWNrYnVmZmVyIHNvIGNsaXAuCisg
ICAgdmFyIHhyID0gY2xpcFRvUmFuZ2UoeCwgd2lkdGgsIDAsIGdsLmNhbnZhcy53aWR0aCk7Cisg
ICAgdmFyIHlyID0gY2xpcFRvUmFuZ2UoeSwgaGVpZ2h0LCAwLCBnbC5jYW52YXMuaGVpZ2h0KTsK
KyAgICBpZiAoIXhyLmV4dGVudCB8fCAheXIuZXh0ZW50KSB7CisgICAgICBsb2dGbigiY2hlY2tp
bmcgcmVjdDogZWZmZWN0aXZlIHdpZHRoIG9yIGhlaWdodCBpcyB6ZXJvIik7CisgICAgICBzYW1l
Rm4oKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgeCA9IHhyLnZhbHVlOworICAgIHkgPSB5
ci52YWx1ZTsKKyAgICB3aWR0aCA9IHhyLmV4dGVudDsKKyAgICBoZWlnaHQgPSB5ci5leHRlbnQ7
CisgIH0KKyAgdmFyIGVycm9yUmFuZ2UgPSBvcHRfZXJyb3JSYW5nZSB8fCAwOworICBpZiAoIWVy
cm9yUmFuZ2UubGVuZ3RoKSB7CisgICAgZXJyb3JSYW5nZSA9IFtlcnJvclJhbmdlLCBlcnJvclJh
bmdlLCBlcnJvclJhbmdlLCBlcnJvclJhbmdlXQorICB9CisgIHZhciBidWY7CisgIGlmIChpc1dl
YkdMQ29udGV4dChnbCkpIHsKKyAgICBidWYgPSBvcHRfcmVhZEJhY2tCdWYgPyBvcHRfcmVhZEJh
Y2tCdWYgOiBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCAqIDQpOworICAgIGdsLnJlYWRQ
aXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVm
KTsKKyAgfSBlbHNlIHsKKyAgICBidWYgPSBnbC5nZXRJbWFnZURhdGEoeCwgeSwgd2lkdGgsIGhl
aWdodCkuZGF0YTsKKyAgfQorICBmb3IgKHZhciBpID0gMDsgaSA8IHdpZHRoICogaGVpZ2h0OyAr
K2kpIHsKKyAgICB2YXIgb2Zmc2V0ID0gaSAqIDQ7CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBj
b2xvci5sZW5ndGg7ICsraikgeworICAgICAgaWYgKE1hdGguYWJzKGJ1ZltvZmZzZXQgKyBqXSAt
IGNvbG9yW2pdKSA+IGVycm9yUmFuZ2Vbal0pIHsKKyAgICAgICAgdmFyIHdhcyA9IGJ1ZltvZmZz
ZXQgKyAwXS50b1N0cmluZygpOworICAgICAgICBmb3IgKGogPSAxOyBqIDwgY29sb3IubGVuZ3Ro
OyArK2opIHsKKyAgICAgICAgICB3YXMgKz0gIiwiICsgYnVmW29mZnNldCArIGpdOworICAgICAg
ICB9CisgICAgICAgIGRpZmZlcmVudEZuKCdhdCAoJyArICh4ICsgKGkgJSB3aWR0aCkpICsgJywg
JyArICh5ICsgTWF0aC5mbG9vcihpIC8gd2lkdGgpKSArCisgICAgICAgICAgICAgICAgICAgICcp
IGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAnICsgd2FzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgfQorICAgIH0KKyAgfQorICBzYW1lRm4oKTsKK307CisKKy8qKgorICogQ2hlY2tzIHRo
YXQgYSBwb3J0aW9uIG9mIGEgY2FudmFzIG9yIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgZnJhbWVi
dWZmZXIgaXMgMSBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkR9IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgb3IgMkQgY29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNv
cm5lciBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29y
bmVyIG9mIHJlZ2lvbiB0byBjaGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAg
ICBhIEdMIGNvbnRleHQgb3IgdG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAy
RCBjb250ZXh0LgorICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBj
aGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNr
LgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBlY3RlZC4g
QSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMgaW4gdGhl
IHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgTWVzc2FnZSB0byBh
c3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZworICogICAgICAgICgic2hvdWxkIGJlIHJlZCIpLgor
ICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVy
cm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqLwordmFy
IGNoZWNrQ2FudmFzUmVjdCA9IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xv
ciwgb3B0X21zZywgb3B0X2Vycm9yUmFuZ2UpIHsKKyAgY2hlY2tDYW52YXNSZWN0Q29sb3IoCisg
ICAgICBnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9lcnJvclJhbmdlLAorICAg
ICAgZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtc2cgPSBvcHRfbXNnOworICAgICAgICBpZiAo
bXNnID09PSB1bmRlZmluZWQpCisgICAgICAgICAgbXNnID0gInNob3VsZCBiZSAiICsgY29sb3Iu
dG9TdHJpbmcoKTsKKyAgICAgICAgdGVzdFBhc3NlZChtc2cpOworICAgICAgfSwKKyAgICAgIHRl
c3RGYWlsZWQsCisgICAgICBkZWJ1Zyk7Cit9OworCisvKioKKyAqIENoZWNrcyB0aGF0IGFuIGVu
dGlyZSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNv
bG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBj
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29s
b3IgZXhwZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAgZWFjaCBlbGVt
ZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgTWVz
c2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBiZSByZWQiKS4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxlIGVycm9yIGlu
CisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqLwordmFyIGNoZWNr
Q2FudmFzID0gZnVuY3Rpb24oZ2wsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpIHsKKyAgY2hlY2tD
YW52YXNSZWN0KGdsLCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5oZWlnaHQsIGNv
bG9yLCBtc2csIGVycm9yUmFuZ2UpOworfTsKKworLyoqCisgKiBDaGVja3MgYSByZWN0YW5ndWxh
ciBhcmVhIGJvdGggaW5zaWRlIHRoZSBhcmVhIGFuZCBvdXRzaWRlCisgKiB0aGUgYXJlYS4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9
IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3IgMkQgY29udGV4dCB0
byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdpb24gdG8gY2hl
Y2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVj
ayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNvbnRleHQgb3IgdG9w
IGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0LgorICogQHBhcmFt
IHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHshQXJyYXku
PG51bWJlcj59IGlubmVyQ29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkIGluc2lkZQorICogICAgIHRo
ZSBhcmVhLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlCisg
KiAgICAgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3V0ZXJD
b2xvciBUaGUgY29sb3IgZXhwZWN0ZWQKKyAqICAgICBvdXRzaWRlLiBBIDQgZWxlbWVudCBhcnJh
eSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlCisgKiAgICAgcmFuZ2UgMCB0byAyNTUuCisg
KiBAcGFyYW0geyFudW1iZXJ9IG9wdF9lZGdlU2l6ZTogVGhlIG51bWJlciBvZiBwaXhlbHMgdG8g
c2tpcAorICogICAgIGFyb3VuZCB0aGUgZWRnZXMgb2YgdGhlIGFyZWEuIERlZmF1dCAwLgorICog
QHBhcmFtIHshe3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19IG9wdF9vdXRlckRpbWVuc2lv
bnMKKyAqICAgICBUaGUgb3V0ZXIgZGltZW5zaW9ucy4gRGVmYXVsdCB0aGUgc2l6ZSBvZiBnbC5j
YW52YXMuCisgKi8KK3ZhciBjaGVja0FyZWFJbkFuZE91dCA9IGZ1bmN0aW9uKGdsLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBpbm5lckNvbG9yLCBvdXRlckNvbG9yLCBvcHRfZWRnZVNpemUsIG9wdF9v
dXRlckRpbWVuc2lvbnMpIHsKKyAgdmFyIG91dGVyRGltZW5zaW9ucyA9IG9wdF9vdXRlckRpbWVu
c2lvbnMgfHwgeyB3aWR0aDogZ2wuY2FudmFzLndpZHRoLCBoZWlnaHQ6IGdsLmNhbnZhcy5oZWln
aHQgfTsKKyAgdmFyIGVkZ2VTaXplID0gb3B0X2VkZ2VTaXplIHx8IDA7CisgIGNoZWNrQ2FudmFz
UmVjdChnbCwgeCArIGVkZ2VTaXplLCB5ICsgZWRnZVNpemUsIHdpZHRoIC0gZWRnZVNpemUgKiAy
LCBoZWlnaHQgLSBlZGdlU2l6ZSAqIDIsIGlubmVyQ29sb3IpOworICBjaGVja0NhbnZhc1JlY3Qo
Z2wsIDAsIDAsIHggLSBlZGdlU2l6ZSwgb3V0ZXJEaW1lbnNpb25zLmhlaWdodCwgb3V0ZXJDb2xv
cik7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwgeCArIHdpZHRoICsgZWRnZVNpemUsIDAsIG91dGVy
RGltZW5zaW9ucy53aWR0aCAtIHggLSB3aWR0aCAtIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lvbnMu
aGVpZ2h0LCBvdXRlckNvbG9yKTsKKyAgY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCBvdXRlckRp
bWVuc2lvbnMud2lkdGgsIHkgLSBlZGdlU2l6ZSwgb3V0ZXJDb2xvcik7CisgIGNoZWNrQ2FudmFz
UmVjdChnbCwgMCwgeSArIGhlaWdodCArIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lvbnMud2lkdGgs
IG91dGVyRGltZW5zaW9ucy5oZWlnaHQgLSB5IC0gaGVpZ2h0IC0gZWRnZVNpemUsIG91dGVyQ29s
b3IpOworfTsKKworLyoqCisgKiBMb2FkcyBhIHRleHR1cmUsIGNhbGxzIGNhbGxiYWNrIHdoZW4g
ZmluaXNoZWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgb2Yg
aW1hZ2UgdG8gbG9hZAorICogQHBhcmFtIHtmdW5jdGlvbighSW1hZ2UpOiB2b2lkfSBjYWxsYmFj
ayBGdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGFmdGVyCisgKiAgICAgICAgaW1hZ2UgaGFzIGxv
YWRlZAorICogQHJldHVybiB7IVdlYkdMVGV4dHVyZX0gVGhlIGNyZWF0ZWQgdGV4dHVyZS4KKyAq
LwordmFyIGxvYWRUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHVybCwgY2FsbGJhY2spIHsKKyAgICB2
YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQs
IGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVy
aShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAg
IHZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOworICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAg
ICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgdHJ1ZSk7CisgICAgICAg
IGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5T
SUdORURfQllURSwgaW1hZ2UpOworICAgICAgICBjYWxsYmFjayhpbWFnZSk7CisgICAgfTsKKyAg
ICBpbWFnZS5zcmMgPSB1cmw7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9OworCisvKioKKyAqIENo
ZWNrcyB3aGV0aGVyIHRoZSBib3VuZCB0ZXh0dXJlIGhhcyBleHBlY3RlZCBkaW1lbnNpb25zLiBP
bmUgY29ybmVyIHBpeGVsCisgKiBvZiB0aGUgdGV4dHVyZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSBz
aWRlIGVmZmVjdC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFXZWJHTFRleHR1cmV9IHRl
eHR1cmUgVGhlIHRleHR1cmUgdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggRXhw
ZWN0ZWQgd2lkdGguCisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IEV4cGVjdGVkIGhlaWdodC4K
KyAqIEBwYXJhbSB7R0xlbnVtfSBvcHRfZm9ybWF0IFRoZSB0ZXh0dXJlJ3MgZm9ybWF0LiBEZWZh
dWx0cyB0byBSR0JBLgorICogQHBhcmFtIHtHTGVudW19IG9wdF90eXBlIFRoZSB0ZXh0dXJlJ3Mg
dHlwZS4gRGVmYXVsdHMgdG8gVU5TSUdORURfQllURS4KKyAqLwordmFyIGNoZWNrVGV4dHVyZVNp
emUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUpIHsK
KyAgb3B0X2Zvcm1hdCA9IG9wdF9mb3JtYXQgfHwgZ2wuUkdCQTsKKyAgb3B0X3R5cGUgPSBvcHRf
dHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFOworCisgIHZhciBudW1FbGVtZW50cyA9IGdldFR5cGVk
QXJyYXlFbGVtZW50c1BlclBpeGVsKGdsLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSk7CisgIHZhciBi
dWYgPSBuZXcgKGdsVHlwZVRvVHlwZWRBcnJheVR5cGUoZ2wsIG9wdF90eXBlKSkobnVtRWxlbWVu
dHMpOworCisgIHZhciBlcnJvcnMgPSAwOworICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVf
MkQsIDAsIHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSwgMSwgMSwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUs
IGJ1Zik7CisgIGlmIChnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SKSB7CisgICAgdGVzdEZh
aWxlZCgiVGV4dHVyZSB3YXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzaXplICIgKyB3aWR0
aCArICJ4IiArIGhlaWdodCk7CisgICAgKytlcnJvcnM7CisgIH0KKyAgZ2wudGV4U3ViSW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCB3aWR0aCAtIDEsIGhlaWdodCwgMSwgMSwgb3B0X2Zvcm1hdCwg
b3B0X3R5cGUsIGJ1Zik7CisgIGlmIChnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SKSB7Cisg
ICAgdGVzdEZhaWxlZCgiVGV4dHVyZSB3YXMgdGFsbGVyIHRoYW4gIiArIGhlaWdodCk7CisgICAg
KytlcnJvcnM7CisgIH0KKyAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB3aWR0
aCwgaGVpZ2h0IC0gMSwgMSwgMSwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUsIGJ1Zik7CisgIGlmIChn
bC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SKSB7CisgICAgdGVzdEZhaWxlZCgiVGV4dHVyZSB3
YXMgd2lkZXIgdGhhbiAiICsgd2lkdGgpOworICAgICsrZXJyb3JzOworICB9CisgIGlmIChlcnJv
cnMgPT0gMCkgeworICAgIHRlc3RQYXNzZWQoIlRleHR1cmUgaGFkIHRoZSBleHBlY3RlZCBzaXpl
ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7CisgIH0KK307CisKKy8qKgorICogTWFrZXMgYSBz
aGFsbG93IGNvcHkgb2YgYW4gb2JqZWN0LgorICogQHBhcmFtIHshT2JqZWN0KSBzcmMgT2JqZWN0
IHRvIGNvcHkKKyAqIEByZXR1cm4geyFPYmplY3R9IFRoZSBjb3B5IG9mIHNyYy4KKyAqLwordmFy
IHNoYWxsb3dDb3B5T2JqZWN0ID0gZnVuY3Rpb24oc3JjKSB7CisgIHZhciBkc3QgPSB7fTsKKyAg
Zm9yICh2YXIgYXR0ciBpbiBzcmMpIHsKKyAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGF0dHIp
KSB7CisgICAgICBkc3RbYXR0cl0gPSBzcmNbYXR0cl07CisgICAgfQorICB9CisgIHJldHVybiBk
c3Q7Cit9OworCisvKioKKyAqIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgZXhpc3RzIG9uIGFuIG9i
amVjdCBjYXNlIGluc2Vuc2l0aXZlLgorICogQHBhcmFtIHshT2JqZWN0KSBvYmogT2JqZWN0IHRv
IGNoZWNrCisgKiBAcGFyYW0ge3N0cmluZ30gYXR0ciBOYW1lIG9mIGF0dHJpYnV0ZSB0byBsb29r
IGZvci4KKyAqIEByZXR1cm4ge3N0cmluZz99IFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgaWYg
aXQgZXhpc3RzLAorICogICAgICAgICB1bmRlZmluZWQgaWYgbm90LgorICovCit2YXIgaGFzQXR0
cmlidXRlQ2FzZUluc2Vuc2l0aXZlID0gZnVuY3Rpb24ob2JqLCBhdHRyKSB7CisgIHZhciBsb3dl
ciA9IGF0dHIudG9Mb3dlckNhc2UoKTsKKyAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAgIGlm
IChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PSBsb3dlcikg
eworICAgICAgcmV0dXJuIGtleTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyBh
IG1hcCBvZiBVUkwgcXVlcnlzdHJpbmcgb3B0aW9ucworICogQHJldHVybiB7T2JqZWN0P30gT2Jq
ZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIFVSTCBxdWVyeXN0cmluZworICov
Cit2YXIgZ2V0VXJsT3B0aW9ucyA9IGZ1bmN0aW9uKCkgeworICB2YXIgb3B0aW9ucyA9IHt9Owor
ICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworICB2YXIgcSA9IHMuaW5kZXhPZigiPyIp
OworICB2YXIgZSA9IHMuaW5kZXhPZigiIyIpOworICBpZiAoZSA8IDApIHsKKyAgICBlID0gcy5s
ZW5ndGg7CisgIH0KKyAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICB2YXIg
cGFpcnMgPSBxdWVyeS5zcGxpdCgiJiIpOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgcGFpcnMu
bGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0KCI9Iik7
CisgICAgdmFyIGtleSA9IGtleVZhbHVlWzBdOworICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNv
bXBvbmVudChrZXlWYWx1ZVsxXSk7CisgICAgb3B0aW9uc1trZXldID0gdmFsdWU7CisgIH0KKwor
ICByZXR1cm4gb3B0aW9uczsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHdlYmdsIGNvbnRleHQu
CisgKiBAcGFyYW0geyFDYW52YXN8c3RyaW5nfSBvcHRfY2FudmFzIFRoZSBjYW52YXMgdGFnIHRv
IGdldAorICogICAgIGNvbnRleHQgZnJvbS4gSWYgb25lIGlzIG5vdCBwYXNzZWQgaW4gb25lIHdp
bGwgYmUKKyAqICAgICBjcmVhdGVkLiBJZiBpdCdzIGEgc3RyaW5nIGl0J3MgYXNzdW1lZCB0byBi
ZSB0aGUgaWQgb2YgYQorICogICAgIGNhbnZhcy4KKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0
cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92ZXJz
aW9uIFZlcnNpb24gb2YgV2ViR0wgY29udGV4dCB0byBjcmVhdGUKKyAqIEByZXR1cm4geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IFRoZSBjcmVhdGVkIGNvbnRleHQuCisgKi8KK3ZhciBjcmVhdGUz
RENvbnRleHQgPSBmdW5jdGlvbihvcHRfY2FudmFzLCBvcHRfYXR0cmlidXRlcywgb3B0X3ZlcnNp
b24pIHsKKyAgaWYgKHdpbmRvdy5pbml0VGVzdGluZ0hhcm5lc3MpIHsKKyAgICB3aW5kb3cuaW5p
dFRlc3RpbmdIYXJuZXNzKCk7CisgIH0KKyAgdmFyIGF0dHJpYnV0ZXMgPSBzaGFsbG93Q29weU9i
amVjdChvcHRfYXR0cmlidXRlcyB8fCB7fSk7CisgIGlmICghaGFzQXR0cmlidXRlQ2FzZUluc2Vu
c2l0aXZlKGF0dHJpYnV0ZXMsICJhbnRpYWxpYXMiKSkgeworICAgIGF0dHJpYnV0ZXMuYW50aWFs
aWFzID0gZmFsc2U7CisgIH0KKyAgaWYgKCFvcHRfdmVyc2lvbikgeworICAgIG9wdF92ZXJzaW9u
ID0gcGFyc2VJbnQoZ2V0VXJsT3B0aW9ucygpLndlYmdsVmVyc2lvbiwgMTApIHx8IDE7CisgIH0K
KyAgb3B0X2NhbnZhcyA9IG9wdF9jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2Fu
dmFzIik7CisgIGlmICh0eXBlb2Ygb3B0X2NhbnZhcyA9PSAnc3RyaW5nJykgeworICAgIG9wdF9j
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRfY2FudmFzKTsKKyAgfQorICB2YXIg
Y29udGV4dCA9IG51bGw7CisKKyAgdmFyIG5hbWVzOworICBzd2l0Y2ggKG9wdF92ZXJzaW9uKSB7
CisgICAgY2FzZSAyOgorICAgICAgbmFtZXMgPSBbIndlYmdsMiJdOyBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgbmFtZXMgPSBbIndlYmdsIiwgImV4cGVyaW1lbnRhbC13ZWJnbCJdOyBicmVh
azsKKyAgfQorCisgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICB0cnkgeworICAgICAgY29udGV4dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwg
YXR0cmlidXRlcyk7CisgICAgfSBjYXRjaCAoZSkgeworICAgIH0KKyAgICBpZiAoY29udGV4dCkg
eworICAgICAgYnJlYWs7CisgICAgfQorICB9CisgIGlmICghY29udGV4dCkgeworICAgIHRlc3RG
YWlsZWQoIlVuYWJsZSB0byBmZXRjaCBXZWJHTCByZW5kZXJpbmcgY29udGV4dCBmb3IgQ2FudmFz
Iik7CisgIH0KKyAgcmV0dXJuIGNvbnRleHQ7Cit9CisKKy8qKgorICogV3JhcHMgYSBXZWJHTCBm
dW5jdGlvbiB3aXRoIGEgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXJl
IGlzCisgKiBhbiBlcnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gZm5h
bWUgTmFtZSBvZiBmdW5jdGlvbiB0byB3cmFwLgorICogQHJldHVybiB7ZnVuY3Rpb259IFRoZSB3
cmFwcGVkIGZ1bmN0aW9uLgorICovCit2YXIgY3JlYXRlR0xFcnJvcldyYXBwZXIgPSBmdW5jdGlv
bihjb250ZXh0LCBmbmFtZSkgeworICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJ2ID0g
Y29udGV4dFtmbmFtZV0uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTsKKyAgICB2YXIgZXJyID0g
Y29udGV4dC5nZXRFcnJvcigpOworICAgIGlmIChlcnIgIT0gY29udGV4dC5OT19FUlJPUikKKyAg
ICAgIHRocm93ICJHTCBlcnJvciAiICsgZ2xFbnVtVG9TdHJpbmcoY29udGV4dCwgZXJyKSArICIg
aW4gIiArIGZuYW1lOworICAgIHJldHVybiBydjsKKyAgfTsKK307CisKKy8qKgorICogQ3JlYXRl
cyBhIFdlYkdMIGNvbnRleHQgd2hlcmUgYWxsIGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCB0byB0aHJv
dyBhbiBleGNlcHRpb24KKyAqIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICogQHBhcmFtIHshQ2Fu
dmFzfSBjYW52YXMgVGhlIEhUTUwgY2FudmFzIHRvIGdldCBhIGNvbnRleHQgZnJvbS4KKyAqIEBy
ZXR1cm4geyFPYmplY3R9IFRoZSB3cmFwcGVkIGNvbnRleHQuCisgKi8KK2Z1bmN0aW9uIGNyZWF0
ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcihjYW52YXMpIHsKKyAgdmFy
IGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzKTsKKyAgdmFyIHdyYXAgPSB7fTsKKyAg
Zm9yICh2YXIgaSBpbiBjb250ZXh0KSB7CisgICAgdHJ5IHsKKyAgICAgIGlmICh0eXBlb2YgY29u
dGV4dFtpXSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgIHdyYXBbaV0gPSBjcmVhdGVHTEVycm9y
V3JhcHBlcihjb250ZXh0LCBpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHdyYXBbaV0gPSBj
b250ZXh0W2ldOworICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIGVycm9yKCJjcmVh
dGVDb250ZXh0V3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3I6IEVycm9yIGFjY2Vzc2luZyAiICsg
aSk7CisgICAgfQorICB9CisgIHdyYXAuZ2V0RXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIHJl
dHVybiBjb250ZXh0LmdldEVycm9yKCk7CisgIH07CisgIHJldHVybiB3cmFwOworfTsKKworLyoq
CisgKiBUZXN0cyB0aGF0IGFuIGV2YWx1YXRlZCBleHByZXNzaW9uIGdlbmVyYXRlcyBhIHNwZWNp
ZmljIEdMIGVycm9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5Ljxu
dW1iZXI+fSBnbEVycm9ycyBUaGUgZXhwZWN0ZWQgZ2wgZXJyb3Igb3IgYW4gYXJyYXkgb2YgZXhw
ZWN0ZWQgZXJyb3JzLgorICogQHBhcmFtIHtzdHJpbmd9IGV2YWxTdHIgVGhlIHN0cmluZyB0byBl
dmFsdWF0ZS4KKyAqLwordmFyIHNob3VsZEdlbmVyYXRlR0xFcnJvciA9IGZ1bmN0aW9uKGdsLCBn
bEVycm9ycywgZXZhbFN0cikgeworICB2YXIgZXhjZXB0aW9uOworICB0cnkgeworICAgIGV2YWwo
ZXZhbFN0cik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleGNlcHRpb24gPSBlOworICB9CisgIGlm
IChleGNlcHRpb24pIHsKKyAgICB0ZXN0RmFpbGVkKGV2YWxTdHIgKyAiIHRocmV3IGV4Y2VwdGlv
biAiICsgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gLTE7CisgIH0gZWxzZSB7CisgICAgcmV0dXJu
IGdsRXJyb3JTaG91bGRCZShnbCwgZ2xFcnJvcnMsICJhZnRlciBldmFsdWF0aW5nOiAiICsgZXZh
bFN0cik7CisgIH0KK307CisKKy8qKgorICogVGVzdHMgdGhhdCBhbiBldmFsdWF0ZWQgZXhwcmVz
c2lvbiBlaXRoZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvciBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBH
TCBlcnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVy
Pn0gZ2xFcnJvcnMgVGhlIGV4cGVjdGVkIGdsIGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVk
IGVycm9ycy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyIFRoZSBzdHJpbmcgdG8gZXZhbHVh
dGUuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X21zZyBUaGUgb3B0aW9uYWwgbWVzc2FnZSB0byBk
aXNwbGF5LgorICovCit2YXIgc2hvdWxkVGhyb3dPckdlbmVyYXRlR0xFcnJvciA9IGZ1bmN0aW9u
KGdsLCBnbEVycm9ycywgZXZhbFN0ciwgb3B0X21zZykgeworICB2YXIgZXhjZXB0aW9uOworICB0
cnkgeworICAgIGV2YWwoZXZhbFN0cik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleGNlcHRpb24g
PSBlOworICB9CisgIGlmIChleGNlcHRpb24pIHsKKyAgICB0ZXN0UGFzc2VkKGV2YWxTdHIgKyAi
IHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gMDsKKyAgfSBlbHNl
IHsKKyAgICBpZiAoIW9wdF9tc2cpIHsKKyAgICAgIG9wdF9tc2cgPSAiYWZ0ZXIgZXZhbHVhdGlu
ZzogIiArIGV2YWxTdHI7CisgICAgfQorICAgIHJldHVybiBnbEVycm9yU2hvdWxkQmUoZ2wsIGds
RXJyb3JzLCBvcHRfbXNnKTsKKyAgfQorfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IHRoZSBmaXJz
dCBlcnJvciBHTCByZXR1cm5zIGlzIHRoZSBzcGVjaWZpZWQgZXJyb3IuCisgKiBAcGFyYW0geyFX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3JzIFRoZSBleHBlY3Rl
ZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCisgKiBAcGFyYW0ge3N0
cmluZ30gb3B0X21zZyBPcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2UuCisgKi8KK3ZhciBnbEVy
cm9yU2hvdWxkQmUgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIG9wdF9tc2cpIHsKKyAgaWYgKCFn
bEVycm9ycy5sZW5ndGgpIHsKKyAgICBnbEVycm9ycyA9IFtnbEVycm9yc107CisgIH0KKyAgb3B0
X21zZyA9IG9wdF9tc2cgfHwgIiI7CisgIHZhciBlcnIgPSBnbC5nZXRFcnJvcigpOworICB2YXIg
bmR4ID0gZ2xFcnJvcnMuaW5kZXhPZihlcnIpOworICB2YXIgZXJyU3RycyA9IFtdOworICBmb3Ig
KHZhciBpaSA9IDA7IGlpIDwgZ2xFcnJvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgZXJyU3Rycy5w
dXNoKGdsRW51bVRvU3RyaW5nKGdsLCBnbEVycm9yc1tpaV0pKTsKKyAgfQorICB2YXIgZXhwZWN0
ZWQgPSBlcnJTdHJzLmpvaW4oIiBvciAiKTsKKyAgaWYgKG5keCA8IDApIHsKKyAgICB2YXIgbXNn
ID0gImdldEVycm9yIGV4cGVjdGVkIiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkgPyAiIG9uZSBv
ZjogIiA6ICI6ICIpOworICAgIHRlc3RGYWlsZWQobXNnICsgZXhwZWN0ZWQgKyAgIi4gV2FzICIg
KyBnbEVudW1Ub1N0cmluZyhnbCwgZXJyKSArICIgOiAiICsgb3B0X21zZyk7CisgIH0gZWxzZSB7
CisgICAgdmFyIG1zZyA9ICJnZXRFcnJvciB3YXMgIiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkg
PyAib25lIG9mOiAiIDogImV4cGVjdGVkIHZhbHVlOiAiKTsKKyAgICB0ZXN0UGFzc2VkKG1zZyAr
IGV4cGVjdGVkICsgIiA6ICIgKyBvcHRfbXNnKTsKKyAgfQorICByZXR1cm4gZXJyOworfTsKKwor
LyoqCisgKiBMaW5rcyBhIFdlYkdMIHByb2dyYW0sIHRocm93cyBpZiB0aGVyZSBhcmUgZXJyb3Jz
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMUHJvZ3JhbX0gcHJvZ3JhbSBUaGUg
V2ViR0xQcm9ncmFtIHRvIGxpbmsuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQp
IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKi8KK3ZhciBsaW5rUHJv
Z3JhbSA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFjaykgeworICB2YXIg
ZXJyRm4gPSBvcHRfZXJyb3JDYWxsYmFjayB8fCB0ZXN0RmFpbGVkOworICAvLyBMaW5rIHRoZSBw
cm9ncmFtCisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworCisgIC8vIENoZWNrIHRoZSBsaW5r
IHN0YXR1cworICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBn
bC5MSU5LX1NUQVRVUyk7CisgIGlmICghbGlua2VkKSB7CisgICAgLy8gc29tZXRoaW5nIHdlbnQg
d3Jvbmcgd2l0aCB0aGUgbGluaworICAgIHZhciBlcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9n
IChwcm9ncmFtKTsKKworICAgIGVyckZuKCJFcnJvciBpbiBwcm9ncmFtIGxpbmtpbmc6IiArIGVy
cm9yKTsKKworICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7CisgIH0KK307CisKKy8qKgor
ICogTG9hZHMgdGV4dCBmcm9tIGFuIGV4dGVybmFsIGZpbGUuIFRoaXMgZnVuY3Rpb24gaXMgc3lu
Y2hyb25vdXMuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVybmFs
IGZpbGUuCisgKiBAcGFyYW0geyFmdW5jdGlvbihib29sLCBzdHJpbmcpOiB2b2lkfSBjYWxsYmFj
ayB0aGF0IGlzIHNlbnQgYSBib29sIGZvcgorICogICAgIHN1Y2Nlc3MgYW5kIHRoZSBzdHJpbmcu
CisgKi8KK3ZhciBsb2FkVGV4dEZpbGVBc3luYyA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsK
KyAgbG9nICgibG9hZGluZzogIiArIHVybCk7CisgIHZhciBlcnJvciA9ICdsb2FkVGV4dEZpbGVT
eW5jaHJvbm91cyBmYWlsZWQgdG8gbG9hZCB1cmwgIicgKyB1cmwgKyAnIic7CisgIHZhciByZXF1
ZXN0OworICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgcmVxdWVzdCA9IG5ldyBY
TUxIdHRwUmVxdWVzdCgpOworICAgIGlmIChyZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUpIHsKKyAg
ICAgIHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9wbGFpbicpOworICAgIH0KKyAgfSBl
bHNlIHsKKyAgICB0aHJvdyAnWE1MSHR0cFJlcXVlc3QgaXMgZGlzYWJsZWQnOworICB9CisgIHRy
eSB7CisgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgIHJlcXVlc3Qub25y
ZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0
YXRlID09IDQpIHsKKyAgICAgICAgdmFyIHRleHQgPSAnJzsKKyAgICAgICAgLy8gSFRUUCByZXBv
cnRzIHN1Y2Nlc3Mgd2l0aCBhIDIwMCBzdGF0dXMuIFRoZSBmaWxlIHByb3RvY29sIHJlcG9ydHMK
KyAgICAgICAgLy8gc3VjY2VzcyB3aXRoIHplcm8uIEhUVFAgZG9lcyBub3QgdXNlIHplcm8gYXMg
YSBzdGF0dXMgY29kZSAodGhleQorICAgICAgICAvLyBzdGFydCBhdCAxMDApLgorICAgICAgICAv
LyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdAor
ICAgICAgICB2YXIgc3VjY2VzcyA9IHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCByZXF1ZXN0LnN0
YXR1cyA9PSAwOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgIHRleHQgPSByZXF1
ZXN0LnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfQorICAgICAgICBsb2coImxvYWRlZDogIiArIHVy
bCk7CisgICAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIHRleHQpOworICAgICAgfQorICAgIH07Cisg
ICAgcmVxdWVzdC5zZW5kKG51bGwpOworICB9IGNhdGNoIChlKSB7CisgICAgbG9nKCJmYWlsZWQg
dG8gbG9hZDogIiArIHVybCk7CisgICAgY2FsbGJhY2soZmFsc2UsICcnKTsKKyAgfQorfTsKKwor
LyoqCisgKiBSZWN1cnNpdmVseSBsb2FkcyBhIGZpbGUgYXMgYSBsaXN0LiBFYWNoIGxpbmUgaXMg
cGFyc2VkIGZvciBhIHJlbGF0aXZlCisgKiBwYXRoLiBJZiB0aGUgZmlsZSBlbmRzIGluIC50eHQg
dGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZSBpcyBpbnNlcnRlZCBpbgorICogdGhlIGxpc3QuCisg
KgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBleHRlcm5hbCBmaWxlLgor
ICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbCwgQXJyYXk8c3RyaW5nPik6IHZvaWR9IGNhbGxiYWNr
IHRoYXQgaXMgc2VudCBhIGJvb2wKKyAqICAgICBmb3Igc3VjY2VzcyBhbmQgdGhlIGFycmF5IG9m
IHN0cmluZ3MuCisgKi8KK3ZhciBnZXRGaWxlTGlzdEFzeW5jID0gZnVuY3Rpb24odXJsLCBjYWxs
YmFjaykgeworICB2YXIgZmlsZXMgPSBbXTsKKworICB2YXIgZ2V0RmlsZUxpc3RJbXBsID0gZnVu
Y3Rpb24odXJsLCBjYWxsYmFjaykgeworICAgIHZhciBmaWxlcyA9IFtdOworICAgIGlmICh1cmwu
c3Vic3RyKHVybC5sZW5ndGggLSA0KSA9PSAnLnR4dCcpIHsKKyAgICAgIGxvYWRUZXh0RmlsZUFz
eW5jKHVybCwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihzdWNjZXNzLCB0
ZXh0KSB7CisgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBjYWxsYmFjayhm
YWxzZSwgJycpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAgICB2
YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcbicpOworICAgICAgICAgIHZhciBwcmVmaXggPSAnJzsK
KyAgICAgICAgICB2YXIgbGFzdFNsYXNoID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7CisgICAgICAg
ICAgaWYgKGxhc3RTbGFzaCA+PSAwKSB7CisgICAgICAgICAgICBwcmVmaXggPSB1cmwuc3Vic3Ry
KDAsIGxhc3RTbGFzaCArIDEpOworICAgICAgICAgIH0KKyAgICAgICAgICB2YXIgZmFpbCA9IGZh
bHNlOworICAgICAgICAgIHZhciBjb3VudCA9IDE7CisgICAgICAgICAgdmFyIGluZGV4ID0gMDsK
KyAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGluZXMubGVuZ3RoOyArK2lpKSB7Cisg
ICAgICAgICAgICB2YXIgc3RyID0gbGluZXNbaWldLnJlcGxhY2UoL15cc1xzKi8sICcnKS5yZXBs
YWNlKC9cc1xzKiQvLCAnJyk7CisgICAgICAgICAgICBpZiAoc3RyLmxlbmd0aCA+IDQgJiYKKyAg
ICAgICAgICAgICAgICBzdHJbMF0gIT0gJyMnICYmCisgICAgICAgICAgICAgICAgc3RyWzBdICE9
ICI7IiAmJgorICAgICAgICAgICAgICAgIHN0ci5zdWJzdHIoMCwgMikgIT0gIi8vIikgeworICAg
ICAgICAgICAgICB2YXIgbmFtZXMgPSBzdHIuc3BsaXQoLyArLyk7CisgICAgICAgICAgICAgIG5l
d191cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT0g
MSkgeworICAgICAgICAgICAgICAgIG5ld191cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAg
ICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBnZXRGaWxlTGlzdEltcGwobmV3X3VybCwg
ZnVuY3Rpb24oaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdWNj
ZXNzLCBuZXdfZmlsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJnb3QgZmlsZXM6ICIg
KyBuZXdfZmlsZXMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICBmaWxlc1tpbmRleF0gPSBuZXdfZmlsZXM7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmluaXNoKHN1Y2Nlc3MpOworICAg
ICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KGluZGV4KyspKTsKKyAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcyA9ICIiOworICAgICAgICAgICAg
ICAgIHZhciBwID0gIiI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgamogPSAwOyBqaiA8IG5h
bWVzLmxlbmd0aDsgKytqaikgeworICAgICAgICAgICAgICAgICAgcyArPSBwICsgcHJlZml4ICsg
bmFtZXNbampdOworICAgICAgICAgICAgICAgICAgcCA9ICIgIjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXgrK10gPSBzOworICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGZpbmlzaCh0cnVlKTsKKworICAg
ICAgICAgIGZ1bmN0aW9uIGZpbmlzaChzdWNjZXNzKSB7CisgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAtLWNvdW50OworICAgICAgICAgICAgbG9nKCJjb3VudDogIiArIGNvdW50KTsKKyAgICAg
ICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgICAgY2FsbGJhY2soIWZhaWwsIGZpbGVz
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0oKSk7CisK
KyAgICB9IGVsc2UgeworICAgICAgZmlsZXMucHVzaCh1cmwpOworICAgICAgY2FsbGJhY2sodHJ1
ZSwgZmlsZXMpOworICAgIH0KKyAgfTsKKworICBnZXRGaWxlTGlzdEltcGwodXJsLCBmdW5jdGlv
bihzdWNjZXNzLCBmaWxlcykgeworICAgIC8vIGZsYXR0ZW4KKyAgICB2YXIgZmxhdCA9IFtdOwor
ICAgIGZsYXR0ZW4oZmlsZXMpOworICAgIGZ1bmN0aW9uIGZsYXR0ZW4oZmlsZXMpIHsKKyAgICAg
IGZvciAodmFyIGlpID0gMDsgaWkgPCBmaWxlcy5sZW5ndGg7ICsraWkpIHsKKyAgICAgICAgdmFy
IHZhbHVlID0gZmlsZXNbaWldOworICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PSAic3RyaW5n
IikgeworICAgICAgICAgIGZsYXQucHVzaCh2YWx1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgZmxhdHRlbih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgY2Fs
bGJhY2soc3VjY2VzcywgZmxhdCk7CisgIH0pOworfTsKKworLyoqCisgKiBHZXRzIGEgZmlsZSBm
cm9tIGEgZmlsZS9VUkwuCisgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0aGUgVVJMIG9mIHRoZSBm
aWxlIHRvIGdldC4KKyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxl
LgorICovCit2YXIgcmVhZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7CisgIHZhciB4aHIgPSBuZXcg
WE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oIkdFVCIsIGZpbGUsIGZhbHNlKTsKKyAgeGhy
LnNlbmQoKTsKKyAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQucmVwbGFjZSgvXHIvZywgIiIpOwor
fTsKKwordmFyIHJlYWRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgeworICB2YXIgZmlsZXMgPSBb
XTsKKyAgaWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgIHZh
ciBsaW5lcyA9IHJlYWRGaWxlKHVybCkuc3BsaXQoJ1xuJyk7CisgICAgdmFyIHByZWZpeCA9ICcn
OworICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKKyAgICBpZiAobGFz
dFNsYXNoID49IDApIHsKKyAgICAgIHByZWZpeCA9IHVybC5zdWJzdHIoMCwgbGFzdFNsYXNoICsg
MSk7CisgICAgfQorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkp
IHsKKyAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJlcGxh
Y2UoL1xzXHMqJC8sICcnKTsKKyAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgorICAgICAgICAg
IHN0clswXSAhPSAnIycgJiYKKyAgICAgICAgICBzdHJbMF0gIT0gIjsiICYmCisgICAgICAgICAg
c3RyLnN1YnN0cigwLCAyKSAhPSAiLy8iKSB7CisgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxp
dCgvICsvKTsKKyAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgbmV3
X3VybCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAgICBmaWxlcyA9IGZpbGVzLmNvbmNhdChyZWFk
RmlsZUxpc3QobmV3X3VybCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIHZhciBzID0g
IiI7CisgICAgICAgICAgdmFyIHAgPSAiIjsKKyAgICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpq
IDwgbmFtZXMubGVuZ3RoOyArK2pqKSB7CisgICAgICAgICAgICBzICs9IHAgKyBwcmVmaXggKyBu
YW1lc1tqal07CisgICAgICAgICAgICBwID0gIiAiOworICAgICAgICAgIH0KKyAgICAgICAgICBm
aWxlcy5wdXNoKHMpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAg
IGZpbGVzLnB1c2godXJsKTsKKyAgfQorICByZXR1cm4gZmlsZXM7Cit9OworCisvKioKKyAqIExv
YWRzIGEgc2hhZGVyLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJT
b3VyY2UgVGhlIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge251bWJlcn0gc2hhZGVyVHlwZSBU
aGUgdHlwZSBvZiBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9w
dF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59
IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0g
e3N0cmluZ30gb3B0X3NoYWRlckxhYmVsIExhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgc2hhZGVy
IHNvdXJjZSBpbgorICogICAgIHRoZSBsb2cuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3VybCBV
UkwgZnJvbSB3aGVyZSB0aGUgc2hhZGVyIHNvdXJjZSB3YXMgbG9hZGVkIGZyb20uCisgKiAgICAg
SWYgb3B0X2xvZ1NoYWRlcnMgaXMgc2V0LCB0aGVuIGEgbGluayB0byB0aGUgc291cmNlIGZpbGUg
d2lsbCBhbHNvIGJlCisgKiAgICAgYWRkZWQuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRo
ZSBjcmVhdGVkIHNoYWRlci4KKyAqLwordmFyIGxvYWRTaGFkZXIgPSBmdW5jdGlvbigKKyAgICBn
bCwgc2hhZGVyU291cmNlLCBzaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1No
YWRlcnMsCisgICAgb3B0X3NoYWRlckxhYmVsLCBvcHRfdXJsKSB7CisgIHZhciBlcnJGbiA9IG9w
dF9lcnJvckNhbGxiYWNrIHx8IGVycm9yOworICAvLyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QK
KyAgdmFyIHNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKKyAgaWYgKHNoYWRl
ciA9PSBudWxsKSB7CisgICAgZXJyRm4oIioqKiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFk
ZXIgJyIrc2hhZGVyU291cmNlKyInIik7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAvLyBM
b2FkIHRoZSBzaGFkZXIgc291cmNlCisgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNoYWRlclNv
dXJjZSk7CisgIHZhciBlcnIgPSBnbC5nZXRFcnJvcigpOworICBpZiAoZXJyICE9IGdsLk5PX0VS
Uk9SKSB7CisgICAgZXJyRm4oIioqKiBFcnJvciBsb2FkaW5nIHNoYWRlciAnIiArIHNoYWRlciAr
ICInOiIgKyBnbEVudW1Ub1N0cmluZyhnbCwgZXJyKSk7CisgICAgcmV0dXJuIG51bGw7CisgIH0K
KworICAvLyBDb21waWxlIHRoZSBzaGFkZXIKKyAgZ2wuY29tcGlsZVNoYWRlcihzaGFkZXIpOwor
CisgIGlmIChvcHRfbG9nU2hhZGVycykgeworICAgIHZhciBsYWJlbCA9IHNoYWRlclR5cGUgPT0g
Z2wuVkVSVEVYX1NIQURFUiA/ICd2ZXJ0ZXggc2hhZGVyJyA6ICdmcmFnbWVudF9zaGFkZXInOwor
ICAgIGlmIChvcHRfc2hhZGVyTGFiZWwpIHsKKyAgICAgIGxhYmVsID0gb3B0X3NoYWRlckxhYmVs
ICsgJyAnICsgbGFiZWw7CisgICAgfQorICAgIGFkZFNoYWRlclNvdXJjZXMoCisgICAgICAgIGds
LCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLCBsYWJlbCwgc2hhZGVyLCBzaGFk
ZXJTb3VyY2UsIG9wdF91cmwpOworICB9CisKKyAgLy8gQ2hlY2sgdGhlIGNvbXBpbGUgc3RhdHVz
CisgIHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIGdsLkNPTVBJ
TEVfU1RBVFVTKTsKKyAgaWYgKCFjb21waWxlZCkgeworICAgIC8vIFNvbWV0aGluZyB3ZW50IHdy
b25nIGR1cmluZyBjb21waWxhdGlvbjsgZ2V0IHRoZSBlcnJvcgorICAgIGxhc3RFcnJvciA9IGds
LmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBlcnJGbigiKioqIEVycm9yIGNvbXBpbGlu
ZyAiICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHNoYWRlclR5cGUpICsgIiAnIiArIHNoYWRlciArICIn
OiIgKyBsYXN0RXJyb3IpOworICAgIGdsLmRlbGV0ZVNoYWRlcihzaGFkZXIpOworICAgIHJldHVy
biBudWxsOworICB9CisKKyAgcmV0dXJuIHNoYWRlcjsKK30KKworLyoqCisgKiBMb2FkcyBhIHNo
YWRlciBmcm9tIGEgVVJMLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7ZmlsZX0gZmlsZSBU
aGUgVVJMIG9mIHRoZSBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtudW1iZXJ9IHR5cGUgVGhl
IHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkKSBvcHRf
ZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHBhcmFtIHtib29sZWFufSBv
cHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgorICogQHJldHVybiB7
IVdlYkdMU2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCisgKi8KK3ZhciBsb2FkU2hhZGVyRnJv
bUZpbGUgPSBmdW5jdGlvbigKKyAgICBnbCwgZmlsZSwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ss
IG9wdF9sb2dTaGFkZXJzKSB7CisgIHZhciBzaGFkZXJTb3VyY2UgPSByZWFkRmlsZShmaWxlKTsK
KyAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwgdHlwZSwgb3B0X2Vycm9yQ2Fs
bGJhY2ssCisgICAgICBvcHRfbG9nU2hhZGVycywgdW5kZWZpbmVkLCBmaWxlKTsKK307CisKKy8q
KgorICogR2V0cyB0aGUgY29udGVudCBvZiBzY3JpcHQuCisgKiBAcGFyYW0ge3N0cmluZ30gc2Ny
aXB0SWQgVGhlIGlkIG9mIHRoZSBzY3JpcHQgdGFnLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUg
Y29udGVudCBvZiB0aGUgc2NyaXB0LgorICovCit2YXIgZ2V0U2NyaXB0ID0gZnVuY3Rpb24oc2Ny
aXB0SWQpIHsKKyAgdmFyIHNoYWRlclNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNj
cmlwdElkKTsKKyAgaWYgKCFzaGFkZXJTY3JpcHQpIHsKKyAgICB0aHJvdygiKioqIEVycm9yOiB1
bmtub3duIHNjcmlwdCBlbGVtZW50ICIgKyBzY3JpcHRJZCk7CisgIH0KKyAgcmV0dXJuIHNoYWRl
clNjcmlwdC50ZXh0OworfTsKKworLyoqCisgKiBMb2FkcyBhIHNoYWRlciBmcm9tIGEgc2NyaXB0
IHRhZy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gc2NyaXB0SWQgVGhlIGlk
IG9mIHRoZSBzY3JpcHQgdGFnLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9zaGFkZXJUeXBlIFRo
ZSB0eXBlIG9mIHNoYWRlci4gSWYgbm90IHBhc3NlZCBpbiBpdCB3aWxsCisgKiAgICAgYmUgZGVy
aXZlZCBmcm9tIHRoZSB0eXBlIG9mIHRoZSBzY3JpcHQgdGFnLgorICogQHBhcmFtIHtmdW5jdGlv
bihzdHJpbmcpOiB2b2lkKSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgor
ICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIg
c291cmNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCisg
Ki8KK3ZhciBsb2FkU2hhZGVyRnJvbVNjcmlwdCA9IGZ1bmN0aW9uKAorICAgIGdsLCBzY3JpcHRJ
ZCwgb3B0X3NoYWRlclR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycykgewor
ICB2YXIgc2hhZGVyU291cmNlID0gIiI7CisgIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7CisgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgdGhy
b3coIioqKiBFcnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOworICB9
CisgIHNoYWRlclNvdXJjZSA9IHNoYWRlclNjcmlwdC50ZXh0OworCisgIGlmICghb3B0X3NoYWRl
clR5cGUpIHsKKyAgICBpZiAoc2hhZGVyU2NyaXB0LnR5cGUgPT0gIngtc2hhZGVyL3gtdmVydGV4
IikgeworICAgICAgb3B0X3NoYWRlclR5cGUgPSBnbC5WRVJURVhfU0hBREVSOworICAgIH0gZWxz
ZSBpZiAoc2hhZGVyU2NyaXB0LnR5cGUgPT0gIngtc2hhZGVyL3gtZnJhZ21lbnQiKSB7CisgICAg
ICBvcHRfc2hhZGVyVHlwZSA9IGdsLkZSQUdNRU5UX1NIQURFUjsKKyAgICB9IGVsc2UgeworICAg
ICAgdGhyb3coIioqKiBFcnJvcjogdW5rbm93biBzaGFkZXIgdHlwZSIpOworICAgICAgcmV0dXJu
IG51bGw7CisgICAgfQorICB9CisKKyAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJj
ZSwgb3B0X3NoYWRlclR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLAorICAgICAgb3B0X2xvZ1NoYWRl
cnMpOworfTsKKwordmFyIGxvYWRTdGFuZGFyZFByb2dyYW0gPSBmdW5jdGlvbihnbCkgeworICB2
YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dy
YW0sIGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlcihnbCkpOworICBnbC5hdHRhY2hTaGFkZXIocHJv
Z3JhbSwgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIoZ2wpKTsKKyAgZ2wuYmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIpOworICBnbC5iaW5kQXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKKyAg
cmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMgZnJvbSBmaWxlcywg
Y3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZCBsaW5rcy4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdmVydGV4U2hhZGVyUGF0aCBUaGUgVVJMIG9m
IHRoZSB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50U2hhZGVyUGF0
aCBUaGUgVVJMIG9mIHRoZSBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0
cmluZyk6IHZvaWQpIG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBA
cmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgbG9h
ZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9uKAorICAgIGdsLCB2ZXJ0ZXhTaGFkZXJQYXRoLCBm
cmFnbWVudFNoYWRlclBhdGgsIG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZhciBwcm9ncmFtID0g
Z2wuY3JlYXRlUHJvZ3JhbSgpOworICB2YXIgdnMgPSBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAg
ICBnbCwgdmVydGV4U2hhZGVyUGF0aCwgZ2wuVkVSVEVYX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJh
Y2spOworICB2YXIgZnMgPSBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwgZnJhZ21lbnRT
aGFkZXJQYXRoLCBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgaWYg
KHZzICYmIGZzKSB7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZzKTsKKyAgICBnbC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgZnMpOworICAgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBv
cHRfZXJyb3JDYWxsYmFjayk7CisgIH0KKyAgaWYgKHZzKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVy
KHZzKTsKKyAgfQorICBpZiAoZnMpIHsKKyAgICBnbC5kZWxldGVTaGFkZXIoZnMpOworICB9Cisg
IHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20gc2NyaXB0
IHRhZ3MsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQKKyAqIGxp
bmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTY3JpcHRJZCBU
aGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlucyB0aGUKKyAqICAgICAgICB2ZXJ0
ZXggc2hhZGVyLgorICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50U2NyaXB0SWQgVGhlIGlkIG9m
IHRoZSBzY3JpcHQgdGFnIHRoYXQgY29udGFpbnMgdGhlCisgKiAgICAgICAgZnJhZ21lbnQgc2hh
ZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkKSBvcHRfZXJyb3JDYWxsYmFj
ayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNy
ZWF0ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGxvYWRQcm9ncmFtRnJvbVNjcmlwdCA9IGZ1bmN0aW9u
IGxvYWRQcm9ncmFtRnJvbVNjcmlwdCgKKyAgICBnbCwgdmVydGV4U2NyaXB0SWQsIGZyYWdtZW50
U2NyaXB0SWQsIG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRl
UHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIoCisgICAgICBwcm9ncmFtLAorICAgICAgbG9h
ZFNoYWRlckZyb21TY3JpcHQoCisgICAgICAgICAgZ2wsIHZlcnRleFNjcmlwdElkLCBnbC5WRVJU
RVhfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaykpOworICBnbC5hdHRhY2hTaGFkZXIoCisgICAg
ICBwcm9ncmFtLAorICAgICAgbG9hZFNoYWRlckZyb21TY3JpcHQoCisgICAgICAgICAgZ2wsIGZy
YWdtZW50U2NyaXB0SWQsICBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7
CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIHJldHVy
biBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20gc291cmNlLCBjcmVh
dGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisgKiBsaW5rcy4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0gdmVydGV4U2hhZGVyIFRoZSB2ZXJ0
ZXggc2hhZGVyLgorICogQHBhcmFtIHshV2ViR0xTaGFkZXJ9IGZyYWdtZW50U2hhZGVyIFRoZSBm
cmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9wdF9l
cnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9n
cmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgY3JlYXRlUHJvZ3JhbSA9IGZ1bmN0
aW9uKGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyLCBvcHRfZXJyb3JDYWxsYmFjaykg
eworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgZ2wuYXR0YWNoU2hhZGVy
KHByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFn
bWVudFNoYWRlcik7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFj
ayk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20g
c291cmNlLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisgKiBs
aW5rcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdmVydGV4U2hhZGVyIFRo
ZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmcmFnbWVudFNoYWRl
ciBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5n
KTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEBwYXJh
bSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4K
KyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3Zh
ciBsb2FkUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50
U2hhZGVyLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMpIHsKKyAgdmFyIHByb2dy
YW07CisgIHZhciB2cyA9IGxvYWRTaGFkZXIoCisgICAgICBnbCwgdmVydGV4U2hhZGVyLCBnbC5W
RVJURVhfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMpOworICB2YXIg
ZnMgPSBsb2FkU2hhZGVyKAorICAgICAgZ2wsIGZyYWdtZW50U2hhZGVyLCBnbC5GUkFHTUVOVF9T
SEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycyk7CisgIGlmICh2cyAmJiBm
cykgeworICAgIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCB2cywgZnMsIG9wdF9lcnJvckNh
bGxiYWNrKQorICB9CisgIGlmICh2cykgeworICAgIGdsLmRlbGV0ZVNoYWRlcih2cyk7CisgIH0K
KyAgaWYgKGZzKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVyKGZzKTsKKyAgfQorICByZXR1cm4gcHJv
Z3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBmcm9tIHNvdXJjZSwgY3JlYXRlcyBh
IHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICogbGlua3MgYnV0IGV4cGVjdHMg
ZXJyb3IuCisgKgorICogR0xTTCAxLjAuMTcgMTAuMjcgZWZmZWN0aXZlbHkgc2F5cyB0aGF0IGNv
bXBpbGVTaGFkZXIgY2FuCisgKiBhbHdheXMgc3VjY2VlZCBhcyBsb25nIGFzIGxpbmtQcm9ncmFt
IGZhaWxzIHNvIHdlIGNhbid0CisgKiByZWx5IG9uIGNvbXBpbGVTaGFkZXIgZmFpbGluZy4gVGhp
cyBmdW5jdGlvbiBleHBlY3RzCisgKiBvbmUgb2YgdGhlIHNoYWRlciB0byBmYWlsIE9SIGxpbmtp
bmcgdG8gZmFpbC4KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHZlcnRl
eFNoYWRlclNjcmlwdElkIFRoZSB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHtzdHJpbmd9IGZy
YWdtZW50U2hhZGVyU2NyaXB0SWQgVGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEByZXR1cm4ge1dl
YkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGxvYWRQcm9ncmFtRnJv
bVNjcmlwdEV4cGVjdEVycm9yID0gZnVuY3Rpb24oCisgICAgZ2wsIHZlcnRleFNoYWRlclNjcmlw
dElkLCBmcmFnbWVudFNoYWRlclNjcmlwdElkKSB7CisgIHZhciB2ZXJ0ZXhTaGFkZXIgPSBsb2Fk
U2hhZGVyRnJvbVNjcmlwdChnbCwgdmVydGV4U2hhZGVyU2NyaXB0SWQpOworICBpZiAoIXZlcnRl
eFNoYWRlcikgeworICAgIHJldHVybiBudWxsOworICB9CisgIHZhciBmcmFnbWVudFNoYWRlciA9
IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCBmcmFnbWVudFNoYWRlclNjcmlwdElkKTsKKyAgaWYg
KCFmcmFnbWVudFNoYWRlcikgeworICAgIHJldHVybiBudWxsOworICB9CisgIHZhciBsaW5rU3Vj
Y2VzcyA9IHRydWU7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICBnbC5h
dHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHBy
b2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgbGlua1N1Y2Nlc3MgPSB0cnVlOworICBsaW5rUHJv
Z3JhbShnbCwgcHJvZ3JhbSwgZnVuY3Rpb24oKSB7CisgICAgICBsaW5rU3VjY2VzcyA9IGZhbHNl
OworICAgIH0pOworICByZXR1cm4gbGlua1N1Y2Nlc3MgPyBwcm9ncmFtIDogbnVsbDsKK307CisK
KwordmFyIGdldEFjdGl2ZU1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtLCB0eXBlSW5mbykgewor
ICB2YXIgbnVtVmFyaWFibGVzID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbFt0
eXBlSW5mby5wYXJhbV0pOworICB2YXIgdmFyaWFibGVzID0ge307CisgIGZvciAodmFyIGlpID0g
MDsgaWkgPCBudW1WYXJpYWJsZXM7ICsraWkpIHsKKyAgICB2YXIgaW5mbyA9IGdsW3R5cGVJbmZv
LmFjdGl2ZUZuXShwcm9ncmFtLCBpaSk7CisgICAgdmFyaWFibGVzW2luZm8ubmFtZV0gPSB7Cisg
ICAgICBuYW1lOiBpbmZvLm5hbWUsCisgICAgICBzaXplOiBpbmZvLnNpemUsCisgICAgICB0eXBl
OiBpbmZvLnR5cGUsCisgICAgICBsb2NhdGlvbjogZ2xbdHlwZUluZm8ubG9jRm5dKHByb2dyYW0s
IGluZm8ubmFtZSkKKyAgICB9OworICB9CisgIHJldHVybiB2YXJpYWJsZXM7Cit9OworCisvKioK
KyAqIFJldHVybnMgYSBtYXAgb2YgYXR0cmliIG5hbWVzIHRvIGluZm8gYWJvdXQgdGhvc2UKKyAq
IGF0dHJpYnMuCisgKgorICogZWc6CisgKiAgICB7ICJhdHRyaWIxTmFtZSI6CisgKiAgICAgIHsK
KyAqICAgICAgICBuYW1lOiAiYXR0cmliMU5hbWUiLAorICogICAgICAgIHNpemU6IDEsCisgKiAg
ICAgICAgdHlwZTogZ2wuRkxPQVRfTUFUMiwKKyAqICAgICAgICBsb2NhdGlvbjogMAorICogICAg
ICB9LAorICogICAgICAiYXR0cmliMk5hbWVbMF0iOgorICogICAgICB7CisgKiAgICAgICAgIG5h
bWU6ICJhdHRyaWIyTmFtZVswXSIsCisgKiAgICAgICAgIHNpemU6IDQsCisgKiAgICAgICAgIHR5
cGU6IGdsLkZMT0FULAorICogICAgICAgICBsb2NhdGlvbjogMQorICogICAgICB9LAorICogICAg
fQorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge1dlYkdMUHJvZ3JhbX0gVGhlIHByb2dy
YW0gdG8gcXVlcnkgZm9yIGF0dHJpYnMuCisgKiBAcmV0dXJuIHRoZSBtYXAuCisgKi8KK3ZhciBn
ZXRBdHRyaWJNYXAgPSBmdW5jdGlvbihnbCwgcHJvZ3JhbSkgeworICByZXR1cm4gZ2V0QWN0aXZl
TWFwKGdsLCBwcm9ncmFtLCB7CisgICAgICBwYXJhbTogIkFDVElWRV9BVFRSSUJVVEVTIiwKKyAg
ICAgIGFjdGl2ZUZuOiAiZ2V0QWN0aXZlQXR0cmliIiwKKyAgICAgIGxvY0ZuOiAiZ2V0QXR0cmli
TG9jYXRpb24iCisgIH0pOworfTsKKworLyoqCisgKiBSZXR1cm5zIGEgbWFwIG9mIHVuaWZvcm0g
bmFtZXMgdG8gaW5mbyBhYm91dCB0aG9zZSB1bmlmb3Jtcy4KKyAqCisgKiBlZzoKKyAqICAgIHsg
InVuaWZvcm0xTmFtZSI6CisgKiAgICAgIHsKKyAqICAgICAgICBuYW1lOiAidW5pZm9ybTFOYW1l
IiwKKyAqICAgICAgICBzaXplOiAxLAorICogICAgICAgIHR5cGU6IGdsLkZMT0FUX01BVDIsCisg
KiAgICAgICAgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uCisgKiAgICAgIH0sCisgKiAg
ICAgICJ1bmlmb3JtMk5hbWVbMF0iOgorICogICAgICB7CisgKiAgICAgICAgIG5hbWU6ICJ1bmlm
b3JtMk5hbWVbMF0iLAorICogICAgICAgICBzaXplOiA0LAorICogICAgICAgICB0eXBlOiBnbC5G
TE9BVCwKKyAqICAgICAgICAgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0aW9uCisgKiAgICAg
IH0sCisgKiAgICB9CisgKgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7V2ViR0xQcm9ncmFt
fSBUaGUgcHJvZ3JhbSB0byBxdWVyeSBmb3IgdW5pZm9ybXMuCisgKiBAcmV0dXJuIHRoZSBtYXAu
CisgKi8KK3ZhciBnZXRVbmlmb3JtTWFwID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0pIHsKKyAgcmV0
dXJuIGdldEFjdGl2ZU1hcChnbCwgcHJvZ3JhbSwgeworICAgICAgcGFyYW06ICJBQ1RJVkVfVU5J
Rk9STVMiLAorICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVVbmlmb3JtIiwKKyAgICAgIGxvY0Zu
OiAiZ2V0VW5pZm9ybUxvY2F0aW9uIgorICB9KTsKK307CisKK3ZhciBiYXNlUGF0aDsKK3ZhciBn
ZXRCYXNlUGF0aCA9IGZ1bmN0aW9uKCkgeworICBpZiAoIWJhc2VQYXRoKSB7CisgICAgdmFyIGV4
cGVjdGVkQmFzZSA9ICJ3ZWJnbC10ZXN0LXV0aWxzLmpzIjsKKyAgICB2YXIgc2NyaXB0cyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTsKKyAgICBmb3IgKHZhciBzY3Jp
cHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBpKyspIHsKKyAgICAgIHZhciBzcmMgPSBz
Y3JpcHQuc3JjOworICAgICAgdmFyIGwgPSBzcmMubGVuZ3RoOworICAgICAgaWYgKHNyYy5zdWJz
dHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVkQmFzZSkgeworICAgICAgICBi
YXNlUGF0aCA9IHNyYy5zdWJzdHIoMCwgbCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpOworICAgICAg
fQorICAgIH0KKyAgfQorICByZXR1cm4gYmFzZVBhdGg7Cit9OworCit2YXIgbG9hZFN0YW5kYXJk
VmVydGV4U2hhZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmls
ZSgKKyAgICAgIGdsLCBnZXRCYXNlUGF0aCgpICsgInZlcnRleFNoYWRlci52ZXJ0IiwgZ2wuVkVS
VEVYX1NIQURFUik7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIgPSBmdW5j
dGlvbihnbCkgeworICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgZ2wsIGdldEJh
c2VQYXRoKCkgKyAiZnJhZ21lbnRTaGFkZXIuZnJhZyIsIGdsLkZSQUdNRU5UX1NIQURFUik7Cit9
OworCisvKioKKyAqIExvYWRzIGFuIGltYWdlIGFzeW5jaHJvbm91c2x5LgorICogQHBhcmFtIHtz
dHJpbmd9IHVybCBVUkwgb2YgaW1hZ2UgdG8gbG9hZC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFF
bGVtZW50KTogdm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gY2FsbAorICogICAgIHdpdGggbG9h
ZGVkIGltYWdlLgorICovCit2YXIgbG9hZEltYWdlQXN5bmMgPSBmdW5jdGlvbih1cmwsIGNhbGxi
YWNrKSB7CisgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKKyAgaW1n
Lm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIGNhbGxiYWNrKGltZyk7CisgIH07CisgIGltZy5z
cmMgPSB1cmw7Cit9OworCisvKioKKyAqIExvYWRzIGFuIGFycmF5IG9mIGltYWdlcy4KKyAqIEBw
YXJhbSB7IUFycmF5LjxzdHJpbmc+fSB1cmxzIFVSTHMgb2YgaW1hZ2VzIHRvIGxvYWQuCisgKiBA
cGFyYW0geyFmdW5jdGlvbighe3N0cmluZywgaW1nfSk6IHZvaWR9IGNhbGxiYWNrLiBDYWxsYmFj
aworICogICAgIHRoYXQgZ2V0cyBwYXNzZWQgbWFwIG9mIHVybHMgdG8gaW1nIHRhZ3MuCisgKi8K
K3ZhciBsb2FkSW1hZ2VzQXN5bmMgPSBmdW5jdGlvbih1cmxzLCBjYWxsYmFjaykgeworICB2YXIg
Y291bnQgPSAxOworICB2YXIgaW1hZ2VzID0geyB9OworICBmdW5jdGlvbiBjb3VudERvd24oKSB7
CisgICAgLS1jb3VudDsKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgbG9nKCJsb2FkSW1h
Z2VzQXN5bmM6IGFsbCBpbWFnZXMgbG9hZGVkIik7CisgICAgICBjYWxsYmFjayhpbWFnZXMpOwor
ICAgIH0KKyAgfQorICBmdW5jdGlvbiBpbWFnZUxvYWRlZCh1cmwpIHsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oaW1nKSB7CisgICAgICBpbWFnZXNbdXJsXSA9IGltZzsKKyAgICAgIGxvZygibG9hZElt
YWdlc0FzeW5jOiBsb2FkZWQgIiArIHVybCk7CisgICAgICBjb3VudERvd24oKTsKKyAgICB9Cisg
IH0KKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHVybHMubGVuZ3RoOyArK2lpKSB7CisgICAgKytj
b3VudDsKKyAgICBsb2FkSW1hZ2VBc3luYyh1cmxzW2lpXSwgaW1hZ2VMb2FkZWQodXJsc1tpaV0p
KTsKKyAgfQorICBjb3VudERvd24oKTsKK307CisKKy8qKgorICogUmV0dXJucyBhIG1hcCBvZiBr
ZXk9dmFsdWUgdmFsdWVzIGZyb20gdXJsLgorICogQHJldHVybiB7IU9iamVjdC48c3RyaW5nLCBu
dW1iZXI+fSBtYXAgb2Yga2V5cyB0byB2YWx1ZXMuCisgKi8KK3ZhciBnZXRVcmxBcmd1bWVudHMg
PSBmdW5jdGlvbigpIHsKKyAgdmFyIGFyZ3MgPSB7fTsKKyAgdHJ5IHsKKyAgICB2YXIgcyA9IHdp
bmRvdy5sb2NhdGlvbi5ocmVmOworICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7CisgICAgdmFy
IGUgPSBzLmluZGV4T2YoIiMiKTsKKyAgICBpZiAoZSA8IDApIHsKKyAgICAgIGUgPSBzLmxlbmd0
aDsKKyAgICB9CisgICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICAgIHZh
ciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBh
aXJzLmxlbmd0aDsgKytpaSkgeworICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0
KCI9Iik7CisgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICB2YXIgdmFsdWUgPSBk
ZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOworICAgICAgYXJnc1trZXldID0gdmFsdWU7
CisgICAgfQorICB9IGNhdGNoIChlKSB7CisgICAgdGhyb3cgImNvdWxkIG5vdCBwYXJzZSB1cmwi
OworICB9CisgIHJldHVybiBhcmdzOworfTsKKworLyoqCisgKiBNYWtlcyBhbiBpbWFnZSBmcm9t
IGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBJbWFnZSBzb3VyY2UgVVJMLgorICogQHBh
cmFtIHtmdW5jdGlvbn0gb25sb2FkIENhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgaW1hZ2UgaGFz
IGZpbmlzZWQgbG9hZGluZy4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZXJyb3IgQ2FsbGJhY2sg
dG8gY2FsbCB3aGVuIGFuIGVycm9yIG9jY3Vycy4KKyAqIEByZXR1cm4geyFJbWFnZX0gVGhlIGNy
ZWF0ZWQgaW1hZ2UuCisgKi8KK3ZhciBtYWtlSW1hZ2UgPSBmdW5jdGlvbihzcmMsIG9ubG9hZCwg
b25lcnJvcikgeworICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7Cisg
IGlmIChvbmxvYWQpIHsKKyAgICBpbWcub25sb2FkID0gb25sb2FkOworICB9CisgIGlmIChvbmVy
cm9yKSB7CisgICAgaW1nLm9uZXJyb3IgPSBvbmVycm9yOworICB9IGVsc2UgeworICAgIGltZy5v
bmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICBsb2coIldBUk5JTkc6IGNyZWF0aW5nIGltYWdl
IGZhaWxlZDsgc3JjOiAiICsgdGhpcy5zcmMpOworICAgIH07CisgIH0KKyAgaWYgKHNyYykgewor
ICAgIGltZy5zcmMgPSBzcmM7CisgIH0KKyAgcmV0dXJuIGltZzsKK30KKworLyoqCisgKiBNYWtl
cyBhbiBpbWFnZSBlbGVtZW50IGZyb20gYSBjYW52YXMuCisgKiBAcGFyYW0geyFIVE1MQ2FudmFz
fSBjYW52YXMgQ2FudmFzIHRvIG1ha2UgaW1hZ2UgZnJvbS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb259
IG9ubG9hZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGltYWdlIGhhcyBmaW5pc2VkIGxvYWRp
bmcuCisgKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VGb3JtYXQgSW1hZ2UgZm9ybWF0IHRvIGJlIHBh
c3NlZCB0byB0b0RhdGFVcmwoKS4KKyAqIEByZXR1cm4geyFJbWFnZX0gVGhlIGNyZWF0ZWQgaW1h
Z2UuCisgKi8KK3ZhciBtYWtlSW1hZ2VGcm9tQ2FudmFzID0gZnVuY3Rpb24oY2FudmFzLCBvbmxv
YWQsIGltYWdlRm9ybWF0KSB7CisgIHJldHVybiBtYWtlSW1hZ2UoY2FudmFzLnRvRGF0YVVSTChp
bWFnZUZvcm1hdCksIG9ubG9hZCk7Cit9OworCisvKioKKyAqIE1ha2VzIGEgdmlkZW8gZWxlbWVu
dCBmcm9tIGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBWaWRlbyBzb3VyY2UgVVJMLgor
ICogQHBhcmFtIHtmdW5jdGlvbn0gb25lcnJvciBDYWxsYmFjayB0byBjYWxsIHdoZW4gYW4gZXJy
b3Igb2NjdXJzLgorICogQHJldHVybiB7IVZpZGVvfSBUaGUgY3JlYXRlZCB2aWRlby4KKyAqLwor
dmFyIG1ha2VWaWRlbyA9IGZ1bmN0aW9uKHNyYywgb25lcnJvcikgeworICB2YXIgdmlkID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKKyAgaWYgKG9uZXJyb3IpIHsKKyAgICB2aWQu
b25lcnJvciA9IG9uZXJyb3I7CisgIH0gZWxzZSB7CisgICAgdmlkLm9uZXJyb3IgPSBmdW5jdGlv
bigpIHsKKyAgICAgIGxvZygiV0FSTklORzogY3JlYXRpbmcgdmlkZW8gZmFpbGVkOyBzcmM6ICIg
KyB0aGlzLnNyYyk7CisgICAgfTsKKyAgfQorICBpZiAoc3JjKSB7CisgICAgdmlkLnNyYyA9IHNy
YzsKKyAgfQorICByZXR1cm4gdmlkOworfQorCisvKioKKyAqIEluc2VydHMgYW4gaW1hZ2Ugd2l0
aCBhIGNhcHRpb24gaW50byAnZWxlbWVudCcuCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxl
bWVudCBFbGVtZW50IHRvIGFwcGVuZCBpbWFnZSB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSBjYXB0
aW9uIGNhcHRpb24gdG8gYXNzb2NpYXRlIHdpdGggaW1hZ2UuCisgKiBAcGFyYW0geyFJbWFnZSkg
aW1nIGltYWdlIHRvIGluc2VydC4KKyAqLwordmFyIGluc2VydEltYWdlID0gZnVuY3Rpb24oZWxl
bWVudCwgY2FwdGlvbiwgaW1nKSB7CisgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKyAgZGl2LmFwcGVuZENoaWxkKGltZyk7CisgIHZhciBsYWJlbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICBsYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShjYXB0aW9uKSk7CisgIGRpdi5hcHBlbmRDaGlsZChsYWJlbCk7CisgICBlbGVt
ZW50LmFwcGVuZENoaWxkKGRpdik7Cit9OworCisvKioKKyAqIEluc2VydHMgYSAnbGFiZWwnIHRo
YXQgd2hlbiBjbGlja2VkIGV4cGFuZHMgdG8gdGhlIHByZSBmb3JtYXR0ZWQgdGV4dAorICogc3Vw
cGxpZWQgYnkgJ3NvdXJjZScuCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBlbGVt
ZW50IHRvIGFwcGVuZCBsYWJlbCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBsYWJlbCBm
b3IgYW5jaG9yLgorICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBwcmVmb3JtYXR0ZWQgdGV4dCB0
byBleHBhbmQgdG8uCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3VybCBVUkwgb2Ygc291cmNlLiBJ
ZiBwcm92aWRlZCBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlCisgKiAgICAgd2lsbCBhbHNvIGJl
IGFkZGVkLgorICovCit2YXIgYWRkU2hhZGVyU291cmNlID0gZnVuY3Rpb24oZWxlbWVudCwgbGFi
ZWwsIHNvdXJjZSwgb3B0X3VybCkgeworICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicHJlIik7CisgIHMu
Y2xhc3NOYW1lID0gInNoYWRlci1zb3VyY2UiOworICBzLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
CisgIHZhciBvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgIC8vcy5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzb3VyY2UpKTsKKyAgdmFyIGxpbmVzID0gc291
cmNlLnNwbGl0KCJcbiIpOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGluZXMubGVuZ3RoOyAr
K2lpKSB7CisgICAgdmFyIGxpbmUgPSBsaW5lc1tpaV07CisgICAgdmFyIGxpID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICBsaS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShsaW5lKSk7CisgICAgb2wuYXBwZW5kQ2hpbGQobGkpOworICB9CisgIHMuYXBwZW5k
Q2hpbGQob2wpOworICB2YXIgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgbC5o
cmVmID0gInNob3ctc2hhZGVyLXNvdXJjZSI7CisgIGwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobGFiZWwpKTsKKyAgbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0
aW9uKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHsKKyAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgIH0KKyAgICAgIHMuc3R5bGUuZGlzcGxheSA9
IChzLnN0eWxlLmRpc3BsYXkgPT0gJ25vbmUnKSA/ICdibG9jaycgOiAnbm9uZSc7CisgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfSwgZmFsc2UpOworICBkaXYuYXBwZW5kQ2hpbGQobCk7CisgIGlm
IChvcHRfdXJsKSB7CisgICAgdmFyIHUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Cisg
ICAgdS5ocmVmID0gb3B0X3VybDsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIiAiKSk7CisgICAgdS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgiKCIgKyBvcHRfdXJsICsgIikiKSk7CisgICAgZGl2LmFwcGVuZENoaWxkKHUpOworICB9Cisg
IGRpdi5hcHBlbmRDaGlsZChzKTsKKyAgZWxlbWVudC5hcHBlbmRDaGlsZChkaXYpOworfTsKKwor
LyoqCisgKiBJbnNlcnRzIGxhYmVscyB0aGF0IHdoZW4gY2xpY2tlZCBleHBhbmQgdG8gc2hvdyB0
aGUgb3JpZ2luYWwgc291cmNlIG9mIHRoZQorICogc2hhZGVyIGFuZCBhbHNvIHRyYW5zbGF0ZWQg
c291cmNlIG9mIHRoZSBzaGFkZXIsIGlmIHRoYXQgaXMgYXZhaWxhYmxlLgorICogQHBhcmFtIHtX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgorICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgZWxlbWVudCB0byBhcHBlbmQgbGFi
ZWwgdG8uCisgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgbGFiZWwgZm9yIGFuY2hvci4KKyAqIEBw
YXJhbSB7V2ViR0xTaGFkZXJ9IHNoYWRlciBTaGFkZXIgdG8gc2hvdyB0aGUgc291cmNlcyBmb3Iu
CisgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU291cmNlIE9yaWdpbmFsIHNoYWRlciBzb3VyY2Uu
CisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X3VybCBVUkwgb2Ygc291cmNlLiBJZiBwcm92aWRlZCBh
IGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlCisgKiAgICAgd2lsbCBhbHNvIGJlIGFkZGVkLgorICov
Cit2YXIgYWRkU2hhZGVyU291cmNlcyA9IGZ1bmN0aW9uKAorICAgIGdsLCBlbGVtZW50LCBsYWJl
bCwgc2hhZGVyLCBzaGFkZXJTb3VyY2UsIG9wdF91cmwpIHsKKyAgYWRkU2hhZGVyU291cmNlKGVs
ZW1lbnQsIGxhYmVsLCBzaGFkZXJTb3VyY2UsIG9wdF91cmwpOworCisgIHZhciBkZWJ1Z1NoYWRl
cnMgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlYnVnX3NoYWRlcnMnKTsKKyAgaWYgKGRlYnVn
U2hhZGVycyAmJiBzaGFkZXIpIHsKKyAgICB2YXIgdHJhbnNsYXRlZFNvdXJjZSA9IGRlYnVnU2hh
ZGVycy5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKHNoYWRlcik7CisgICAgaWYgKHRyYW5zbGF0
ZWRTb3VyY2UgIT0gJycpIHsKKyAgICAgIGFkZFNoYWRlclNvdXJjZShlbGVtZW50LCBsYWJlbCAr
ICcgdHJhbnNsYXRlZCBmb3IgZHJpdmVyJywgdHJhbnNsYXRlZFNvdXJjZSk7CisgICAgfQorICB9
Cit9OworCisvKioKKyAqIFNlbmRzIHNoYWRlciBpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyIHRv
IGJlIGR1bXBlZCBpbnRvIHRleHQgZmlsZXMKKyAqIHdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHdp
dGhpbiB0aGUgdGVzdC1ydW5uZXIgaGFybmVzcy4KKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7
c3RyaW5nfSB1cmwgVVJMIG9mIGN1cnJlbnQuCisgKiBAcGFyYW0ge3N0cmluZ30gcGFzc01zZyBU
ZXN0IGRlc2NyaXB0aW9uLgorICogQHBhcmFtIHtvYmplY3R9IHZJbmZvIE9iamVjdCBjb250YWlu
aW5nIHZlcnRleCBzaGFkZXIgaW5mb3JtYXRpb24uCisgKiBAcGFyYW0ge29iamVjdH0gZkluZm8g
T2JqZWN0IGNvbnRhaW5pbmcgZnJhZ21lbnQgc2hhZGVyIGluZm9ybWF0aW9uLgorICovCit2YXIg
ZHVtcFNoYWRlcnNJbmZvID0gZnVuY3Rpb24oZ2wsIHVybCwgcGFzc01zZywgdkluZm8sIGZJbmZv
KSB7CisgIHZhciBzaGFkZXJJbmZvID0ge307CisgIHNoYWRlckluZm8udXJsID0gdXJsOworICBz
aGFkZXJJbmZvLnRlc3REZXNjcmlwdGlvbiA9IHBhc3NNc2c7CisgIHNoYWRlckluZm8udkxhYmVs
ID0gdkluZm8ubGFiZWw7CisgIHNoYWRlckluZm8udlNob3VsZENvbXBpbGUgPSB2SW5mby5zaGFk
ZXJTdWNjZXNzOworICBzaGFkZXJJbmZvLnZTb3VyY2UgPSB2SW5mby5zb3VyY2U7CisgIHNoYWRl
ckluZm8uZkxhYmVsID0gZkluZm8ubGFiZWw7CisgIHNoYWRlckluZm8uZlNob3VsZENvbXBpbGUg
PSBmSW5mby5zaGFkZXJTdWNjZXNzOworICBzaGFkZXJJbmZvLmZTb3VyY2UgPSBmSW5mby5zb3Vy
Y2U7CisgIHNoYWRlckluZm8udlRyYW5zbGF0ZWRTb3VyY2UgPSBudWxsOworICBzaGFkZXJJbmZv
LmZUcmFuc2xhdGVkU291cmNlID0gbnVsbDsKKyAgdmFyIGRlYnVnU2hhZGVycyA9IGdsLmdldEV4
dGVuc2lvbignV0VCR0xfZGVidWdfc2hhZGVycycpOworICBpZiAoZGVidWdTaGFkZXJzKSB7Cisg
ICAgaWYgKHZJbmZvLnNoYWRlcikKKyAgICAgIHNoYWRlckluZm8udlRyYW5zbGF0ZWRTb3VyY2Ug
PSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSh2SW5mby5zaGFkZXIpOwor
ICAgIGlmIChmSW5mby5zaGFkZXIpCisgICAgICBzaGFkZXJJbmZvLmZUcmFuc2xhdGVkU291cmNl
ID0gZGVidWdTaGFkZXJzLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UoZkluZm8uc2hhZGVyKTsK
KyAgfQorCisgIHZhciBkdW1wU2hhZGVySW5mb1JlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3Qo
KTsKKyAgZHVtcFNoYWRlckluZm9SZXF1ZXN0Lm9wZW4oJ1BPU1QnLCAiL2R1bXBTaGFkZXJJbmZv
IiwgdHJ1ZSk7CisgIGR1bXBTaGFkZXJJbmZvUmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250
ZW50LVR5cGUiLCAidGV4dC9wbGFpbiIpOworICBkdW1wU2hhZGVySW5mb1JlcXVlc3Quc2VuZChK
U09OLnN0cmluZ2lmeShzaGFkZXJJbmZvKSk7Cit9OworCisvLyBBZGQgeW91ciBwcmVmaXggaGVy
ZS4KK3ZhciBicm93c2VyUHJlZml4ZXMgPSBbCisgICIiLAorICAiTU9aXyIsCisgICJPUF8iLAor
ICAiV0VCS0lUXyIKK107CisKKy8qKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIG5hbWUgbGlrZSBX
RUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YworICogcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUg
c3VwcG9ydGVkIHZlcnNpb24gZXh0ZW5zaW9uLCBsaWtlCisgKiBXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXR1cmVfczN0YworICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBleHRlbnNp
b24gdG8gbG9vayBmb3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9IG5hbWUgb2YgZXh0ZW5zaW9uIGZv
dW5kIG9yIHVuZGVmaW5lZCBpZiBub3QKKyAqICAgICBmb3VuZC4KKyAqLwordmFyIGdldFN1cHBv
cnRlZEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzID0gZnVuY3Rpb24oZ2wsIG5hbWUpIHsKKyAg
dmFyIHN1cHBvcnRlZCA9IGdsLmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAgZm9yICh2YXIg
aWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgcHJl
Zml4ZWROYW1lID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5hbWU7CisgICAgaWYgKHN1cHBvcnRl
ZC5pbmRleE9mKHByZWZpeGVkTmFtZSkgPj0gMCkgeworICAgICAgcmV0dXJuIHByZWZpeGVkTmFt
ZTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIG5hbWUgbGlr
ZSBXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YworICogcmV0dXJucyB0aGUgc3VwcG9ydGVk
IHZlcnNpb24gZXh0ZW5zaW9uLCBsaWtlCisgKiBXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXR1
cmVfczN0YworICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTmFtZSBvZiBleHRlbnNpb24gdG8gbG9v
ayBmb3IuCisgKiBAcmV0dXJuIHtXZWJHTEV4dGVuc2lvbn0gVGhlIGV4dGVuc2lvbiBvciB1bmRl
ZmluZWQgaWYgbm90CisgKiAgICAgZm91bmQuCisgKi8KK3ZhciBnZXRFeHRlbnNpb25XaXRoS25v
d25QcmVmaXhlcyA9IGZ1bmN0aW9uKGdsLCBuYW1lKSB7CisgIGZvciAodmFyIGlpID0gMDsgaWkg
PCBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHByZWZpeGVkTmFtZSA9
IGJyb3dzZXJQcmVmaXhlc1tpaV0gKyBuYW1lOworICAgIHZhciBleHQgPSBnbC5nZXRFeHRlbnNp
b24ocHJlZml4ZWROYW1lKTsKKyAgICBpZiAoZXh0KSB7CisgICAgICByZXR1cm4gZXh0OworICAg
IH0KKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIHBvc3NpYmxlIHByZWZpeGVkIHZlcnNpb25z
IG9mIGFuIGV4dGVuc2lvbidzIG5hbWUuCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9m
IGV4dGVuc2lvbi4gTWF5IGFscmVhZHkgaW5jbHVkZSBhIHByZWZpeC4KKyAqIEByZXR1cm4ge0Fy
cmF5LjxzdHJpbmc+fSBWYXJpYXRpb25zIG9mIHRoZSBleHRlbnNpb24gbmFtZSB3aXRoIGtub3du
CisgKiAgICAgYnJvd3NlciBwcmVmaXhlcy4KKyAqLwordmFyIGdldEV4dGVuc2lvblByZWZpeGVk
TmFtZXMgPSBmdW5jdGlvbihuYW1lKSB7CisgIHZhciB1bnByZWZpeCA9IGZ1bmN0aW9uKG5hbWUp
IHsKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYnJvd3NlclByZWZpeGVzLmxlbmd0aDsgKytp
aSkgeworICAgICAgaWYgKGJyb3dzZXJQcmVmaXhlc1tpaV0ubGVuZ3RoID4gMCAmJgorICAgICAg
ICAgIG5hbWUuc3Vic3RyaW5nKDAsIGJyb3dzZXJQcmVmaXhlc1tpaV0ubGVuZ3RoKS50b0xvd2Vy
Q2FzZSgpID09PQorICAgICAgICAgIGJyb3dzZXJQcmVmaXhlc1tpaV0udG9Mb3dlckNhc2UoKSkg
eworICAgICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoYnJvd3NlclByZWZpeGVzW2lpXS5sZW5n
dGgpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmFtZTsKKyAgfQorCisgIHZhciB1bnBy
ZWZpeGVkID0gdW5wcmVmaXgobmFtZSk7CisKKyAgdmFyIHZhcmlhdGlvbnMgPSBbXTsKKyAgZm9y
ICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2
YXJpYXRpb25zLnB1c2goYnJvd3NlclByZWZpeGVzW2lpXSArIHVucHJlZml4ZWQpOworICB9CisK
KyAgcmV0dXJuIHZhcmlhdGlvbnM7Cit9OworCit2YXIgcmVwbGFjZVJFID0gL1wkXCgoXHcrKVwp
L2c7CisKKy8qKgorICogUmVwbGFjZXMgc3RyaW5ncyB3aXRoIHByb3BlcnR5IHZhbHVlcy4KKyAq
IEdpdmVuIGEgc3RyaW5nIGxpa2UgImhlbGxvICQoZmlyc3QpICQobGFzdCkiIGFuZCBhbiBvYmpl
Y3QKKyAqIGxpa2Uge2ZpcnN0OiJKb2huIiwgbGFzdDoiU21pdGgifSB3aWxsIHJldHVybgorICog
ImhlbGxvIEpvaG4gU21pdGgiLgorICogQHBhcmFtIHtzdHJpbmd9IHN0ciBTdHJpbmcgdG8gZG8g
cmVwbGFjZW1lbnRzIGluLgorICogQHBhcmFtIHsuLi59IDEgb3IgbW9yZSBvYmplY3RzIGNvbnRh
aW5pbmcgcHJvcGVydGllcy4KKyAqLwordmFyIHJlcGxhY2VQYXJhbXMgPSBmdW5jdGlvbihzdHIp
IHsKKyAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CisgIHJldHVybiBzdHIucmVwbGFjZShyZXBsYWNl
UkUsIGZ1bmN0aW9uKHN0ciwgcDEsIG9mZnNldCwgcykgeworICAgIGZvciAodmFyIGlpID0gMTsg
aWkgPCBhcmdzLmxlbmd0aDsgKytpaSkgeworICAgICAgaWYgKGFyZ3NbaWldW3AxXSAhPT0gdW5k
ZWZpbmVkKSB7CisgICAgICAgIHJldHVybiBhcmdzW2lpXVtwMV07CisgICAgICB9CisgICAgfQor
ICAgIHRocm93ICJ1bmtub3duIHN0cmluZyBwYXJhbSAnIiArIHAxICsgIiciOworICB9KTsKK307
CisKK3ZhciB1cHBlckNhc2VGaXJzdExldHRlciA9IGZ1bmN0aW9uKHN0cikgeworICByZXR1cm4g
c3RyLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTsKK307
CisKKy8qKgorICogR2V0cyBhIHByZWZpeGVkIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwKKyAqCisg
KiAgICAgdmFyIGZuID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eSgKKyAqICAgICAgICB3aW5kb3csCisg
KiAgICAgICAgInJlcXVlc3RBbmltYXRpb25GcmFtZSIpOworICoKKyAqIFdpbGwgcmV0dXJuIGVp
dGhlcjoKKyAqICAgICJ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgICJ3aW5k
b3cub1JlcXVlc3RBbmltYXRpb25GcmFtZSIsCisgKiAgICAid2luZG93Lm1zUmVxdWVzdEFuaW1h
dGlvbkZyYW1lIiwKKyAqICAgICJ3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAq
ICAgICJ3aW5kb3cud2ViS2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgIHVuZGVmaW5l
ZAorICoKKyAqIHRoZSBub24tcHJlZml4ZWQgZnVuY3Rpb24gaXMgdHJpZWQgZmlyc3QuCisgKi8K
K3ZhciBwcm9wZXJ0eVByZWZpeGVzID0gWyIiLCAibW96IiwgIm1zIiwgIm8iLCAid2Via2l0Il07
Cit2YXIgZ2V0UHJlZml4ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcGVydHlOYW1lKSB7
CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBwcm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytpaSkg
eworICAgIHZhciBwcmVmaXggPSBwcm9wZXJ0eVByZWZpeGVzW2lpXTsKKyAgICB2YXIgbmFtZSA9
IHByZWZpeCArIHByb3BlcnR5TmFtZTsKKyAgICBsb2cobmFtZSk7CisgICAgdmFyIHByb3BlcnR5
ID0gb2JqW25hbWVdOworICAgIGlmIChwcm9wZXJ0eSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5
OworICAgIH0KKyAgICBpZiAoaWkgPT0gMCkgeworICAgICAgcHJvcGVydHlOYW1lID0gdXBwZXJD
YXNlRmlyc3RMZXR0ZXIocHJvcGVydHlOYW1lKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHVuZGVm
aW5lZDsKK307CisKK3ZhciBfcmVxdWVzdEFuaW1GcmFtZTsKKworLyoqCisgKiBQcm92aWRlcyBy
ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW4gYSBjcm9zcyBicm93c2VyIHdheS4KKyAqLwordmFyIHJl
cXVlc3RBbmltRnJhbWUgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICBpZiAoIV9yZXF1ZXN0QW5p
bUZyYW1lKSB7CisgICAgX3JlcXVlc3RBbmltRnJhbWUgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHdp
bmRvdywgInJlcXVlc3RBbmltYXRpb25GcmFtZSIpIHx8CisgICAgICBmdW5jdGlvbihjYWxsYmFj
aywgZWxlbWVudCkgeworICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ss
IDEwMDAgLyA3MCk7CisgICAgICB9OworICB9CisgIGxvZygicmVxdWVzdEFuaW1GcmFtZTogZG9j
dW1lbnQuaGlkZGVuID0gIiArIGRvY3VtZW50LmhpZGRlbik7CisgIF9yZXF1ZXN0QW5pbUZyYW1l
LmNhbGwod2luZG93LCBjYWxsYmFjayk7Cit9OworCit2YXIgX2NhbmNlbEFuaW1GcmFtZTsKKwor
LyoqCisgKiBQcm92aWRlcyBjYW5jZWxBbmltYXRpb25GcmFtZSBpbiBhIGNyb3NzIGJyb3dzZXIg
d2F5LgorICovCit2YXIgY2FuY2VsQW5pbUZyYW1lID0gZnVuY3Rpb24ocmVxdWVzdCkgeworICBp
ZiAoIV9jYW5jZWxBbmltRnJhbWUpIHsKKyAgICBfY2FuY2VsQW5pbUZyYW1lID0gZ2V0UHJlZml4
ZWRQcm9wZXJ0eSh3aW5kb3csICJjYW5jZWxBbmltYXRpb25GcmFtZSIpIHx8CisgICAgICB3aW5k
b3cuY2xlYXJUaW1lb3V0OworICB9CisgIF9jYW5jZWxBbmltRnJhbWUuY2FsbCh3aW5kb3csIHJl
cXVlc3QpOworfTsKKworLyoqCisgKiBQcm92aWRlcyByZXF1ZXN0RnVsbFNjcmVlbiBpbiBhIGNy
b3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgcmVxdWVzdEZ1bGxTY3JlZW4gPSBmdW5jdGlvbihl
bGVtZW50KSB7CisgIHZhciBmbiA9IGdldFByZWZpeGVkUHJvcGVydHkoZWxlbWVudCwgInJlcXVl
c3RGdWxsU2NyZWVuIik7CisgIGlmIChmbikgeworICAgIGZuLmNhbGwoZWxlbWVudCk7CisgIH0K
K307CisKKy8qKgorICogUHJvdmlkZXMgY2FuY2VsRnVsbFNjcmVlbiBpbiBhIGNyb3NzIGJyb3dz
ZXIgd2F5LgorICovCit2YXIgY2FuY2VsRnVsbFNjcmVlbiA9IGZ1bmN0aW9uKCkgeworICB2YXIg
Zm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5KGRvY3VtZW50LCAiY2FuY2VsRnVsbFNjcmVlbiIpOwor
ICBpZiAoZm4pIHsKKyAgICBmbi5jYWxsKGRvY3VtZW50KTsKKyAgfQorfTsKKwordmFyIGZ1bGxT
Y3JlZW5TdGF0ZU5hbWU7CisoZnVuY3Rpb24oKSB7CisgIHZhciBmdWxsU2NyZWVuU3RhdGVOYW1l
cyA9IFsKKyAgICAiaXNGdWxsU2NyZWVuIiwKKyAgICAiZnVsbFNjcmVlbiIsCisgIF07CisgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBmdWxsU2NyZWVuU3RhdGVOYW1lcy5sZW5ndGg7ICsraWkpIHsK
KyAgICB2YXIgcHJvcGVydHlOYW1lID0gZnVsbFNjcmVlblN0YXRlTmFtZXNbaWldOworICAgIGZv
ciAodmFyIGpqID0gMDsgamogPCBwcm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytqaikgeworICAg
ICAgdmFyIHByZWZpeCA9IHByb3BlcnR5UHJlZml4ZXNbampdOworICAgICAgaWYgKHByZWZpeC5s
ZW5ndGgpIHsKKyAgICAgICAgcHJvcGVydHlOYW1lID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIocHJv
cGVydHlOYW1lKTsKKyAgICAgICAgZnVsbFNjcmVlblN0YXRlTmFtZSA9IHByZWZpeCArIHByb3Bl
cnR5TmFtZTsKKyAgICAgICAgaWYgKGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9
CisgICAgZnVsbFNjcmVlblN0YXRlTmFtZSA9IHVuZGVmaW5lZDsKKyAgfQorfSgpKTsKKworLyoq
CisgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBhY3RpdmUu
CisgKi8KK3ZhciBnZXRGdWxsU2NyZWVuU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgbG9nKCJmdWxs
c2NyZWVuc3RhdGVuYW1lOiIgKyBmdWxsU2NyZWVuU3RhdGVOYW1lKTsKKyAgbG9nKGRvY3VtZW50
W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdKTsKKyAgcmV0dXJuIGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0
ZU5hbWVdOworfTsKKworLyoqCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUg
ZWxlbWVudCB0byBnbyBmdWxsc2NyZWVuLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbGVhbil9
IGNhbGxiYWNrIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZAorICogICAgICAgIHdoZW4g
ZW50ZXJpbmcvZXhpdGluZyBmdWxsc2NyZWVuLiBJdCBpcyBwYXNzZWQgdHJ1ZSBpZgorICogICAg
ICAgIGVudGVyaW5nIGZ1bGxzY3JlZW4sIGZhbHNlIGlmIGV4aXRpbmcuCisgKi8KK3ZhciBvbkZ1
bGxTY3JlZW5DaGFuZ2UgPSBmdW5jdGlvbihlbGVtZW50LCBjYWxsYmFjaykgeworICBwcm9wZXJ0
eVByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24ocHJlZml4KSB7CisgICAgdmFyIGV2ZW50TmFtZSA9
IHByZWZpeCArICJmdWxsc2NyZWVuY2hhbmdlIjsKKyAgICBsb2coImFkZGV2ZW50OiAiICsgZXZl
bnROYW1lKTsKKyAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICAgIGxvZygiZXZlbnQ6ICIgKyBldmVudE5hbWUpOworICAgICAgY2Fs
bGJhY2soZ2V0RnVsbFNjcmVlblN0YXRlKCkpOworICAgIH0pOworICB9KTsKK307CisKKy8qKgor
ICogQHBhcmFtIHshc3RyaW5nfSBidXR0b25JZCBUaGUgaWQgb2YgdGhlIGJ1dHRvbiB0aGF0IHdp
bGwgdG9nZ2xlIGZ1bGxzY3JlZW4KKyAqICAgICAgICBtb2RlLgorICogQHBhcmFtIHshc3RyaW5n
fSBmdWxsc2NyZWVuSWQgVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCisg
KiBAcGFyYW0geyFmdW5jdGlvbihib29sZWFuKX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdp
bGwgYmUgY2FsbGVkCisgKiAgICAgICAgd2hlbiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4u
IEl0IGlzIHBhc3NlZCB0cnVlIGlmCisgKiAgICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFs
c2UgaWYgZXhpdGluZy4KKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZnVsbHNjcmVlbiBt
b2RlIGlzIHN1cHBvcnRlZC4KKyAqLwordmFyIHNldHVwRnVsbHNjcmVlbiA9IGZ1bmN0aW9uKGJ1
dHRvbklkLCBmdWxsc2NyZWVuSWQsIGNhbGxiYWNrKSB7CisgIGlmICghZnVsbFNjcmVlblN0YXRl
TmFtZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZhciBmdWxsc2NyZWVuRWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZ1bGxzY3JlZW5JZCk7CisgIG9uRnVsbFNjcmVl
bkNoYW5nZShmdWxsc2NyZWVuRWxlbWVudCwgY2FsbGJhY2spOworCisgIHZhciB0b2dnbGVGdWxs
U2NyZWVuID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZ2V0RnVsbFNjcmVlblN0YXRlKCkp
IHsKKyAgICAgIGNhbmNlbEZ1bGxTY3JlZW4oZnVsbHNjcmVlbkVsZW1lbnQpOworICAgIH0gZWxz
ZSB7CisgICAgICByZXF1ZXN0RnVsbFNjcmVlbihmdWxsc2NyZWVuRWxlbWVudCk7CisgICAgfQor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisg
IHZhciBidXR0b25FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0dG9uSWQpOwor
ICBidXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlRnVsbFNjcmVl
bik7CisKKyAgcmV0dXJuIHRydWU7Cit9OworCisvKioKKyAqIFdhaXRzIGZvciB0aGUgYnJvd3Nl
ciB0byBjb21wb3NpdGUgdGhlIHdlYiBwYWdlLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxs
YmFjayBBIGZ1bmN0aW9uIHRvIGNhbGwgYWZ0ZXIgY29tcG9zaXRpbmcgaGFzIHRha2VuCisgKiAg
ICAgICAgcGxhY2UuCisgKi8KK3ZhciB3YWl0Rm9yQ29tcG9zaXRlID0gZnVuY3Rpb24oY2FsbGJh
Y2spIHsKKyAgdmFyIGZyYW1lcyA9IDU7CisgIHZhciBjb3VudERvd24gPSBmdW5jdGlvbigpIHsK
KyAgICBpZiAoZnJhbWVzID09IDApIHsKKyAgICAgIGxvZygid2FpdEZvckNvbXBvc2l0ZTogY2Fs
bGJhY2siKTsKKyAgICAgIGNhbGxiYWNrKCk7CisgICAgfSBlbHNlIHsKKyAgICAgIGxvZygid2Fp
dEZvckNvbXBvc2l0ZTogY291bnRkb3duKCIgKyBmcmFtZXMgKyAiKSIpOworICAgICAgLS1mcmFt
ZXM7CisgICAgICByZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCBjb3VudERvd24pOworICAg
IH0KKyAgfTsKKyAgY291bnREb3duKCk7Cit9OworCit2YXIgc2V0WmVyb1RpbWVvdXQgPSAoZnVu
Y3Rpb24oKSB7CisgIC8vIFNlZSBodHRwczovL2RiYXJvbi5vcmcvbG9nLzIwMTAwMzA5LWZhc3Rl
ci10aW1lb3V0cworCisgIHZhciB0aW1lb3V0cyA9IFtdOworICB2YXIgbWVzc2FnZU5hbWUgPSAi
emVyby10aW1lb3V0LW1lc3NhZ2UiOworCisgIC8vIExpa2Ugc2V0VGltZW91dCwgYnV0IG9ubHkg
dGFrZXMgYSBmdW5jdGlvbiBhcmd1bWVudC4gIFRoZXJlJ3MKKyAgLy8gbm8gdGltZSBhcmd1bWVu
dCAoYWx3YXlzIHplcm8pIGFuZCBubyBhcmd1bWVudHMgKHlvdSBoYXZlIHRvCisgIC8vIHVzZSBh
IGNsb3N1cmUpLgorICBmdW5jdGlvbiBzZXRaZXJvVGltZW91dChmbikgeworICAgICAgdGltZW91
dHMucHVzaChmbik7CisgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UobWVzc2FnZU5hbWUsICIqIik7
CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7CisgICAgICBpZiAoZXZl
bnQuc291cmNlID09IHdpbmRvdyAmJiBldmVudC5kYXRhID09IG1lc3NhZ2VOYW1lKSB7CisgICAg
ICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgaWYgKHRpbWVvdXRzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgdmFyIGZuID0gdGltZW91dHMuc2hpZnQoKTsKKyAg
ICAgICAgICAgICAgZm4oKTsKKyAgICAgICAgICB9CisgICAgICB9CisgIH0KKworICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGhhbmRsZU1lc3NhZ2UsIHRydWUpOworCisgIHJl
dHVybiBzZXRaZXJvVGltZW91dDsKK30pKCk7CisKKy8qKgorICogUnVucyBhbiBhcnJheSBvZiBm
dW5jdGlvbnMsIHlpZWxkaW5nIHRvIHRoZSBicm93c2VyIGJldHdlZW4gZWFjaCBzdGVwLgorICog
SWYgeW91IHdhbnQgdG8ga25vdyB3aGVuIGFsbCB0aGUgc3RlcHMgYXJlIGZpbmlzaGVkIGFkZCBh
IGxhc3Qgc3RlcC4KKyAqIEBwYXJhbSB7IUFycmF5LjxmdW5jdGlvbigpOiB2b2lkPn0gc3RlcHMu
IEFycmF5IG9mIGZ1bmN0aW9ucy4KKyAqLwordmFyIHJ1blN0ZXBzID0gZnVuY3Rpb24oc3RlcHMp
IHsKKyAgaWYgKCFzdGVwcy5sZW5ndGgpIHsKKyAgICByZXR1cm47CisgIH0KKworICAvLyBjb3B5
IHN0ZXBzIHNvIHRoZXkgY2FuJ3QgYmUgbW9kaWZlZC4KKyAgdmFyIHN0ZXBzVG9SdW4gPSBzdGVw
cy5zbGljZSgpOworICB2YXIgY3VycmVudFN0ZXAgPSAwOworICB2YXIgcnVuTmV4dFN0ZXAgPSBm
dW5jdGlvbigpIHsKKyAgICBzdGVwc1RvUnVuW2N1cnJlbnRTdGVwKytdKCk7CisgICAgaWYgKGN1
cnJlbnRTdGVwIDwgc3RlcHNUb1J1bi5sZW5ndGgpIHsKKyAgICAgIHNldFRpbWVvdXQocnVuTmV4
dFN0ZXAsIDEpOworICAgIH0KKyAgfTsKKyAgcnVuTmV4dFN0ZXAoKTsKK307CisKKy8qKgorICog
U3RhcnRzIHBsYXlpbmcgYSB2aWRlbyBhbmQgd2FpdHMgZm9yIGl0IHRvIGJlIGNvbnN1bWFibGUu
CisgKiBAcGFyYW0geyFIVE1MVmlkZW9FbGVtZW50fSB2aWRlbyBBbiBIVE1MNSBWaWRlbyBlbGVt
ZW50LgorICogQHBhcmFtIHshZnVuY3Rpb24oIUhUTUxWaWRlb0VsZW1lbnQpOiB2b2lkPn0gY2Fs
bGJhY2sgRnVuY3Rpb24gdG8gY2FsbCB3aGVuCisgKiAgICAgICAgdmlkZW8gaXMgcmVhZHkuCisg
Ki8KK3ZhciBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW8gPSBmdW5jdGlvbih2aWRlbywgY2Fs
bGJhY2spIHsKKyAgdmFyIGdvdFBsYXlpbmcgPSBmYWxzZTsKKyAgdmFyIGdvdFRpbWVVcGRhdGUg
PSBmYWxzZTsKKworICB2YXIgbWF5YmVDYWxsQ2FsbGJhY2sgPSBmdW5jdGlvbigpIHsKKyAgICBp
ZiAoZ290UGxheWluZyAmJiBnb3RUaW1lVXBkYXRlICYmIGNhbGxiYWNrKSB7CisgICAgICBjYWxs
YmFjayh2aWRlbyk7CisgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDsKKyAgICAgIHZpZGVvLnJl
bW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBwbGF5aW5nTGlzdGVuZXIsIHRydWUpOworICAg
ICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRpbWV1cGRhdGVMaXN0
ZW5lciwgdHJ1ZSk7CisgICAgfQorICB9OworCisgIHZhciBwbGF5aW5nTGlzdGVuZXIgPSBmdW5j
dGlvbigpIHsKKyAgICBnb3RQbGF5aW5nID0gdHJ1ZTsKKyAgICBtYXliZUNhbGxDYWxsYmFjaygp
OworICB9OworCisgIHZhciB0aW1ldXBkYXRlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHsKKyAgICAv
LyBDaGVja2luZyB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgdGltZSBoYXMgYWR2YW5jZWQgYmV5
b25kCisgICAgLy8gdGhlIHN0YXJ0IHRpbWUgc2VlbXMgdG8gYmUgYSByZWxpYWJsZSBoZXVyaXN0
aWMgdGhhdCB0aGUKKyAgICAvLyB2aWRlbyBlbGVtZW50IGhhcyBkYXRhIHRoYXQgY2FuIGJlIGNv
bnN1bWVkLgorICAgIGlmICh2aWRlby5jdXJyZW50VGltZSA+IDAuMCkgeworICAgICAgZ290VGlt
ZVVwZGF0ZSA9IHRydWU7CisgICAgICBtYXliZUNhbGxDYWxsYmFjaygpOworICAgIH0KKyAgfTsK
KworICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgcGxheWluZ0xpc3RlbmVyLCB0
cnVlKTsKKyAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRpbWV1cGRhdGVM
aXN0ZW5lciwgdHJ1ZSk7CisgIHZpZGVvLmxvb3AgPSB0cnVlOworICB2aWRlby5tdXRlZCA9IHRy
dWU7CisgIHZpZGVvLnBsYXkoKTsKK307CisKK3ZhciBnZXRIb3N0ID0gZnVuY3Rpb24odXJsKSB7
CisgIHVybCA9IHVybC5yZXBsYWNlKCJcXCIsICIvIik7CisgIHZhciBwb3MgPSB1cmwuaW5kZXhP
ZigiOi8vIik7CisgIGlmIChwb3MgPj0gMCkgeworICAgIHVybCA9IHVybC5zdWJzdHIocG9zICsg
Myk7CisgIH0KKyAgdmFyIHBhcnRzID0gdXJsLnNwbGl0KCcvJyk7CisgIHJldHVybiBwYXJ0c1sw
XTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsYXN0IDIgd29yZHMgb2YgdGhl
IGRvbWFpbiBvZiBhIFVSTAorLy8gVGhpcyBpcyBwcm9iYWJseSBub3QgdGhlIGNvcnJlY3QgY2hl
Y2sgYnV0IGl0IHdpbGwgZG8gZm9yIG5vdy4KK3ZhciBnZXRCYXNlRG9tYWluID0gZnVuY3Rpb24o
aG9zdCkgeworICB2YXIgcGFydHMgPSBob3N0LnNwbGl0KCI6Iik7CisgIHZhciBob3N0bmFtZSA9
IHBhcnRzWzBdOworICB2YXIgcG9ydCA9IHBhcnRzWzFdIHx8ICI4MCI7CisgIHBhcnRzID0gaG9z
dG5hbWUuc3BsaXQoIi4iKTsKKyAgaWYocGFydHMubGVuZ3RoIDwgMikKKyAgICByZXR1cm4gaG9z
dG5hbWUgKyAiOiIgKyBwb3J0OworICB2YXIgdGxkID0gcGFydHNbcGFydHMubGVuZ3RoLTFdOwor
ICB2YXIgZG9tYWluID0gcGFydHNbcGFydHMubGVuZ3RoLTJdOworICByZXR1cm4gZG9tYWluICsg
Ii4iICsgdGxkICsgIjoiICsgcG9ydDsKK30KKwordmFyIHJ1bm5pbmdPbkxvY2FsaG9zdCA9IGZ1
bmN0aW9uKCkgeworICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLmluZGV4T2YoImxv
Y2FsaG9zdCIpICE9IC0xIHx8CisgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhP
ZigiMTI3LjAuMC4xIikgIT0gLTE7Cit9CisKK3ZhciBnZXRMb2NhbENyb3NzT3JpZ2luID0gZnVu
Y3Rpb24oKSB7CisgIHZhciBkb21haW47CisgIGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5pbmRl
eE9mKCJsb2NhbGhvc3QiKSAhPSAtMSkgeworICAgIGRvbWFpbiA9ICIxMjcuMC4wLjEiOworICB9
IGVsc2UgeworICAgIGRvbWFpbiA9ICJsb2NhbGhvc3QiOworICB9CisKKyAgdmFyIHBvcnQgPSB3
aW5kb3cubG9jYXRpb24ucG9ydCB8fCAiODAiOworICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBy
b3RvY29sICsgIi8vIiArIGRvbWFpbiArICI6IiArIHBvcnQKK30KKwordmFyIGdldFJlbGF0aXZl
UGF0aCA9IGZ1bmN0aW9uKHBhdGgpIHsKKyAgdmFyIHJlbHBhcnRzID0gd2luZG93LmxvY2F0aW9u
LnBhdGhuYW1lLnNwbGl0KCIvIik7CisgIHJlbHBhcnRzLnBvcCgpOyAvLyBQb3Agb2ZmIGZpbGVu
YW1lCisgIHZhciBwYXRocGFydHMgPSBwYXRoLnNwbGl0KCIvIik7CisKKyAgdmFyIGk7CisgIGZv
ciAoaSA9IDA7IGkgPCBwYXRocGFydHMubGVuZ3RoOyArK2kpIHsKKyAgICBzd2l0Y2ggKHBhdGhw
YXJ0c1tpXSkgeworICAgICAgY2FzZSAiIjogYnJlYWs7CisgICAgICBjYXNlICIuIjogYnJlYWs7
CisgICAgICBjYXNlICIuLiI6CisgICAgICAgIHJlbHBhcnRzLnBvcCgpOworICAgICAgICBicmVh
azsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIHJlbHBhcnRzLnB1c2gocGF0aHBhcnRzW2ldKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgcmV0dXJuIHJlbHBhcnRzLmpvaW4oIi8i
KTsKK30KKwordmFyIHNldHVwSW1hZ2VGb3JDcm9zc09yaWdpblRlc3QgPSBmdW5jdGlvbihpbWcs
IGltZ1VybCwgbG9jYWxVcmwsIGNhbGxiYWNrKSB7CisgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVy
KCJsb2FkIiwgZnVuY3Rpb24oKSB7CisgICAgaWYgKHR5cGVvZihpbWcpID09ICJzdHJpbmciKQor
ICAgICAgaW1nID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpbWcpOworICAgIGlmICghaW1nKQor
ICAgICAgaW1nID0gbmV3IEltYWdlKCk7CisKKyAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcigibG9h
ZCIsIGNhbGxiYWNrLCBmYWxzZSk7CisgICAgaW1nLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwg
Y2FsbGJhY2ssIGZhbHNlKTsKKworICAgIGlmIChydW5uaW5nT25Mb2NhbGhvc3QoKSkKKyAgICAg
IGltZy5zcmMgPSBnZXRMb2NhbENyb3NzT3JpZ2luKCkgKyBnZXRSZWxhdGl2ZVBhdGgobG9jYWxV
cmwpOworICAgIGVsc2UKKyAgICAgIGltZy5zcmMgPSBnZXRVcmxPcHRpb25zKCkuaW1nVXJsIHx8
IGltZ1VybDsKKyAgfSwgZmFsc2UpOworfQorCityZXR1cm4geworICBhZGRTaGFkZXJTb3VyY2U6
IGFkZFNoYWRlclNvdXJjZSwKKyAgYWRkU2hhZGVyU291cmNlczogYWRkU2hhZGVyU291cmNlcywK
KyAgY2FuY2VsQW5pbUZyYW1lOiBjYW5jZWxBbmltRnJhbWUsCisgIGNyZWF0ZTNEQ29udGV4dDog
Y3JlYXRlM0RDb250ZXh0LAorICBjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRUaHJvd3NP
bkdMRXJyb3I6CisgICAgICBjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdM
RXJyb3IsCisgIGNoZWNrQXJlYUluQW5kT3V0OiBjaGVja0FyZWFJbkFuZE91dCwKKyAgY2hlY2tD
YW52YXM6IGNoZWNrQ2FudmFzLAorICBjaGVja0NhbnZhc1JlY3Q6IGNoZWNrQ2FudmFzUmVjdCwK
KyAgY2hlY2tDYW52YXNSZWN0Q29sb3I6IGNoZWNrQ2FudmFzUmVjdENvbG9yLAorICBjaGVja1Rl
eHR1cmVTaXplOiBjaGVja1RleHR1cmVTaXplLAorICBjbGlwVG9SYW5nZTogY2xpcFRvUmFuZ2Us
CisgIGNyZWF0ZUNvbG9yZWRUZXh0dXJlOiBjcmVhdGVDb2xvcmVkVGV4dHVyZSwKKyAgY3JlYXRl
UHJvZ3JhbTogY3JlYXRlUHJvZ3JhbSwKKyAgY2xlYXJBbmREcmF3VW5pdFF1YWQ6IGNsZWFyQW5k
RHJhd1VuaXRRdWFkLAorICBjbGVhckFuZERyYXdJbmRleGVkUXVhZDogY2xlYXJBbmREcmF3SW5k
ZXhlZFF1YWQsCisgIGRpc3BhdGNoVGFzazogc2V0WmVyb1RpbWVvdXQsCisgIGRyYXdVbml0UXVh
ZDogZHJhd1VuaXRRdWFkLAorICBkcmF3SW5kZXhlZFF1YWQ6IGRyYXdJbmRleGVkUXVhZCwKKyAg
ZHJhd1VCeXRlQ29sb3JRdWFkOiBkcmF3VUJ5dGVDb2xvclF1YWQsCisgIGRyYXdGbG9hdENvbG9y
UXVhZDogZHJhd0Zsb2F0Q29sb3JRdWFkLAorICBkdW1wU2hhZGVyc0luZm86IGR1bXBTaGFkZXJz
SW5mbywKKyAgZW5kc1dpdGg6IGVuZHNXaXRoLAorICBmaWxsVGV4dHVyZTogZmlsbFRleHR1cmUs
CisgIGdldEJ5dGVzUGVyQ29tcG9uZW50OiBnZXRCeXRlc1BlckNvbXBvbmVudCwKKyAgZ2V0RXh0
ZW5zaW9uUHJlZml4ZWROYW1lczogZ2V0RXh0ZW5zaW9uUHJlZml4ZWROYW1lcywKKyAgZ2V0RXh0
ZW5zaW9uV2l0aEtub3duUHJlZml4ZXM6IGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzLAor
ICBnZXRGaWxlTGlzdEFzeW5jOiBnZXRGaWxlTGlzdEFzeW5jLAorICBnZXRMYXN0RXJyb3I6IGdl
dExhc3RFcnJvciwKKyAgZ2V0UHJlZml4ZWRQcm9wZXJ0eTogZ2V0UHJlZml4ZWRQcm9wZXJ0eSwK
KyAgZ2V0U2NyaXB0OiBnZXRTY3JpcHQsCisgIGdldFN1cHBvcnRlZEV4dGVuc2lvbldpdGhLbm93
blByZWZpeGVzOiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcywKKyAgZ2V0
VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWw6IGdldFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVs
LAorICBnZXRVcmxBcmd1bWVudHM6IGdldFVybEFyZ3VtZW50cywKKyAgZ2V0VXJsT3B0aW9uczog
Z2V0VXJsT3B0aW9ucywKKyAgZ2V0QXR0cmliTWFwOiBnZXRBdHRyaWJNYXAsCisgIGdldFVuaWZv
cm1NYXA6IGdldFVuaWZvcm1NYXAsCisgIGdsRW51bVRvU3RyaW5nOiBnbEVudW1Ub1N0cmluZywK
KyAgZ2xFcnJvclNob3VsZEJlOiBnbEVycm9yU2hvdWxkQmUsCisgIGdsVHlwZVRvVHlwZWRBcnJh
eVR5cGU6IGdsVHlwZVRvVHlwZWRBcnJheVR5cGUsCisgIGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNp
dGl2ZTogaGFzQXR0cmlidXRlQ2FzZUluc2Vuc2l0aXZlLAorICBpbnNlcnRJbWFnZTogaW5zZXJ0
SW1hZ2UsCisgIGxvYWRJbWFnZUFzeW5jOiBsb2FkSW1hZ2VBc3luYywKKyAgbG9hZEltYWdlc0Fz
eW5jOiBsb2FkSW1hZ2VzQXN5bmMsCisgIGxvYWRQcm9ncmFtOiBsb2FkUHJvZ3JhbSwKKyAgbG9h
ZFByb2dyYW1Gcm9tRmlsZTogbG9hZFByb2dyYW1Gcm9tRmlsZSwKKyAgbG9hZFByb2dyYW1Gcm9t
U2NyaXB0OiBsb2FkUHJvZ3JhbUZyb21TY3JpcHQsCisgIGxvYWRQcm9ncmFtRnJvbVNjcmlwdEV4
cGVjdEVycm9yOiBsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RFcnJvciwKKyAgbG9hZFNoYWRl
cjogbG9hZFNoYWRlciwKKyAgbG9hZFNoYWRlckZyb21GaWxlOiBsb2FkU2hhZGVyRnJvbUZpbGUs
CisgIGxvYWRTaGFkZXJGcm9tU2NyaXB0OiBsb2FkU2hhZGVyRnJvbVNjcmlwdCwKKyAgbG9hZFN0
YW5kYXJkUHJvZ3JhbTogbG9hZFN0YW5kYXJkUHJvZ3JhbSwKKyAgbG9hZFN0YW5kYXJkVmVydGV4
U2hhZGVyOiBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIsCisgIGxvYWRTdGFuZGFyZEZyYWdtZW50
U2hhZGVyOiBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlciwKKyAgbG9hZFRleHRGaWxlQXN5bmM6
IGxvYWRUZXh0RmlsZUFzeW5jLAorICBsb2FkVGV4dHVyZTogbG9hZFRleHR1cmUsCisgIGxvZzog
bG9nLAorICBsb2dnaW5nT2ZmOiBsb2dnaW5nT2ZmLAorICBtYWtlSW1hZ2U6IG1ha2VJbWFnZSwK
KyAgbWFrZUltYWdlRnJvbUNhbnZhczogbWFrZUltYWdlRnJvbUNhbnZhcywKKyAgbWFrZVZpZGVv
OiBtYWtlVmlkZW8sCisgIGVycm9yOiBlcnJvciwKKyAgc2hhbGxvd0NvcHlPYmplY3Q6IHNoYWxs
b3dDb3B5T2JqZWN0LAorICBzZXR1cENvbG9yUXVhZDogc2V0dXBDb2xvclF1YWQsCisgIHNldHVw
UHJvZ3JhbTogc2V0dXBQcm9ncmFtLAorICBzZXR1cFF1YWQ6IHNldHVwUXVhZCwKKyAgc2V0dXBJ
bmRleGVkUXVhZDogc2V0dXBJbmRleGVkUXVhZCwKKyAgc2V0dXBJbmRleGVkUXVhZFdpdGhPcHRp
b25zOiBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMsCisgIHNldHVwU2ltcGxlQ29sb3JGcmFn
bWVudFNoYWRlcjogc2V0dXBTaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyLAorICBzZXR1cFNpbXBs
ZUNvbG9yVmVydGV4U2hhZGVyOiBzZXR1cFNpbXBsZUNvbG9yVmVydGV4U2hhZGVyLAorICBzZXR1
cFNpbXBsZUNvbG9yUHJvZ3JhbTogc2V0dXBTaW1wbGVDb2xvclByb2dyYW0sCisgIHNldHVwU2lt
cGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyOiBzZXR1cFNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRl
ciwKKyAgc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbTogc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3Jh
bSwKKyAgc2V0dXBTaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyOiBzZXR1cFNpbXBsZVRleHR1cmVW
ZXJ0ZXhTaGFkZXIsCisgIHNldHVwU2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlcjogc2V0
dXBTaW1wbGVWZXJ0ZXhDb2xvckZyYWdtZW50U2hhZGVyLAorICBzZXR1cFNpbXBsZVZlcnRleENv
bG9yUHJvZ3JhbTogc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW0sCisgIHNldHVwU2ltcGxl
VmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXI6IHNldHVwU2ltcGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFk
ZXIsCisgIHNldHVwTm9UZXhDb29yZFRleHR1cmVQcm9ncmFtOiBzZXR1cE5vVGV4Q29vcmRUZXh0
dXJlUHJvZ3JhbSwKKyAgc2V0dXBOb1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlcjogc2V0dXBO
b1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlciwKKyAgc2V0dXBUZXh0dXJlZFF1YWQ6IHNldHVw
VGV4dHVyZWRRdWFkLAorICBzZXR1cFRleHR1cmVkUXVhZFdpdGhUZXhDb29yZHM6IHNldHVwVGV4
dHVyZWRRdWFkV2l0aFRleENvb3JkcywKKyAgc2V0dXBVbml0UXVhZDogc2V0dXBVbml0UXVhZCwK
KyAgc2V0dXBVbml0UXVhZFdpdGhUZXhDb29yZHM6IHNldHVwVW5pdFF1YWRXaXRoVGV4Q29vcmRz
LAorICBzZXRGbG9hdERyYXdDb2xvcjogc2V0RmxvYXREcmF3Q29sb3IsCisgIHNldFVCeXRlRHJh
d0NvbG9yOiBzZXRVQnl0ZURyYXdDb2xvciwKKyAgc3RhcnRQbGF5aW5nQW5kV2FpdEZvclZpZGVv
OiBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW8sCisgIHN0YXJ0c1dpdGg6IHN0YXJ0c1dpdGgs
CisgIHNob3VsZEdlbmVyYXRlR0xFcnJvcjogc2hvdWxkR2VuZXJhdGVHTEVycm9yLAorICBzaG91
bGRUaHJvd09yR2VuZXJhdGVHTEVycm9yOiBzaG91bGRUaHJvd09yR2VuZXJhdGVHTEVycm9yLAor
ICByZWFkRmlsZTogcmVhZEZpbGUsCisgIHJlYWRGaWxlTGlzdDogcmVhZEZpbGVMaXN0LAorICBy
ZXBsYWNlUGFyYW1zOiByZXBsYWNlUGFyYW1zLAorICByZXF1ZXN0QW5pbUZyYW1lOiByZXF1ZXN0
QW5pbUZyYW1lLAorICBydW5TdGVwczogcnVuU3RlcHMsCisgIHdhaXRGb3JDb21wb3NpdGU6IHdh
aXRGb3JDb21wb3NpdGUsCisKKyAgLy8gZnVsbHNjcmVlbiBhcGkKKyAgc2V0dXBGdWxsc2NyZWVu
OiBzZXR1cEZ1bGxzY3JlZW4sCisKKyAgZ2V0SG9zdDogZ2V0SG9zdCwKKyAgZ2V0QmFzZURvbWFp
bjogZ2V0QmFzZURvbWFpbiwKKyAgcnVubmluZ09uTG9jYWxob3N0OiBydW5uaW5nT25Mb2NhbGhv
c3QsCisgIGdldExvY2FsQ3Jvc3NPcmlnaW46IGdldExvY2FsQ3Jvc3NPcmlnaW4sCisgIGdldFJl
bGF0aXZlUGF0aDogZ2V0UmVsYXRpdmVQYXRoLAorICBzZXR1cEltYWdlRm9yQ3Jvc3NPcmlnaW5U
ZXN0OiBzZXR1cEltYWdlRm9yQ3Jvc3NPcmlnaW5UZXN0LAorCisgIG5vbmU6IGZhbHNlCit9Owor
Cit9KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>436696</attachid>
            <date>2021-08-27 17:31:00 -0700</date>
            <delta_ts>2021-09-13 05:15:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210827173059.patch</filename>
            <type>text/plain</type>
            <size>112927</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxMjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYWRmYTNjMGZlMzUxNTczZTZjMTRhZTNmYmM1ODIzNDI5ZTBkZTliMy4uNDIwM2I5ZGFiYmQw
NDZiYjAxNmVlOTA4ZWY1OTIwMzRmNTY5ZWZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIxIEBACisyMDIxLTA4LTI0ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisKKyAgICAgICAgQ2hhbmdlIFRyYW5zbGF0b3JNZXRhbERp
cmVjdCB0byBwcmVmaXggJ191JyB0byBhbGwgdXNlciBkZWZpbmVkIHZhcmlhYmxlcy4gQ2xlYW4g
dXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQgQU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVp
bmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3RlZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMu
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwOgorICAgICAg
ICAoTmFtZTo6ZW1pdCBjb25zdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHA6CisgICAgICAgIChTeW1ib2xFbnY6
OmdldFRleHR1cmVFbnYpOgorICAgICAgICAoU3ltYm9sRW52OjpnZXRTYW1wbGVyU3RydWN0KToK
KyAgICAgICAgKHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUpOgorICAgICAgICAqIHNyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW06CisgICAgICAgIChyeDo6
bXRsOjpHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ091dHB1dCk6CisKIDIwMjEtMDgt
MTcgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWV0YWwg
QU5HTEVdIEZpeCBvdmVyLWF1dG9yZWxlYXNlIG9mIHJ4OjpEaXNwbGF5TXRsOjpnZXRNZXRhbERl
dmljZU1hdGNoaW5nQXR0cmlidXRlKCkgYW5kIHZhcmlvdXMgT2JqZWN0aXZlLUMgbGVha3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCmluZGV4IDU1ZDQ3
MjU1MDYzOTQ2ODUzMjQwZmU4NGM5YWYzNTFjNTFmZThjZDMuLmE4MmZiNTYzNDQ1ZTAxNDRjN2Zi
N2MyNjYzOWMxMzc4MzgxMWZkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRv
ck1ldGFsRGlyZWN0LmNwcApAQCAtNTksOCArNTksOCBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFj
ZQogewogCi1jb25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIs
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlE
RmllbGQoImVtdWxhdGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2Nv
bnN0ZXhwciBOYW1lIGtDb3ZlcmFnZU1hc2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxkKCJl
bXVsYXRlZEluc3RhbmNlSUQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKIGNvbnN0ZXhw
ciBOYW1lIGtTYW1wbGVNYXNrV3JpdGVGdW5jTmFtZSgid3JpdGVTYW1wbGVNYXNrIiwgU3ltYm9s
VHlwZTo6QW5nbGVJbnRlcm5hbCk7CiAjaWYgMAogY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFw
cGVyRnVuY05hbWUoIkRpc2NhcmRXcmFwcGVyIik7CkBAIC02OCw4ICs2OCw4IEBAIGNvbnN0ZXhw
ciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBlciIpOwogY29uc3Rl
eHByIE5hbWUga0VtdWxhdGVkRGVwdGhSYW5nZVBhcmFtcygiRGVwdGhSYW5nZVBhcmFtcyIpOwog
Y29uc3RleHByIE5hbWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CiBjb25z
dGV4cHIgTmFtZSBrVW5pZm9ybXNWYXJOYW1lKGtVbmlmb3Jtc1Zhcik7Ci1jb25zdGV4cHIgTmFt
ZSBrRmxpcHBlZFBvaW50Q29vcmROYW1lKCJmbGlwcGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxp
cHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1l
IGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6
QnVpbHRJbik7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRG
cmFnQ29vcmQiLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIAogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSBrZ2xfVmVydGV4SURNZXRhbCgKICAgICBCdWlsdEluSWQ6OmdsX1ZlcnRleElELApAQCAt
ODc3LDcgKzg3Nyw2IEBAIHN0YXRpYyBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+IEdldE1zbEtl
eXdvcmRzKCkKICAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaG9ydCIpOwogICAgIGtleXdvcmRzLmVt
cGxhY2UoInNpZ25lZCIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInNpemVfdCIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoInNpemVvZiIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YWdlX2lu
Iik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fzc2VydCIpOwogICAgIGtleXdvcmRz
LmVtcGxhY2UoInN0YXRpY19jYXN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKaW5kZXggMDdjNWQxODVlNmZhZDM3NTY5ZWZjYmQ4
NTVmMmFlNDAxZTY0M2M4YS4uZDdhOTJkYTM1MmY0ZWJkMTBlMGU0Njk3N2JmN2ZmNWQyNjUzMTIx
OCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcApAQCAtNjksMTEgKzY5LDE5IEBAIHZvaWQgTmFtZTo6ZW1pdChUSW5mb1NpbmtCYXNl
ICZvdXQpIGNvbnN0CiAgICAgc3dpdGNoIChtU3ltYm9sVHlwZSkKICAgICB7CiAgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKyAgICAgICAgICAgIG91dCA8PCBtUmF3TmFtZTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkOgog
ICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKLSAgICAgICAgICAgIG91dCA8
PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIGlmKG1SYXdOYW1lICE9ICJtYWluIikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBvdXQgPDwga1VzZXJEZWZpbmVkTmFtZVByZWZpeCA8PCBt
UmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKLQogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CiAg
ICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAgICAgICAgaWYgKG1S
YXdOYW1lLmJlZ2luc1dpdGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1N5bWJvbEVudi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAppbmRl
eCAyZmQwOTExNjUwMjQ0ZDk0OGQxZDA0ODQwYjFiMzVmODA3YjhlN2QwLi45MzdhYTVmNDhjMTA0
ODdjZTQ5MmUxYjQ5YTYxOTA0ZmE5YjM5YTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3lt
Ym9sRW52LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApAQCAtMzkxLDEyICsz
OTEsMTIgQEAgY29uc3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNp
Y1R5cGUgc2FtcGxlclR5cGUpCiAgICAgewogICAgICAgICBhdXRvICp0ZXh0dXJlVHlwZSA9IG5l
dyBUVHlwZShzYW1wbGVyVHlwZSk7CiAgICAgICAgIGF1dG8gKnRleHR1cmUgICAgID0gbmV3IFRG
aWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtOb1NvdXJjZUxv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2xUeXBlOjpC
dWlsdEluKTsKICAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4dHVyZSwgQWRkcmVzc1NwYWNlOjpU
aHJlYWQpOwogCiAgICAgICAgIGF1dG8gKnNhbXBsZXIgPQogICAgICAgICAgICAgbmV3IFRGaWVs
ZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFsc2UpLCBJbW11dGFibGVTdHJpbmco
InNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAga05vU291cmNlTG9jLCBTeW1ib2xU
eXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgICAgICAgICAgICAgICAgIGtOb1NvdXJjZUxvYywg
U3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50ZXIoKnNhbXBsZXIsIEFk
ZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAogICAgICAgICBzdGQ6OnN0cmluZyBlbnZOYW1lOwpAQCAt
NDE1LDcgKzQxNSw3IEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0U2FtcGxlclN0
cnVjdCgpCiAgICAgaWYgKCFtU2FtcGxlcikKICAgICB7CiAgICAgICAgIG1TYW1wbGVyID0gbmV3
IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5nKCJtZXRhbDo6c2FtcGxl
ciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGRMaXN0KCks
IFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKICAgICB9CiAgICAg
cmV0dXJuICptU2FtcGxlcjsKIH0KQEAgLTcwMSw1ICs3MDEsNSBAQCBOYW1lIHNoOjpHZXRUZXh0
dXJlVHlwZU5hbWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKIAogI3VuZGVmIEhBTkRMRV9URVhU
VVJFX05BTUUKIAotICAgIHJldHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVk
KTsKKyAgICByZXR1cm4gTmFtZShuYW1lLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRh
bC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCmluZGV4IDc5
MTI4NWJiNDVmOWU4NjM0ODNhNDBkOGU3MDA5NTU2Y2YxMGVlNTIuLjFlZmFkNzM1NTc3OTQyMDlh
NjY1NzVkYTZkYzFmYmJlNzAxZWQwZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0K
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5tbQpAQCAtMTcsNyArMTcsNyBAQCBuYW1lc3BhY2UKIHsK
ICAgICBjb25zdGV4cHIgY2hhciBrWGZiQmluZGluZ3NNYXJrZXJbXSAgICA9ICJAQFhGQi1CaW5k
aW5nc0BAIjsKICAgICBjb25zdGV4cHIgY2hhciBrWGZiT3V0TWFya2VyW10gICAgID0gIkFOR0xF
X0BAWEZCLU9VVEBAIjsKLQorICAgIGNvbnN0ZXhwciBjaGFyIGtVc2VyRGVmaW5lZE5hbWVQcmVm
aXhbXSA9ICJfdSI7IC8vRGVmaW5lZCBpbiBHTFNMQU5HL1NoYWRlckxhbmcuaAogdGVtcGxhdGUg
PHNpemVfdCBOPgogY29uc3RleHByIHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtO
XSkKIHsKQEAgLTI1OCw3ICsyNTgsNyBAQCBzdGQ6OnN0cmluZyBHZW5lcmF0ZVRyYW5zZm9ybUZl
ZWRiYWNrVmFyeWluZ091dHB1dChjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYQogICAgICAg
ICAgICAgICAgICAgICAgICA8PCAiXSArIChnbF9WZXJ0ZXhJRCArIEFOR0xFX2luc3RhbmNlSWRN
b2QgKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5n
KHNoOjprVW5pZm9ybXNWYXIpIDw8ICIuQU5HTEVfeGZiVmVydGljZXNQZXJEcmF3KSAqICIgPDwg
c3RyaWRlCiAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IG9mZnNldCA8PCAiXSA9
ICIgPDwgImFzX3R5cGU8ZmxvYXQ+IiA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwg
IkFOR0xFX3ZlcnRleE91dC4iIDw8IHZhcnlpbmcubmFtZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgPDwgIkFOR0xFX3ZlcnRleE91dC4iIDw8IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggIDw8IHZh
cnlpbmcubmFtZTsKIAogICAgICAgICAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkoKSkKICAg
ICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggN2ZkMDgwZTFlNmNmNTZhOWZlM2ZjNGJjZGJhMDA2YTYw
MGQ3ZjFjOC4uNDk5MjMzMjg3MWYwMjQxOGFmNGFlNTA1N2EzN2IwYTg3MmY5ZmY5YSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0NSBAQAorMjAyMS0wOC0yNCAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0
b25AYXBwbGUuY29tPgorCisgICAgICAgIFNoYWRlcnRveSAidHJ1Y2hldCBkaXN0cmljdCIgZmFp
bHMgdG8gY29tcGlsZSB3aXRoIGVycm9yOiBJbnRlcm5hbCBlcnJvciBjb21waWxpbmcgc2hhZGVy
IHdpdGggTWV0YWwgYmFja2VuZCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyOTM3OAorCisgICAgICAgIEFkZCB0ZXN0cyBhbmQgc3VwcG9ydCBmaWxl
cyB0byBydW4gcGVuZGluZyB0ZXN0cy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5j
ZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtbWV0YWwtcmVzZXJ2ZWQtd29yZHMuaHRtbDogQWRkZWQu
CisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qczogQWRkZWQuCisgICAgICAgIChs
b2cpOgorICAgICAgICAoZXJyb3IpOgorICAgICAgICAobG9nZ2luZ09mZik6CisgICAgICAgIChn
bEVudW1Ub1N0cmluZyk6CisgICAgICAgIChnZXRMYXN0RXJyb3IpOgorICAgICAgICAoZW5kc1dp
dGgpOgorICAgICAgICAoc3RhcnRzV2l0aCk6CisgICAgICAgIChzZXR1cFNpbXBsZVRleHR1cmVW
ZXJ0ZXhTaGFkZXIpOgorICAgICAgICAoc2V0dXBTaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIp
OgorICAgICAgICAoc2V0dXBOb1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlcik6CisgICAgICAg
IChzZXR1cFNpbXBsZVZlcnRleENvbG9yVmVydGV4U2hhZGVyKToKKyAgICAgICAgKHNldHVwU2lt
cGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlcik6CisgICAgICAgIChzZXR1cFNpbXBsZUNvbG9y
VmVydGV4U2hhZGVyKToKKyAgICAgICAgKHNldHVwU2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlcik6
CisgICAgICAgIChzZXR1cFByb2dyYW0pOgorICAgICAgICAoc2V0dXBOb1RleENvb3JkVGV4dHVy
ZVByb2dyYW0pOgorICAgICAgICAoc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSk6CisgICAgICAg
IChzZXR1cFNpbXBsZVZlcnRleENvbG9yUHJvZ3JhbSk6CisgICAgICAgIChzZXR1cFNpbXBsZUNv
bG9yUHJvZ3JhbSk6CisgICAgICAgIChzZXR1cFVuaXRRdWFkKToKKyAgICAgICAgKHNldHVwVW5p
dFF1YWRXaXRoVGV4Q29vcmRzKToKKyAgICAgICAgKHNldHVwUXVhZCk6CisgICAgICAgIChzZXR1
cFRleHR1cmVkUXVhZCk6CisgICAgICAgIChzZXR1cENvbG9yUXVhZCk6CisgICAgICAgIChzZXR1
cFRleHR1cmVkUXVhZFdpdGhUZXhDb29yZHMpOgorICAgICAgICAoc2V0dXBJbmRleGVkUXVhZCk6
CisgICAgICAgIChzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMpOgorICAgICAgICAoZ2xUeXBl
VG9UeXBlZEFycmF5VHlwZSk6CisgICAgICAgIChnZXRCeXRlc1BlckNvbXBvbmVudCk6CisgICAg
ICAgIChnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbCk6CisgICAgICAgIChmaWxsVGV4dHVy
ZSk6CisgICAgICAgIChjcmVhdGVDb2xvcmVkVGV4dHVyZSk6CisgICAgICAgICh1Ynl0ZVRvRmxv
YXQpOgorICAgICAgICAodWJ5dGVDb2xvclRvRmxvYXRDb2xvcik6CisgICAgICAgIChzZXRGbG9h
dERyYXdDb2xvcik6CisgICAgICAgIChzZXRVQnl0ZURyYXdDb2xvcik6CisgICAgICAgIChkcmF3
RmxvYXRDb2xvclF1YWQpOgorICAgICAgICAoZHJhd1VCeXRlQ29sb3JRdWFkKToKKyAgICAgICAg
KGRyYXdVbml0UXVhZCk6CisgICAgICAgIChjbGVhckFuZERyYXdVbml0UXVhZCk6CisgICAgICAg
IChkcmF3SW5kZXhlZFF1YWQpOgorICAgICAgICAoY2xlYXJBbmREcmF3SW5kZXhlZFF1YWQpOgor
ICAgICAgICAoY2xpcFRvUmFuZ2UpOgorICAgICAgICAoaXNXZWJHTENvbnRleHQpOgorICAgICAg
ICAoY2hlY2tDYW52YXNSZWN0Q29sb3IpOgorICAgICAgICAoY2hlY2tDYW52YXNSZWN0KToKKyAg
ICAgICAgKGNoZWNrQ2FudmFzKToKKyAgICAgICAgKGNoZWNrQXJlYUluQW5kT3V0KToKKyAgICAg
ICAgKGltYWdlLm9ubG9hZCk6CisgICAgICAgIChsb2FkVGV4dHVyZSk6CisgICAgICAgIChjaGVj
a1RleHR1cmVTaXplKToKKyAgICAgICAgKHNoYWxsb3dDb3B5T2JqZWN0KToKKyAgICAgICAgKGhh
c0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSk6CisgICAgICAgIChnZXRVcmxPcHRpb25zKToKKyAg
ICAgICAgKGNyZWF0ZTNEQ29udGV4dCk6CisgICAgICAgIChjcmVhdGVHTEVycm9yV3JhcHBlcik6
CisgICAgICAgIChjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3Iu
d3JhcC5nZXRFcnJvcik6CisgICAgICAgIChjcmVhdGUzRENvbnRleHRXaXRoV3JhcHBlclRoYXRU
aHJvd3NPbkdMRXJyb3IpOgorICAgICAgICAoc2hvdWxkR2VuZXJhdGVHTEVycm9yKToKKyAgICAg
ICAgKHNob3VsZFRocm93T3JHZW5lcmF0ZUdMRXJyb3IpOgorICAgICAgICAoZ2xFcnJvclNob3Vs
ZEJlKToKKyAgICAgICAgKGxpbmtQcm9ncmFtKToKKyAgICAgICAgKHRyeS5yZXF1ZXN0Lm9ucmVh
ZHlzdGF0ZWNoYW5nZSk6CisgICAgICAgIChsb2FkVGV4dEZpbGVBc3luYyk6CisgICAgICAgIChn
ZXRGaWxlTGlzdEltcGwpOgorICAgICAgICAoZ2V0RmlsZUxpc3RBc3luYyk6CisgICAgICAgIChy
ZWFkRmlsZSk6CisgICAgICAgIChyZWFkRmlsZUxpc3QpOgorICAgICAgICAobG9hZFNoYWRlcik6
CisgICAgICAgIChsb2FkU2hhZGVyRnJvbUZpbGUpOgorICAgICAgICAoZ2V0U2NyaXB0KToKKyAg
ICAgICAgKGxvYWRTaGFkZXJGcm9tU2NyaXB0KToKKyAgICAgICAgKGxvYWRTdGFuZGFyZFByb2dy
YW0pOgorICAgICAgICAobG9hZFByb2dyYW1Gcm9tRmlsZSk6CisgICAgICAgIChsb2FkUHJvZ3Jh
bUZyb21TY3JpcHQpOgorICAgICAgICAoY3JlYXRlUHJvZ3JhbSk6CisgICAgICAgIChsb2FkUHJv
Z3JhbSk6CisgICAgICAgIChsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RFcnJvcik6CisgICAg
ICAgIChnZXRBY3RpdmVNYXApOgorICAgICAgICAoZ2V0QXR0cmliTWFwKToKKyAgICAgICAgKGdl
dFVuaWZvcm1NYXApOgorICAgICAgICAoZ2V0QmFzZVBhdGgpOgorICAgICAgICAobG9hZFN0YW5k
YXJkVmVydGV4U2hhZGVyKToKKyAgICAgICAgKGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyKToK
KyAgICAgICAgKGltZy5vbmxvYWQpOgorICAgICAgICAobG9hZEltYWdlQXN5bmMpOgorICAgICAg
ICAoaW1hZ2VMb2FkZWQpOgorICAgICAgICAobG9hZEltYWdlc0FzeW5jKToKKyAgICAgICAgKGdl
dFVybEFyZ3VtZW50cyk6CisgICAgICAgIChlbHNlLmltZy5vbmVycm9yKToKKyAgICAgICAgKG1h
a2VJbWFnZSk6CisgICAgICAgIChtYWtlSW1hZ2VGcm9tQ2FudmFzKToKKyAgICAgICAgKGVsc2Uu
dmlkLm9uZXJyb3IpOgorICAgICAgICAobWFrZVZpZGVvKToKKyAgICAgICAgKGluc2VydEltYWdl
KToKKyAgICAgICAgKGFkZFNoYWRlclNvdXJjZSk6CisgICAgICAgIChhZGRTaGFkZXJTb3VyY2Vz
KToKKyAgICAgICAgKGR1bXBTaGFkZXJzSW5mbyk6CisgICAgICAgIChnZXRTdXBwb3J0ZWRFeHRl
bnNpb25XaXRoS25vd25QcmVmaXhlcyk6CisgICAgICAgIChnZXRFeHRlbnNpb25XaXRoS25vd25Q
cmVmaXhlcyk6CisgICAgICAgICh1bnByZWZpeCk6CisgICAgICAgIChnZXRFeHRlbnNpb25QcmVm
aXhlZE5hbWVzKToKKyAgICAgICAgKHJlcGxhY2VQYXJhbXMpOgorICAgICAgICAodXBwZXJDYXNl
Rmlyc3RMZXR0ZXIpOgorICAgICAgICAoZ2V0UHJlZml4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChy
ZXF1ZXN0QW5pbUZyYW1lKToKKyAgICAgICAgKGNhbmNlbEFuaW1GcmFtZSk6CisgICAgICAgIChy
ZXF1ZXN0RnVsbFNjcmVlbik6CisgICAgICAgIChjYW5jZWxGdWxsU2NyZWVuKToKKyAgICAgICAg
KGdldEZ1bGxTY3JlZW5TdGF0ZSk6CisgICAgICAgIChvbkZ1bGxTY3JlZW5DaGFuZ2UpOgorICAg
ICAgICAodG9nZ2xlRnVsbFNjcmVlbik6CisgICAgICAgIChzZXR1cEZ1bGxzY3JlZW4pOgorICAg
ICAgICAoY291bnREb3duKToKKyAgICAgICAgKHdhaXRGb3JDb21wb3NpdGUpOgorICAgICAgICAo
c2V0WmVyb1RpbWVvdXQpOgorICAgICAgICAocnVuTmV4dFN0ZXApOgorICAgICAgICAocnVuU3Rl
cHMpOgorICAgICAgICAobWF5YmVDYWxsQ2FsbGJhY2spOgorICAgICAgICAocGxheWluZ0xpc3Rl
bmVyKToKKyAgICAgICAgKHRpbWV1cGRhdGVMaXN0ZW5lcik6CisgICAgICAgIChzdGFydFBsYXlp
bmdBbmRXYWl0Rm9yVmlkZW8pOgorICAgICAgICAoZ2V0SG9zdCk6CisgICAgICAgIChnZXRCYXNl
RG9tYWluKToKKyAgICAgICAgKHJ1bm5pbmdPbkxvY2FsaG9zdCk6CisgICAgICAgIChnZXRMb2Nh
bENyb3NzT3JpZ2luKToKKyAgICAgICAgKGdldFJlbGF0aXZlUGF0aCk6CisgICAgICAgIChzZXR1
cEltYWdlRm9yQ3Jvc3NPcmlnaW5UZXN0KToKKyAgICAgICAgKFdlYkdMVGVzdFV0aWxzKToKKwog
MjAyMS0wOC0xOCAgQ2FybG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbR1RLXVtXUEVdIEdhcmRlbmluZyBvZiBsYXlvdXQgdGVzdHMKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLW1ldGFsLXJl
c2VydmVkLXdvcmRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzg4NDcxYjBkMjZmNjU0Mzk3
ZjgyYzg0NDlhM2YwZGQ3NGM2MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
Z2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtbWV0YWwtcmVzZXJ2
ZWQtd29yZHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNSBAQAorVGhpcyB0ZXN0IHJ1bnMgdGhl
IFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9y
IEZBSUwuCisKK1Rlc3Q6IC4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1tZXRhbC1yZXNlcnZlZC13b3Jkcy5odG1sCitb
IFBBU1MgXSBBbGwgdGVzdHMgcGFzc2VkCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmds
L3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNj
L3NoYWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJn
bC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlz
Yy9zaGFkZXItd2l0aC1tZXRhbC1yZXNlcnZlZC13b3Jkcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjZTJm
OWM5MDIwZDkyMjIyZjdhZWQ2ZDYwZTE3MjkxM2Q2NjZkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1tZXRhbC1yZXNlcnZlZC13b3Jkcy5odG1sCkBA
IC0wLDAgKzEsMjYwIEBACis8IS0tCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEto
cm9ub3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZy
ZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMg
c29mdHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAi
TWF0ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9u
LCBpbmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29w
eSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFu
ZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJz
b25zIHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0
IHRvCisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQK
KyoqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFs
cy4KKyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdB
UlJBTlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVU
IE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC
TEUgRk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H
IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLS0+CisK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4K
Kzx0aXRsZT5XZWJHTCBHTFNMIENvbmZvcm1hbmNlIFRlc3RzIC0gTm9uIFJlc2VydmVkIFdvcmRz
PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L3Jlc291cmNlcy9nbHNsLWZlYXR1cmUtdGVzdHMuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMCIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWph
dmFzY3JpcHQiPgorc3RydWN0ICRyZXBsYWNlTWUgeworICB2ZWM0ICRyZXBsYWNlTWU7Cit9Owor
c3RydWN0IEZvbyB7CisgICRyZXBsYWNlTWUgJHJlcGxhY2VNZTsKK307CithdHRyaWJ1dGUgdmVj
NCBwb3NpdGlvbjsKK3ZvaWQgbWFpbigpCit7CisgICAgRm9vIGY7CisgICAgZi4kcmVwbGFjZU1l
LiRyZXBsYWNlTWUgPSBwb3NpdGlvbjsKKyAgICBnbF9Qb3NpdGlvbiA9IGYuJHJlcGxhY2VNZS4k
cmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjAiIHR5
cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwordmVjNCAkcmVwbGFjZU1lKCkgeworICAgIHJldHVybiB2ZWM0KDAsMSwwLDEpOworfQor
dm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1lKCk7Cit9Cis8L3Nj
cmlwdD4KKzxzY3JpcHQgaWQ9InZlcnRleFNoYWRlcjEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5v
dC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1haW4oKQor
eworICAgIGdsX1Bvc2l0aW9uID0gJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBp
ZD0iZnJhZ21lbnRTaGFkZXIxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+
CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZlYzQgZm9vKHZlYzQgJHJlcGxhY2VNZSkgewor
ICByZXR1cm4gJHJlcGxhY2VNZTsKK30KK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9y
ID0gZm9vKHZlYzQoMSwwLDEsMSkpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhT
aGFkZXIyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+Cit2YXJ5aW5nIHZl
YzQgJHJlcGxhY2VNZTsKK2F0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uOwordm9pZCBtYWluKCkKK3sK
KyAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICRyZXBsYWNlTWUgPSBwb3NpdGlvbjsK
K30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIyIiB0eXBlPSJ0ZXh0L3Nv
bWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3Zhcnlp
bmcgdmVjNCAkcmVwbGFjZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAk
cmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIzIiB0eXBl
PSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CithdHRyaWJ1dGUgdmVjNCBwb3NpdGlv
bjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjsKK30KKzwvc2Ny
aXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIzIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1u
b3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3VuaWZvcm0gdmVjNCAk
cmVwbGFjZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1l
OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit2YXIgTWV0YWxXb3Jk
cyA9IFsKKyAgImFsaWduYXMiLAorICAiYWxpZ25vZiIsCisgICJhc190eXBlIiwKKyAgImFuZCIs
CisgICJhdXRvIiwKKyAgImNhdGNoIiwKKyAgImNoYXIiLAorICAiY29uc3RfY2FzdCIsCisgICJj
b25zdGFudCIsCisgICJjb25zdGV4cHIiLAorICAiZGVjbHR5cGUiLAorICAiZGVsZXRlIiwKKyAg
ImRldmljZSIsCisgICJkeW5hbWljX2Nhc3QiLAorICAiZXhwbGljaXQiLAorICAiZXhwb3J0IiwK
KyAgImZyYWdtZW50IiwKKyAgImZyaWVuZCIsCisgICJpbnQxNl90IiwKKyAgImludDMyX3QiLAor
ICAiaW50NjRfdCIsCisgICJpbnQ4X3QiLAorICAia2VybmVsIiwKKyAgIm1haW4wIiwKKyAgIm1l
dGFsIiwKKyAgIm11dGFibGUiLAorICAibmV3IiwKKyAgIm5vZXhjZXB0IiwKKyAgIm51bGxwdHJf
dCIsCisgICJudWxscHRyIiwKKyAgIm9wZXJhdG9yIiwKKyAgIm92ZXJyaWRlIiwKKyAgIm9yIiwK
KyAgInByaXZhdGUiLAorICAicHJvdGVjdGVkIiwKKyAgInB0cmRpZmZfdCIsCisgICJyYXlfZGF0
YSIsCisgICJyZWdpc3RlciIsCisgICJzaWduZWQiLAorICAic2l6ZV90IiwKKyAgInN0YWdlX2lu
IiwKKyAgInN0YXRpY19hc3NlcnQiLAorICAic3RhdGljX2Nhc3QiLAorICAidGhyZWFkX2xvY2Fs
IiwKKyAgInRocmVhZCIsCisgICJ0aHJlYWRncm91cF9pbWFnZWJsb2NrIiwKKyAgInRocmVhZGdy
b3VwIiwKKyAgInRocm93IiwKKyAgInRyeSIsCisgICJ0eXBlaWQiLAorICAidHlwZW5hbWUiLAor
ICAidWNoYXIiLAorICAidWludDE2X3QiLAorICAidWludDMyX3QiLAorICAidWludDY0X3QiLAor
ICAidWludDhfdCIsCisgICJ1c2hvcnQiLAorICAidmVydGV4IiwKKyAgInZpcnR1YWwiLAorICAi
d2NoYXJfdCIsCisgICJ4b3IiLAorICAiTkFOIiwKKyAgIklORklOSVRZIgorXTsKKworCitkZXNj
cmlwdGlvbigpOworCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgZ2wgPSB3dHUuY3Jl
YXRlM0RDb250ZXh0KCk7CisKK3ZhciBiYWRXb3JkcyA9IFsKKyAgeyB3b3JkczogIE1ldGFsV29y
ZHMgfQorXTsKKworCisKK3ZhciBjaGVja2VkV29yZHMgPSB7fTsKKwordmFyIHNyYyA9IFtdOwor
Zm9yICh2YXIgaWkgPSAwOyBpaSA8IDQ7ICsraWkpIHsKKyAgdmFyIHZzcmMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgidmVydGV4U2hhZGVyIiArIGlpKS50ZXh0OworICB2YXIgZnNyYyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFnbWVudFNoYWRlciIgKyBpaSkudGV4dDsKKyAgc3Jj
LnB1c2goe3ZzcmM6IHZzcmMsIGZzcmM6IGZzcmN9KTsKK30KKwordmFyIGJhZFdvcmROZHggPSAw
OwordmFyIGxpc3ROZHggPSAwOworCitmdW5jdGlvbiB0ZXN0TmV4dFdvcmQoKSB7CisgIHZhciBs
aXN0ID0gYmFkV29yZHNbYmFkV29yZE5keF0ud29yZHM7CisgIGlmIChsaXN0TmR4ID49IGxpc3Qu
bGVuZ3RoKSB7CisgICAgKytiYWRXb3JkTmR4OworICAgIGlmIChiYWRXb3JkTmR4ID49IGJhZFdv
cmRzLmxlbmd0aCkgeworICAgICAgZmluaXNoVGVzdCgpOworICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBsaXN0TmR4ID0gMDsKKyAgICBsaXN0ID0gYmFkV29yZHNbYmFkV29yZE5keF0ud29yZHM7
CisgIH0KKyAgdGVzdFdvcmQobGlzdFtsaXN0TmR4XSk7CisgICsrbGlzdE5keDsKKyAgc2V0VGlt
ZW91dCh0ZXN0TmV4dFdvcmQsIDApOworfQordGVzdE5leHRXb3JkKCk7CisKK2Z1bmN0aW9uIHRl
c3RXb3JkKHdvcmQpIHsKKyAgaWYgKHdvcmQgaW4gY2hlY2tlZFdvcmRzKSB7CisgICAgcmV0dXJu
OworICB9CisgIGNoZWNrZWRXb3Jkc1t3b3JkXSA9IHRydWU7CisgIGRlYnVnKCIiKTsKKyAgZGVi
dWcoInRlc3Rpbmc6ICIgKyB3b3JkKTsKKworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgc3JjLmxl
bmd0aDsgKytpaSkgeworICAgIHZhciB2cyA9IHNyY1tpaV0udnNyYy5yZXBsYWNlKC9cJHJlcGxh
Y2VNZS9nLCB3b3JkKTsKKyAgICB2YXIgZnMgPSBzcmNbaWldLmZzcmMucmVwbGFjZSgvXCRyZXBs
YWNlTWUvZywgd29yZCk7CisKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgdmFyIHByb2dy
YW0gPSB3dHUubG9hZFByb2dyYW0oZ2wsIHZzLCBmcywgZnVuY3Rpb24obXNnKSB7CisgICAgICBk
ZWJ1Zyhtc2cpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0sIHRydWUpOworICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICB0ZXN0UGFzc2VkKCJzaGFkZXIgd2l0aDogJyIgKyB3b3JkICsg
IicgY29tcGlsZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgic2hhZGVyIHdp
dGg6ICciICsgd29yZCArICInIGZhaWxlZCB0byBjb21waWxlIik7CisgICAgfQorICAgIGlmIChw
cm9ncmFtKSB7CisgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgIH0KKyAgICB3
dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBHTCBlcnJv
cnMiKTsKKyAgfQorfQorCisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9yZXNvdXJjZXMv
d2ViZ2wtdGVzdC11dGlscy5qcyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDUwN2VhNDEyODAyNmM4MzVkYzI1YzZkNzZlMTA0YjViMjVhODQ3Ngot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvcmVzb3VyY2VzL3dlYmdsLXRlc3QtdXRpbHMuanMK
QEAgLTAsMCArMSwyODEzIEBACisvKgorKiogQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBLaHJvbm9z
IEdyb3VwIEluYy4KKyoqCisqKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorKiogY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZC9vciBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorKiogIk1hdGVy
aWFscyIpLCB0byBkZWFsIGluIHRoZSBNYXRlcmlhbHMgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j
bHVkaW5nCisqKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisqKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Ig
c2VsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscywgYW5kIHRvCisqKiBwZXJtaXQgcGVyc29ucyB0
byB3aG9tIHRoZSBNYXRlcmlhbHMgYXJlIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwor
KiogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKioKKyoqIFRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisqKiBp
biBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBNYXRlcmlhbHMuCisq
KgorKiogVEhFIE1BVEVSSUFMUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5U
WSBPRiBBTlkgS0lORCwKKyoqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorKiogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorKiogSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyoqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB
TiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisqKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9N
LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorKiogTUFURVJJQUxTIE9SIFRIRSBV
U0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIE1BVEVSSUFMUy4KKyovCit2YXIgV2ViR0xUZXN0
VXRpbHMgPSAoZnVuY3Rpb24oKSB7CisidXNlIHN0cmljdCI7CisKKy8qKgorICogV3JhcHBlZCBs
b2dnaW5nIGZ1bmN0aW9uLgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVzc2FnZSB0byBs
b2cuCisgKi8KK3ZhciBsb2cgPSBmdW5jdGlvbihtc2cpIHsKKyAgaWYgKHdpbmRvdy5jb25zb2xl
ICYmIHdpbmRvdy5jb25zb2xlLmxvZykgeworICAgIHdpbmRvdy5jb25zb2xlLmxvZyhtc2cpOwor
ICB9Cit9OworCisvKioKKyAqIFdyYXBwZWQgbG9nZ2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9nLgorICovCit2YXIgZXJyb3IgPSBmdW5jdGlv
bihtc2cpIHsKKyAgaWYgKHdpbmRvdy5jb25zb2xlKSB7CisgICAgaWYgKHdpbmRvdy5jb25zb2xl
LmVycm9yKSB7CisgICAgICB3aW5kb3cuY29uc29sZS5lcnJvcihtc2cpOworICAgIH0KKyAgICBl
bHNlIGlmICh3aW5kb3cuY29uc29sZS5sb2cpIHsKKyAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyht
c2cpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBUdXJuIG9mZiBhbGwgbG9nZ2luZy4KKyAq
LwordmFyIGxvZ2dpbmdPZmYgPSBmdW5jdGlvbigpIHsKKyAgbG9nID0gZnVuY3Rpb24oKSB7fTsK
KyAgZXJyb3IgPSBmdW5jdGlvbigpIHt9OworfTsKKworLyoqCisgKiBDb252ZXJ0cyBhIFdlYkdM
IGVudW0gdG8gYSBzdHJpbmcuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHZh
bHVlIFRoZSBlbnVtIHZhbHVlLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgZW51bSBhcyBhIHN0
cmluZy4KKyAqLwordmFyIGdsRW51bVRvU3RyaW5nID0gZnVuY3Rpb24oZ2wsIHZhbHVlKSB7Cisg
IC8vIE9wdGltaXphdGlvbiBmb3IgdGhlIG1vc3QgY29tbW9uIGVudW06CisgIGlmICh2YWx1ZSA9
PT0gZ2wuTk9fRVJST1IpIHsKKyAgICByZXR1cm4gIk5PX0VSUk9SIjsKKyAgfQorICBmb3IgKHZh
ciBwIGluIGdsKSB7CisgICAgaWYgKGdsW3BdID09IHZhbHVlKSB7CisgICAgICByZXR1cm4gcDsK
KyAgICB9CisgIH0KKyAgcmV0dXJuICIweCIgKyB2YWx1ZS50b1N0cmluZygxNik7Cit9OworCit2
YXIgbGFzdEVycm9yID0gIiI7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGFzdCBjb21waWxlci9s
aW5rZXIgZXJyb3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsYXN0IGNvbXBpbGVyL2xpbmtl
ciBlcnJvci4KKyAqLwordmFyIGdldExhc3RFcnJvciA9IGZ1bmN0aW9uKCkgeworICByZXR1cm4g
bGFzdEVycm9yOworfTsKKworLyoqCisgKiBXaGV0aGVyIGEgaGF5c3RhY2sgZW5kcyB3aXRoIGEg
bmVlZGxlLgorICogQHBhcmFtIHtzdHJpbmd9IGhheXN0YWNrIFN0cmluZyB0byBzZWFyY2gKKyAq
IEBwYXJhbSB7c3RyaW5nfSBuZWVkbGUgU3RyaW5nIHRvIHNlYXJjaCBmb3IuCisgKiBAcGFyYW0g
e2Jvb2xlYW59IFRydWUgaWYgaGF5c3RhY2sgZW5kcyB3aXRoIG5lZWRsZS4KKyAqLwordmFyIGVu
ZHNXaXRoID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICByZXR1cm4gaGF5c3RhY2su
c3Vic3RyKGhheXN0YWNrLmxlbmd0aCAtIG5lZWRsZS5sZW5ndGgpID09PSBuZWVkbGU7Cit9Owor
CisvKioKKyAqIFdoZXRoZXIgYSBoYXlzdGFjayBzdGFydHMgd2l0aCBhIG5lZWRsZS4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCisgKiBAcGFyYW0ge3N0cmlu
Z30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2ggZm9yLgorICogQHBhcmFtIHtib29sZWFufSBUcnVl
IGlmIGhheXN0YWNrIHN0YXJ0cyB3aXRoIG5lZWRsZS4KKyAqLwordmFyIHN0YXJ0c1dpdGggPSBm
dW5jdGlvbihoYXlzdGFjaywgbmVlZGxlKSB7CisgIHJldHVybiBoYXlzdGFjay5zdWJzdHIoMCwg
bmVlZGxlLmxlbmd0aCkgPT09IG5lZWRsZTsKK307CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVy
IGZvciBhIHNpbmdsZSB0ZXh0dXJlLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBs
ZVRleHR1cmVWZXJ0ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywK
KyAgJ2F0dHJpYnV0ZSB2ZWMyIHRleENvb3JkMDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3Jk
OycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsn
LAorICAnICAgIHRleENvb3JkID0gdGV4Q29vcmQwOycsCisgICd9J10uam9pbignXG4nKTsKKwor
LyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBl
IHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBbCisgICdw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAorICAndW5pZm9ybSBzYW1wbGVyMkQgdGV4OycsCisg
ICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGds
X0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpOycsCisgICd9J10uam9pbign
XG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCisg
KiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXIg
PSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ3ZhcnlpbmcgdmVjMiB0ZXhD
b29yZDsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRp
b247JywKKyAgJyAgICB0ZXhDb29yZCA9IHZQb3NpdGlvbi54eSAqIDAuNSArIDAuNTsnLAorICAn
fSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHVuaWZvcm0g
Y29sb3IuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlQ29sb3JWZXJ0ZXhTaGFk
ZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ3ZvaWQgbWFpbigpIHsn
LAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICd9J10uam9pbignXG4nKTsK
KworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSB1bmlmb3JtIGNvbG9yLgorICogQHR5
cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIgPSBbCisgICdw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAorICAndW5pZm9ybSB2ZWM0IHVfY29sb3I7JywKKyAg
J3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdV9jb2xvcjsnLAorICAn
fSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciB2ZXJ0ZXggY29s
b3JzLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZVZlcnRleENvbG9yVmVydGV4
U2hhZGVyID0gWworICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycsCisgICdhdHRyaWJ1dGUg
dmVjNCBhX2NvbG9yOycsCisgICd2YXJ5aW5nIHZlYzQgdl9jb2xvcjsnLAorICAndm9pZCBtYWlu
KCkgeycsCisgICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247JywKKyAgJyAgICB2X2NvbG9y
ID0gYV9jb2xvcjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSBmcmFnbWVudCBz
aGFkZXIgZm9yIHZlcnRleCBjb2xvcnMuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2lt
cGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlciA9IFsKKyAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OycsCisgICd2YXJ5aW5nIHZlYzQgdl9jb2xvcjsnLAorICAndm9pZCBtYWluKCkgeycsCisg
ICcgICAgZ2xfRnJhZ0RhdGFbMF0gPSB2X2NvbG9yOycsCisgICd9J10uam9pbignXG4nKTsKKwor
LyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIHRleHR1cmUgdmVydGV4IHNoYWRlci4KKyAqIEBwYXJh
bSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0
byB1c2UuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9CisgKi8KK3ZhciBzZXR1cFNpbXBsZVRl
eHR1cmVWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICAgIHJldHVybiBsb2FkU2hhZGVy
KGdsLCBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyLCBnbC5WRVJURVhfU0hBREVSKTsKK307CisK
Ky8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9CisgKi8KK3ZhciBzZXR1cFNpbXBs
ZVRleHR1cmVGcmFnbWVudFNoYWRlciA9IGZ1bmN0aW9uKGdsKSB7CisgICAgcmV0dXJuIGxvYWRT
aGFkZXIoCisgICAgICAgIGdsLCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIsIGdsLkZSQUdN
RU5UX1NIQURFUik7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSB0ZXh0dXJlIHZlcnRleCBzaGFk
ZXIgdGhhdCBkb2Vzbid0IG5lZWQgdGV4Y29vcmRzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJp
bmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1
cm4geyFXZWJHTFNoYWRlcn0KKyAqLwordmFyIHNldHVwTm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhT
aGFkZXIgPSBmdW5jdGlvbihnbCkgeworICAgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBub1RleENv
b3JkVGV4dHVyZVZlcnRleFNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUik7Cit9OworCisvKioKKyAq
IENyZWF0ZXMgYSBzaW1wbGUgdmVydGV4IGNvbG9yIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHJldHVybiB7IVdlYkdMU2hhZGVyfQorICovCit2YXIgc2V0dXBTaW1wbGVWZXJ0
ZXhDb2xvclZlcnRleFNoYWRlciA9IGZ1bmN0aW9uKGdsKSB7CisgICAgcmV0dXJuIGxvYWRTaGFk
ZXIoZ2wsIHNpbXBsZVZlcnRleENvbG9yVmVydGV4U2hhZGVyLCBnbC5WRVJURVhfU0hBREVSKTsK
K307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB2ZXJ0ZXggY29sb3IgZnJhZ21lbnQgc2hh
ZGVyLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1cm4geyFXZWJHTFNoYWRlcn0KKyAqLwordmFy
IHNldHVwU2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNoYWRlciA9IGZ1bmN0aW9uKGdsKSB7Cisg
ICAgcmV0dXJuIGxvYWRTaGFkZXIoCisgICAgICAgIGdsLCBzaW1wbGVWZXJ0ZXhDb2xvckZyYWdt
ZW50U2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIpOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEg
c2ltcGxlIGNvbG9yIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0Nv
bnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHJldHVybiB7
IVdlYkdMU2hhZGVyfQorICovCit2YXIgc2V0dXBTaW1wbGVDb2xvclZlcnRleFNoYWRlciA9IGZ1
bmN0aW9uKGdsKSB7CisgICAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNpbXBsZUNvbG9yVmVydGV4
U2hhZGVyLCBnbC5WRVJURVhfU0hBREVSKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBs
ZSBjb2xvciBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHJldHVybiB7IVdl
YkdMU2hhZGVyfQorICovCit2YXIgc2V0dXBTaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyID0gZnVu
Y3Rpb24oZ2wpIHsKKyAgICByZXR1cm4gbG9hZFNoYWRlcigKKyAgICAgICAgZ2wsIHNpbXBsZUNv
bG9yRnJhZ21lbnRTaGFkZXIsIGdsLkZSQUdNRU5UX1NIQURFUik7Cit9OworCisvKioKKyAqIENy
ZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyBzaGFkZXJzLCBiaW5kcyBhdHRyaWIgbG9jYXRpb25z
LCBsaW5rcyB0aGUKKyAqIHByb2dyYW0gYW5kIGNhbGxzIHVzZVByb2dyYW0uCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHshQXJyYXkuPCFXZWJHTFNoYWRlcnxzdHJpbmc+fSBzaGFkZXJzIFRo
ZSBzaGFkZXJzIHRvCisgKiAgICAgICAgYXR0YWNoLCBvciB0aGUgc291cmNlLCBvciB0aGUgaWQg
b2YgYSBzY3JpcHQgdG8gZ2V0CisgKiAgICAgICAgdGhlIHNvdXJjZSBmcm9tLgorICogQHBhcmFt
IHshQXJyYXkuPHN0cmluZz59IG9wdF9hdHRyaWJzIFRoZSBhdHRyaWJzIG5hbWVzLgorICogQHBh
cmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9sb2NhdGlvbnMgVGhlIGxvY2F0aW9ucyBmb3IgdGhl
IGF0dHJpYnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8g
bG9nIHNoYWRlciBzb3VyY2UuCisgKi8KK3ZhciBzZXR1cFByb2dyYW0gPSBmdW5jdGlvbigKKyAg
ICBnbCwgc2hhZGVycywgb3B0X2F0dHJpYnMsIG9wdF9sb2NhdGlvbnMsIG9wdF9sb2dTaGFkZXJz
KSB7CisgIHZhciByZWFsU2hhZGVycyA9IFtdOworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVBy
b2dyYW0oKTsKKyAgdmFyIHNoYWRlckNvdW50ID0gMDsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IHNoYWRlcnMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHNoYWRlciA9IHNoYWRlcnNbaWldOwor
ICAgIHZhciBzaGFkZXJUeXBlID0gdW5kZWZpbmVkOworICAgIGlmICh0eXBlb2Ygc2hhZGVyID09
ICdzdHJpbmcnKSB7CisgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KHNoYWRlcik7CisgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBpZiAoZWxlbWVudC50eXBl
ICE9ICJ4LXNoYWRlci94LXZlcnRleCIgJiYgZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LWZy
YWdtZW50IikKKyAgICAgICAgICBzaGFkZXJUeXBlID0gaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIg
OiBnbC5WRVJURVhfU0hBREVSOworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbVNjcmlw
dChnbCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAg
ICAgIH0gZWxzZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLnZlcnQiKSkgeworICAgICAgICBzaGFk
ZXIgPSBsb2FkU2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgdW5k
ZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7CisgICAgICB9IGVsc2UgaWYgKGVuZHNXaXRoKHNoYWRl
ciwgIi5mcmFnIikpIHsKKyAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlckZyb21GaWxlKGdsLCBz
aGFkZXIsIGdsLkZSQUdNRU5UX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXIsIGlp
ID8gZ2wuRlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRf
bG9nU2hhZGVycyk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChvcHRfbG9nU2hhZGVycykgewor
ICAgICAgdGhyb3cgJ1NoYWRlciBzb3VyY2UgbG9nZ2luZyByZXF1ZXN0ZWQgYnV0IG5vIHNoYWRl
ciBzb3VyY2UgcHJvdmlkZWQnOworICAgIH0KKyAgICBpZiAoc2hhZGVyKSB7CisgICAgICArK3No
YWRlckNvdW50OworICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CisgICAg
fQorICB9CisgIGlmIChzaGFkZXJDb3VudCAhPSAyKSB7CisgICAgZXJyb3IoIkVycm9yIGluIGNv
bXBpbGluZyBzaGFkZXIiKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICBpZiAob3B0X2F0dHJp
YnMpIHsKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3B0X2F0dHJpYnMubGVuZ3RoOyArK2lp
KSB7CisgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCisgICAgICAgICAgcHJvZ3JhbSwKKyAg
ICAgICAgICBvcHRfbG9jYXRpb25zID8gb3B0X2xvY2F0aW9uc1tpaV0gOiBpaSwKKyAgICAgICAg
ICBvcHRfYXR0cmlic1tpaV0pOworICAgIH0KKyAgfQorICBnbC5saW5rUHJvZ3JhbShwcm9ncmFt
KTsKKworICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKKyAgdmFyIGxpbmtlZCA9IGdsLmdldFBy
b2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOworICBpZiAoIWxpbmtlZCkg
eworICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGluaworICAgICAgbGFz
dEVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKHByb2dyYW0pOworICAgICAgZXJyb3IoIkVy
cm9yIGluIHByb2dyYW0gbGlua2luZzoiICsgbGFzdEVycm9yKTsKKworICAgICAgZ2wuZGVsZXRl
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisKKyAgZ2wudXNlUHJv
Z3JhbShwcm9ncmFtKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMg
YSBzaW1wbGUgdGV4dHVyZSBwcm9ncmFtLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEByZXR1cm4ge1dl
YkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwTm9UZXhDb29yZFRleHR1cmVQcm9ncmFtID0gZnVu
Y3Rpb24oZ2wpIHsKKyAgdmFyIHZzID0gc2V0dXBOb1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRl
cihnbCk7CisgIHZhciBmcyA9IHNldHVwU2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyKGdsKTsK
KyAgaWYgKCF2cyB8fCAhZnMpIHsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICB2YXIgcHJvZ3Jh
bSA9IHNldHVwUHJvZ3JhbSgKKyAgICAgIGdsLAorICAgICAgW3ZzLCBmc10sCisgICAgICBbJ3ZQ
b3NpdGlvbiddLAorICAgICAgWzBdKTsKKyAgaWYgKCFwcm9ncmFtKSB7CisgICAgZ2wuZGVsZXRl
U2hhZGVyKGZzKTsKKyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9CisgIGdsLnVzZVByb2dy
YW0ocHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEg
c2ltcGxlIHRleHR1cmUgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJl
cn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24u
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2Nh
dGlvbiBmb3IgdGV4dHVyZSBjb29yZHMuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8K
K3ZhciBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIG9wdF9w
b3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikgeworICBvcHRfcG9zaXRpb25M
b2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIG9wdF90ZXhjb29yZExvY2F0
aW9uID0gb3B0X3RleGNvb3JkTG9jYXRpb24gfHwgMTsKKyAgdmFyIHZzID0gc2V0dXBTaW1wbGVU
ZXh0dXJlVmVydGV4U2hhZGVyKGdsKTsKKyAgdmFyIGZzID0gc2V0dXBTaW1wbGVUZXh0dXJlRnJh
Z21lbnRTaGFkZXIoZ2wpOworICBpZiAoIXZzIHx8ICFmcykgeworICAgIHJldHVybiBudWxsOwor
ICB9CisgIHZhciBwcm9ncmFtID0gc2V0dXBQcm9ncmFtKAorICAgICAgZ2wsCisgICAgICBbdnMs
IGZzXSwKKyAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAgICAgW29wdF9wb3Np
dGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbl0pOworICBpZiAoIXByb2dyYW0pIHsK
KyAgICBnbC5kZWxldGVTaGFkZXIoZnMpOworICAgIGdsLmRlbGV0ZVNoYWRlcih2cyk7CisgIH0K
KyAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioK
KyAqIENyZWF0ZXMgYSBzaW1wbGUgdmVydGV4IGNvbG9yIHByb2dyYW0uCisgKiBAcGFyYW0geyFX
ZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNl
LgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9j
YXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF92ZXJ0ZXhDb2xvckxv
Y2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24KKyAqICAgICAgICBmb3IgdmVydGV4IGNvbG9ycy4K
KyAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwU2ltcGxlVmVydGV4Q29s
b3JQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRf
dmVydGV4Q29sb3JMb2NhdGlvbikgeworICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3Np
dGlvbkxvY2F0aW9uIHx8IDA7CisgIG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9uID0gb3B0X3ZlcnRl
eENvbG9yTG9jYXRpb24gfHwgMTsKKyAgdmFyIHZzID0gc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclZl
cnRleFNoYWRlcihnbCk7CisgIHZhciBmcyA9IHNldHVwU2ltcGxlVmVydGV4Q29sb3JGcmFnbWVu
dFNoYWRlcihnbCk7CisgIGlmICghdnMgfHwgIWZzKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0K
KyAgdmFyIHByb2dyYW0gPSBzZXR1cFByb2dyYW0oCisgICAgICBnbCwKKyAgICAgIFt2cywgZnNd
LAorICAgICAgWyd2UG9zaXRpb24nLCAnYV9jb2xvciddLAorICAgICAgW29wdF9wb3NpdGlvbkxv
Y2F0aW9uLCBvcHRfdmVydGV4Q29sb3JMb2NhdGlvbl0pOworICBpZiAoIXByb2dyYW0pIHsKKyAg
ICBnbC5kZWxldGVTaGFkZXIoZnMpOworICAgIGdsLmRlbGV0ZVNoYWRlcih2cyk7CisgIH0KKyAg
Z2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAq
IENyZWF0ZXMgYSBzaW1wbGUgY29sb3IgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3Ig
cG9zaXRpb24uCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBs
ZUNvbG9yUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbikgeworICBv
cHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHZhciB2
cyA9IHNldHVwU2ltcGxlQ29sb3JWZXJ0ZXhTaGFkZXIoZ2wpOworICB2YXIgZnMgPSBzZXR1cFNp
bXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIoZ2wpOworICBpZiAoIXZzIHx8ICFmcykgeworICAgIHJl
dHVybiBudWxsOworICB9CisgIHZhciBwcm9ncmFtID0gc2V0dXBQcm9ncmFtKAorICAgICAgZ2ws
CisgICAgICBbdnMsIGZzXSwKKyAgICAgIFsndlBvc2l0aW9uJ10sCisgICAgICBbb3B0X3Bvc2l0
aW9uTG9jYXRpb25dKTsKKyAgaWYgKCFwcm9ncmFtKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVyKGZz
KTsKKyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9CisgIGdsLnVzZVByb2dyYW0ocHJvZ3Jh
bSk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGJ1ZmZlcnMgZm9y
IGEgdGV4dHVyZWQgdW5pdCBxdWFkIGFuZCBhdHRhY2hlcyB0aGVtIHRvIHZlcnRleCBhdHRyaWJz
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlv
biBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBv
cHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jk
cy4KKyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgYnVmZmVyIG9iamVjdHMg
dGhhdCB3ZXJlCisgKiAgICAgIGNyZWF0ZWQuCisgKi8KK3ZhciBzZXR1cFVuaXRRdWFkID0gZnVu
Y3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikgewor
ICByZXR1cm4gc2V0dXBVbml0UXVhZFdpdGhUZXhDb29yZHMoZ2wsIFsgMC4wLCAwLjAgXSwgWyAx
LjAsIDEuMCBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3Bvc2l0
aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKK307CisKKy8qKgorICogQ3JlYXRl
cyBidWZmZXJzIGZvciBhIHRleHR1cmVkIHVuaXQgcXVhZCB3aXRoIHNwZWNpZmllZCBsb3dlciBs
ZWZ0CisgKiBhbmQgdXBwZXIgcmlnaHQgdGV4dHVyZSBjb29yZGluYXRlcywgYW5kIGF0dGFjaGVz
IHRoZW0gdG8gdmVydGV4CisgKiBhdHRyaWJzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7
IUFycmF5LjxudW1iZXI+fSBsb3dlckxlZnRUZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0
ZXMgZm9yIHRoZSBsb3dlciBsZWZ0IGNvcm5lci4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+
fSB1cHBlclJpZ2h0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgdXBw
ZXIgcmlnaHQgY29ybmVyLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9u
IFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9w
dF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRz
LgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59IFRoZSBidWZmZXIgb2JqZWN0cyB0
aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwVW5pdFF1YWRXaXRoVGV4
Q29vcmRzID0gZnVuY3Rpb24oCisgICAgZ2wsIGxvd2VyTGVmdFRleENvb3JkcywgdXBwZXJSaWdo
dFRleENvb3JkcywKKyAgICBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRp
b24pIHsKKyAgcmV0dXJuIHNldHVwUXVhZChnbCwgeworICAgIHBvc2l0aW9uTG9jYXRpb246IG9w
dF9wb3NpdGlvbkxvY2F0aW9uIHx8IDAsCisgICAgdGV4Y29vcmRMb2NhdGlvbjogb3B0X3RleGNv
b3JkTG9jYXRpb24gfHwgMSwKKyAgICBsb3dlckxlZnRUZXhDb29yZHM6IGxvd2VyTGVmdFRleENv
b3JkcywKKyAgICB1cHBlclJpZ2h0VGV4Q29vcmRzOiB1cHBlclJpZ2h0VGV4Q29vcmRzLAorICB9
KTsKK307CisKKy8qKgorICogTWFrZXMgYSBxdWFkIHdpdGggdmFyaW91cyBvcHRpb25zLgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IU9iamVjdH0gb3B0aW9ucy4KKyAqCisgKiBzY2FsZTog
c2NhbGUgdG8gbXVsdGlwbGUgdW5pdCBxdWFkIHZhbHVlcyBieS4gZGVmYXVsdCAxLjAuCisgKiBw
b3NpdGlvbkxvY2F0aW9uOiBhdHRyaWJ1dGUgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogdGV4
Y29vcmRMb2NhdGlvbjogYXR0cmlidXRlIGxvY2F0aW9uIGZvciB0ZXhjb29yZHMuCisgKiAgICAg
SWYgdGhpcyBkb2VzIG5vdCBleGlzdCBubyB0ZXh0dXJlIGNvb3JkcyBhcmUgY3JlYXRlZC4KKyAq
IGxvd2VyTGVmdFRleENvb3JkczogYW4gYXJyYXkgb2YgMiB2YWx1ZXMgZm9yIHRoZQorICogICAg
IGxvd2VyTGVmdFRleENvb3Jkcy4KKyAqIHVwcGVyUmlnaHRUZXhDb29yZHM6IGFuIGFycmF5IG9m
IDIgdmFsdWVzIGZvciB0aGUKKyAqICAgICB1cHBlclJpZ2h0VGV4Q29vcmRzLgorICovCit2YXIg
c2V0dXBRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdGlvbnMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRp
b24gPSBvcHRpb25zLnBvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIHNjYWxlID0gb3B0aW9u
cy5zY2FsZSB8fCAxOworCisgIHZhciBvYmplY3RzID0gW107CisKKyAgdmFyIHZlcnRleE9iamVj
dCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwg
dmVydGV4T2JqZWN0KTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9h
dDMyQXJyYXkoWworICAgICAgIDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEu
MCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEuMCAqIHNj
YWxlLAorICAgICAgIDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNj
YWxlICwgLTEuMCAqIHNjYWxlLAorICAgICAgIDEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlLF0p
LCBnbC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9u
TG9jYXRpb24pOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDIs
IGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgIG9iamVjdHMucHVzaCh2ZXJ0ZXhPYmplY3QpOwor
CisgIGlmIChvcHRpb25zLnRleGNvb3JkTG9jYXRpb24gIT09IHVuZGVmaW5lZCkgeworICAgIHZh
ciBsbHggPSBvcHRpb25zLmxvd2VyTGVmdFRleENvb3Jkc1swXTsKKyAgICB2YXIgbGx5ID0gb3B0
aW9ucy5sb3dlckxlZnRUZXhDb29yZHNbMV07CisgICAgdmFyIHVyeCA9IG9wdGlvbnMudXBwZXJS
aWdodFRleENvb3Jkc1swXTsKKyAgICB2YXIgdXJ5ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29v
cmRzWzFdOworCisgICAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICAg
IGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICAgIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsKKyAgICAgICAgdXJ4
LCB1cnksCisgICAgICAgIGxseCwgdXJ5LAorICAgICAgICBsbHgsIGxseSwKKyAgICAgICAgdXJ4
LCB1cnksCisgICAgICAgIGxseCwgbGx5LAorICAgICAgICB1cngsIGxseV0pLCBnbC5TVEFUSUNf
RFJBVyk7CisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkob3B0aW9ucy50ZXhjb29yZExv
Y2F0aW9uKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9wdGlvbnMudGV4Y29vcmRMb2Nh
dGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBvYmplY3RzLnB1c2godmVydGV4
T2JqZWN0KTsKKyAgfQorCisgIHJldHVybiBvYmplY3RzOworfTsKKworLyoqCisgKiBDcmVhdGVz
IGEgcHJvZ3JhbSBhbmQgYnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVyZWQgcXVhZC4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhl
IGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAgICBwb3NpdGlvbi4gRGVmYXVsdCA9IDAuCisg
KiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlv
biBmb3IKKyAqICAgICAgICB0ZXh0dXJlIGNvb3Jkcy4gRGVmYXVsdCA9IDEuCisgKiBAcmV0dXJu
IHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBUZXh0dXJlZFF1YWQgPSBmdW5jdGlvbigK
KyAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7Cisg
IHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRf
cG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFVuaXRRdWFk
KGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICByZXR1
cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0gYW5kIGJ1ZmZlcnMg
Zm9yIHJlbmRlcmluZyBhIGNvbG9yIHF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0Nv
bnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtu
dW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0
aW9uLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwQ29sb3JRdWFk
ID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxv
Y2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIHByb2dyYW0gPSBzZXR1
cFNpbXBsZUNvbG9yUHJvZ3JhbShnbCk7CisgIHNldHVwVW5pdFF1YWQoZ2wsIG9wdF9wb3NpdGlv
bkxvY2F0aW9uKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBw
cm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkIHdpdGgKKyAq
IHNwZWNpZmllZCBsb3dlciBsZWZ0IGFuZCB1cHBlciByaWdodCB0ZXh0dXJlIGNvb3JkaW5hdGVz
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBsb3dlckxlZnRU
ZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSBsb3dlciBsZWZ0IGNvcm5l
ci4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSB1cHBlclJpZ2h0VGV4Q29vcmRzIFRoZSB0
ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgdXBwZXIgcmlnaHQgY29ybmVyLgorICogQHBhcmFt
IHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBv
c2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRy
aWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3Jh
bX0KKyAqLwordmFyIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3JkcyA9IGZ1bmN0aW9uKAor
ICAgIGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29yZHMsCisgICAgb3B0
X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7CisgIHZhciBwcm9ncmFt
ID0gc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFVuaXRRdWFkV2l0aFRleENvb3Jk
cyhnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9j
YXRpb24pOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHVuaXQg
cXVhZCB3aXRoIG9ubHkgcG9zaXRpb25zIG9mIGEgZ2l2ZW4gcmVzb2x1dGlvbi4KKyAqIEBwYXJh
bSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0
byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJlcyBUaGUgcmVzb2x1dGlvbiBvZiB0aGUg
bWVzaCBncmlkLAorICogICAgIGV4cHJlc3NlZCBpbiB0aGUgbnVtYmVyIG9mIHF1YWRzIGFjcm9z
cyBhbmQgZG93bi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUg
YXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqLwordmFyIHNldHVwSW5kZXhlZFF1YWQg
PSBmdW5jdGlvbiAoCisgICAgZ2wsIGdyaWRSZXMsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRf
ZmxpcE9kZFRyaWFuZ2xlcykgeworICByZXR1cm4gc2V0dXBJbmRleGVkUXVhZFdpdGhPcHRpb25z
KGdsLAorICAgIHsgZ3JpZFJlczogZ3JpZFJlcywKKyAgICAgIHBvc2l0aW9uTG9jYXRpb246IG9w
dF9wb3NpdGlvbkxvY2F0aW9uLAorICAgICAgZmxpcE9kZFRyaWFuZ2xlczogb3B0X2ZsaXBPZGRU
cmlhbmdsZXMKKyAgICB9KTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHF1YWQgd2l0aCB2YXJp
b3VzIG9wdGlvbnMuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshT2JqZWN0KSBvcHRpb25z
IFRoZSBvcHRpb25zLiBTZWUgYmVsb3cuCisgKiBAcmV0dXJuIHshQXJyYXkuPFdlYkdMQnVmZmVy
Pn0gVGhlIGNyZWF0ZWQgYnVmZmVycy4KKyAqICAgICBbcG9zaXRpb25zLCA8Y29sb3JzPiwgaW5k
aWNlc10KKyAqCisgKiBPcHRpb25zOgorICogICBncmlkUmVzOiBudW1iZXIgb2YgcXVhZHMgYWNy
b3NzIGFuZCBkb3duIGdyaWQuCisgKiAgIHBvc2l0aW9uTG9jYXRpb246IGF0dHJpYiBsb2NhdGlv
biBmb3IgcG9zaXRpb24KKyAqICAgZmxpcE9kZFRyaWFuZ2xlczogcmV2ZXJzZSBvcmRlciBvZiB2
ZXJ0aWNlcyBvZiBldmVyeSBvdGhlcgorICogICAgICAgdHJpYW5nbGUKKyAqICAgcG9zaXRpb25P
ZmZzZXQ6IG9mZnNldCBhZGRlZCB0byBlYWNoIHZlcnRleAorICogICBwb3NpdGlvbk11bHQ6IG11
bHRpcGllciBmb3IgZWFjaCB2ZXJ0ZXgKKyAqICAgY29sb3JMb2NhdGlvbjogYXR0cmliIGxvY2F0
aW9uIGZvciB2ZXJ0ZXggY29sb3JzLiBJZgorICogICAgICB1bmRlZmluZWQgbm8gdmVydGV4IGNv
bG9ycyB3aWxsIGJlIGNyZWF0ZWQuCisgKi8KK3ZhciBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlv
bnMgPSBmdW5jdGlvbiAoZ2wsIG9wdGlvbnMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBv
cHRpb25zLnBvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIG9iamVjdHMgPSBbXTsKKworICB2
YXIgZ3JpZFJlcyA9IG9wdGlvbnMuZ3JpZFJlcyB8fCAxOworICB2YXIgcG9zaXRpb25PZmZzZXQg
PSBvcHRpb25zLnBvc2l0aW9uT2Zmc2V0IHx8IDA7CisgIHZhciBwb3NpdGlvbk11bHQgPSBvcHRp
b25zLnBvc2l0aW9uTXVsdCB8fCAxOworICB2YXIgdmVydHNBY3Jvc3MgPSBncmlkUmVzICsgMTsK
KyAgdmFyIG51bVZlcnRzID0gdmVydHNBY3Jvc3MgKiB2ZXJ0c0Fjcm9zczsKKyAgdmFyIHBvc2l0
aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkobnVtVmVydHMgKiAzKTsKKyAgdmFyIGluZGljZXMgPSBu
ZXcgVWludDE2QXJyYXkoNiAqIGdyaWRSZXMgKiBncmlkUmVzKTsKKyAgdmFyIHBvZmZzZXQgPSAw
OworCisgIGZvciAodmFyIHl5ID0gMDsgeXkgPD0gZ3JpZFJlczsgKyt5eSkgeworICAgIGZvciAo
dmFyIHh4ID0gMDsgeHggPD0gZ3JpZFJlczsgKyt4eCkgeworICAgICAgcG9zaXRpb25zW3BvZmZz
ZXQgKyAwXSA9ICgtMSArIDIgKiB4eCAvIGdyaWRSZXMpICogcG9zaXRpb25NdWx0ICsgcG9zaXRp
b25PZmZzZXQ7CisgICAgICBwb3NpdGlvbnNbcG9mZnNldCArIDFdID0gKC0xICsgMiAqIHl5IC8g
Z3JpZFJlcykgKiBwb3NpdGlvbk11bHQgKyBwb3NpdGlvbk9mZnNldDsKKyAgICAgIHBvc2l0aW9u
c1twb2Zmc2V0ICsgMl0gPSAwOworCisgICAgICBwb2Zmc2V0ICs9IDM7CisgICAgfQorICB9CisK
KyAgdmFyIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZ
X0JVRkZFUiwgYnVmKTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9u
cywgZ2wuU1RBVElDX0RSQVcpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlv
bkxvY2F0aW9uKTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAz
LCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICBvYmplY3RzLnB1c2goYnVmKTsKKworICBpZiAo
b3B0aW9ucy5jb2xvckxvY2F0aW9uICE9PSB1bmRlZmluZWQpIHsKKyAgICB2YXIgY29sb3JzID0g
bmV3IEZsb2F0MzJBcnJheShudW1WZXJ0cyAqIDQpOworICAgIGZvciAodmFyIHl5ID0gMDsgeXkg
PD0gZ3JpZFJlczsgKyt5eSkgeworICAgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8PSBncmlkUmVz
OyArK3h4KSB7CisgICAgICAgIGlmIChvcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICBjb2xvcnNbcG9mZnNldCArIDBdID0gb3B0aW9ucy5jb2xvclswXTsKKyAgICAgICAg
ICBjb2xvcnNbcG9mZnNldCArIDFdID0gb3B0aW9ucy5jb2xvclsxXTsKKyAgICAgICAgICBjb2xv
cnNbcG9mZnNldCArIDJdID0gb3B0aW9ucy5jb2xvclsyXTsKKyAgICAgICAgICBjb2xvcnNbcG9m
ZnNldCArIDNdID0gb3B0aW9ucy5jb2xvclszXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICBjb2xvcnNbcG9mZnNldCArIDBdID0geHggLyBncmlkUmVzOworICAgICAgICAgIGNvbG9yc1tw
b2Zmc2V0ICsgMV0gPSB5eSAvIGdyaWRSZXM7CisgICAgICAgICAgY29sb3JzW3BvZmZzZXQgKyAy
XSA9ICh4eCAvIGdyaWRSZXMpICogKHl5IC8gZ3JpZFJlcyk7CisgICAgICAgICAgY29sb3JzW3Bv
ZmZzZXQgKyAzXSA9ICh5eSAlIDIpICogMC41ICsgMC41OworICAgICAgICB9CisgICAgICAgIHBv
ZmZzZXQgKz0gNDsKKyAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgYnVmID0gZ2wuY3JlYXRlQnVm
ZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGJ1Zik7CisgICAgZ2wu
YnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9ycywgZ2wuU1RBVElDX0RSQVcpOworICAg
IGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdGlvbnMuY29sb3JMb2NhdGlvbik7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRpb25zLmNvbG9yTG9jYXRpb24sIDQsIGdsLkZMT0FU
LCBmYWxzZSwgMCwgMCk7CisgICAgb2JqZWN0cy5wdXNoKGJ1Zik7CisgIH0KKworICB2YXIgdGJh
c2UgPSAwOworICBmb3IgKHZhciB5eSA9IDA7IHl5IDwgZ3JpZFJlczsgKyt5eSkgeworICAgIHZh
ciBpbmRleCA9IHl5ICogdmVydHNBY3Jvc3M7CisgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8IGdy
aWRSZXM7ICsreHgpIHsKKyAgICAgIGluZGljZXNbdGJhc2UgKyAwXSA9IGluZGV4ICsgMDsKKyAg
ICAgIGluZGljZXNbdGJhc2UgKyAxXSA9IGluZGV4ICsgMTsKKyAgICAgIGluZGljZXNbdGJhc2Ug
KyAyXSA9IGluZGV4ICsgdmVydHNBY3Jvc3M7CisgICAgICBpbmRpY2VzW3RiYXNlICsgM10gPSBp
bmRleCArIHZlcnRzQWNyb3NzOworICAgICAgaW5kaWNlc1t0YmFzZSArIDRdID0gaW5kZXggKyAx
OworICAgICAgaW5kaWNlc1t0YmFzZSArIDVdID0gaW5kZXggKyB2ZXJ0c0Fjcm9zcyArIDE7CisK
KyAgICAgIGlmIChvcHRpb25zLmZsaXBPZGRUcmlhbmdsZXMpIHsKKyAgICAgICAgaW5kaWNlc1t0
YmFzZSArIDRdID0gaW5kZXggKyB2ZXJ0c0Fjcm9zcyArIDE7CisgICAgICAgIGluZGljZXNbdGJh
c2UgKyA1XSA9IGluZGV4ICsgMTsKKyAgICAgIH0KKworICAgICAgaW5kZXggKz0gMTsKKyAgICAg
IHRiYXNlICs9IDY7CisgICAgfQorICB9CisKKyAgdmFyIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICBnbC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBnbC5i
dWZmZXJEYXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLCBnbC5TVEFUSUNfRFJB
Vyk7CisgIG9iamVjdHMucHVzaChidWYpOworCisgIHJldHVybiBvYmplY3RzOworfTsKKworLyoq
CisgKiBSZXR1cm5zIHRoZSBjb25zdHJ1Y3RvciBmb3IgYSB0eXBlZCBhcnJheSB0aGF0IGNvcnJl
c3BvbmRzIHRvIHRoZSBnaXZlbgorICogV2ViR0wgdHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVu
ZGVyaW5nQ29udGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge251
bWJlcn0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0
dXJuIHshQ29uc3RydWN0b3J9IFRoZSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciB0aGF0CisgKiAg
ICAgIGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiB0eXBlLgorICovCit2YXIgZ2xUeXBlVG9UeXBl
ZEFycmF5VHlwZSA9IGZ1bmN0aW9uKGdsLCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgZ2wuQllURToKKyAgICAgIHJldHVybiB3aW5kb3cuSW50OEFycmF5OworICAgIGNhc2Ug
Z2wuVU5TSUdORURfQllURToKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDhBcnJheTsKKyAgICBj
YXNlIGdsLlNIT1JUOgorICAgICAgcmV0dXJuIHdpbmRvdy5JbnQxNkFycmF5OworICAgIGNhc2Ug
Z2wuVU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAg
ICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9T
SE9SVF81XzVfNV8xOgorICAgICAgcmV0dXJuIHdpbmRvdy5VaW50MTZBcnJheTsKKyAgICBjYXNl
IGdsLklOVDoKKyAgICAgIHJldHVybiB3aW5kb3cuSW50MzJBcnJheTsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0lOVDoKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDMyQXJyYXk7CisgICAgZGVmYXVs
dDoKKyAgICAgIHRocm93ICd1bmtub3duIGdsIHR5cGUgJyArIGdsRW51bVRvU3RyaW5nKGdsLCB0
eXBlKTsKKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGVy
IGNvbXBvbmVudCBmb3IgYSBnaXZlbiBXZWJHTCB0eXBlLgorICogQHBhcmFtIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBnbCBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4KKyAqIEBwYXJhbSB7R0xl
bnVtfSB0eXBlIFRoZSBXZWJHTCB0eXBlIChlZywgZ2wuVU5TSUdORURfQllURSkKKyAqIEByZXR1
cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiBieXRlcyBwZXIgY29tcG9uZW50LgorICovCit2YXIg
Z2V0Qnl0ZXNQZXJDb21wb25lbnQgPSBmdW5jdGlvbihnbCwgdHlwZSkgeworICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIGdsLkJZVEU6CisgICAgY2FzZSBnbC5VTlNJR05FRF9CWVRFOgorICAg
ICAgcmV0dXJuIDE7CisgICAgY2FzZSBnbC5TSE9SVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NI
T1JUOgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBnbC5VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICAgIHJldHVybiAyOworICAgIGNhc2UgZ2wuSU5UOgorICAgIGNhc2UgZ2wuVU5TSUdORURf
SU5UOgorICAgICAgcmV0dXJuIDQ7CisgICAgZGVmYXVsdDoKKyAgICAgIHRocm93ICd1bmtub3du
IGdsIHR5cGUgJyArIGdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKTsKKyAgfQorfTsKKworLyoqCisg
KiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHlwZWQgYXJyYXkgZWxlbWVudHMgcGVyIHBpeGVsIGZv
ciBhIGdpdmVuIFdlYkdMCisgKiBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbi4gVGhlIGNvcnJlc3Bv
bmRpbmcgdHlwZWQgYXJyYXkgdHlwZSBjYW4gYmUgZGV0ZXJtaW5lZAorICogYnkgY2FsbGluZyBn
bFR5cGVUb1R5cGVkQXJyYXlUeXBlLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4KKyAqIEBwYXJhbSB7R0xlbnVtfSBmb3JtYXQg
VGhlIFdlYkdMIGZvcm1hdCAoZWcsIGdsLlJHQkEpCisgKiBAcGFyYW0ge0dMZW51bX0gdHlwZSBU
aGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJuIHtudW1iZXJ9
IFRoZSBudW1iZXIgb2YgdHlwZWQgYXJyYXkgZWxlbWVudHMgcGVyIHBpeGVsLgorICovCit2YXIg
Z2V0VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWwgPSBmdW5jdGlvbihnbCwgZm9ybWF0LCB0eXBl
KSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKKyAgICAgIHJldHVybiAxOworICAgIGNhc2UgZ2wuVU5TSUdORURf
QllURToKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAnbm90IGEgZ2wg
dHlwZSBmb3IgY29sb3IgaW5mb3JtYXRpb24gJyArIGdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKTsK
KyAgfQorCisgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBnbC5SR0JBOgorICAgICAgcmV0
dXJuIDQ7CisgICAgY2FzZSBnbC5SR0I6CisgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIGdsLkxV
TUlOQU5DRV9BTFBIQToKKyAgICAgIHJldHVybiAyOworICAgIGNhc2UgZ2wuTFVNSU5BTkNFOgor
ICAgIGNhc2UgZ2wuQUxQSEE6CisgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAg
dGhyb3cgJ3Vua25vd24gZ2wgZm9ybWF0ICcgKyBnbEVudW1Ub1N0cmluZyhnbCwgZm9ybWF0KTsK
KyAgfQorfTsKKworLyoqCisgKiBGaWxscyB0aGUgZ2l2ZW4gdGV4dHVyZSB3aXRoIGEgc29saWQg
Y29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshV2ViR0xUZXh0dXJlfSB0ZXggVGhl
IHRleHR1cmUgdG8gZmlsbC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBUaGUgd2lkdGggb2Yg
dGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBUaGUgaGVp
Z2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+
fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLgorICogICAgICAgIHdoZXJlIGVhY2ggZWxl
bWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2xl
dmVsIFRoZSBsZXZlbCBvZiB0aGUgdGV4dHVyZSB0byBmaWxsLiBEZWZhdWx0ID0gMC4KKyAqIEBw
YXJhbSB7bnVtYmVyfSBvcHRfZm9ybWF0IFRoZSBmb3JtYXQgZm9yIHRoZSB0ZXh0dXJlLgorICov
Cit2YXIgZmlsbFRleHR1cmUgPSBmdW5jdGlvbihnbCwgdGV4LCB3aWR0aCwgaGVpZ2h0LCBjb2xv
ciwgb3B0X2xldmVsLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSkgeworICBvcHRfbGV2ZWwgPSBvcHRf
bGV2ZWwgfHwgMDsKKyAgb3B0X2Zvcm1hdCA9IG9wdF9mb3JtYXQgfHwgZ2wuUkdCQTsKKyAgb3B0
X3R5cGUgPSBvcHRfdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFOworICB2YXIgcGFjayA9IGdsLmdl
dFBhcmFtZXRlcihnbC5VTlBBQ0tfQUxJR05NRU5UKTsKKyAgdmFyIG51bUNvbXBvbmVudHMgPSBj
b2xvci5sZW5ndGg7CisgIHZhciBieXRlc1BlckNvbXBvbmVudCA9IGdldEJ5dGVzUGVyQ29tcG9u
ZW50KGdsLCBvcHRfdHlwZSk7CisgIHZhciByb3dTaXplID0gbnVtQ29tcG9uZW50cyAqIHdpZHRo
ICogYnl0ZXNQZXJDb21wb25lbnQ7CisgIHZhciBwYWRkZWRSb3dTaXplID0gTWF0aC5mbG9vcigo
cm93U2l6ZSArIHBhY2sgLSAxKSAvIHBhY2spICogcGFjazsKKyAgdmFyIHNpemUgPSByb3dTaXpl
ICsgKGhlaWdodCAtIDEpICogcGFkZGVkUm93U2l6ZTsKKyAgc2l6ZSA9IE1hdGguZmxvb3IoKHNp
emUgKyBieXRlc1BlckNvbXBvbmVudCAtIDEpIC8gYnl0ZXNQZXJDb21wb25lbnQpICogYnl0ZXNQ
ZXJDb21wb25lbnQ7CisgIHZhciBidWYgPSBuZXcgKGdsVHlwZVRvVHlwZWRBcnJheVR5cGUoZ2ws
IG9wdF90eXBlKSkoc2l6ZSk7CisgIGZvciAodmFyIHl5ID0gMDsgeXkgPCBoZWlnaHQ7ICsreXkp
IHsKKyAgICB2YXIgb2ZmID0geXkgKiBwYWRkZWRSb3dTaXplOworICAgIGZvciAodmFyIHh4ID0g
MDsgeHggPCB3aWR0aDsgKyt4eCkgeworICAgICAgZm9yICh2YXIgamogPSAwOyBqaiA8IG51bUNv
bXBvbmVudHM7ICsramopIHsKKyAgICAgICAgYnVmW29mZisrXSA9IGNvbG9yW2pqXTsKKyAgICAg
IH0KKyAgICB9CisgIH0KKyAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKKyAg
Z2wudGV4SW1hZ2UyRCgKKyAgICAgIGdsLlRFWFRVUkVfMkQsIG9wdF9sZXZlbCwgb3B0X2Zvcm1h
dCwgd2lkdGgsIGhlaWdodCwgMCwKKyAgICAgIG9wdF9mb3JtYXQsIG9wdF90eXBlLCBidWYpOwor
fTsKKworLyoqCisgKiBDcmVhdGVzIGEgdGV4dHVyZSBhbmQgZmlsbHMgaXQgd2l0aCBhIHNvbGlk
IGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBUaGUgd2lk
dGggb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBU
aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7IUFycmF5Ljxu
dW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLiBBIDQgZWxlbWVudCBhcnJheQor
ICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisg
KiBAcmV0dXJuIHshV2ViR0xUZXh0dXJlfQorICovCit2YXIgY3JlYXRlQ29sb3JlZFRleHR1cmUg
PSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHsKKyAgdmFyIHRleCA9IGdsLmNy
ZWF0ZVRleHR1cmUoKTsKKyAgZmlsbFRleHR1cmUoZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29s
b3IpOworICByZXR1cm4gdGV4OworfTsKKwordmFyIHVieXRlVG9GbG9hdCA9IGZ1bmN0aW9uKGMp
IHsKKyAgcmV0dXJuIGMgLyAyNTU7Cit9OworCit2YXIgdWJ5dGVDb2xvclRvRmxvYXRDb2xvciA9
IGZ1bmN0aW9uKGNvbG9yKSB7CisgIHZhciBmbG9hdENvbG9yID0gW107CisgIGZvciAodmFyIGlp
ID0gMDsgaWkgPCBjb2xvci5sZW5ndGg7ICsraWkpIHsKKyAgICBmbG9hdENvbG9yW2lpXSA9IHVi
eXRlVG9GbG9hdChjb2xvcltpaV0pOworICB9CisgIHJldHVybiBmbG9hdENvbG9yOworfTsKKwor
LyoqCisgKiBTZXRzIHRoZSAidV9jb2xvciIgdW5pZm9ybSBvZiB0aGUgY3VycmVudCBwcm9ncmFt
IHRvIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+IGNv
bG9yIDQgZWxlbWVudCBhcnJheSBvZiAwLTEgY29sb3IKKyAqICAgICAgY29tcG9uZW50cy4KKyAq
LwordmFyIHNldEZsb2F0RHJhd0NvbG9yID0gZnVuY3Rpb24oZ2wsIGNvbG9yKSB7CisgIHZhciBw
cm9ncmFtID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNVUlJFTlRfUFJPR1JBTSk7CisgIHZhciBjb2xv
ckxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ1X2NvbG9yIik7Cisg
IGdsLnVuaWZvcm00ZnYoY29sb3JMb2NhdGlvbiwgY29sb3IpOworfTsKKworLyoqCisgKiBTZXRz
IHRoZSAidV9jb2xvciIgdW5pZm9ybSBvZiB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGNvbG9yLgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+IGNvbG9yIDQgZWxlbWVu
dCBhcnJheSBvZiAwLTI1NSBjb2xvcgorICogICAgICBjb21wb25lbnRzLgorICovCit2YXIgc2V0
VUJ5dGVEcmF3Q29sb3IgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKKyAgc2V0RmxvYXREcmF3Q29s
b3IoZ2wsIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IoY29sb3IpKTsKK307CisKKy8qKgorICogRHJh
d3MgYSBwcmV2aW91c2x5IHNldHVwIHF1YWQgaW4gdGhlIGdpdmVuIGNvbG9yLgorICogQHBhcmFt
IHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRv
IHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZHJh
dyB3aXRoLiBBIDQKKyAqICAgICAgICBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBp
cyBpbiB0aGUgcmFuZ2UgMCB0bworICogICAgICAgIDEuCisgKi8KK3ZhciBkcmF3RmxvYXRDb2xv
clF1YWQgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKKyAgdmFyIHByb2dyYW0gPSBnbC5nZXRQYXJh
bWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKKyAgdmFyIGNvbG9yTG9jYXRpb24gPSBnbC5nZXRV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInVfY29sb3IiKTsKKyAgZ2wudW5pZm9ybTRmdihjb2xv
ckxvY2F0aW9uLCBjb2xvcik7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsK
K307CisKKworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXAgcXVhZCBpbiB0aGUgZ2l2
ZW4gY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNv
bG9yIFRoZSBjb2xvciB0byBkcmF3IHdpdGguIEEgNAorICogICAgICAgIGVsZW1lbnQgYXJyYXkg
d2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCisgKiAgICAgICAgMjU1Lgor
ICovCit2YXIgZHJhd1VCeXRlQ29sb3JRdWFkID0gZnVuY3Rpb24oZ2wsIGNvbG9yKSB7CisgIGRy
YXdGbG9hdENvbG9yUXVhZChnbCwgdWJ5dGVDb2xvclRvRmxvYXRDb2xvcihjb2xvcikpOworfTsK
KworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXBVbml0UXVhZC4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKi8KK3ZhciBkcmF3VW5pdFF1YWQgPSBmdW5jdGlvbihnbCkgeworICBnbC5kcmF3QXJy
YXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Cit9OworCisvKioKKyAqIENsZWFycyB0aGVuIERyYXdz
IGEgcHJldmlvdXNseSBzZXR1cFVuaXRRdWFkLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7
IUFycmF5LjxudW1iZXI+fSBvcHRfY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBi
ZWZvcmUKKyAqICAgICAgICBkcmF3aW5nLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVs
ZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAqICAgICAgICAyNTUuIERlZmF1bHQgWzI1NSwg
MjU1LCAyNTUsIDI1NV0KKyAqLwordmFyIGNsZWFyQW5kRHJhd1VuaXRRdWFkID0gZnVuY3Rpb24o
Z2wsIG9wdF9jb2xvcikgeworICBvcHRfY29sb3IgPSBvcHRfY29sb3IgfHwgWzI1NSwgMjU1LCAy
NTUsIDI1NV07CisgIGdsLmNsZWFyQ29sb3IoCisgICAgICBvcHRfY29sb3JbMF0gLyAyNTUsCisg
ICAgICBvcHRfY29sb3JbMV0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbMl0gLyAyNTUsCisgICAg
ICBvcHRfY29sb3JbM10gLyAyNTUpOworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwg
Z2wuREVQVEhfQlVGRkVSX0JJVCk7CisgIGRyYXdVbml0UXVhZChnbCk7Cit9OworCisvKioKKyAq
IERyYXdzIGEgcXVhZCBwcmV2aW91c2x5IHNldHVwIHdpdGggc2V0dXBJbmRleGVkUXVhZC4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJlcyBSZXNvbHV0aW9uIG9mIGdy
aWQuCisgKi8KK3ZhciBkcmF3SW5kZXhlZFF1YWQgPSBmdW5jdGlvbihnbCwgZ3JpZFJlcykgewor
ICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncmlkUmVzICogZ3JpZFJlcyAqIDYsIGds
LlVOU0lHTkVEX1NIT1JULCAwKTsKK307CisKKy8qKgorICogRHJhd3MgYSBwcmV2aW91c2x5IHNl
dHVwSW5kZXhlZFF1YWQKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhl
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJl
cyBSZXNvbHV0aW9uIG9mIGdyaWQuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2Nv
bG9yIFRoZSBjb2xvciB0byBmaWxsIGNsZWFyIHdpdGggYmVmb3JlCisgKiAgICAgICAgZHJhd2lu
Zy4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAw
IHRvCisgKiAgICAgICAgMjU1LiBEZWZhdWx0IFsyNTUsIDI1NSwgMjU1LCAyNTVdCisgKi8KK3Zh
ciBjbGVhckFuZERyYXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlkUmVzLCBvcHRfY29s
b3IpIHsKKyAgb3B0X2NvbG9yID0gb3B0X2NvbG9yIHx8IFsyNTUsIDI1NSwgMjU1LCAyNTVdOwor
ICBnbC5jbGVhckNvbG9yKAorICAgICAgb3B0X2NvbG9yWzBdIC8gMjU1LAorICAgICAgb3B0X2Nv
bG9yWzFdIC8gMjU1LAorICAgICAgb3B0X2NvbG9yWzJdIC8gMjU1LAorICAgICAgb3B0X2NvbG9y
WzNdIC8gMjU1KTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQpOworICBkcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMpOworfTsKKworLyoqCisg
KiBDbGlwcyBhIHJhbmdlIHRvIG1pbiwgbWF4CisgKiAoRWcuIGNsaXBUb1JhbmdlKC01LDcsMCwy
MCkgd291bGQgcmV0dXJuIHt2YWx1ZTowLGV4dGVudDoyfQorICogQHBhcmFtIHtudW1iZXJ9IHZh
bHVlIHN0YXJ0IG9mIHJhbmdlCisgKiBAcGFyYW0ge251bWJlcn0gZXh0ZW50IGV4dGVudCBvZiBy
YW5nZQorICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW4uCisgKiBAcGFyYW0ge251bWJlcn0gbWF4
IG1heC4KKyAqIEByZXR1cm4geyF7dmFsdWU6bnVtYmVyLGV4dGVudDpudW1iZXJ9IFRoZSBjbGlw
cGVkIHZhbHVlLgorICovCit2YXIgY2xpcFRvUmFuZ2UgPSBmdW5jdGlvbih2YWx1ZSwgZXh0ZW50
LCBtaW4sIG1heCkgeworICBpZiAodmFsdWUgPCBtaW4pIHsKKyAgICBleHRlbnQgLT0gbWluIC0g
dmFsdWU7CisgICAgdmFsdWUgPSBtaW47CisgIH0KKyAgdmFyIGVuZCA9IHZhbHVlICsgZXh0ZW50
OworICBpZiAoZW5kID4gbWF4KSB7CisgICAgZXh0ZW50IC09IGVuZCAtIG1heDsKKyAgfQorICBp
ZiAoZXh0ZW50IDwgMCkgeworICAgIHZhbHVlID0gbWF4OworICAgIGV4dGVudCA9IDA7CisgIH0K
KyAgcmV0dXJuIHt2YWx1ZTp2YWx1ZSwgZXh0ZW50OiBleHRlbnR9OworfTsKKworLyoqCisgKiBE
ZXRlcm1pbmVzIGlmIHRoZSBwYXNzZWQgY29udGV4dCBpcyBhbiBpbnN0YW5jZSBvZiBhIFdlYkdM
UmVuZGVyaW5nQ29udGV4dAorICogb3IgbGF0ZXIgdmFyaWFudCAobGlrZSBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0KQorICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0fSBjdHggVGhlIGNv
bnRleHQgdG8gY2hlY2suCisgKi8KK3ZhciBpc1dlYkdMQ29udGV4dCA9IGZ1bmN0aW9uKGN0eCkg
eworICBpZiAoY3R4IGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0KQorICAgIHJldHVy
biB0cnVlOworCisgIGlmICgnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcgaW4gd2luZG93ICYmIGN0
eCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpCisgICAgcmV0dXJuIHRydWU7CisK
KyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqCisgKiBDaGVja3MgdGhhdCBhIHBvcnRpb24gb2Yg
YSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9y
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0
byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRv
IGNoZWNrIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbQorICogICAgICAgIGEgR0wgY29udGV4dCBv
ciB0b3AgY29ybmVyIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCisgKiBA
cGFyYW0ge251bWJlcn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFt
IHtudW1iZXJ9IGhlaWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0geyFB
cnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJh
eSB3aGVyZQorICogICAgICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUu
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUg
ZXJyb3IgaW4KKyAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgorICogQHBh
cmFtIHshZnVuY3Rpb24oKX0gc2FtZUZuIEZ1bmN0aW9uIHRvIGNhbGwgaWYgYWxsIHBpeGVscwor
ICogICAgICAgIGFyZSB0aGUgc2FtZSBhcyBjb2xvci4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9
IGRpZmZlcmVudEZuIEZ1bmN0aW9uIHRvIGNhbGwgaWYgYSBwaXhlbAorICogICAgICAgIGlzIGRp
ZmZlcmVudCB0aGFuIGNvbG9yCisgKiBAcGFyYW0geyFmdW5jdGlvbigpfSBsb2dGbiBGdW5jdGlv
biB0byBjYWxsIGZvciBsb2dnaW5nLgorICogQHBhcmFtIHtVaW50OEFycmF5fSBvcHRfcmVhZEJh
Y2tCdWYgdHlwaWNhbGx5IHBhc3NlZCB0byByZXVzZSBleGlzdGluZworICogICAgICAgIGJ1ZmZl
ciB3aGlsZSByZWFkaW5nIGJhY2sgcGl4ZWxzLgorICovCit2YXIgY2hlY2tDYW52YXNSZWN0Q29s
b3IgPSBmdW5jdGlvbihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9lcnJvclJh
bmdlLCBzYW1lRm4sIGRpZmZlcmVudEZuLCBsb2dGbiwgb3B0X3JlYWRCYWNrQnVmKSB7CisgIGlm
IChpc1dlYkdMQ29udGV4dChnbCkgJiYgIWdsLmdldFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUl9C
SU5ESU5HKSkgeworICAgIC8vIFdlJ3JlIHJlYWRpbmcgdGhlIGJhY2tidWZmZXIgc28gY2xpcC4K
KyAgICB2YXIgeHIgPSBjbGlwVG9SYW5nZSh4LCB3aWR0aCwgMCwgZ2wuY2FudmFzLndpZHRoKTsK
KyAgICB2YXIgeXIgPSBjbGlwVG9SYW5nZSh5LCBoZWlnaHQsIDAsIGdsLmNhbnZhcy5oZWlnaHQp
OworICAgIGlmICgheHIuZXh0ZW50IHx8ICF5ci5leHRlbnQpIHsKKyAgICAgIGxvZ0ZuKCJjaGVj
a2luZyByZWN0OiBlZmZlY3RpdmUgd2lkdGggb3IgaGVpZ2h0IGlzIHplcm8iKTsKKyAgICAgIHNh
bWVGbigpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICB4ID0geHIudmFsdWU7CisgICAgeSA9
IHlyLnZhbHVlOworICAgIHdpZHRoID0geHIuZXh0ZW50OworICAgIGhlaWdodCA9IHlyLmV4dGVu
dDsKKyAgfQorICB2YXIgZXJyb3JSYW5nZSA9IG9wdF9lcnJvclJhbmdlIHx8IDA7CisgIGlmICgh
ZXJyb3JSYW5nZS5sZW5ndGgpIHsKKyAgICBlcnJvclJhbmdlID0gW2Vycm9yUmFuZ2UsIGVycm9y
UmFuZ2UsIGVycm9yUmFuZ2UsIGVycm9yUmFuZ2VdCisgIH0KKyAgdmFyIGJ1ZjsKKyAgaWYgKGlz
V2ViR0xDb250ZXh0KGdsKSkgeworICAgIGJ1ZiA9IG9wdF9yZWFkQmFja0J1ZiA/IG9wdF9yZWFk
QmFja0J1ZiA6IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2wucmVh
ZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBi
dWYpOworICB9IGVsc2UgeworICAgIGJ1ZiA9IGdsLmdldEltYWdlRGF0YSh4LCB5LCB3aWR0aCwg
aGVpZ2h0KS5kYXRhOworICB9CisgIGZvciAodmFyIGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7
ICsraSkgeworICAgIHZhciBvZmZzZXQgPSBpICogNDsKKyAgICBmb3IgKHZhciBqID0gMDsgaiA8
IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICBpZiAoTWF0aC5hYnMoYnVmW29mZnNldCArIGpd
IC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZVtqXSkgeworICAgICAgICB2YXIgd2FzID0gYnVmW29m
ZnNldCArIDBdLnRvU3RyaW5nKCk7CisgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5n
dGg7ICsraikgeworICAgICAgICAgIHdhcyArPSAiLCIgKyBidWZbb2Zmc2V0ICsgal07CisgICAg
ICAgIH0KKyAgICAgICAgZGlmZmVyZW50Rm4oJ2F0ICgnICsgKHggKyAoaSAlIHdpZHRoKSkgKyAn
LCAnICsgKHkgKyBNYXRoLmZsb29yKGkgLyB3aWR0aCkpICsKKyAgICAgICAgICAgICAgICAgICAg
JykgZXhwZWN0ZWQ6ICcgKyBjb2xvciArICcgd2FzICcgKyB3YXMpOworICAgICAgICByZXR1cm47
CisgICAgICB9CisgICAgfQorICB9CisgIHNhbWVGbigpOworfTsKKworLyoqCisgKiBDaGVja3Mg
dGhhdCBhIHBvcnRpb24gb2YgYSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFt
ZWJ1ZmZlciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQg
Y29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBj
b3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbQorICogICAg
ICAgIGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVyIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBh
IDJEIGNvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRv
IGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hl
Y2suCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIGV4cGVjdGVk
LiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZQorICogICAgICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0
aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X21zZyBNZXNzYWdlIHRv
IGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnCisgKiAgICAgICAgKCJzaG91bGQgYmUgcmVkIiku
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUg
ZXJyb3IgaW4KKyAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgorICovCit2
YXIgY2hlY2tDYW52YXNSZWN0ID0gZnVuY3Rpb24oZ2wsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNv
bG9yLCBvcHRfbXNnLCBvcHRfZXJyb3JSYW5nZSkgeworICBjaGVja0NhbnZhc1JlY3RDb2xvcigK
KyAgICAgIGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X2Vycm9yUmFuZ2UsCisg
ICAgICBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIG1zZyA9IG9wdF9tc2c7CisgICAgICAgIGlm
IChtc2cgPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICBtc2cgPSAic2hvdWxkIGJlICIgKyBjb2xv
ci50b1N0cmluZygpOworICAgICAgICB0ZXN0UGFzc2VkKG1zZyk7CisgICAgICB9LAorICAgICAg
dGVzdEZhaWxlZCwKKyAgICAgIGRlYnVnKTsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYW4g
ZW50aXJlIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEg
Y29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJE
IGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBj
b2xvciBleHBlY3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAgICAgICBlYWNoIGVs
ZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBN
ZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnICgic2hvdWxkIGJlIHJlZCIpLgor
ICogQHBhcmFtIHtudW1iZXJ9IGVycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUgZXJyb3Ig
aW4KKyAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgorICovCit2YXIgY2hl
Y2tDYW52YXMgPSBmdW5jdGlvbihnbCwgY29sb3IsIG1zZywgZXJyb3JSYW5nZSkgeworICBjaGVj
a0NhbnZhc1JlY3QoZ2wsIDAsIDAsIGdsLmNhbnZhcy53aWR0aCwgZ2wuY2FudmFzLmhlaWdodCwg
Y29sb3IsIG1zZywgZXJyb3JSYW5nZSk7Cit9OworCisvKioKKyAqIENoZWNrcyBhIHJlY3Rhbmd1
bGFyIGFyZWEgYm90aCBpbnNpZGUgdGhlIGFyZWEgYW5kIG91dHNpZGUKKyAqIHRoZSBhcmVhLgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0
IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0byBj
aGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRvIGNo
ZWNrIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbQorICogICAgICAgIGEgR0wgY29udGV4dCBvciB0
b3AgY29ybmVyIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCisgKiBAcGFy
YW0ge251bWJlcn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtu
dW1iZXJ9IGhlaWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0geyFBcnJh
eS48bnVtYmVyPn0gaW5uZXJDb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQgaW5zaWRlCisgKiAgICAg
dGhlIGFyZWEuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUK
KyAqICAgICByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvdXRl
ckNvbG9yIFRoZSBjb2xvciBleHBlY3RlZAorICogICAgIG91dHNpZGUuIEEgNCBlbGVtZW50IGFy
cmF5IHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUKKyAqICAgICByYW5nZSAwIHRvIDI1NS4K
KyAqIEBwYXJhbSB7IW51bWJlcn0gb3B0X2VkZ2VTaXplOiBUaGUgbnVtYmVyIG9mIHBpeGVscyB0
byBza2lwCisgKiAgICAgYXJvdW5kIHRoZSBlZGdlcyBvZiB0aGUgYXJlYS4gRGVmYXV0IDAuCisg
KiBAcGFyYW0geyF7d2lkdGg6bnVtYmVyLCBoZWlnaHQ6bnVtYmVyfX0gb3B0X291dGVyRGltZW5z
aW9ucworICogICAgIFRoZSBvdXRlciBkaW1lbnNpb25zLiBEZWZhdWx0IHRoZSBzaXplIG9mIGds
LmNhbnZhcy4KKyAqLwordmFyIGNoZWNrQXJlYUluQW5kT3V0ID0gZnVuY3Rpb24oZ2wsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGlubmVyQ29sb3IsIG91dGVyQ29sb3IsIG9wdF9lZGdlU2l6ZSwgb3B0
X291dGVyRGltZW5zaW9ucykgeworICB2YXIgb3V0ZXJEaW1lbnNpb25zID0gb3B0X291dGVyRGlt
ZW5zaW9ucyB8fCB7IHdpZHRoOiBnbC5jYW52YXMud2lkdGgsIGhlaWdodDogZ2wuY2FudmFzLmhl
aWdodCB9OworICB2YXIgZWRnZVNpemUgPSBvcHRfZWRnZVNpemUgfHwgMDsKKyAgY2hlY2tDYW52
YXNSZWN0KGdsLCB4ICsgZWRnZVNpemUsIHkgKyBlZGdlU2l6ZSwgd2lkdGggLSBlZGdlU2l6ZSAq
IDIsIGhlaWdodCAtIGVkZ2VTaXplICogMiwgaW5uZXJDb2xvcik7CisgIGNoZWNrQ2FudmFzUmVj
dChnbCwgMCwgMCwgeCAtIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lvbnMuaGVpZ2h0LCBvdXRlckNv
bG9yKTsKKyAgY2hlY2tDYW52YXNSZWN0KGdsLCB4ICsgd2lkdGggKyBlZGdlU2l6ZSwgMCwgb3V0
ZXJEaW1lbnNpb25zLndpZHRoIC0geCAtIHdpZHRoIC0gZWRnZVNpemUsIG91dGVyRGltZW5zaW9u
cy5oZWlnaHQsIG91dGVyQ29sb3IpOworICBjaGVja0NhbnZhc1JlY3QoZ2wsIDAsIDAsIG91dGVy
RGltZW5zaW9ucy53aWR0aCwgeSAtIGVkZ2VTaXplLCBvdXRlckNvbG9yKTsKKyAgY2hlY2tDYW52
YXNSZWN0KGdsLCAwLCB5ICsgaGVpZ2h0ICsgZWRnZVNpemUsIG91dGVyRGltZW5zaW9ucy53aWR0
aCwgb3V0ZXJEaW1lbnNpb25zLmhlaWdodCAtIHkgLSBoZWlnaHQgLSBlZGdlU2l6ZSwgb3V0ZXJD
b2xvcik7Cit9OworCisvKioKKyAqIExvYWRzIGEgdGV4dHVyZSwgY2FsbHMgY2FsbGJhY2sgd2hl
biBmaW5pc2hlZC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBv
ZiBpbWFnZSB0byBsb2FkCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCFJbWFnZSk6IHZvaWR9IGNhbGxi
YWNrIEZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgYWZ0ZXIKKyAqICAgICAgICBpbWFnZSBoYXMg
bG9hZGVkCisgKiBAcmV0dXJuIHshV2ViR0xUZXh0dXJlfSBUaGUgY3JlYXRlZCB0ZXh0dXJlLgor
ICovCit2YXIgbG9hZFRleHR1cmUgPSBmdW5jdGlvbihnbCwgdXJsLCBjYWxsYmFjaykgeworICAg
IHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8y
RCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0
ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7Cisg
ICAgdmFyIGltYWdlID0gbmV3IEltYWdlKCk7CisgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAg
ICAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0cnVlKTsKKyAgICAg
ICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBpbWFnZSk7CisgICAgICAgIGNhbGxiYWNrKGltYWdlKTsKKyAgICB9Owor
ICAgIGltYWdlLnNyYyA9IHVybDsKKyAgICByZXR1cm4gdGV4dHVyZTsKK307CisKKy8qKgorICog
Q2hlY2tzIHdoZXRoZXIgdGhlIGJvdW5kIHRleHR1cmUgaGFzIGV4cGVjdGVkIGRpbWVuc2lvbnMu
IE9uZSBjb3JuZXIgcGl4ZWwKKyAqIG9mIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2hhbmdlZCBhcyBh
IHNpZGUgZWZmZWN0LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMVGV4dHVyZX0g
dGV4dHVyZSBUaGUgdGV4dHVyZSB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBF
eHBlY3RlZCB3aWR0aC4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgRXhwZWN0ZWQgaGVpZ2h0
LgorICogQHBhcmFtIHtHTGVudW19IG9wdF9mb3JtYXQgVGhlIHRleHR1cmUncyBmb3JtYXQuIERl
ZmF1bHRzIHRvIFJHQkEuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3R5cGUgVGhlIHRleHR1cmUn
cyB0eXBlLiBEZWZhdWx0cyB0byBVTlNJR05FRF9CWVRFLgorICovCit2YXIgY2hlY2tUZXh0dXJl
U2l6ZSA9IGZ1bmN0aW9uKGdsLCB3aWR0aCwgaGVpZ2h0LCBvcHRfZm9ybWF0LCBvcHRfdHlwZSkg
eworICBvcHRfZm9ybWF0ID0gb3B0X2Zvcm1hdCB8fCBnbC5SR0JBOworICBvcHRfdHlwZSA9IG9w
dF90eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7CisKKyAgdmFyIG51bUVsZW1lbnRzID0gZ2V0VHlw
ZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWwoZ2wsIG9wdF9mb3JtYXQsIG9wdF90eXBlKTsKKyAgdmFy
IGJ1ZiA9IG5ldyAoZ2xUeXBlVG9UeXBlZEFycmF5VHlwZShnbCwgb3B0X3R5cGUpKShudW1FbGVt
ZW50cyk7CisKKyAgdmFyIGVycm9ycyA9IDA7CisgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgd2lkdGggLSAxLCBoZWlnaHQgLSAxLCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlw
ZSwgYnVmKTsKKyAgaWYgKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0
RmFpbGVkKCJUZXh0dXJlIHdhcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgIiArIHdp
ZHRoICsgIngiICsgaGVpZ2h0KTsKKyAgICArK2Vycm9yczsKKyAgfQorICBnbC50ZXhTdWJJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdpZHRoIC0gMSwgaGVpZ2h0LCAxLCAxLCBvcHRfZm9ybWF0
LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYgKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IpIHsK
KyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdhcyB0YWxsZXIgdGhhbiAiICsgaGVpZ2h0KTsKKyAg
ICArK2Vycm9yczsKKyAgfQorICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdp
ZHRoLCBoZWlnaHQgLSAxLCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYg
KGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJl
IHdhcyB3aWRlciB0aGFuICIgKyB3aWR0aCk7CisgICAgKytlcnJvcnM7CisgIH0KKyAgaWYgKGVy
cm9ycyA9PSAwKSB7CisgICAgdGVzdFBhc3NlZCgiVGV4dHVyZSBoYWQgdGhlIGV4cGVjdGVkIHNp
emUgIiArIHdpZHRoICsgIngiICsgaGVpZ2h0KTsKKyAgfQorfTsKKworLyoqCisgKiBNYWtlcyBh
IHNoYWxsb3cgY29weSBvZiBhbiBvYmplY3QuCisgKiBAcGFyYW0geyFPYmplY3QpIHNyYyBPYmpl
Y3QgdG8gY29weQorICogQHJldHVybiB7IU9iamVjdH0gVGhlIGNvcHkgb2Ygc3JjLgorICovCit2
YXIgc2hhbGxvd0NvcHlPYmplY3QgPSBmdW5jdGlvbihzcmMpIHsKKyAgdmFyIGRzdCA9IHt9Owor
ICBmb3IgKHZhciBhdHRyIGluIHNyYykgeworICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoYXR0
cikpIHsKKyAgICAgIGRzdFthdHRyXSA9IHNyY1thdHRyXTsKKyAgICB9CisgIH0KKyAgcmV0dXJu
IGRzdDsKK307CisKKy8qKgorICogQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBleGlzdHMgb24gYW4g
b2JqZWN0IGNhc2UgaW5zZW5zaXRpdmUuCisgKiBAcGFyYW0geyFPYmplY3QpIG9iaiBPYmplY3Qg
dG8gY2hlY2sKKyAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyIE5hbWUgb2YgYXR0cmlidXRlIHRvIGxv
b2sgZm9yLgorICogQHJldHVybiB7c3RyaW5nP30gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBp
ZiBpdCBleGlzdHMsCisgKiAgICAgICAgIHVuZGVmaW5lZCBpZiBub3QuCisgKi8KK3ZhciBoYXNB
dHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUgPSBmdW5jdGlvbihvYmosIGF0dHIpIHsKKyAgdmFyIGxv
d2VyID0gYXR0ci50b0xvd2VyQ2FzZSgpOworICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAg
aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGtleS50b0xvd2VyQ2FzZSgpID09IGxvd2Vy
KSB7CisgICAgICByZXR1cm4ga2V5OworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5z
IGEgbWFwIG9mIFVSTCBxdWVyeXN0cmluZyBvcHRpb25zCisgKiBAcmV0dXJuIHtPYmplY3Q/fSBP
YmplY3QgY29udGFpbmluZyBhbGwgdGhlIHZhbHVlcyBpbiB0aGUgVVJMIHF1ZXJ5c3RyaW5nCisg
Ki8KK3ZhciBnZXRVcmxPcHRpb25zID0gZnVuY3Rpb24oKSB7CisgIHZhciBvcHRpb25zID0ge307
CisgIHZhciBzID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CisgIHZhciBxID0gcy5pbmRleE9mKCI/
Iik7CisgIHZhciBlID0gcy5pbmRleE9mKCIjIik7CisgIGlmIChlIDwgMCkgeworICAgIGUgPSBz
Lmxlbmd0aDsKKyAgfQorICB2YXIgcXVlcnkgPSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgIHZh
ciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBwYWly
cy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3BsaXQoIj0i
KTsKKyAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgdmFyIHZhbHVlID0gZGVjb2RlVVJJ
Q29tcG9uZW50KGtleVZhbHVlWzFdKTsKKyAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTsKKyAgfQor
CisgIHJldHVybiBvcHRpb25zOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgd2ViZ2wgY29udGV4
dC4KKyAqIEBwYXJhbSB7IUNhbnZhc3xzdHJpbmd9IG9wdF9jYW52YXMgVGhlIGNhbnZhcyB0YWcg
dG8gZ2V0CisgKiAgICAgY29udGV4dCBmcm9tLiBJZiBvbmUgaXMgbm90IHBhc3NlZCBpbiBvbmUg
d2lsbCBiZQorICogICAgIGNyZWF0ZWQuIElmIGl0J3MgYSBzdHJpbmcgaXQncyBhc3N1bWVkIHRv
IGJlIHRoZSBpZCBvZiBhCisgKiAgICAgY2FudmFzLgorICogQHBhcmFtIHtPYmplY3R9IG9wdF9h
dHRyaWJ1dGVzIENvbnRleHQgYXR0cmlidXRlcy4KKyAqIEBwYXJhbSB7IW51bWJlcn0gb3B0X3Zl
cnNpb24gVmVyc2lvbiBvZiBXZWJHTCBjb250ZXh0IHRvIGNyZWF0ZQorICogQHJldHVybiB7IVdl
YkdMUmVuZGVyaW5nQ29udGV4dH0gVGhlIGNyZWF0ZWQgY29udGV4dC4KKyAqLwordmFyIGNyZWF0
ZTNEQ29udGV4dCA9IGZ1bmN0aW9uKG9wdF9jYW52YXMsIG9wdF9hdHRyaWJ1dGVzLCBvcHRfdmVy
c2lvbikgeworICBpZiAod2luZG93LmluaXRUZXN0aW5nSGFybmVzcykgeworICAgIHdpbmRvdy5p
bml0VGVzdGluZ0hhcm5lc3MoKTsKKyAgfQorICB2YXIgYXR0cmlidXRlcyA9IHNoYWxsb3dDb3B5
T2JqZWN0KG9wdF9hdHRyaWJ1dGVzIHx8IHt9KTsKKyAgaWYgKCFoYXNBdHRyaWJ1dGVDYXNlSW5z
ZW5zaXRpdmUoYXR0cmlidXRlcywgImFudGlhbGlhcyIpKSB7CisgICAgYXR0cmlidXRlcy5hbnRp
YWxpYXMgPSBmYWxzZTsKKyAgfQorICBpZiAoIW9wdF92ZXJzaW9uKSB7CisgICAgb3B0X3ZlcnNp
b24gPSBwYXJzZUludChnZXRVcmxPcHRpb25zKCkud2ViZ2xWZXJzaW9uLCAxMCkgfHwgMTsKKyAg
fQorICBvcHRfY2FudmFzID0gb3B0X2NhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJj
YW52YXMiKTsKKyAgaWYgKHR5cGVvZiBvcHRfY2FudmFzID09ICdzdHJpbmcnKSB7CisgICAgb3B0
X2NhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdF9jYW52YXMpOworICB9CisgIHZh
ciBjb250ZXh0ID0gbnVsbDsKKworICB2YXIgbmFtZXM7CisgIHN3aXRjaCAob3B0X3ZlcnNpb24p
IHsKKyAgICBjYXNlIDI6CisgICAgICBuYW1lcyA9IFsid2ViZ2wyIl07IGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICBuYW1lcyA9IFsid2ViZ2wiLCAiZXhwZXJpbWVudGFsLXdlYmdsIl07IGJy
ZWFrOworICB9CisKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkgewor
ICAgIHRyeSB7CisgICAgICBjb250ZXh0ID0gb3B0X2NhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ld
LCBhdHRyaWJ1dGVzKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgfQorICAgIGlmIChjb250ZXh0
KSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgaWYgKCFjb250ZXh0KSB7CisgICAgdGVz
dEZhaWxlZCgiVW5hYmxlIHRvIGZldGNoIFdlYkdMIHJlbmRlcmluZyBjb250ZXh0IGZvciBDYW52
YXMiKTsKKyAgfQorICByZXR1cm4gY29udGV4dDsKK30KKworLyoqCisgKiBXcmFwcyBhIFdlYkdM
IGZ1bmN0aW9uIHdpdGggYSBmdW5jdGlvbiB0aGF0IHRocm93cyBhbiBleGNlcHRpb24gaWYgdGhl
cmUgaXMKKyAqIGFuIGVycm9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBn
bCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBm
bmFtZSBOYW1lIG9mIGZ1bmN0aW9uIHRvIHdyYXAuCisgKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhl
IHdyYXBwZWQgZnVuY3Rpb24uCisgKi8KK3ZhciBjcmVhdGVHTEVycm9yV3JhcHBlciA9IGZ1bmN0
aW9uKGNvbnRleHQsIGZuYW1lKSB7CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcnYg
PSBjb250ZXh0W2ZuYW1lXS5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpOworICAgIHZhciBlcnIg
PSBjb250ZXh0LmdldEVycm9yKCk7CisgICAgaWYgKGVyciAhPSBjb250ZXh0Lk5PX0VSUk9SKQor
ICAgICAgdGhyb3cgIkdMIGVycm9yICIgKyBnbEVudW1Ub1N0cmluZyhjb250ZXh0LCBlcnIpICsg
IiBpbiAiICsgZm5hbWU7CisgICAgcmV0dXJuIHJ2OworICB9OworfTsKKworLyoqCisgKiBDcmVh
dGVzIGEgV2ViR0wgY29udGV4dCB3aGVyZSBhbGwgZnVuY3Rpb25zIGFyZSB3cmFwcGVkIHRvIHRo
cm93IGFuIGV4Y2VwdGlvbgorICogaWYgdGhlcmUgaXMgYW4gZXJyb3IuCisgKiBAcGFyYW0geyFD
YW52YXN9IGNhbnZhcyBUaGUgSFRNTCBjYW52YXMgdG8gZ2V0IGEgY29udGV4dCBmcm9tLgorICog
QHJldHVybiB7IU9iamVjdH0gVGhlIHdyYXBwZWQgY29udGV4dC4KKyAqLworZnVuY3Rpb24gY3Jl
YXRlM0RDb250ZXh0V2l0aFdyYXBwZXJUaGF0VGhyb3dzT25HTEVycm9yKGNhbnZhcykgeworICB2
YXIgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMpOworICB2YXIgd3JhcCA9IHt9Owor
ICBmb3IgKHZhciBpIGluIGNvbnRleHQpIHsKKyAgICB0cnkgeworICAgICAgaWYgKHR5cGVvZiBj
b250ZXh0W2ldID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgd3JhcFtpXSA9IGNyZWF0ZUdMRXJy
b3JXcmFwcGVyKGNvbnRleHQsIGkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd3JhcFtpXSA9
IGNvbnRleHRbaV07CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXJyb3IoImNy
ZWF0ZUNvbnRleHRXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcjogRXJyb3IgYWNjZXNzaW5nICIg
KyBpKTsKKyAgICB9CisgIH0KKyAgd3JhcC5nZXRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAg
cmV0dXJuIGNvbnRleHQuZ2V0RXJyb3IoKTsKKyAgfTsKKyAgcmV0dXJuIHdyYXA7Cit9OworCisv
KioKKyAqIFRlc3RzIHRoYXQgYW4gZXZhbHVhdGVkIGV4cHJlc3Npb24gZ2VuZXJhdGVzIGEgc3Bl
Y2lmaWMgR0wgZXJyb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXku
PG51bWJlcj59IGdsRXJyb3JzIFRoZSBleHBlY3RlZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBl
eHBlY3RlZCBlcnJvcnMuCisgKiBAcGFyYW0ge3N0cmluZ30gZXZhbFN0ciBUaGUgc3RyaW5nIHRv
IGV2YWx1YXRlLgorICovCit2YXIgc2hvdWxkR2VuZXJhdGVHTEVycm9yID0gZnVuY3Rpb24oZ2ws
IGdsRXJyb3JzLCBldmFsU3RyKSB7CisgIHZhciBleGNlcHRpb247CisgIHRyeSB7CisgICAgZXZh
bChldmFsU3RyKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKyAg
aWYgKGV4Y2VwdGlvbikgeworICAgIHRlc3RGYWlsZWQoZXZhbFN0ciArICIgdGhyZXcgZXhjZXB0
aW9uICIgKyBleGNlcHRpb24pOworICAgIHJldHVybiAtMTsKKyAgfSBlbHNlIHsKKyAgICByZXR1
cm4gZ2xFcnJvclNob3VsZEJlKGdsLCBnbEVycm9ycywgImFmdGVyIGV2YWx1YXRpbmc6ICIgKyBl
dmFsU3RyKTsKKyAgfQorfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IGFuIGV2YWx1YXRlZCBleHBy
ZXNzaW9uIGVpdGhlciB0aHJvd3MgYW4gZXhjZXB0aW9uIG9yIGdlbmVyYXRlcyBhIHNwZWNpZmlj
IEdMIGVycm9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5LjxudW1i
ZXI+fSBnbEVycm9ycyBUaGUgZXhwZWN0ZWQgZ2wgZXJyb3Igb3IgYW4gYXJyYXkgb2YgZXhwZWN0
ZWQgZXJyb3JzLgorICogQHBhcmFtIHtzdHJpbmd9IGV2YWxTdHIgVGhlIHN0cmluZyB0byBldmFs
dWF0ZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIFRoZSBvcHRpb25hbCBtZXNzYWdlIHRv
IGRpc3BsYXkuCisgKi8KK3ZhciBzaG91bGRUaHJvd09yR2VuZXJhdGVHTEVycm9yID0gZnVuY3Rp
b24oZ2wsIGdsRXJyb3JzLCBldmFsU3RyLCBvcHRfbXNnKSB7CisgIHZhciBleGNlcHRpb247Cisg
IHRyeSB7CisgICAgZXZhbChldmFsU3RyKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlv
biA9IGU7CisgIH0KKyAgaWYgKGV4Y2VwdGlvbikgeworICAgIHRlc3RQYXNzZWQoZXZhbFN0ciAr
ICIgdGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIHJldHVybiAwOworICB9IGVs
c2UgeworICAgIGlmICghb3B0X21zZykgeworICAgICAgb3B0X21zZyA9ICJhZnRlciBldmFsdWF0
aW5nOiAiICsgZXZhbFN0cjsKKyAgICB9CisgICAgcmV0dXJuIGdsRXJyb3JTaG91bGRCZShnbCwg
Z2xFcnJvcnMsIG9wdF9tc2cpOworICB9Cit9OworCisvKioKKyAqIFRlc3RzIHRoYXQgdGhlIGZp
cnN0IGVycm9yIEdMIHJldHVybnMgaXMgdGhlIHNwZWNpZmllZCBlcnJvci4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0gZ2xFcnJvcnMgVGhlIGV4cGVj
dGVkIGdsIGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVkIGVycm9ycy4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBvcHRfbXNnIE9wdGlvbmFsIGFkZGl0aW9uYWwgbWVzc2FnZS4KKyAqLwordmFyIGds
RXJyb3JTaG91bGRCZSA9IGZ1bmN0aW9uKGdsLCBnbEVycm9ycywgb3B0X21zZykgeworICBpZiAo
IWdsRXJyb3JzLmxlbmd0aCkgeworICAgIGdsRXJyb3JzID0gW2dsRXJyb3JzXTsKKyAgfQorICBv
cHRfbXNnID0gb3B0X21zZyB8fCAiIjsKKyAgdmFyIGVyciA9IGdsLmdldEVycm9yKCk7CisgIHZh
ciBuZHggPSBnbEVycm9ycy5pbmRleE9mKGVycik7CisgIHZhciBlcnJTdHJzID0gW107CisgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBnbEVycm9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICBlcnJTdHJz
LnB1c2goZ2xFbnVtVG9TdHJpbmcoZ2wsIGdsRXJyb3JzW2lpXSkpOworICB9CisgIHZhciBleHBl
Y3RlZCA9IGVyclN0cnMuam9pbigiIG9yICIpOworICBpZiAobmR4IDwgMCkgeworICAgIHZhciBt
c2cgPSAiZ2V0RXJyb3IgZXhwZWN0ZWQiICsgKChnbEVycm9ycy5sZW5ndGggPiAxKSA/ICIgb25l
IG9mOiAiIDogIjogIik7CisgICAgdGVzdEZhaWxlZChtc2cgKyBleHBlY3RlZCArICAiLiBXYXMg
IiArIGdsRW51bVRvU3RyaW5nKGdsLCBlcnIpICsgIiA6ICIgKyBvcHRfbXNnKTsKKyAgfSBlbHNl
IHsKKyAgICB2YXIgbXNnID0gImdldEVycm9yIHdhcyAiICsgKChnbEVycm9ycy5sZW5ndGggPiAx
KSA/ICJvbmUgb2Y6ICIgOiAiZXhwZWN0ZWQgdmFsdWU6ICIpOworICAgIHRlc3RQYXNzZWQobXNn
ICsgZXhwZWN0ZWQgKyAiIDogIiArIG9wdF9tc2cpOworICB9CisgIHJldHVybiBlcnI7Cit9Owor
CisvKioKKyAqIExpbmtzIGEgV2ViR0wgcHJvZ3JhbSwgdGhyb3dzIGlmIHRoZXJlIGFyZSBlcnJv
cnMuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshV2ViR0xQcm9ncmFtfSBwcm9ncmFtIFRo
ZSBXZWJHTFByb2dyYW0gdG8gbGluay4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9p
ZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqLwordmFyIGxpbmtQ
cm9ncmFtID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZh
ciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IHRlc3RGYWlsZWQ7CisgIC8vIExpbmsgdGhl
IHByb2dyYW0KKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgLy8gQ2hlY2sgdGhlIGxp
bmsgc3RhdHVzCisgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IGdsLkxJTktfU1RBVFVTKTsKKyAgaWYgKCFsaW5rZWQpIHsKKyAgICAvLyBzb21ldGhpbmcgd2Vu
dCB3cm9uZyB3aXRoIHRoZSBsaW5rCisgICAgdmFyIGVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9M
b2cgKHByb2dyYW0pOworCisgICAgZXJyRm4oIkVycm9yIGluIHByb2dyYW0gbGlua2luZzoiICsg
ZXJyb3IpOworCisgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgfQorfTsKKworLyoq
CisgKiBMb2FkcyB0ZXh0IGZyb20gYW4gZXh0ZXJuYWwgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBz
eW5jaHJvbm91cy4KKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJu
YWwgZmlsZS4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2wsIHN0cmluZyk6IHZvaWR9IGNhbGxi
YWNrIHRoYXQgaXMgc2VudCBhIGJvb2wgZm9yCisgKiAgICAgc3VjY2VzcyBhbmQgdGhlIHN0cmlu
Zy4KKyAqLwordmFyIGxvYWRUZXh0RmlsZUFzeW5jID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykg
eworICBsb2cgKCJsb2FkaW5nOiAiICsgdXJsKTsKKyAgdmFyIGVycm9yID0gJ2xvYWRUZXh0Rmls
ZVN5bmNocm9ub3VzIGZhaWxlZCB0byBsb2FkIHVybCAiJyArIHVybCArICciJzsKKyAgdmFyIHJl
cXVlc3Q7CisgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHsKKyAgICByZXF1ZXN0ID0gbmV3
IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgaWYgKHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSkgewor
ICAgICAgcmVxdWVzdC5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3BsYWluJyk7CisgICAgfQorICB9
IGVsc2UgeworICAgIHRocm93ICdYTUxIdHRwUmVxdWVzdCBpcyBkaXNhYmxlZCc7CisgIH0KKyAg
dHJ5IHsKKyAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgcmVxdWVzdC5v
bnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmIChyZXF1ZXN0LnJlYWR5
U3RhdGUgPT0gNCkgeworICAgICAgICB2YXIgdGV4dCA9ICcnOworICAgICAgICAvLyBIVFRQIHJl
cG9ydHMgc3VjY2VzcyB3aXRoIGEgMjAwIHN0YXR1cy4gVGhlIGZpbGUgcHJvdG9jb2wgcmVwb3J0
cworICAgICAgICAvLyBzdWNjZXNzIHdpdGggemVyby4gSFRUUCBkb2VzIG5vdCB1c2UgemVybyBh
cyBhIHN0YXR1cyBjb2RlICh0aGV5CisgICAgICAgIC8vIHN0YXJ0IGF0IDEwMCkuCisgICAgICAg
IC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL0VuL1VzaW5nX1hNTEh0dHBSZXF1ZXN0
CisgICAgICAgIHZhciBzdWNjZXNzID0gcmVxdWVzdC5zdGF0dXMgPT0gMjAwIHx8IHJlcXVlc3Qu
c3RhdHVzID09IDA7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgdGV4dCA9IHJl
cXVlc3QucmVzcG9uc2VUZXh0OworICAgICAgICB9CisgICAgICAgIGxvZygibG9hZGVkOiAiICsg
dXJsKTsKKyAgICAgICAgY2FsbGJhY2soc3VjY2VzcywgdGV4dCk7CisgICAgICB9CisgICAgfTsK
KyAgICByZXF1ZXN0LnNlbmQobnVsbCk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBsb2coImZhaWxl
ZCB0byBsb2FkOiAiICsgdXJsKTsKKyAgICBjYWxsYmFjayhmYWxzZSwgJycpOworICB9Cit9Owor
CisvKioKKyAqIFJlY3Vyc2l2ZWx5IGxvYWRzIGEgZmlsZSBhcyBhIGxpc3QuIEVhY2ggbGluZSBp
cyBwYXJzZWQgZm9yIGEgcmVsYXRpdmUKKyAqIHBhdGguIElmIHRoZSBmaWxlIGVuZHMgaW4gLnR4
dCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlIGlzIGluc2VydGVkIGluCisgKiB0aGUgbGlzdC4K
KyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVybmFsIGZpbGUu
CisgKiBAcGFyYW0geyFmdW5jdGlvbihib29sLCBBcnJheTxzdHJpbmc+KTogdm9pZH0gY2FsbGJh
Y2sgdGhhdCBpcyBzZW50IGEgYm9vbAorICogICAgIGZvciBzdWNjZXNzIGFuZCB0aGUgYXJyYXkg
b2Ygc3RyaW5ncy4KKyAqLwordmFyIGdldEZpbGVMaXN0QXN5bmMgPSBmdW5jdGlvbih1cmwsIGNh
bGxiYWNrKSB7CisgIHZhciBmaWxlcyA9IFtdOworCisgIHZhciBnZXRGaWxlTGlzdEltcGwgPSBm
dW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVzID0gW107CisgICAgaWYgKHVy
bC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgICAgbG9hZFRleHRGaWxl
QXN5bmModXJsLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3Ms
IHRleHQpIHsKKyAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGNhbGxiYWNr
KGZhbHNlLCAnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAgICAgICAg
IHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CisgICAgICAgICAgdmFyIHByZWZpeCA9ICcn
OworICAgICAgICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKKyAgICAg
ICAgICBpZiAobGFzdFNsYXNoID49IDApIHsKKyAgICAgICAgICAgIHByZWZpeCA9IHVybC5zdWJz
dHIoMCwgbGFzdFNsYXNoICsgMSk7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBmYWlsID0g
ZmFsc2U7CisgICAgICAgICAgdmFyIGNvdW50ID0gMTsKKyAgICAgICAgICB2YXIgaW5kZXggPSAw
OworICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsK
KyAgICAgICAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJl
cGxhY2UoL1xzXHMqJC8sICcnKTsKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgor
ICAgICAgICAgICAgICAgIHN0clswXSAhPSAnIycgJiYKKyAgICAgICAgICAgICAgICBzdHJbMF0g
IT0gIjsiICYmCisgICAgICAgICAgICAgICAgc3RyLnN1YnN0cigwLCAyKSAhPSAiLy8iKSB7Cisg
ICAgICAgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKKyAgICAgICAgICAgICAg
bmV3X3VybCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9
PSAxKSB7CisgICAgICAgICAgICAgICAgbmV3X3VybCA9IHByZWZpeCArIHN0cjsKKyAgICAgICAg
ICAgICAgICArK2NvdW50OworICAgICAgICAgICAgICAgIGdldEZpbGVMaXN0SW1wbChuZXdfdXJs
LCBmdW5jdGlvbihpbmRleCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1
Y2Nlc3MsIG5ld19maWxlcykgeworICAgICAgICAgICAgICAgICAgICBsb2coImdvdCBmaWxlczog
IiArIG5ld19maWxlcy5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICAgIGZpbGVzW2luZGV4XSA9IG5ld19maWxlczsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmaW5pc2goc3VjY2Vzcyk7Cisg
ICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0oaW5kZXgrKykpOworICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBzID0gIiI7CisgICAgICAgICAg
ICAgICAgdmFyIHAgPSAiIjsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwg
bmFtZXMubGVuZ3RoOyArK2pqKSB7CisgICAgICAgICAgICAgICAgICBzICs9IHAgKyBwcmVmaXgg
KyBuYW1lc1tqal07CisgICAgICAgICAgICAgICAgICBwID0gIiAiOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBmaWxlc1tpbmRleCsrXSA9IHM7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZmluaXNoKHRydWUpOworCisg
ICAgICAgICAgZnVuY3Rpb24gZmluaXNoKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIC0tY291bnQ7CisgICAgICAgICAgICBsb2coImNvdW50OiAiICsgY291bnQpOworICAg
ICAgICAgICAgaWYgKCFjb3VudCkgeworICAgICAgICAgICAgICBjYWxsYmFjayghZmFpbCwgZmls
ZXMpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSgpKTsK
KworICAgIH0gZWxzZSB7CisgICAgICBmaWxlcy5wdXNoKHVybCk7CisgICAgICBjYWxsYmFjayh0
cnVlLCBmaWxlcyk7CisgICAgfQorICB9OworCisgIGdldEZpbGVMaXN0SW1wbCh1cmwsIGZ1bmN0
aW9uKHN1Y2Nlc3MsIGZpbGVzKSB7CisgICAgLy8gZmxhdHRlbgorICAgIHZhciBmbGF0ID0gW107
CisgICAgZmxhdHRlbihmaWxlcyk7CisgICAgZnVuY3Rpb24gZmxhdHRlbihmaWxlcykgeworICAg
ICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGZpbGVzLmxlbmd0aDsgKytpaSkgeworICAgICAgICB2
YXIgdmFsdWUgPSBmaWxlc1tpaV07CisgICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09ICJzdHJp
bmciKSB7CisgICAgICAgICAgZmxhdC5wdXNoKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICBmbGF0dGVuKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBj
YWxsYmFjayhzdWNjZXNzLCBmbGF0KTsKKyAgfSk7Cit9OworCisvKioKKyAqIEdldHMgYSBmaWxl
IGZyb20gYSBmaWxlL1VSTC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlIHRoZSBVUkwgb2YgdGhl
IGZpbGUgdG8gZ2V0LgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgY29udGVudHMgb2YgdGhlIGZp
bGUuCisgKi8KK3ZhciByZWFkRmlsZSA9IGZ1bmN0aW9uKGZpbGUpIHsKKyAgdmFyIHhociA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbigiR0VUIiwgZmlsZSwgZmFsc2UpOworICB4
aHIuc2VuZCgpOworICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dC5yZXBsYWNlKC9cci9nLCAiIik7
Cit9OworCit2YXIgcmVhZEZpbGVMaXN0ID0gZnVuY3Rpb24odXJsKSB7CisgIHZhciBmaWxlcyA9
IFtdOworICBpZiAodXJsLnN1YnN0cih1cmwubGVuZ3RoIC0gNCkgPT0gJy50eHQnKSB7CisgICAg
dmFyIGxpbmVzID0gcmVhZEZpbGUodXJsKS5zcGxpdCgnXG4nKTsKKyAgICB2YXIgcHJlZml4ID0g
Jyc7CisgICAgdmFyIGxhc3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignLycpOworICAgIGlmIChs
YXN0U2xhc2ggPj0gMCkgeworICAgICAgcHJlZml4ID0gdXJsLnN1YnN0cigwLCBsYXN0U2xhc2gg
KyAxKTsKKyAgICB9CisgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytp
aSkgeworICAgICAgdmFyIHN0ciA9IGxpbmVzW2lpXS5yZXBsYWNlKC9eXHNccyovLCAnJykucmVw
bGFjZSgvXHNccyokLywgJycpOworICAgICAgaWYgKHN0ci5sZW5ndGggPiA0ICYmCisgICAgICAg
ICAgc3RyWzBdICE9ICcjJyAmJgorICAgICAgICAgIHN0clswXSAhPSAiOyIgJiYKKyAgICAgICAg
ICBzdHIuc3Vic3RyKDAsIDIpICE9ICIvLyIpIHsKKyAgICAgICAgdmFyIG5hbWVzID0gc3RyLnNw
bGl0KC8gKy8pOworICAgICAgICBpZiAobmFtZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICBu
ZXdfdXJsID0gcHJlZml4ICsgc3RyOworICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHJl
YWRGaWxlTGlzdChuZXdfdXJsKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIHMg
PSAiIjsKKyAgICAgICAgICB2YXIgcCA9ICIiOworICAgICAgICAgIGZvciAodmFyIGpqID0gMDsg
amogPCBuYW1lcy5sZW5ndGg7ICsramopIHsKKyAgICAgICAgICAgIHMgKz0gcCArIHByZWZpeCAr
IG5hbWVzW2pqXTsKKyAgICAgICAgICAgIHAgPSAiICI7CisgICAgICAgICAgfQorICAgICAgICAg
IGZpbGVzLnB1c2gocyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7Cisg
ICAgZmlsZXMucHVzaCh1cmwpOworICB9CisgIHJldHVybiBmaWxlczsKK307CisKKy8qKgorICog
TG9hZHMgYSBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHNoYWRl
clNvdXJjZSBUaGUgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBzaGFkZXJUeXBl
IFRoZSB0eXBlIG9mIHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZCkg
b3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVh
bn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBvcHRfc2hhZGVyTGFiZWwgTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzaGFk
ZXIgc291cmNlIGluCisgKiAgICAgdGhlIGxvZy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfdXJs
IFVSTCBmcm9tIHdoZXJlIHRoZSBzaGFkZXIgc291cmNlIHdhcyBsb2FkZWQgZnJvbS4KKyAqICAg
ICBJZiBvcHRfbG9nU2hhZGVycyBpcyBzZXQsIHRoZW4gYSBsaW5rIHRvIHRoZSBzb3VyY2UgZmls
ZSB3aWxsIGFsc28gYmUKKyAqICAgICBhZGRlZC4KKyAqIEByZXR1cm4geyFXZWJHTFNoYWRlcn0g
VGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlciA9IGZ1bmN0aW9uKAorICAg
IGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRlclR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9n
U2hhZGVycywKKyAgICBvcHRfc2hhZGVyTGFiZWwsIG9wdF91cmwpIHsKKyAgdmFyIGVyckZuID0g
b3B0X2Vycm9yQ2FsbGJhY2sgfHwgZXJyb3I7CisgIC8vIENyZWF0ZSB0aGUgc2hhZGVyIG9iamVj
dAorICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOworICBpZiAoc2hh
ZGVyID09IG51bGwpIHsKKyAgICBlcnJGbigiKioqIEVycm9yOiB1bmFibGUgdG8gY3JlYXRlIHNo
YWRlciAnIitzaGFkZXJTb3VyY2UrIiciKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIC8v
IExvYWQgdGhlIHNoYWRlciBzb3VyY2UKKyAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgc2hhZGVy
U291cmNlKTsKKyAgdmFyIGVyciA9IGdsLmdldEVycm9yKCk7CisgIGlmIChlcnIgIT0gZ2wuTk9f
RVJST1IpIHsKKyAgICBlcnJGbigiKioqIEVycm9yIGxvYWRpbmcgc2hhZGVyICciICsgc2hhZGVy
ICsgIic6IiArIGdsRW51bVRvU3RyaW5nKGdsLCBlcnIpKTsKKyAgICByZXR1cm4gbnVsbDsKKyAg
fQorCisgIC8vIENvbXBpbGUgdGhlIHNoYWRlcgorICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7
CisKKyAgaWYgKG9wdF9sb2dTaGFkZXJzKSB7CisgICAgdmFyIGxhYmVsID0gc2hhZGVyVHlwZSA9
PSBnbC5WRVJURVhfU0hBREVSID8gJ3ZlcnRleCBzaGFkZXInIDogJ2ZyYWdtZW50X3NoYWRlcic7
CisgICAgaWYgKG9wdF9zaGFkZXJMYWJlbCkgeworICAgICAgbGFiZWwgPSBvcHRfc2hhZGVyTGFi
ZWwgKyAnICcgKyBsYWJlbDsKKyAgICB9CisgICAgYWRkU2hhZGVyU291cmNlcygKKyAgICAgICAg
Z2wsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyksIGxhYmVsLCBzaGFkZXIsIHNo
YWRlclNvdXJjZSwgb3B0X3VybCk7CisgIH0KKworICAvLyBDaGVjayB0aGUgY29tcGlsZSBzdGF0
dXMKKyAgdmFyIGNvbXBpbGVkID0gZ2wuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgZ2wuQ09N
UElMRV9TVEFUVVMpOworICBpZiAoIWNvbXBpbGVkKSB7CisgICAgLy8gU29tZXRoaW5nIHdlbnQg
d3JvbmcgZHVyaW5nIGNvbXBpbGF0aW9uOyBnZXQgdGhlIGVycm9yCisgICAgbGFzdEVycm9yID0g
Z2wuZ2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpOworICAgIGVyckZuKCIqKiogRXJyb3IgY29tcGls
aW5nICIgKyBnbEVudW1Ub1N0cmluZyhnbCwgc2hhZGVyVHlwZSkgKyAiICciICsgc2hhZGVyICsg
Iic6IiArIGxhc3RFcnJvcik7CisgICAgZ2wuZGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKworICByZXR1cm4gc2hhZGVyOworfQorCisvKioKKyAqIExvYWRzIGEg
c2hhZGVyIGZyb20gYSBVUkwuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtmaWxlfSBmaWxl
IFRoZSBVUkwgb2YgdGhlIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge251bWJlcn0gdHlwZSBU
aGUgdHlwZSBvZiBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9w
dF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59
IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKiBAcmV0dXJu
IHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4KKyAqLwordmFyIGxvYWRTaGFkZXJG
cm9tRmlsZSA9IGZ1bmN0aW9uKAorICAgIGdsLCBmaWxlLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFj
aywgb3B0X2xvZ1NoYWRlcnMpIHsKKyAgdmFyIHNoYWRlclNvdXJjZSA9IHJlYWRGaWxlKGZpbGUp
OworICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291cmNlLCB0eXBlLCBvcHRfZXJyb3JD
YWxsYmFjaywKKyAgICAgIG9wdF9sb2dTaGFkZXJzLCB1bmRlZmluZWQsIGZpbGUpOworfTsKKwor
LyoqCisgKiBHZXRzIHRoZSBjb250ZW50IG9mIHNjcmlwdC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBz
Y3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRo
ZSBjb250ZW50IG9mIHRoZSBzY3JpcHQuCisgKi8KK3ZhciBnZXRTY3JpcHQgPSBmdW5jdGlvbihz
Y3JpcHRJZCkgeworICB2YXIgc2hhZGVyU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
c2NyaXB0SWQpOworICBpZiAoIXNoYWRlclNjcmlwdCkgeworICAgIHRocm93KCIqKiogRXJyb3I6
IHVua25vd24gc2NyaXB0IGVsZW1lbnQgIiArIHNjcmlwdElkKTsKKyAgfQorICByZXR1cm4gc2hh
ZGVyU2NyaXB0LnRleHQ7Cit9OworCisvKioKKyAqIExvYWRzIGEgc2hhZGVyIGZyb20gYSBzY3Jp
cHQgdGFnLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzY3JpcHRJZCBUaGUg
aWQgb2YgdGhlIHNjcmlwdCB0YWcuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3NoYWRlclR5cGUg
VGhlIHR5cGUgb2Ygc2hhZGVyLiBJZiBub3QgcGFzc2VkIGluIGl0IHdpbGwKKyAqICAgICBiZSBk
ZXJpdmVkIGZyb20gdGhlIHR5cGUgb2YgdGhlIHNjcmlwdCB0YWcuCisgKiBAcGFyYW0ge2Z1bmN0
aW9uKHN0cmluZyk6IHZvaWQpIG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMu
CisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdoZXRoZXIgdG8gbG9nIHNoYWRl
ciBzb3VyY2UuCisgKiBAcmV0dXJuIHshV2ViR0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4K
KyAqLwordmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0ID0gZnVuY3Rpb24oCisgICAgZ2wsIHNjcmlw
dElkLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzKSB7
CisgIHZhciBzaGFkZXJTb3VyY2UgPSAiIjsKKyAgdmFyIHNoYWRlclNjcmlwdCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKHNjcmlwdElkKTsKKyAgaWYgKCFzaGFkZXJTY3JpcHQpIHsKKyAgICB0
aHJvdygiKioqIEVycm9yOiB1bmtub3duIHNjcmlwdCBlbGVtZW50ICIgKyBzY3JpcHRJZCk7Cisg
IH0KKyAgc2hhZGVyU291cmNlID0gc2hhZGVyU2NyaXB0LnRleHQ7CisKKyAgaWYgKCFvcHRfc2hh
ZGVyVHlwZSkgeworICAgIGlmIChzaGFkZXJTY3JpcHQudHlwZSA9PSAieC1zaGFkZXIveC12ZXJ0
ZXgiKSB7CisgICAgICBvcHRfc2hhZGVyVHlwZSA9IGdsLlZFUlRFWF9TSEFERVI7CisgICAgfSBl
bHNlIGlmIChzaGFkZXJTY3JpcHQudHlwZSA9PSAieC1zaGFkZXIveC1mcmFnbWVudCIpIHsKKyAg
ICAgIG9wdF9zaGFkZXJUeXBlID0gZ2wuRlJBR01FTlRfU0hBREVSOworICAgIH0gZWxzZSB7Cisg
ICAgICB0aHJvdygiKioqIEVycm9yOiB1bmtub3duIHNoYWRlciB0eXBlIik7CisgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgIH0KKworICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291
cmNlLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssCisgICAgICBvcHRfbG9nU2hh
ZGVycyk7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7Cisg
IHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIocHJv
Z3JhbSwgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyKGdsKSk7CisgIGdsLmF0dGFjaFNoYWRlcihw
cm9ncmFtLCBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlcihnbCkpOworICBnbC5iaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgMCwgImFfdmVydGV4Iik7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCAxLCAiYV9ub3JtYWwiKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOwor
ICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBmcm9tIGZpbGVz
LCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kIGxpbmtzLgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFkZXJQYXRoIFRoZSBVUkwg
b2YgdGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTaGFkZXJQ
YXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
c3RyaW5nKTogdm9pZCkgb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAq
IEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBs
b2FkUHJvZ3JhbUZyb21GaWxlID0gZnVuY3Rpb24oCisgICAgZ2wsIHZlcnRleFNoYWRlclBhdGgs
IGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFyIHByb2dyYW0g
PSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIHZhciB2cyA9IGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAg
ICAgIGdsLCB2ZXJ0ZXhTaGFkZXJQYXRoLCBnbC5WRVJURVhfU0hBREVSLCBvcHRfZXJyb3JDYWxs
YmFjayk7CisgIHZhciBmcyA9IGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAgIGdsLCBmcmFnbWVu
dFNoYWRlclBhdGgsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spOworICBp
ZiAodnMgJiYgZnMpIHsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdnMpOworICAgIGds
LmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcyk7CisgICAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0s
IG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgfQorICBpZiAodnMpIHsKKyAgICBnbC5kZWxldGVTaGFk
ZXIodnMpOworICB9CisgIGlmIChmcykgeworICAgIGdsLmRlbGV0ZVNoYWRlcihmcyk7CisgIH0K
KyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMgZnJvbSBzY3Jp
cHQgdGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAorICog
bGlua3MuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHZlcnRleFNjcmlwdElk
IFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRoZQorICogICAgICAgIHZl
cnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTY3JpcHRJZCBUaGUgaWQg
b2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlucyB0aGUKKyAqICAgICAgICBmcmFnbWVudCBz
aGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWQpIG9wdF9lcnJvckNhbGxi
YWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUg
Y3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgbG9hZFByb2dyYW1Gcm9tU2NyaXB0ID0gZnVuY3Rp
b24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAorICAgIGdsLCB2ZXJ0ZXhTY3JpcHRJZCwgZnJhZ21l
bnRTY3JpcHRJZCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVh
dGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcigKKyAgICAgIHByb2dyYW0sCisgICAgICBs
b2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwgdmVydGV4U2NyaXB0SWQsIGdsLlZF
UlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGdsLmF0dGFjaFNoYWRlcigKKyAg
ICAgIHByb2dyYW0sCisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwg
ZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2sp
KTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgcmV0
dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMgZnJvbSBzb3VyY2UsIGNy
ZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQKKyAqIGxpbmtzLgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMU2hhZGVyfSB2ZXJ0ZXhTaGFkZXIgVGhlIHZl
cnRleCBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0gZnJhZ21lbnRTaGFkZXIgVGhl
IGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZCkgb3B0
X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEByZXR1cm4geyFXZWJHTFBy
b2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBjcmVhdGVQcm9ncmFtID0gZnVu
Y3Rpb24oZ2wsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIG9wdF9lcnJvckNhbGxiYWNr
KSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFk
ZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZy
YWdtZW50U2hhZGVyKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxi
YWNrKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMgZnJv
bSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQKKyAq
IGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFkZXIg
VGhlIHZlcnRleCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50U2hh
ZGVyIFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJp
bmcpOiB2b2lkKSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHBh
cmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNl
LgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAqLwor
dmFyIGxvYWRQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIHZlcnRleFNoYWRlciwgZnJhZ21l
bnRTaGFkZXIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycykgeworICB2YXIgcHJv
Z3JhbTsKKyAgdmFyIHZzID0gbG9hZFNoYWRlcigKKyAgICAgIGdsLCB2ZXJ0ZXhTaGFkZXIsIGds
LlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycyk7CisgIHZh
ciBmcyA9IGxvYWRTaGFkZXIoCisgICAgICBnbCwgZnJhZ21lbnRTaGFkZXIsIGdsLkZSQUdNRU5U
X1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzKTsKKyAgaWYgKHZzICYm
IGZzKSB7CisgICAgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oZ2wsIHZzLCBmcywgb3B0X2Vycm9y
Q2FsbGJhY2spCisgIH0KKyAgaWYgKHZzKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVyKHZzKTsKKyAg
fQorICBpZiAoZnMpIHsKKyAgICBnbC5kZWxldGVTaGFkZXIoZnMpOworICB9CisgIHJldHVybiBw
cm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20gc291cmNlLCBjcmVhdGVz
IGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisgKiBsaW5rcyBidXQgZXhwZWN0
cyBlcnJvci4KKyAqCisgKiBHTFNMIDEuMC4xNyAxMC4yNyBlZmZlY3RpdmVseSBzYXlzIHRoYXQg
Y29tcGlsZVNoYWRlciBjYW4KKyAqIGFsd2F5cyBzdWNjZWVkIGFzIGxvbmcgYXMgbGlua1Byb2dy
YW0gZmFpbHMgc28gd2UgY2FuJ3QKKyAqIHJlbHkgb24gY29tcGlsZVNoYWRlciBmYWlsaW5nLiBU
aGlzIGZ1bmN0aW9uIGV4cGVjdHMKKyAqIG9uZSBvZiB0aGUgc2hhZGVyIHRvIGZhaWwgT1IgbGlu
a2luZyB0byBmYWlsLgorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdmVy
dGV4U2hhZGVyU2NyaXB0SWQgVGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30g
ZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCBUaGUgZnJhZ21lbnQgc2hhZGVyLgorICogQHJldHVybiB7
V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgbG9hZFByb2dyYW1G
cm9tU2NyaXB0RXhwZWN0RXJyb3IgPSBmdW5jdGlvbigKKyAgICBnbCwgdmVydGV4U2hhZGVyU2Ny
aXB0SWQsIGZyYWdtZW50U2hhZGVyU2NyaXB0SWQpIHsKKyAgdmFyIHZlcnRleFNoYWRlciA9IGxv
YWRTaGFkZXJGcm9tU2NyaXB0KGdsLCB2ZXJ0ZXhTaGFkZXJTY3JpcHRJZCk7CisgIGlmICghdmVy
dGV4U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdmFyIGZyYWdtZW50U2hhZGVy
ID0gbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIGZyYWdtZW50U2hhZGVyU2NyaXB0SWQpOworICBp
ZiAoIWZyYWdtZW50U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdmFyIGxpbmtT
dWNjZXNzID0gdHJ1ZTsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGds
LmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICBnbC5hdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICBsaW5rU3VjY2VzcyA9IHRydWU7CisgIGxpbmtQ
cm9ncmFtKGdsLCBwcm9ncmFtLCBmdW5jdGlvbigpIHsKKyAgICAgIGxpbmtTdWNjZXNzID0gZmFs
c2U7CisgICAgfSk7CisgIHJldHVybiBsaW5rU3VjY2VzcyA/IHByb2dyYW0gOiBudWxsOworfTsK
KworCit2YXIgZ2V0QWN0aXZlTWFwID0gZnVuY3Rpb24oZ2wsIHByb2dyYW0sIHR5cGVJbmZvKSB7
CisgIHZhciBudW1WYXJpYWJsZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGds
W3R5cGVJbmZvLnBhcmFtXSk7CisgIHZhciB2YXJpYWJsZXMgPSB7fTsKKyAgZm9yICh2YXIgaWkg
PSAwOyBpaSA8IG51bVZhcmlhYmxlczsgKytpaSkgeworICAgIHZhciBpbmZvID0gZ2xbdHlwZUlu
Zm8uYWN0aXZlRm5dKHByb2dyYW0sIGlpKTsKKyAgICB2YXJpYWJsZXNbaW5mby5uYW1lXSA9IHsK
KyAgICAgIG5hbWU6IGluZm8ubmFtZSwKKyAgICAgIHNpemU6IGluZm8uc2l6ZSwKKyAgICAgIHR5
cGU6IGluZm8udHlwZSwKKyAgICAgIGxvY2F0aW9uOiBnbFt0eXBlSW5mby5sb2NGbl0ocHJvZ3Jh
bSwgaW5mby5uYW1lKQorICAgIH07CisgIH0KKyAgcmV0dXJuIHZhcmlhYmxlczsKK307CisKKy8q
KgorICogUmV0dXJucyBhIG1hcCBvZiBhdHRyaWIgbmFtZXMgdG8gaW5mbyBhYm91dCB0aG9zZQor
ICogYXR0cmlicy4KKyAqCisgKiBlZzoKKyAqICAgIHsgImF0dHJpYjFOYW1lIjoKKyAqICAgICAg
eworICogICAgICAgIG5hbWU6ICJhdHRyaWIxTmFtZSIsCisgKiAgICAgICAgc2l6ZTogMSwKKyAq
ICAgICAgICB0eXBlOiBnbC5GTE9BVF9NQVQyLAorICogICAgICAgIGxvY2F0aW9uOiAwCisgKiAg
ICAgIH0sCisgKiAgICAgICJhdHRyaWIyTmFtZVswXSI6CisgKiAgICAgIHsKKyAqICAgICAgICAg
bmFtZTogImF0dHJpYjJOYW1lWzBdIiwKKyAqICAgICAgICAgc2l6ZTogNCwKKyAqICAgICAgICAg
dHlwZTogZ2wuRkxPQVQsCisgKiAgICAgICAgIGxvY2F0aW9uOiAxCisgKiAgICAgIH0sCisgKiAg
ICB9CisgKgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7V2ViR0xQcm9ncmFtfSBUaGUgcHJv
Z3JhbSB0byBxdWVyeSBmb3IgYXR0cmlicy4KKyAqIEByZXR1cm4gdGhlIG1hcC4KKyAqLwordmFy
IGdldEF0dHJpYk1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7CisgIHJldHVybiBnZXRBY3Rp
dmVNYXAoZ2wsIHByb2dyYW0sIHsKKyAgICAgIHBhcmFtOiAiQUNUSVZFX0FUVFJJQlVURVMiLAor
ICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVBdHRyaWIiLAorICAgICAgbG9jRm46ICJnZXRBdHRy
aWJMb2NhdGlvbiIKKyAgfSk7Cit9OworCisvKioKKyAqIFJldHVybnMgYSBtYXAgb2YgdW5pZm9y
bSBuYW1lcyB0byBpbmZvIGFib3V0IHRob3NlIHVuaWZvcm1zLgorICoKKyAqIGVnOgorICogICAg
eyAidW5pZm9ybTFOYW1lIjoKKyAqICAgICAgeworICogICAgICAgIG5hbWU6ICJ1bmlmb3JtMU5h
bWUiLAorICogICAgICAgIHNpemU6IDEsCisgKiAgICAgICAgdHlwZTogZ2wuRkxPQVRfTUFUMiwK
KyAqICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24KKyAqICAgICAgfSwKKyAq
ICAgICAgInVuaWZvcm0yTmFtZVswXSI6CisgKiAgICAgIHsKKyAqICAgICAgICAgbmFtZTogInVu
aWZvcm0yTmFtZVswXSIsCisgKiAgICAgICAgIHNpemU6IDQsCisgKiAgICAgICAgIHR5cGU6IGds
LkZMT0FULAorICogICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24KKyAqICAg
ICAgfSwKKyAqICAgIH0KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtXZWJHTFByb2dy
YW19IFRoZSBwcm9ncmFtIHRvIHF1ZXJ5IGZvciB1bmlmb3Jtcy4KKyAqIEByZXR1cm4gdGhlIG1h
cC4KKyAqLwordmFyIGdldFVuaWZvcm1NYXAgPSBmdW5jdGlvbihnbCwgcHJvZ3JhbSkgeworICBy
ZXR1cm4gZ2V0QWN0aXZlTWFwKGdsLCBwcm9ncmFtLCB7CisgICAgICBwYXJhbTogIkFDVElWRV9V
TklGT1JNUyIsCisgICAgICBhY3RpdmVGbjogImdldEFjdGl2ZVVuaWZvcm0iLAorICAgICAgbG9j
Rm46ICJnZXRVbmlmb3JtTG9jYXRpb24iCisgIH0pOworfTsKKwordmFyIGJhc2VQYXRoOwordmFy
IGdldEJhc2VQYXRoID0gZnVuY3Rpb24oKSB7CisgIGlmICghYmFzZVBhdGgpIHsKKyAgICB2YXIg
ZXhwZWN0ZWRCYXNlID0gIndlYmdsLXRlc3QtdXRpbHMuanMiOworICAgIHZhciBzY3JpcHRzID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICAgIGZvciAodmFyIHNj
cmlwdCwgaSA9IDA7IHNjcmlwdCA9IHNjcmlwdHNbaV07IGkrKykgeworICAgICAgdmFyIHNyYyA9
IHNjcmlwdC5zcmM7CisgICAgICB2YXIgbCA9IHNyYy5sZW5ndGg7CisgICAgICBpZiAoc3JjLnN1
YnN0cihsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCkgPT0gZXhwZWN0ZWRCYXNlKSB7CisgICAgICAg
IGJhc2VQYXRoID0gc3JjLnN1YnN0cigwLCBsIC0gZXhwZWN0ZWRCYXNlLmxlbmd0aCk7CisgICAg
ICB9CisgICAgfQorICB9CisgIHJldHVybiBiYXNlUGF0aDsKK307CisKK3ZhciBsb2FkU3RhbmRh
cmRWZXJ0ZXhTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICByZXR1cm4gbG9hZFNoYWRlckZyb21G
aWxlKAorICAgICAgZ2wsIGdldEJhc2VQYXRoKCkgKyAidmVydGV4U2hhZGVyLnZlcnQiLCBnbC5W
RVJURVhfU0hBREVSKTsKK307CisKK3ZhciBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlciA9IGZ1
bmN0aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwgZ2V0
QmFzZVBhdGgoKSArICJmcmFnbWVudFNoYWRlci5mcmFnIiwgZ2wuRlJBR01FTlRfU0hBREVSKTsK
K307CisKKy8qKgorICogTG9hZHMgYW4gaW1hZ2UgYXN5bmNocm9ub3VzbHkuCisgKiBAcGFyYW0g
e3N0cmluZ30gdXJsIFVSTCBvZiBpbWFnZSB0byBsb2FkLgorICogQHBhcmFtIHshZnVuY3Rpb24o
IUVsZW1lbnQpOiB2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsCisgKiAgICAgd2l0aCBs
b2FkZWQgaW1hZ2UuCisgKi8KK3ZhciBsb2FkSW1hZ2VBc3luYyA9IGZ1bmN0aW9uKHVybCwgY2Fs
bGJhY2spIHsKKyAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOworICBp
bWcub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgY2FsbGJhY2soaW1nKTsKKyAgfTsKKyAgaW1n
LnNyYyA9IHVybDsKK307CisKKy8qKgorICogTG9hZHMgYW4gYXJyYXkgb2YgaW1hZ2VzLgorICog
QHBhcmFtIHshQXJyYXkuPHN0cmluZz59IHVybHMgVVJMcyBvZiBpbWFnZXMgdG8gbG9hZC4KKyAq
IEBwYXJhbSB7IWZ1bmN0aW9uKCF7c3RyaW5nLCBpbWd9KTogdm9pZH0gY2FsbGJhY2suIENhbGxi
YWNrCisgKiAgICAgdGhhdCBnZXRzIHBhc3NlZCBtYXAgb2YgdXJscyB0byBpbWcgdGFncy4KKyAq
LwordmFyIGxvYWRJbWFnZXNBc3luYyA9IGZ1bmN0aW9uKHVybHMsIGNhbGxiYWNrKSB7CisgIHZh
ciBjb3VudCA9IDE7CisgIHZhciBpbWFnZXMgPSB7IH07CisgIGZ1bmN0aW9uIGNvdW50RG93bigp
IHsKKyAgICAtLWNvdW50OworICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICBsb2coImxvYWRJ
bWFnZXNBc3luYzogYWxsIGltYWdlcyBsb2FkZWQiKTsKKyAgICAgIGNhbGxiYWNrKGltYWdlcyk7
CisgICAgfQorICB9CisgIGZ1bmN0aW9uIGltYWdlTG9hZGVkKHVybCkgeworICAgIHJldHVybiBm
dW5jdGlvbihpbWcpIHsKKyAgICAgIGltYWdlc1t1cmxdID0gaW1nOworICAgICAgbG9nKCJsb2Fk
SW1hZ2VzQXN5bmM6IGxvYWRlZCAiICsgdXJsKTsKKyAgICAgIGNvdW50RG93bigpOworICAgIH0K
KyAgfQorICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdXJscy5sZW5ndGg7ICsraWkpIHsKKyAgICAr
K2NvdW50OworICAgIGxvYWRJbWFnZUFzeW5jKHVybHNbaWldLCBpbWFnZUxvYWRlZCh1cmxzW2lp
XSkpOworICB9CisgIGNvdW50RG93bigpOworfTsKKworLyoqCisgKiBSZXR1cm5zIGEgbWFwIG9m
IGtleT12YWx1ZSB2YWx1ZXMgZnJvbSB1cmwuCisgKiBAcmV0dXJuIHshT2JqZWN0LjxzdHJpbmcs
IG51bWJlcj59IG1hcCBvZiBrZXlzIHRvIHZhbHVlcy4KKyAqLwordmFyIGdldFVybEFyZ3VtZW50
cyA9IGZ1bmN0aW9uKCkgeworICB2YXIgYXJncyA9IHt9OworICB0cnkgeworICAgIHZhciBzID0g
d2luZG93LmxvY2F0aW9uLmhyZWY7CisgICAgdmFyIHEgPSBzLmluZGV4T2YoIj8iKTsKKyAgICB2
YXIgZSA9IHMuaW5kZXhPZigiIyIpOworICAgIGlmIChlIDwgMCkgeworICAgICAgZSA9IHMubGVu
Z3RoOworICAgIH0KKyAgICB2YXIgcXVlcnkgPSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgICAg
dmFyIHBhaXJzID0gcXVlcnkuc3BsaXQoIiYiKTsKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwg
cGFpcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3Bs
aXQoIj0iKTsKKyAgICAgIHZhciBrZXkgPSBrZXlWYWx1ZVswXTsKKyAgICAgIHZhciB2YWx1ZSA9
IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7CisgICAgICBhcmdzW2tleV0gPSB2YWx1
ZTsKKyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICB0aHJvdyAiY291bGQgbm90IHBhcnNlIHVy
bCI7CisgIH0KKyAgcmV0dXJuIGFyZ3M7Cit9OworCisvKioKKyAqIE1ha2VzIGFuIGltYWdlIGZy
b20gYSBzcmMuCisgKiBAcGFyYW0ge3N0cmluZ30gc3JjIEltYWdlIHNvdXJjZSBVUkwuCisgKiBA
cGFyYW0ge2Z1bmN0aW9ufSBvbmxvYWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBpbWFnZSBo
YXMgZmluaXNlZCBsb2FkaW5nLgorICogQHBhcmFtIHtmdW5jdGlvbn0gb25lcnJvciBDYWxsYmFj
ayB0byBjYWxsIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogQHJldHVybiB7IUltYWdlfSBUaGUg
Y3JlYXRlZCBpbWFnZS4KKyAqLwordmFyIG1ha2VJbWFnZSA9IGZ1bmN0aW9uKHNyYywgb25sb2Fk
LCBvbmVycm9yKSB7CisgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsK
KyAgaWYgKG9ubG9hZCkgeworICAgIGltZy5vbmxvYWQgPSBvbmxvYWQ7CisgIH0KKyAgaWYgKG9u
ZXJyb3IpIHsKKyAgICBpbWcub25lcnJvciA9IG9uZXJyb3I7CisgIH0gZWxzZSB7CisgICAgaW1n
Lm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIGxvZygiV0FSTklORzogY3JlYXRpbmcgaW1h
Z2UgZmFpbGVkOyBzcmM6ICIgKyB0aGlzLnNyYyk7CisgICAgfTsKKyAgfQorICBpZiAoc3JjKSB7
CisgICAgaW1nLnNyYyA9IHNyYzsKKyAgfQorICByZXR1cm4gaW1nOworfQorCisvKioKKyAqIE1h
a2VzIGFuIGltYWdlIGVsZW1lbnQgZnJvbSBhIGNhbnZhcy4KKyAqIEBwYXJhbSB7IUhUTUxDYW52
YXN9IGNhbnZhcyBDYW52YXMgdG8gbWFrZSBpbWFnZSBmcm9tLgorICogQHBhcmFtIHtmdW5jdGlv
bn0gb25sb2FkIENhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgaW1hZ2UgaGFzIGZpbmlzZWQgbG9h
ZGluZy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBpbWFnZUZvcm1hdCBJbWFnZSBmb3JtYXQgdG8gYmUg
cGFzc2VkIHRvIHRvRGF0YVVybCgpLgorICogQHJldHVybiB7IUltYWdlfSBUaGUgY3JlYXRlZCBp
bWFnZS4KKyAqLwordmFyIG1ha2VJbWFnZUZyb21DYW52YXMgPSBmdW5jdGlvbihjYW52YXMsIG9u
bG9hZCwgaW1hZ2VGb3JtYXQpIHsKKyAgcmV0dXJuIG1ha2VJbWFnZShjYW52YXMudG9EYXRhVVJM
KGltYWdlRm9ybWF0KSwgb25sb2FkKTsKK307CisKKy8qKgorICogTWFrZXMgYSB2aWRlbyBlbGVt
ZW50IGZyb20gYSBzcmMuCisgKiBAcGFyYW0ge3N0cmluZ30gc3JjIFZpZGVvIHNvdXJjZSBVUkwu
CisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBvbmVycm9yIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBl
cnJvciBvY2N1cnMuCisgKiBAcmV0dXJuIHshVmlkZW99IFRoZSBjcmVhdGVkIHZpZGVvLgorICov
Cit2YXIgbWFrZVZpZGVvID0gZnVuY3Rpb24oc3JjLCBvbmVycm9yKSB7CisgIHZhciB2aWQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOworICBpZiAob25lcnJvcikgeworICAgIHZp
ZC5vbmVycm9yID0gb25lcnJvcjsKKyAgfSBlbHNlIHsKKyAgICB2aWQub25lcnJvciA9IGZ1bmN0
aW9uKCkgeworICAgICAgbG9nKCJXQVJOSU5HOiBjcmVhdGluZyB2aWRlbyBmYWlsZWQ7IHNyYzog
IiArIHRoaXMuc3JjKTsKKyAgICB9OworICB9CisgIGlmIChzcmMpIHsKKyAgICB2aWQuc3JjID0g
c3JjOworICB9CisgIHJldHVybiB2aWQ7Cit9CisKKy8qKgorICogSW5zZXJ0cyBhbiBpbWFnZSB3
aXRoIGEgY2FwdGlvbiBpbnRvICdlbGVtZW50Jy4KKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBl
bGVtZW50IEVsZW1lbnQgdG8gYXBwZW5kIGltYWdlIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IGNh
cHRpb24gY2FwdGlvbiB0byBhc3NvY2lhdGUgd2l0aCBpbWFnZS4KKyAqIEBwYXJhbSB7IUltYWdl
KSBpbWcgaW1hZ2UgdG8gaW5zZXJ0LgorICovCit2YXIgaW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihl
bGVtZW50LCBjYXB0aW9uLCBpbWcpIHsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOworICBkaXYuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgdmFyIGxhYmVsID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIGxhYmVsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKGNhcHRpb24pKTsKKyAgZGl2LmFwcGVuZENoaWxkKGxhYmVsKTsKKyAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoZGl2KTsKK307CisKKy8qKgorICogSW5zZXJ0cyBhICdsYWJlbCcg
dGhhdCB3aGVuIGNsaWNrZWQgZXhwYW5kcyB0byB0aGUgcHJlIGZvcm1hdHRlZCB0ZXh0CisgKiBz
dXBwbGllZCBieSAnc291cmNlJy4KKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IGVs
ZW1lbnQgdG8gYXBwZW5kIGxhYmVsIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIGxhYmVs
IGZvciBhbmNob3IuCisgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHByZWZvcm1hdHRlZCB0ZXh0
IHRvIGV4cGFuZCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfdXJsIFVSTCBvZiBzb3VyY2Uu
IElmIHByb3ZpZGVkIGEgbGluayB0byB0aGUgc291cmNlIGZpbGUKKyAqICAgICB3aWxsIGFsc28g
YmUgYWRkZWQuCisgKi8KK3ZhciBhZGRTaGFkZXJTb3VyY2UgPSBmdW5jdGlvbihlbGVtZW50LCBs
YWJlbCwgc291cmNlLCBvcHRfdXJsKSB7CisgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKKyAgdmFyIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKKyAg
cy5jbGFzc05hbWUgPSAic2hhZGVyLXNvdXJjZSI7CisgIHMuc3R5bGUuZGlzcGxheSA9ICJub25l
IjsKKyAgdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKKyAgLy9zLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHNvdXJjZSkpOworICB2YXIgbGluZXMgPSBz
b3VyY2Uuc3BsaXQoIlxuIik7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7
ICsraWkpIHsKKyAgICB2YXIgbGluZSA9IGxpbmVzW2lpXTsKKyAgICB2YXIgbGkgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKGxpbmUpKTsKKyAgICBvbC5hcHBlbmRDaGlsZChsaSk7CisgIH0KKyAgcy5hcHBl
bmRDaGlsZChvbCk7CisgIHZhciBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICBs
LmhyZWYgPSAic2hvdy1zaGFkZXItc291cmNlIjsKKyAgbC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShsYWJlbCkpOworICBsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgfQorICAgICAgcy5zdHlsZS5kaXNwbGF5
ID0gKHMuc3R5bGUuZGlzcGxheSA9PSAnbm9uZScpID8gJ2Jsb2NrJyA6ICdub25lJzsKKyAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9LCBmYWxzZSk7CisgIGRpdi5hcHBlbmRDaGlsZChsKTsKKyAg
aWYgKG9wdF91cmwpIHsKKyAgICB2YXIgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsK
KyAgICB1LmhyZWYgPSBvcHRfdXJsOworICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgiICIpKTsKKyAgICB1LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCIoIiArIG9wdF91cmwgKyAiKSIpKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQodSk7CisgIH0K
KyAgZGl2LmFwcGVuZENoaWxkKHMpOworICBlbGVtZW50LmFwcGVuZENoaWxkKGRpdik7Cit9Owor
CisvKioKKyAqIEluc2VydHMgbGFiZWxzIHRoYXQgd2hlbiBjbGlja2VkIGV4cGFuZCB0byBzaG93
IHRoZSBvcmlnaW5hbCBzb3VyY2Ugb2YgdGhlCisgKiBzaGFkZXIgYW5kIGFsc28gdHJhbnNsYXRl
ZCBzb3VyY2Ugb2YgdGhlIHNoYWRlciwgaWYgdGhhdCBpcyBhdmFpbGFibGUuCisgKiBAcGFyYW0g
e1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGFwcGVuZCBs
YWJlbCB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBsYWJlbCBmb3IgYW5jaG9yLgorICog
QHBhcmFtIHtXZWJHTFNoYWRlcn0gc2hhZGVyIFNoYWRlciB0byBzaG93IHRoZSBzb3VyY2VzIGZv
ci4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzaGFkZXJTb3VyY2UgT3JpZ2luYWwgc2hhZGVyIHNvdXJj
ZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfdXJsIFVSTCBvZiBzb3VyY2UuIElmIHByb3ZpZGVk
IGEgbGluayB0byB0aGUgc291cmNlIGZpbGUKKyAqICAgICB3aWxsIGFsc28gYmUgYWRkZWQuCisg
Ki8KK3ZhciBhZGRTaGFkZXJTb3VyY2VzID0gZnVuY3Rpb24oCisgICAgZ2wsIGVsZW1lbnQsIGxh
YmVsLCBzaGFkZXIsIHNoYWRlclNvdXJjZSwgb3B0X3VybCkgeworICBhZGRTaGFkZXJTb3VyY2Uo
ZWxlbWVudCwgbGFiZWwsIHNoYWRlclNvdXJjZSwgb3B0X3VybCk7CisKKyAgdmFyIGRlYnVnU2hh
ZGVycyA9IGdsLmdldEV4dGVuc2lvbignV0VCR0xfZGVidWdfc2hhZGVycycpOworICBpZiAoZGVi
dWdTaGFkZXJzICYmIHNoYWRlcikgeworICAgIHZhciB0cmFuc2xhdGVkU291cmNlID0gZGVidWdT
aGFkZXJzLmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKKyAgICBpZiAodHJhbnNs
YXRlZFNvdXJjZSAhPSAnJykgeworICAgICAgYWRkU2hhZGVyU291cmNlKGVsZW1lbnQsIGxhYmVs
ICsgJyB0cmFuc2xhdGVkIGZvciBkcml2ZXInLCB0cmFuc2xhdGVkU291cmNlKTsKKyAgICB9Cisg
IH0KK307CisKKy8qKgorICogU2VuZHMgc2hhZGVyIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIg
dG8gYmUgZHVtcGVkIGludG8gdGV4dCBmaWxlcworICogd2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20g
d2l0aGluIHRoZSB0ZXN0LXJ1bm5lciBoYXJuZXNzLgorICogQHBhcmFtIHtXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFt
IHtzdHJpbmd9IHVybCBVUkwgb2YgY3VycmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzTXNn
IFRlc3QgZGVzY3JpcHRpb24uCisgKiBAcGFyYW0ge29iamVjdH0gdkluZm8gT2JqZWN0IGNvbnRh
aW5pbmcgdmVydGV4IHNoYWRlciBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbSB7b2JqZWN0fSBmSW5m
byBPYmplY3QgY29udGFpbmluZyBmcmFnbWVudCBzaGFkZXIgaW5mb3JtYXRpb24uCisgKi8KK3Zh
ciBkdW1wU2hhZGVyc0luZm8gPSBmdW5jdGlvbihnbCwgdXJsLCBwYXNzTXNnLCB2SW5mbywgZklu
Zm8pIHsKKyAgdmFyIHNoYWRlckluZm8gPSB7fTsKKyAgc2hhZGVySW5mby51cmwgPSB1cmw7Cisg
IHNoYWRlckluZm8udGVzdERlc2NyaXB0aW9uID0gcGFzc01zZzsKKyAgc2hhZGVySW5mby52TGFi
ZWwgPSB2SW5mby5sYWJlbDsKKyAgc2hhZGVySW5mby52U2hvdWxkQ29tcGlsZSA9IHZJbmZvLnNo
YWRlclN1Y2Nlc3M7CisgIHNoYWRlckluZm8udlNvdXJjZSA9IHZJbmZvLnNvdXJjZTsKKyAgc2hh
ZGVySW5mby5mTGFiZWwgPSBmSW5mby5sYWJlbDsKKyAgc2hhZGVySW5mby5mU2hvdWxkQ29tcGls
ZSA9IGZJbmZvLnNoYWRlclN1Y2Nlc3M7CisgIHNoYWRlckluZm8uZlNvdXJjZSA9IGZJbmZvLnNv
dXJjZTsKKyAgc2hhZGVySW5mby52VHJhbnNsYXRlZFNvdXJjZSA9IG51bGw7CisgIHNoYWRlcklu
Zm8uZlRyYW5zbGF0ZWRTb3VyY2UgPSBudWxsOworICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0
RXh0ZW5zaW9uKCdXRUJHTF9kZWJ1Z19zaGFkZXJzJyk7CisgIGlmIChkZWJ1Z1NoYWRlcnMpIHsK
KyAgICBpZiAodkluZm8uc2hhZGVyKQorICAgICAgc2hhZGVySW5mby52VHJhbnNsYXRlZFNvdXJj
ZSA9IGRlYnVnU2hhZGVycy5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKHZJbmZvLnNoYWRlcik7
CisgICAgaWYgKGZJbmZvLnNoYWRlcikKKyAgICAgIHNoYWRlckluZm8uZlRyYW5zbGF0ZWRTb3Vy
Y2UgPSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZShmSW5mby5zaGFkZXIp
OworICB9CisKKyAgdmFyIGR1bXBTaGFkZXJJbmZvUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVz
dCgpOworICBkdW1wU2hhZGVySW5mb1JlcXVlc3Qub3BlbignUE9TVCcsICIvZHVtcFNoYWRlcklu
Zm8iLCB0cnVlKTsKKyAgZHVtcFNoYWRlckluZm9SZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoIkNv
bnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluIik7CisgIGR1bXBTaGFkZXJJbmZvUmVxdWVzdC5zZW5k
KEpTT04uc3RyaW5naWZ5KHNoYWRlckluZm8pKTsKK307CisKKy8vIEFkZCB5b3VyIHByZWZpeCBo
ZXJlLgordmFyIGJyb3dzZXJQcmVmaXhlcyA9IFsKKyAgIiIsCisgICJNT1pfIiwKKyAgIk9QXyIs
CisgICJXRUJLSVRfIgorXTsKKworLyoqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gbmFtZSBsaWtl
IFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjCisgKiByZXR1cm5zIHRoZSBuYW1lIG9mIHRo
ZSBzdXBwb3J0ZWQgdmVyc2lvbiBleHRlbnNpb24sIGxpa2UKKyAqIFdFQktJVF9XRUJHTF9jb21w
cmVzc2VkX3RldHVyZV9zM3RjCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGV4dGVu
c2lvbiB0byBsb29rIGZvci4KKyAqIEByZXR1cm4ge3N0cmluZ30gbmFtZSBvZiBleHRlbnNpb24g
Zm91bmQgb3IgdW5kZWZpbmVkIGlmIG5vdAorICogICAgIGZvdW5kLgorICovCit2YXIgZ2V0U3Vw
cG9ydGVkRXh0ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMgPSBmdW5jdGlvbihnbCwgbmFtZSkgewor
ICB2YXIgc3VwcG9ydGVkID0gZ2wuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICBmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgYnJvd3NlclByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBw
cmVmaXhlZE5hbWUgPSBicm93c2VyUHJlZml4ZXNbaWldICsgbmFtZTsKKyAgICBpZiAoc3VwcG9y
dGVkLmluZGV4T2YocHJlZml4ZWROYW1lKSA+PSAwKSB7CisgICAgICByZXR1cm4gcHJlZml4ZWRO
YW1lOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gbmFtZSBs
aWtlIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjCisgKiByZXR1cm5zIHRoZSBzdXBwb3J0
ZWQgdmVyc2lvbiBleHRlbnNpb24sIGxpa2UKKyAqIFdFQktJVF9XRUJHTF9jb21wcmVzc2VkX3Rl
dHVyZV9zM3RjCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGV4dGVuc2lvbiB0byBs
b29rIGZvci4KKyAqIEByZXR1cm4ge1dlYkdMRXh0ZW5zaW9ufSBUaGUgZXh0ZW5zaW9uIG9yIHVu
ZGVmaW5lZCBpZiBub3QKKyAqICAgICBmb3VuZC4KKyAqLwordmFyIGdldEV4dGVuc2lvbldpdGhL
bm93blByZWZpeGVzID0gZnVuY3Rpb24oZ2wsIG5hbWUpIHsKKyAgZm9yICh2YXIgaWkgPSAwOyBp
aSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgcHJlZml4ZWROYW1l
ID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5hbWU7CisgICAgdmFyIGV4dCA9IGdsLmdldEV4dGVu
c2lvbihwcmVmaXhlZE5hbWUpOworICAgIGlmIChleHQpIHsKKyAgICAgIHJldHVybiBleHQ7Cisg
ICAgfQorICB9Cit9OworCisvKioKKyAqIFJldHVybnMgcG9zc2libGUgcHJlZml4ZWQgdmVyc2lv
bnMgb2YgYW4gZXh0ZW5zaW9uJ3MgbmFtZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUg
b2YgZXh0ZW5zaW9uLiBNYXkgYWxyZWFkeSBpbmNsdWRlIGEgcHJlZml4LgorICogQHJldHVybiB7
QXJyYXkuPHN0cmluZz59IFZhcmlhdGlvbnMgb2YgdGhlIGV4dGVuc2lvbiBuYW1lIHdpdGgga25v
d24KKyAqICAgICBicm93c2VyIHByZWZpeGVzLgorICovCit2YXIgZ2V0RXh0ZW5zaW9uUHJlZml4
ZWROYW1lcyA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgdmFyIHVucHJlZml4ID0gZnVuY3Rpb24obmFt
ZSkgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyAr
K2lpKSB7CisgICAgICBpZiAoYnJvd3NlclByZWZpeGVzW2lpXS5sZW5ndGggPiAwICYmCisgICAg
ICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgYnJvd3NlclByZWZpeGVzW2lpXS5sZW5ndGgpLnRvTG93
ZXJDYXNlKCkgPT09CisgICAgICAgICAgYnJvd3NlclByZWZpeGVzW2lpXS50b0xvd2VyQ2FzZSgp
KSB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cmluZyhicm93c2VyUHJlZml4ZXNbaWldLmxl
bmd0aCk7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBuYW1lOworICB9CisKKyAgdmFyIHVu
cHJlZml4ZWQgPSB1bnByZWZpeChuYW1lKTsKKworICB2YXIgdmFyaWF0aW9ucyA9IFtdOworICBm
b3IgKHZhciBpaSA9IDA7IGlpIDwgYnJvd3NlclByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAg
IHZhcmlhdGlvbnMucHVzaChicm93c2VyUHJlZml4ZXNbaWldICsgdW5wcmVmaXhlZCk7CisgIH0K
KworICByZXR1cm4gdmFyaWF0aW9uczsKK307CisKK3ZhciByZXBsYWNlUkUgPSAvXCRcKChcdysp
XCkvZzsKKworLyoqCisgKiBSZXBsYWNlcyBzdHJpbmdzIHdpdGggcHJvcGVydHkgdmFsdWVzLgor
ICogR2l2ZW4gYSBzdHJpbmcgbGlrZSAiaGVsbG8gJChmaXJzdCkgJChsYXN0KSIgYW5kIGFuIG9i
amVjdAorICogbGlrZSB7Zmlyc3Q6IkpvaG4iLCBsYXN0OiJTbWl0aCJ9IHdpbGwgcmV0dXJuCisg
KiAiaGVsbG8gSm9obiBTbWl0aCIuCisgKiBAcGFyYW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBk
byByZXBsYWNlbWVudHMgaW4uCisgKiBAcGFyYW0gey4uLn0gMSBvciBtb3JlIG9iamVjdHMgY29u
dGFpbmluZyBwcm9wZXJ0aWVzLgorICovCit2YXIgcmVwbGFjZVBhcmFtcyA9IGZ1bmN0aW9uKHN0
cikgeworICB2YXIgYXJncyA9IGFyZ3VtZW50czsKKyAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlcGxh
Y2VSRSwgZnVuY3Rpb24oc3RyLCBwMSwgb2Zmc2V0LCBzKSB7CisgICAgZm9yICh2YXIgaWkgPSAx
OyBpaSA8IGFyZ3MubGVuZ3RoOyArK2lpKSB7CisgICAgICBpZiAoYXJnc1tpaV1bcDFdICE9PSB1
bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJuIGFyZ3NbaWldW3AxXTsKKyAgICAgIH0KKyAgICB9
CisgICAgdGhyb3cgInVua25vd24gc3RyaW5nIHBhcmFtICciICsgcDEgKyAiJyI7CisgIH0pOwor
fTsKKwordmFyIHVwcGVyQ2FzZUZpcnN0TGV0dGVyID0gZnVuY3Rpb24oc3RyKSB7CisgIHJldHVy
biBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpOwor
fTsKKworLyoqCisgKiBHZXRzIGEgcHJlZml4ZWQgcHJvcGVydHkuIEZvciBleGFtcGxlLAorICoK
KyAqICAgICB2YXIgZm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5KAorICogICAgICAgIHdpbmRvdywK
KyAqICAgICAgICAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIik7CisgKgorICogV2lsbCByZXR1cm4g
ZWl0aGVyOgorICogICAgIndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndp
bmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgICJ3aW5kb3cubXNSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAor
ICogICAgIndpbmRvdy53ZWJLaXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgdW5kZWZp
bmVkCisgKgorICogdGhlIG5vbi1wcmVmaXhlZCBmdW5jdGlvbiBpcyB0cmllZCBmaXJzdC4KKyAq
LwordmFyIHByb3BlcnR5UHJlZml4ZXMgPSBbIiIsICJtb3oiLCAibXMiLCAibyIsICJ3ZWJraXQi
XTsKK3ZhciBnZXRQcmVmaXhlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wZXJ0eU5hbWUp
IHsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHByb3BlcnR5UHJlZml4ZXMubGVuZ3RoOyArK2lp
KSB7CisgICAgdmFyIHByZWZpeCA9IHByb3BlcnR5UHJlZml4ZXNbaWldOworICAgIHZhciBuYW1l
ID0gcHJlZml4ICsgcHJvcGVydHlOYW1lOworICAgIGxvZyhuYW1lKTsKKyAgICB2YXIgcHJvcGVy
dHkgPSBvYmpbbmFtZV07CisgICAgaWYgKHByb3BlcnR5KSB7CisgICAgICByZXR1cm4gcHJvcGVy
dHk7CisgICAgfQorICAgIGlmIChpaSA9PSAwKSB7CisgICAgICBwcm9wZXJ0eU5hbWUgPSB1cHBl
ckNhc2VGaXJzdExldHRlcihwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgfQorICByZXR1cm4gdW5k
ZWZpbmVkOworfTsKKwordmFyIF9yZXF1ZXN0QW5pbUZyYW1lOworCisvKioKKyAqIFByb3ZpZGVz
IHJlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBhIGNyb3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIg
cmVxdWVzdEFuaW1GcmFtZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIGlmICghX3JlcXVlc3RB
bmltRnJhbWUpIHsKKyAgICBfcmVxdWVzdEFuaW1GcmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHko
d2luZG93LCAicmVxdWVzdEFuaW1hdGlvbkZyYW1lIikgfHwKKyAgICAgIGZ1bmN0aW9uKGNhbGxi
YWNrLCBlbGVtZW50KSB7CisgICAgICAgIHJldHVybiB3aW5kb3cuc2V0VGltZW91dChjYWxsYmFj
aywgMTAwMCAvIDcwKTsKKyAgICAgIH07CisgIH0KKyAgbG9nKCJyZXF1ZXN0QW5pbUZyYW1lOiBk
b2N1bWVudC5oaWRkZW4gPSAiICsgZG9jdW1lbnQuaGlkZGVuKTsKKyAgX3JlcXVlc3RBbmltRnJh
bWUuY2FsbCh3aW5kb3csIGNhbGxiYWNrKTsKK307CisKK3ZhciBfY2FuY2VsQW5pbUZyYW1lOwor
CisvKioKKyAqIFByb3ZpZGVzIGNhbmNlbEFuaW1hdGlvbkZyYW1lIGluIGEgY3Jvc3MgYnJvd3Nl
ciB3YXkuCisgKi8KK3ZhciBjYW5jZWxBbmltRnJhbWUgPSBmdW5jdGlvbihyZXF1ZXN0KSB7Cisg
IGlmICghX2NhbmNlbEFuaW1GcmFtZSkgeworICAgIF9jYW5jZWxBbmltRnJhbWUgPSBnZXRQcmVm
aXhlZFByb3BlcnR5KHdpbmRvdywgImNhbmNlbEFuaW1hdGlvbkZyYW1lIikgfHwKKyAgICAgIHdp
bmRvdy5jbGVhclRpbWVvdXQ7CisgIH0KKyAgX2NhbmNlbEFuaW1GcmFtZS5jYWxsKHdpbmRvdywg
cmVxdWVzdCk7Cit9OworCisvKioKKyAqIFByb3ZpZGVzIHJlcXVlc3RGdWxsU2NyZWVuIGluIGEg
Y3Jvc3MgYnJvd3NlciB3YXkuCisgKi8KK3ZhciByZXF1ZXN0RnVsbFNjcmVlbiA9IGZ1bmN0aW9u
KGVsZW1lbnQpIHsKKyAgdmFyIGZuID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShlbGVtZW50LCAicmVx
dWVzdEZ1bGxTY3JlZW4iKTsKKyAgaWYgKGZuKSB7CisgICAgZm4uY2FsbChlbGVtZW50KTsKKyAg
fQorfTsKKworLyoqCisgKiBQcm92aWRlcyBjYW5jZWxGdWxsU2NyZWVuIGluIGEgY3Jvc3MgYnJv
d3NlciB3YXkuCisgKi8KK3ZhciBjYW5jZWxGdWxsU2NyZWVuID0gZnVuY3Rpb24oKSB7CisgIHZh
ciBmbiA9IGdldFByZWZpeGVkUHJvcGVydHkoZG9jdW1lbnQsICJjYW5jZWxGdWxsU2NyZWVuIik7
CisgIGlmIChmbikgeworICAgIGZuLmNhbGwoZG9jdW1lbnQpOworICB9Cit9OworCit2YXIgZnVs
bFNjcmVlblN0YXRlTmFtZTsKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGZ1bGxTY3JlZW5TdGF0ZU5h
bWVzID0gWworICAgICJpc0Z1bGxTY3JlZW4iLAorICAgICJmdWxsU2NyZWVuIiwKKyAgXTsKKyAg
Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGZ1bGxTY3JlZW5TdGF0ZU5hbWVzLmxlbmd0aDsgKytpaSkg
eworICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBmdWxsU2NyZWVuU3RhdGVOYW1lc1tpaV07CisgICAg
Zm9yICh2YXIgamogPSAwOyBqaiA8IHByb3BlcnR5UHJlZml4ZXMubGVuZ3RoOyArK2pqKSB7Cisg
ICAgICB2YXIgcHJlZml4ID0gcHJvcGVydHlQcmVmaXhlc1tqal07CisgICAgICBpZiAocHJlZml4
Lmxlbmd0aCkgeworICAgICAgICBwcm9wZXJ0eU5hbWUgPSB1cHBlckNhc2VGaXJzdExldHRlcihw
cm9wZXJ0eU5hbWUpOworICAgICAgICBmdWxsU2NyZWVuU3RhdGVOYW1lID0gcHJlZml4ICsgcHJv
cGVydHlOYW1lOworICAgICAgICBpZiAoZG9jdW1lbnRbZnVsbFNjcmVlblN0YXRlTmFtZV0gIT09
IHVuZGVmaW5lZCkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAg
IH0KKyAgICBmdWxsU2NyZWVuU3RhdGVOYW1lID0gdW5kZWZpbmVkOworICB9Cit9KCkpOworCisv
KioKKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZnVsbHNjcmVlbiBtb2RlIGlzIGFjdGl2
ZS4KKyAqLwordmFyIGdldEZ1bGxTY3JlZW5TdGF0ZSA9IGZ1bmN0aW9uKCkgeworICBsb2coImZ1
bGxzY3JlZW5zdGF0ZW5hbWU6IiArIGZ1bGxTY3JlZW5TdGF0ZU5hbWUpOworICBsb2coZG9jdW1l
bnRbZnVsbFNjcmVlblN0YXRlTmFtZV0pOworICByZXR1cm4gZG9jdW1lbnRbZnVsbFNjcmVlblN0
YXRlTmFtZV07Cit9OworCisvKioKKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IFRo
ZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCisgKiBAcGFyYW0geyFmdW5jdGlvbihib29sZWFu
KX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkCisgKiAgICAgICAgd2hl
biBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIEl0IGlzIHBhc3NlZCB0cnVlIGlmCisgKiAg
ICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFsc2UgaWYgZXhpdGluZy4KKyAqLwordmFyIG9u
RnVsbFNjcmVlbkNoYW5nZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNhbGxiYWNrKSB7CisgIHByb3Bl
cnR5UHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbihwcmVmaXgpIHsKKyAgICB2YXIgZXZlbnROYW1l
ID0gcHJlZml4ICsgImZ1bGxzY3JlZW5jaGFuZ2UiOworICAgIGxvZygiYWRkZXZlbnQ6ICIgKyBl
dmVudE5hbWUpOworICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5j
dGlvbihldmVudCkgeworICAgICAgbG9nKCJldmVudDogIiArIGV2ZW50TmFtZSk7CisgICAgICBj
YWxsYmFjayhnZXRGdWxsU2NyZWVuU3RhdGUoKSk7CisgICAgfSk7CisgIH0pOworfTsKKworLyoq
CisgKiBAcGFyYW0geyFzdHJpbmd9IGJ1dHRvbklkIFRoZSBpZCBvZiB0aGUgYnV0dG9uIHRoYXQg
d2lsbCB0b2dnbGUgZnVsbHNjcmVlbgorICogICAgICAgIG1vZGUuCisgKiBAcGFyYW0geyFzdHJp
bmd9IGZ1bGxzY3JlZW5JZCBUaGUgaWQgb2YgdGhlIGVsZW1lbnQgdG8gZ28gZnVsbHNjcmVlbi4K
KyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2xlYW4pfSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSBjYWxsZWQKKyAqICAgICAgICB3aGVuIGVudGVyaW5nL2V4aXRpbmcgZnVsbHNjcmVl
bi4gSXQgaXMgcGFzc2VkIHRydWUgaWYKKyAqICAgICAgICBlbnRlcmluZyBmdWxsc2NyZWVuLCBm
YWxzZSBpZiBleGl0aW5nLgorICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBmdWxsc2NyZWVu
IG1vZGUgaXMgc3VwcG9ydGVkLgorICovCit2YXIgc2V0dXBGdWxsc2NyZWVuID0gZnVuY3Rpb24o
YnV0dG9uSWQsIGZ1bGxzY3JlZW5JZCwgY2FsbGJhY2spIHsKKyAgaWYgKCFmdWxsU2NyZWVuU3Rh
dGVOYW1lKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgdmFyIGZ1bGxzY3JlZW5FbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZnVsbHNjcmVlbklkKTsKKyAgb25GdWxsU2Ny
ZWVuQ2hhbmdlKGZ1bGxzY3JlZW5FbGVtZW50LCBjYWxsYmFjayk7CisKKyAgdmFyIHRvZ2dsZUZ1
bGxTY3JlZW4gPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChnZXRGdWxsU2NyZWVuU3RhdGUo
KSkgeworICAgICAgY2FuY2VsRnVsbFNjcmVlbihmdWxsc2NyZWVuRWxlbWVudCk7CisgICAgfSBl
bHNlIHsKKyAgICAgIHJlcXVlc3RGdWxsU2NyZWVuKGZ1bGxzY3JlZW5FbGVtZW50KTsKKyAgICB9
CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICByZXR1cm4gZmFsc2U7CisgIH07CisK
KyAgdmFyIGJ1dHRvbkVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChidXR0b25JZCk7
CisgIGJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVGdWxsU2Ny
ZWVuKTsKKworICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgorICogV2FpdHMgZm9yIHRoZSBicm93
c2VyIHRvIGNvbXBvc2l0ZSB0aGUgd2ViIHBhZ2UuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKCl9IGNh
bGxiYWNrIEEgZnVuY3Rpb24gdG8gY2FsbCBhZnRlciBjb21wb3NpdGluZyBoYXMgdGFrZW4KKyAq
ICAgICAgICBwbGFjZS4KKyAqLwordmFyIHdhaXRGb3JDb21wb3NpdGUgPSBmdW5jdGlvbihjYWxs
YmFjaykgeworICB2YXIgZnJhbWVzID0gNTsKKyAgdmFyIGNvdW50RG93biA9IGZ1bmN0aW9uKCkg
eworICAgIGlmIChmcmFtZXMgPT0gMCkgeworICAgICAgbG9nKCJ3YWl0Rm9yQ29tcG9zaXRlOiBj
YWxsYmFjayIpOworICAgICAgY2FsbGJhY2soKTsKKyAgICB9IGVsc2UgeworICAgICAgbG9nKCJ3
YWl0Rm9yQ29tcG9zaXRlOiBjb3VudGRvd24oIiArIGZyYW1lcyArICIpIik7CisgICAgICAtLWZy
YW1lczsKKyAgICAgIHJlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGNvdW50RG93bik7Cisg
ICAgfQorICB9OworICBjb3VudERvd24oKTsKK307CisKK3ZhciBzZXRaZXJvVGltZW91dCA9IChm
dW5jdGlvbigpIHsKKyAgLy8gU2VlIGh0dHBzOi8vZGJhcm9uLm9yZy9sb2cvMjAxMDAzMDktZmFz
dGVyLXRpbWVvdXRzCisKKyAgdmFyIHRpbWVvdXRzID0gW107CisgIHZhciBtZXNzYWdlTmFtZSA9
ICJ6ZXJvLXRpbWVvdXQtbWVzc2FnZSI7CisKKyAgLy8gTGlrZSBzZXRUaW1lb3V0LCBidXQgb25s
eSB0YWtlcyBhIGZ1bmN0aW9uIGFyZ3VtZW50LiAgVGhlcmUncworICAvLyBubyB0aW1lIGFyZ3Vt
ZW50IChhbHdheXMgemVybykgYW5kIG5vIGFyZ3VtZW50cyAoeW91IGhhdmUgdG8KKyAgLy8gdXNl
IGEgY2xvc3VyZSkuCisgIGZ1bmN0aW9uIHNldFplcm9UaW1lb3V0KGZuKSB7CisgICAgICB0aW1l
b3V0cy5wdXNoKGZuKTsKKyAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShtZXNzYWdlTmFtZSwgIioi
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGhhbmRsZU1lc3NhZ2UoZXZlbnQpIHsKKyAgICAgIGlmIChl
dmVudC5zb3VyY2UgPT0gd2luZG93ICYmIGV2ZW50LmRhdGEgPT0gbWVzc2FnZU5hbWUpIHsKKyAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgICBpZiAodGltZW91dHMu
bGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICB2YXIgZm4gPSB0aW1lb3V0cy5zaGlmdCgpOwor
ICAgICAgICAgICAgICBmbigpOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgfQorCisgIHdpbmRv
dy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgdHJ1ZSk7CisKKyAg
cmV0dXJuIHNldFplcm9UaW1lb3V0OworfSkoKTsKKworLyoqCisgKiBSdW5zIGFuIGFycmF5IG9m
IGZ1bmN0aW9ucywgeWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgYmV0d2VlbiBlYWNoIHN0ZXAuCisg
KiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZW4gYWxsIHRoZSBzdGVwcyBhcmUgZmluaXNoZWQgYWRk
IGEgbGFzdCBzdGVwLgorICogQHBhcmFtIHshQXJyYXkuPGZ1bmN0aW9uKCk6IHZvaWQ+fSBzdGVw
cy4gQXJyYXkgb2YgZnVuY3Rpb25zLgorICovCit2YXIgcnVuU3RlcHMgPSBmdW5jdGlvbihzdGVw
cykgeworICBpZiAoIXN0ZXBzLmxlbmd0aCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIGNv
cHkgc3RlcHMgc28gdGhleSBjYW4ndCBiZSBtb2RpZmVkLgorICB2YXIgc3RlcHNUb1J1biA9IHN0
ZXBzLnNsaWNlKCk7CisgIHZhciBjdXJyZW50U3RlcCA9IDA7CisgIHZhciBydW5OZXh0U3RlcCA9
IGZ1bmN0aW9uKCkgeworICAgIHN0ZXBzVG9SdW5bY3VycmVudFN0ZXArK10oKTsKKyAgICBpZiAo
Y3VycmVudFN0ZXAgPCBzdGVwc1RvUnVuLmxlbmd0aCkgeworICAgICAgc2V0VGltZW91dChydW5O
ZXh0U3RlcCwgMSk7CisgICAgfQorICB9OworICBydW5OZXh0U3RlcCgpOworfTsKKworLyoqCisg
KiBTdGFydHMgcGxheWluZyBhIHZpZGVvIGFuZCB3YWl0cyBmb3IgaXQgdG8gYmUgY29uc3VtYWJs
ZS4KKyAqIEBwYXJhbSB7IUhUTUxWaWRlb0VsZW1lbnR9IHZpZGVvIEFuIEhUTUw1IFZpZGVvIGVs
ZW1lbnQuCisgKiBAcGFyYW0geyFmdW5jdGlvbighSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQ+fSBj
YWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqICAgICAgICB2aWRlbyBpcyByZWFkeS4K
KyAqLwordmFyIHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbyA9IGZ1bmN0aW9uKHZpZGVvLCBj
YWxsYmFjaykgeworICB2YXIgZ290UGxheWluZyA9IGZhbHNlOworICB2YXIgZ290VGltZVVwZGF0
ZSA9IGZhbHNlOworCisgIHZhciBtYXliZUNhbGxDYWxsYmFjayA9IGZ1bmN0aW9uKCkgeworICAg
IGlmIChnb3RQbGF5aW5nICYmIGdvdFRpbWVVcGRhdGUgJiYgY2FsbGJhY2spIHsKKyAgICAgIGNh
bGxiYWNrKHZpZGVvKTsKKyAgICAgIGNhbGxiYWNrID0gdW5kZWZpbmVkOworICAgICAgdmlkZW8u
cmVtb3ZlRXZlbnRMaXN0ZW5lcigncGxheWluZycsIHBsYXlpbmdMaXN0ZW5lciwgdHJ1ZSk7Cisg
ICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGltZXVwZGF0ZUxp
c3RlbmVyLCB0cnVlKTsKKyAgICB9CisgIH07CisKKyAgdmFyIHBsYXlpbmdMaXN0ZW5lciA9IGZ1
bmN0aW9uKCkgeworICAgIGdvdFBsYXlpbmcgPSB0cnVlOworICAgIG1heWJlQ2FsbENhbGxiYWNr
KCk7CisgIH07CisKKyAgdmFyIHRpbWV1cGRhdGVMaXN0ZW5lciA9IGZ1bmN0aW9uKCkgeworICAg
IC8vIENoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGUgY3VycmVudCB0aW1lIGhhcyBhZHZhbmNlZCBi
ZXlvbmQKKyAgICAvLyB0aGUgc3RhcnQgdGltZSBzZWVtcyB0byBiZSBhIHJlbGlhYmxlIGhldXJp
c3RpYyB0aGF0IHRoZQorICAgIC8vIHZpZGVvIGVsZW1lbnQgaGFzIGRhdGEgdGhhdCBjYW4gYmUg
Y29uc3VtZWQuCisgICAgaWYgKHZpZGVvLmN1cnJlbnRUaW1lID4gMC4wKSB7CisgICAgICBnb3RU
aW1lVXBkYXRlID0gdHJ1ZTsKKyAgICAgIG1heWJlQ2FsbENhbGxiYWNrKCk7CisgICAgfQorICB9
OworCisgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCBwbGF5aW5nTGlzdGVuZXIs
IHRydWUpOworICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGltZXVwZGF0
ZUxpc3RlbmVyLCB0cnVlKTsKKyAgdmlkZW8ubG9vcCA9IHRydWU7CisgIHZpZGVvLm11dGVkID0g
dHJ1ZTsKKyAgdmlkZW8ucGxheSgpOworfTsKKwordmFyIGdldEhvc3QgPSBmdW5jdGlvbih1cmwp
IHsKKyAgdXJsID0gdXJsLnJlcGxhY2UoIlxcIiwgIi8iKTsKKyAgdmFyIHBvcyA9IHVybC5pbmRl
eE9mKCI6Ly8iKTsKKyAgaWYgKHBvcyA+PSAwKSB7CisgICAgdXJsID0gdXJsLnN1YnN0cihwb3Mg
KyAzKTsKKyAgfQorICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKTsKKyAgcmV0dXJuIHBhcnRz
WzBdOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxhc3QgMiB3b3JkcyBvZiB0
aGUgZG9tYWluIG9mIGEgVVJMCisvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0aGUgY29ycmVjdCBj
aGVjayBidXQgaXQgd2lsbCBkbyBmb3Igbm93LgordmFyIGdldEJhc2VEb21haW4gPSBmdW5jdGlv
bihob3N0KSB7CisgIHZhciBwYXJ0cyA9IGhvc3Quc3BsaXQoIjoiKTsKKyAgdmFyIGhvc3RuYW1l
ID0gcGFydHNbMF07CisgIHZhciBwb3J0ID0gcGFydHNbMV0gfHwgIjgwIjsKKyAgcGFydHMgPSBo
b3N0bmFtZS5zcGxpdCgiLiIpOworICBpZihwYXJ0cy5sZW5ndGggPCAyKQorICAgIHJldHVybiBo
b3N0bmFtZSArICI6IiArIHBvcnQ7CisgIHZhciB0bGQgPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMV07
CisgIHZhciBkb21haW4gPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl07CisgIHJldHVybiBkb21haW4g
KyAiLiIgKyB0bGQgKyAiOiIgKyBwb3J0OworfQorCit2YXIgcnVubmluZ09uTG9jYWxob3N0ID0g
ZnVuY3Rpb24oKSB7CisgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUuaW5kZXhPZigi
bG9jYWxob3N0IikgIT0gLTEgfHwKKyAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZS5pbmRl
eE9mKCIxMjcuMC4wLjEiKSAhPSAtMTsKK30KKwordmFyIGdldExvY2FsQ3Jvc3NPcmlnaW4gPSBm
dW5jdGlvbigpIHsKKyAgdmFyIGRvbWFpbjsKKyAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0Lmlu
ZGV4T2YoImxvY2FsaG9zdCIpICE9IC0xKSB7CisgICAgZG9tYWluID0gIjEyNy4wLjAuMSI7Cisg
IH0gZWxzZSB7CisgICAgZG9tYWluID0gImxvY2FsaG9zdCI7CisgIH0KKworICB2YXIgcG9ydCA9
IHdpbmRvdy5sb2NhdGlvbi5wb3J0IHx8ICI4MCI7CisgIHJldHVybiB3aW5kb3cubG9jYXRpb24u
cHJvdG9jb2wgKyAiLy8iICsgZG9tYWluICsgIjoiICsgcG9ydAorfQorCit2YXIgZ2V0UmVsYXRp
dmVQYXRoID0gZnVuY3Rpb24ocGF0aCkgeworICB2YXIgcmVscGFydHMgPSB3aW5kb3cubG9jYXRp
b24ucGF0aG5hbWUuc3BsaXQoIi8iKTsKKyAgcmVscGFydHMucG9wKCk7IC8vIFBvcCBvZmYgZmls
ZW5hbWUKKyAgdmFyIHBhdGhwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKTsKKworICB2YXIgaTsKKyAg
Zm9yIChpID0gMDsgaSA8IHBhdGhwYXJ0cy5sZW5ndGg7ICsraSkgeworICAgIHN3aXRjaCAocGF0
aHBhcnRzW2ldKSB7CisgICAgICBjYXNlICIiOiBicmVhazsKKyAgICAgIGNhc2UgIi4iOiBicmVh
azsKKyAgICAgIGNhc2UgIi4uIjoKKyAgICAgICAgcmVscGFydHMucG9wKCk7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgcmVscGFydHMucHVzaChwYXRocGFydHNbaV0p
OworICAgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVscGFydHMuam9pbigi
LyIpOworfQorCit2YXIgc2V0dXBJbWFnZUZvckNyb3NzT3JpZ2luVGVzdCA9IGZ1bmN0aW9uKGlt
ZywgaW1nVXJsLCBsb2NhbFVybCwgY2FsbGJhY2spIHsKKyAgd2luZG93LmFkZEV2ZW50TGlzdGVu
ZXIoImxvYWQiLCBmdW5jdGlvbigpIHsKKyAgICBpZiAodHlwZW9mKGltZykgPT0gInN0cmluZyIp
CisgICAgICBpbWcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGltZyk7CisgICAgaWYgKCFpbWcp
CisgICAgICBpbWcgPSBuZXcgSW1hZ2UoKTsKKworICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCJs
b2FkIiwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3Ii
LCBjYWxsYmFjaywgZmFsc2UpOworCisgICAgaWYgKHJ1bm5pbmdPbkxvY2FsaG9zdCgpKQorICAg
ICAgaW1nLnNyYyA9IGdldExvY2FsQ3Jvc3NPcmlnaW4oKSArIGdldFJlbGF0aXZlUGF0aChsb2Nh
bFVybCk7CisgICAgZWxzZQorICAgICAgaW1nLnNyYyA9IGdldFVybE9wdGlvbnMoKS5pbWdVcmwg
fHwgaW1nVXJsOworICB9LCBmYWxzZSk7Cit9CisKK3JldHVybiB7CisgIGFkZFNoYWRlclNvdXJj
ZTogYWRkU2hhZGVyU291cmNlLAorICBhZGRTaGFkZXJTb3VyY2VzOiBhZGRTaGFkZXJTb3VyY2Vz
LAorICBjYW5jZWxBbmltRnJhbWU6IGNhbmNlbEFuaW1GcmFtZSwKKyAgY3JlYXRlM0RDb250ZXh0
OiBjcmVhdGUzRENvbnRleHQsCisgIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhhdFRocm93
c09uR0xFcnJvcjoKKyAgICAgIGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFwcGVyVGhhdFRocm93c09u
R0xFcnJvciwKKyAgY2hlY2tBcmVhSW5BbmRPdXQ6IGNoZWNrQXJlYUluQW5kT3V0LAorICBjaGVj
a0NhbnZhczogY2hlY2tDYW52YXMsCisgIGNoZWNrQ2FudmFzUmVjdDogY2hlY2tDYW52YXNSZWN0
LAorICBjaGVja0NhbnZhc1JlY3RDb2xvcjogY2hlY2tDYW52YXNSZWN0Q29sb3IsCisgIGNoZWNr
VGV4dHVyZVNpemU6IGNoZWNrVGV4dHVyZVNpemUsCisgIGNsaXBUb1JhbmdlOiBjbGlwVG9SYW5n
ZSwKKyAgY3JlYXRlQ29sb3JlZFRleHR1cmU6IGNyZWF0ZUNvbG9yZWRUZXh0dXJlLAorICBjcmVh
dGVQcm9ncmFtOiBjcmVhdGVQcm9ncmFtLAorICBjbGVhckFuZERyYXdVbml0UXVhZDogY2xlYXJB
bmREcmF3VW5pdFF1YWQsCisgIGNsZWFyQW5kRHJhd0luZGV4ZWRRdWFkOiBjbGVhckFuZERyYXdJ
bmRleGVkUXVhZCwKKyAgZGlzcGF0Y2hUYXNrOiBzZXRaZXJvVGltZW91dCwKKyAgZHJhd1VuaXRR
dWFkOiBkcmF3VW5pdFF1YWQsCisgIGRyYXdJbmRleGVkUXVhZDogZHJhd0luZGV4ZWRRdWFkLAor
ICBkcmF3VUJ5dGVDb2xvclF1YWQ6IGRyYXdVQnl0ZUNvbG9yUXVhZCwKKyAgZHJhd0Zsb2F0Q29s
b3JRdWFkOiBkcmF3RmxvYXRDb2xvclF1YWQsCisgIGR1bXBTaGFkZXJzSW5mbzogZHVtcFNoYWRl
cnNJbmZvLAorICBlbmRzV2l0aDogZW5kc1dpdGgsCisgIGZpbGxUZXh0dXJlOiBmaWxsVGV4dHVy
ZSwKKyAgZ2V0Qnl0ZXNQZXJDb21wb25lbnQ6IGdldEJ5dGVzUGVyQ29tcG9uZW50LAorICBnZXRF
eHRlbnNpb25QcmVmaXhlZE5hbWVzOiBnZXRFeHRlbnNpb25QcmVmaXhlZE5hbWVzLAorICBnZXRF
eHRlbnNpb25XaXRoS25vd25QcmVmaXhlczogZ2V0RXh0ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMs
CisgIGdldEZpbGVMaXN0QXN5bmM6IGdldEZpbGVMaXN0QXN5bmMsCisgIGdldExhc3RFcnJvcjog
Z2V0TGFzdEVycm9yLAorICBnZXRQcmVmaXhlZFByb3BlcnR5OiBnZXRQcmVmaXhlZFByb3BlcnR5
LAorICBnZXRTY3JpcHQ6IGdldFNjcmlwdCwKKyAgZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0aEtu
b3duUHJlZml4ZXM6IGdldFN1cHBvcnRlZEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzLAorICBn
ZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbDogZ2V0VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4
ZWwsCisgIGdldFVybEFyZ3VtZW50czogZ2V0VXJsQXJndW1lbnRzLAorICBnZXRVcmxPcHRpb25z
OiBnZXRVcmxPcHRpb25zLAorICBnZXRBdHRyaWJNYXA6IGdldEF0dHJpYk1hcCwKKyAgZ2V0VW5p
Zm9ybU1hcDogZ2V0VW5pZm9ybU1hcCwKKyAgZ2xFbnVtVG9TdHJpbmc6IGdsRW51bVRvU3RyaW5n
LAorICBnbEVycm9yU2hvdWxkQmU6IGdsRXJyb3JTaG91bGRCZSwKKyAgZ2xUeXBlVG9UeXBlZEFy
cmF5VHlwZTogZ2xUeXBlVG9UeXBlZEFycmF5VHlwZSwKKyAgaGFzQXR0cmlidXRlQ2FzZUluc2Vu
c2l0aXZlOiBoYXNBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUsCisgIGluc2VydEltYWdlOiBpbnNl
cnRJbWFnZSwKKyAgbG9hZEltYWdlQXN5bmM6IGxvYWRJbWFnZUFzeW5jLAorICBsb2FkSW1hZ2Vz
QXN5bmM6IGxvYWRJbWFnZXNBc3luYywKKyAgbG9hZFByb2dyYW06IGxvYWRQcm9ncmFtLAorICBs
b2FkUHJvZ3JhbUZyb21GaWxlOiBsb2FkUHJvZ3JhbUZyb21GaWxlLAorICBsb2FkUHJvZ3JhbUZy
b21TY3JpcHQ6IGxvYWRQcm9ncmFtRnJvbVNjcmlwdCwKKyAgbG9hZFByb2dyYW1Gcm9tU2NyaXB0
RXhwZWN0RXJyb3I6IGxvYWRQcm9ncmFtRnJvbVNjcmlwdEV4cGVjdEVycm9yLAorICBsb2FkU2hh
ZGVyOiBsb2FkU2hhZGVyLAorICBsb2FkU2hhZGVyRnJvbUZpbGU6IGxvYWRTaGFkZXJGcm9tRmls
ZSwKKyAgbG9hZFNoYWRlckZyb21TY3JpcHQ6IGxvYWRTaGFkZXJGcm9tU2NyaXB0LAorICBsb2Fk
U3RhbmRhcmRQcm9ncmFtOiBsb2FkU3RhbmRhcmRQcm9ncmFtLAorICBsb2FkU3RhbmRhcmRWZXJ0
ZXhTaGFkZXI6IGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlciwKKyAgbG9hZFN0YW5kYXJkRnJhZ21l
bnRTaGFkZXI6IGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyLAorICBsb2FkVGV4dEZpbGVBc3lu
YzogbG9hZFRleHRGaWxlQXN5bmMsCisgIGxvYWRUZXh0dXJlOiBsb2FkVGV4dHVyZSwKKyAgbG9n
OiBsb2csCisgIGxvZ2dpbmdPZmY6IGxvZ2dpbmdPZmYsCisgIG1ha2VJbWFnZTogbWFrZUltYWdl
LAorICBtYWtlSW1hZ2VGcm9tQ2FudmFzOiBtYWtlSW1hZ2VGcm9tQ2FudmFzLAorICBtYWtlVmlk
ZW86IG1ha2VWaWRlbywKKyAgZXJyb3I6IGVycm9yLAorICBzaGFsbG93Q29weU9iamVjdDogc2hh
bGxvd0NvcHlPYmplY3QsCisgIHNldHVwQ29sb3JRdWFkOiBzZXR1cENvbG9yUXVhZCwKKyAgc2V0
dXBQcm9ncmFtOiBzZXR1cFByb2dyYW0sCisgIHNldHVwUXVhZDogc2V0dXBRdWFkLAorICBzZXR1
cEluZGV4ZWRRdWFkOiBzZXR1cEluZGV4ZWRRdWFkLAorICBzZXR1cEluZGV4ZWRRdWFkV2l0aE9w
dGlvbnM6IHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucywKKyAgc2V0dXBTaW1wbGVDb2xvckZy
YWdtZW50U2hhZGVyOiBzZXR1cFNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIsCisgIHNldHVwU2lt
cGxlQ29sb3JWZXJ0ZXhTaGFkZXI6IHNldHVwU2ltcGxlQ29sb3JWZXJ0ZXhTaGFkZXIsCisgIHNl
dHVwU2ltcGxlQ29sb3JQcm9ncmFtOiBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbSwKKyAgc2V0dXBT
aW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHNldHVwU2ltcGxlVGV4dHVyZUZyYWdtZW50U2hh
ZGVyLAorICBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtOiBzZXR1cFNpbXBsZVRleHR1cmVQcm9n
cmFtLAorICBzZXR1cFNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXI6IHNldHVwU2ltcGxlVGV4dHVy
ZVZlcnRleFNoYWRlciwKKyAgc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvckZyYWdtZW50U2hhZGVyOiBz
ZXR1cFNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIsCisgIHNldHVwU2ltcGxlVmVydGV4
Q29sb3JQcm9ncmFtOiBzZXR1cFNpbXBsZVZlcnRleENvbG9yUHJvZ3JhbSwKKyAgc2V0dXBTaW1w
bGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlcjogc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNo
YWRlciwKKyAgc2V0dXBOb1RleENvb3JkVGV4dHVyZVByb2dyYW06IHNldHVwTm9UZXhDb29yZFRl
eHR1cmVQcm9ncmFtLAorICBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyOiBzZXR1
cE5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyLAorICBzZXR1cFRleHR1cmVkUXVhZDogc2V0
dXBUZXh0dXJlZFF1YWQsCisgIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3Jkczogc2V0dXBU
ZXh0dXJlZFF1YWRXaXRoVGV4Q29vcmRzLAorICBzZXR1cFVuaXRRdWFkOiBzZXR1cFVuaXRRdWFk
LAorICBzZXR1cFVuaXRRdWFkV2l0aFRleENvb3Jkczogc2V0dXBVbml0UXVhZFdpdGhUZXhDb29y
ZHMsCisgIHNldEZsb2F0RHJhd0NvbG9yOiBzZXRGbG9hdERyYXdDb2xvciwKKyAgc2V0VUJ5dGVE
cmF3Q29sb3I6IHNldFVCeXRlRHJhd0NvbG9yLAorICBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlk
ZW86IHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbywKKyAgc3RhcnRzV2l0aDogc3RhcnRzV2l0
aCwKKyAgc2hvdWxkR2VuZXJhdGVHTEVycm9yOiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IsCisgIHNo
b3VsZFRocm93T3JHZW5lcmF0ZUdMRXJyb3I6IHNob3VsZFRocm93T3JHZW5lcmF0ZUdMRXJyb3Is
CisgIHJlYWRGaWxlOiByZWFkRmlsZSwKKyAgcmVhZEZpbGVMaXN0OiByZWFkRmlsZUxpc3QsCisg
IHJlcGxhY2VQYXJhbXM6IHJlcGxhY2VQYXJhbXMsCisgIHJlcXVlc3RBbmltRnJhbWU6IHJlcXVl
c3RBbmltRnJhbWUsCisgIHJ1blN0ZXBzOiBydW5TdGVwcywKKyAgd2FpdEZvckNvbXBvc2l0ZTog
d2FpdEZvckNvbXBvc2l0ZSwKKworICAvLyBmdWxsc2NyZWVuIGFwaQorICBzZXR1cEZ1bGxzY3Jl
ZW46IHNldHVwRnVsbHNjcmVlbiwKKworICBnZXRIb3N0OiBnZXRIb3N0LAorICBnZXRCYXNlRG9t
YWluOiBnZXRCYXNlRG9tYWluLAorICBydW5uaW5nT25Mb2NhbGhvc3Q6IHJ1bm5pbmdPbkxvY2Fs
aG9zdCwKKyAgZ2V0TG9jYWxDcm9zc09yaWdpbjogZ2V0TG9jYWxDcm9zc09yaWdpbiwKKyAgZ2V0
UmVsYXRpdmVQYXRoOiBnZXRSZWxhdGl2ZVBhdGgsCisgIHNldHVwSW1hZ2VGb3JDcm9zc09yaWdp
blRlc3Q6IHNldHVwSW1hZ2VGb3JDcm9zc09yaWdpblRlc3QsCisKKyAgbm9uZTogZmFsc2UKK307
CisKK30oKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>438030</attachid>
            <date>2021-09-13 05:15:20 -0700</date>
            <delta_ts>2021-09-24 18:30:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210913151518.patch</filename>
            <type>text/plain</type>
            <size>19700</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgyMzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggNjlhZGJiNDQyZDIzNWU3ZDQyOTM4YTA0ZWJmOWUzNjc2YzRjZDMwZi4uMTA2ZWM4YmIyZmJi
OGQwOGFhZWNiZWI4YTYzYTdlZmU0NGNiODUyNSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA5LTEzICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjI5OTA1Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2Ug
VHJhbnNsYXRvck1ldGFsRGlyZWN0IHRvIHByZWZpeCAnX3UnIHRvIGFsbCB1c2VyIGRlZmluZWQg
dmFyaWFibGVzLgorICAgICAgICBDbGVhbiB1cCBidWlsdGlucyBsaWtlIHNhbXBsZXJzIGFuZCBB
TkdMRSBzdHJ1Y3RzIHRoYXQgd2VyZSBiZWluZworICAgICAgICBhY2NpZGVudGx5IHByb21vdGVk
IHRvIHVzZXJEZWZpbmVkIHZhcmlhYmxlcy4KKworICAgICAgICAqIHNyYy9jb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHA6CisgICAgICAgIChzaDo6R2V0TXNsS2V5
d29yZHMpOgorICAgICAgICAqIHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9OYW1lLmNwcDoKKyAgICAgICAgKE5hbWU6OmVtaXQgY29uc3QpOgorICAgICAgICAq
IHNyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYu
Y3BwOgorICAgICAgICAoU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KToKKyAgICAgICAgKFN5bWJv
bEVudjo6Z2V0U2FtcGxlclN0cnVjdCk6CisgICAgICAgIChzaDo6R2V0VGV4dHVyZVR5cGVOYW1l
KToKKyAgICAgICAgKiBzcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRs
X3V0aWxzLm1tOgorICAgICAgICAocng6Om10bDo6R2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja1Zh
cnlpbmdPdXRwdXQpOgorCiAyMDIxLTA4LTMxICBLaW1tbyBLaW5udW5lbiAgPGtraW5udW5lbkBh
cHBsZS5jb20+CiAKICAgICAgICAgd2ViZ2wvMS4wLngvY29uZm9ybWFuY2UvZ2xzbC9taXNjL2Zy
YWdjb2xvci1mcmFnZGF0YS1pbnZhcmlhbnQuaHRtbCBmYWlscwpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xh
dG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKaW5kZXggMmQ4NjIyMmJiM2Q4OWE1NWRjM2Yy
MjcwNWZhZGNmODBlMzI4YjkwNi4uODdlMDhkY2UyMzE2ZWIwMjIwOTNjOTliMGNjODIxNDljNjAw
ZTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3Bw
CkBAIC01OCw4ICs1OCw4IEBAIG5hbWVzcGFjZSBzaAogbmFtZXNwYWNlCiB7CiAKLWNvbnN0ZXhw
ciBOYW1lIGtDb3ZlcmFnZU1hc2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlwZTo6VXNl
ckRlZmluZWQpOwotY29uc3RleHByIE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJ
bnN0YW5jZUlEIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5hbWUga0Nv
dmVyYWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFs
KTsKK2NvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlERmllbGQoImVtdWxhdGVkSW5zdGFuY2VJ
RCIsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwogY29uc3RleHByIE5hbWUga1NhbXBsZU1h
c2tXcml0ZUZ1bmNOYW1lKCJ3cml0ZVNhbXBsZU1hc2siLCBTeW1ib2xUeXBlOjpBbmdsZUludGVy
bmFsKTsKICNpZiAwCiBjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdyYXBwZXJGdW5jTmFtZSgiRGlz
Y2FyZFdyYXBwZXIiKTsKQEAgLTY3LDggKzY3LDggQEAgY29uc3RleHByIE5hbWUga0Rpc2NhcmRX
cmFwcGVyRnVuY05hbWUoIkRpc2NhcmRXcmFwcGVyIik7CiBjb25zdGV4cHIgTmFtZSBrRW11bGF0
ZWREZXB0aFJhbmdlUGFyYW1zKCJEZXB0aFJhbmdlUGFyYW1zIik7CiBjb25zdGV4cHIgTmFtZSBr
VW5pZm9ybXNCbG9ja05hbWUoIkFuZ2xlVW5pZm9ybXMiKTsKIGNvbnN0ZXhwciBOYW1lIGtVbmlm
b3Jtc1Zhck5hbWUoa1VuaWZvcm1zVmFyKTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRD
b29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOwot
Y29uc3RleHByIE5hbWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwg
U3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5hbWUga0ZsaXBwZWRQb2ludENv
b3JkTmFtZSgiZmxpcHBlZFBvaW50Q29vcmQiLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKK2NvbnN0
ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxpcHBlZEZyYWdDb29yZCIsIFN5bWJv
bFR5cGU6OkJ1aWx0SW4pOwogCiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJ
RE1ldGFsKAogICAgIEJ1aWx0SW5JZDo6Z2xfVmVydGV4SUQsCkBAIC04NzYsNyArODc2LDYgQEAg
c3RhdGljIHN0ZDo6c2V0PEltbXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5d29yZHMoKQogICAgIGtl
eXdvcmRzLmVtcGxhY2UoInNob3J0Iik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic2lnbmVkIik7
CiAgICAga2V5d29yZHMuZW1wbGFjZSgic2l6ZV90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgi
c2l6ZW9mIik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic3RhZ2VfaW4iKTsKICAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJzdGF0aWNfYXNzZXJ0Iik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGlj
X2Nhc3QiKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmNwcCBiL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9OYW1lLmNwcAppbmRleCAwN2M1ZDE4NWU2ZmFkMzc1NjllZmNiZDg1NWYyYWU0MDFlNjQzYzhh
Li45ZjQ0MmI3OWUzM2I3M2ViYmU3YWMwOGJiODZhZmQxYzAwNDNmNWM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvTmFtZS5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCkBAIC02OSwx
MSArNjksMTkgQEAgdm9pZCBOYW1lOjplbWl0KFRJbmZvU2lua0Jhc2UgJm91dCkgY29uc3QKICAg
ICBzd2l0Y2ggKG1TeW1ib2xUeXBlKQogICAgIHsKICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpC
dWlsdEluOgorICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQ6CiAgICAgICAgICAgICBBU1NF
UlQoIW1SYXdOYW1lLmVtcHR5KCkpOwotICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAg
ICAgICAgICAgaWYgKG1SYXdOYW1lICE9ICJtYWluIikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBvdXQgPDwga1VzZXJEZWZpbmVkTmFtZVByZWZpeCA8PCBtUmF3TmFtZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKLQog
ICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CiAgICAgICAgICAgICBBU1NF
UlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAgICAgICAgaWYgKG1SYXdOYW1lLmJlZ2luc1dp
dGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJv
bEVudi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAppbmRleCAyZmQwOTExNjUwMjQ0
ZDk0OGQxZDA0ODQwYjFiMzVmODA3YjhlN2QwLi5hNDFkMGRjMTViZGZlOWFjZTAwYTczOWI2OGIy
ZDZlMzc0OTVlNDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xh
dG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNwcApAQCAtMzkwLDEzICszOTAsMTIgQEAgY29uc3Qg
VFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRUZXh0dXJlRW52KFRCYXNpY1R5cGUgc2FtcGxlclR5
cGUpCiAgICAgaWYgKGVudiA9PSBudWxscHRyKQogICAgIHsKICAgICAgICAgYXV0byAqdGV4dHVy
ZVR5cGUgPSBuZXcgVFR5cGUoc2FtcGxlclR5cGUpOwotICAgICAgICBhdXRvICp0ZXh0dXJlICAg
ICA9IG5ldyBURmllbGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygidGV4dHVyZSIpLCBr
Tm9Tb3VyY2VMb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgYXV0byAqdGV4dHVyZSA9CisgICAgICAgICAgICBu
ZXcgVEZpZWxkKHRleHR1cmVUeXBlLCBJbW11dGFibGVTdHJpbmcoInRleHR1cmUiKSwga05vU291
cmNlTG9jLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKICAgICAgICAgbWFya0FzUG9pbnRlcigqdGV4
dHVyZSwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOwogCi0gICAgICAgIGF1dG8gKnNhbXBsZXIgPQot
ICAgICAgICAgICAgbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFs
c2UpLCBJbW11dGFibGVTdHJpbmcoInNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
a05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIGF1dG8gKnNh
bXBsZXIgPSBuZXcgVEZpZWxkKG5ldyBUVHlwZSgmZ2V0U2FtcGxlclN0cnVjdCgpLCBmYWxzZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltbXV0YWJsZVN0cmluZygic2Ft
cGxlciIpLCBrTm9Tb3VyY2VMb2MsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwogICAgICAgICBtYXJr
QXNQb2ludGVyKCpzYW1wbGVyLCBBZGRyZXNzU3BhY2U6OlRocmVhZCk7CiAKICAgICAgICAgc3Rk
OjpzdHJpbmcgZW52TmFtZTsKQEAgLTQxNSw3ICs0MTQsNyBAQCBjb25zdCBUU3RydWN0dXJlICZT
eW1ib2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QoKQogICAgIGlmICghbVNhbXBsZXIpCiAgICAgewog
ICAgICAgICBtU2FtcGxlciA9IG5ldyBUU3RydWN0dXJlKCZtU3ltYm9sVGFibGUsIEltbXV0YWJs
ZVN0cmluZygibWV0YWw6OnNhbXBsZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZExpc3QoKSwgU3ltYm9sVHlwZTo6
QnVpbHRJbik7CiAgICAgfQogICAgIHJldHVybiAqbVNhbXBsZXI7CiB9CkBAIC03MDEsNSArNzAw
LDUgQEAgTmFtZSBzaDo6R2V0VGV4dHVyZVR5cGVOYW1lKFRCYXNpY1R5cGUgc2FtcGxlclR5cGUp
CiAKICN1bmRlZiBIQU5ETEVfVEVYVFVSRV9OQU1FCiAKLSAgICByZXR1cm4gTmFtZShuYW1lLCBT
eW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgcmV0dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlw
ZTo6QnVpbHRJbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tIGIvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5n
X210bF91dGlscy5tbQppbmRleCA3OTEyODViYjQ1ZjllODYzNDgzYTQwZDhlNzAwOTU1NmNmMTBl
ZTUyLi40MjU5M2JiOWU4ODlmOGU1NWU0NTdhZmZmZTg0ODFjN2E3NzNjMTJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRs
X2dsc2xhbmdfbXRsX3V0aWxzLm1tCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KQEAgLTE3LDE1
ICsxNywxNSBAQCBuYW1lc3BhY2UKIHsKICAgICBjb25zdGV4cHIgY2hhciBrWGZiQmluZGluZ3NN
YXJrZXJbXSAgICA9ICJAQFhGQi1CaW5kaW5nc0BAIjsKICAgICBjb25zdGV4cHIgY2hhciBrWGZi
T3V0TWFya2VyW10gICAgID0gIkFOR0xFX0BAWEZCLU9VVEBAIjsKKyAgICBjb25zdGV4cHIgY2hh
ciBrVXNlckRlZmluZWROYW1lUHJlZml4W10gPSAiX3UiOyAgLy8gRGVmaW5lZCBpbiBHTFNMQU5H
L1NoYWRlckxhbmcuaAorICAgIHRlbXBsYXRlIDxzaXplX3QgTj4KKyAgICBjb25zdGV4cHIgc2l6
ZV90IENvbnN0U3RyTGVuKGNvbnN0IGNoYXIgKCYpW05dKQorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChOID4gMCwgIkMrKyBzaG91bGRuJ3QgYWxsb3cgTiB0byBiZSB6ZXJvIik7CiAKLXRl
bXBsYXRlIDxzaXplX3QgTj4KLWNvbnN0ZXhwciBzaXplX3QgQ29uc3RTdHJMZW4oY29uc3QgY2hh
ciAoJilbTl0pCi17Ci0gICAgc3RhdGljX2Fzc2VydChOID4gMCwgIkMrKyBzaG91bGRuJ3QgYWxs
b3cgTiB0byBiZSB6ZXJvIik7Ci0KLSAgICAvLyBUaGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGRlZmlu
ZWQgYXMgYSBjaGFyIGFycmF5IGlzIHRoZSBzaXplIG9mIHRoZSBhcnJheSBtaW51cyAxICh0aGUK
LSAgICAvLyB0ZXJtaW5hdGluZyAnXDAnKS4KLSAgICByZXR1cm4gTiAtIDE7CisgICAgICAgIC8v
IFRoZSBsZW5ndGggb2YgYSBzdHJpbmcgZGVmaW5lZCBhcyBhIGNoYXIgYXJyYXkgaXMgdGhlIHNp
emUgb2YgdGhlIGFycmF5IG1pbnVzIDEgKHRoZQorICAgICAgICAvLyB0ZXJtaW5hdGluZyAnXDAn
KS4KKyAgICAgICAgcmV0dXJuIE4gLSAxOwogfQogCiBzdGQ6OnN0cmluZyBHZXRYZmJCdWZmZXJO
YW1lTXRsKGNvbnN0IHVpbnQzMl90IGJ1ZmZlckluZGV4KQpAQCAtMjUzLDEyICsyNTMsMTUgQEAg
c3RkOjpzdHJpbmcgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdPdXRwdXQoY29uc3Qg
Z2w6OlRyYW5zZm9ybUZlZWRiYWNrVmEKICAgICAgICAgICAgIGZvciAoaW50IHJvdyA9IDA7IHJv
dyA8IGluZm8ucm93Q291bnQ7ICsrcm93KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
IHJlc3VsdCA8PCAiICAgICAgICAiOwotICAgICAgICAgICAgICAgIHJlc3VsdCA8PCAiQU5HTEVf
IiA8PCAieGZiQnVmZmVyIiA8PCBidWZmZXJJbmRleCA8PCAiWyIKLSAgICAgICAgICAgICAgICAg
ICAgICAgPDwgIkFOR0xFXyIgPDwgc3RkOjpzdHJpbmcoc2g6OmtVbmlmb3Jtc1Zhcik8PCAiLkFO
R0xFX3hmYkJ1ZmZlck9mZnNldHNbIiA8PCBidWZmZXJJbmRleAotICAgICAgICAgICAgICAgICAg
ICAgICA8PCAiXSArIChnbF9WZXJ0ZXhJRCArIEFOR0xFX2luc3RhbmNlSWRNb2QgKiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5nKHNoOjprVW5pZm9y
bXNWYXIpIDw8ICIuQU5HTEVfeGZiVmVydGljZXNQZXJEcmF3KSAqICIgPDwgc3RyaWRlCi0gICAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IG9mZnNldCA8PCAiXSA9ICIgPDwgImFzX3R5
cGU8ZmxvYXQ+IiA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFOR0xFX3ZlcnRl
eE91dC4iIDw8IHZhcnlpbmcubmFtZTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPDwgIkFOR0xF
XyIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgInhmYkJ1ZmZlciIgPDwgYnVmZmVySW5kZXgg
PDwgIlsiCisgICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5n
KHNoOjprVW5pZm9ybXNWYXIpIDw8ICIuQU5HTEVfeGZiQnVmZmVyT2Zmc2V0c1siCisgICAgICAg
ICAgICAgICAgICAgICAgIDw8IGJ1ZmZlckluZGV4IDw8ICJdICsgKGdsX1ZlcnRleElEICsgQU5H
TEVfaW5zdGFuY2VJZE1vZCAqICIKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFOR0xFXyIg
PDwgc3RkOjpzdHJpbmcoc2g6OmtVbmlmb3Jtc1ZhcikKKyAgICAgICAgICAgICAgICAgICAgICAg
PDwgIi5BTkdMRV94ZmJWZXJ0aWNlc1BlckRyYXcpICogIiA8PCBzdHJpZGUgPDwgIiArICIgPDwg
b2Zmc2V0IDw8ICJdID0gIgorICAgICAgICAgICAgICAgICAgICAgICA8PCAiYXNfdHlwZTxmbG9h
dD4iCisgICAgICAgICAgICAgICAgICAgICAgIDw8ICIoIgorICAgICAgICAgICAgICAgICAgICAg
ICA8PCAiQU5HTEVfdmVydGV4T3V0LiIgPDwga1VzZXJEZWZpbmVkTmFtZVByZWZpeCA8PCB2YXJ5
aW5nLm5hbWU7CiAKICAgICAgICAgICAgICAgICBpZiAodmFyeWluZy5pc0FycmF5KCkpCiAgICAg
ICAgICAgICAgICAgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDg5ZGQ2MzQ0NDczY2NmNzU5YmQyZWFmZjQ4MGU1YmVjMDU4
ZWIxNjYuLjVhMGM2MTliNzg3ODAwMWU3ODMyOTZlNDRjOWI3Y2JmNjExOTAwNTkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAyMS0wOS0xMyAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0b25A
YXBwbGUuY29tPgorCisgICAgICAgIFNoYWRlcnRveSAidHJ1Y2hldCBkaXN0cmljdCIgZmFpbHMg
dG8gY29tcGlsZSB3aXRoIGVycm9yOiBJbnRlcm5hbCBlcnJvciBjb21waWxpbmcgc2hhZGVyIHdp
dGggTWV0YWwgYmFja2VuZCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIyOTM3OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODIyOTkwNTM+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgdGVzdCB0
ZXN0aW5nIE1ldGFsIHJlc2VydmVkIHdvcmRzIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IG1hY3Jvcy4K
KworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13
aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJn
bC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jk
cy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdv
cmRzLTIuaHRtbDogQWRkZWQuCisKKwogMjAyMS0wOS0xMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxt
bWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gRHJhd2luZyB0aGUgcm91bmRl
ZCBzeXN0ZW0gdWkgZm9udCBpbnRvIGNhbnZhcyBjYXVzZXMgYSBjcmFzaApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdp
dGgtcmVzZXJ2ZWQtd29yZHMtMi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5k
aW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzg4NDcxYjBkMjZmNjU0Mzk3ZjgyYzg0NDlhM2YwZGQ3
NGM2MmY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSw1IEBACitUaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQg
YmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC4KKworVGVzdDogLi4v
Li4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLW1ldGFsLXJlc2VydmVkLXdvcmRzLmh0bWwKK1sgUEFTUyBdIEFsbCB0ZXN0cyBw
YXNzZWQKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5j
ZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2
ZWQtd29yZHMtMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIxZWMwZGNlYjIyNTAyNWNjZjY4YWQ1ZjRmNmZm
MTNiMDllY2U1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5n
L2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwK
QEAgLTAsMCArMSwxOCBAQAorPCEtLSBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgYnkgVG9v
bHMvU2NyaXB0cy91cGRhdGUtd2ViZ2wtY29uZm9ybWFuY2UtdGVzdHMuIERPIE5PVCBFRElUIC0t
PgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgi
PgorPHRpdGxlPldlYkdMIENvbmZvcm1hbmNlIFRlc3QgV3JhcHBlciBmb3Igc2hhZGVyLXdpdGgt
cmVzZXJ2ZWQtd29yZHMtMi5odG1sPC90aXRsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0IiBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvd2Vi
a2l0LXdlYmdsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxw
PlRoaXMgdGVzdCBydW5zIHRoZSBXZWJHTCBUZXN0IGxpc3RlZCBiZWxvdyBpbiBhbiBpZnJhbWUg
YW5kIHJlcG9ydHMgUEFTUyBvciBGQUlMLjwvcD4KK1Rlc3Q6IDxhIGhyZWY9Ii4uLy4uLy4uL3Jl
c291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0
aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIiPi4uLy4uLy4uL3Jlc291cmNl
cy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNl
cnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTI8L2E+Cis8ZGl2IGlkPSJpZnJhbWUiPgor
PGlmcmFtZSBzcmM9Ii4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJz
aW9uPTIiIHdpZHRoPSI4MDAiIGhlaWdodD0iNjAwIj48L2lmcmFtZT4KKzwvZGl2PgorPGRpdiBp
ZD0icmVzdWx0Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
Z2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xz
bC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZThk
NmMxMTc2MGY2ZGY4OTQwZWI3Y2RiNDY3ZTA4MTQ2ZmQ0ZDFmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sCkBAIC0w
LDAgKzEsMjY3IEBACis8IS0tCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEtocm9u
b3MgR3JvdXAgSW5jLgorKioKKyoqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg
b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisqKiBjb3B5IG9mIHRoaXMgc29m
dHdhcmUgYW5kL29yIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisqKiAiTWF0
ZXJpYWxzIiksIHRvIGRlYWwgaW4gdGhlIE1hdGVyaWFscyB3aXRob3V0IHJlc3RyaWN0aW9uLCBp
bmNsdWRpbmcKKyoqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyoqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9v
ciBzZWxsIGNvcGllcyBvZiB0aGUgTWF0ZXJpYWxzLCBhbmQgdG8KKyoqIHBlcm1pdCBwZXJzb25z
IHRvIHdob20gdGhlIE1hdGVyaWFscyBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv
CisqKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisqKgorKiogVGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyoq
IGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIE1hdGVyaWFscy4K
KyoqCisqKiBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB
TlRZIE9GIEFOWSBLSU5ELAorKiogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P
VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisqKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisqKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWQorKiogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElO
IEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyoqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS
T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisqKiBNQVRFUklBTFMgT1IgVEhF
IFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgTUFURVJJQUxTLgorKi8KKworLS0+CisKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKzx0
aXRsZT5XZWJHTCBHTFNMIENvbmZvcm1hbmNlIFRlc3RzIC0gTm9uIFJlc2VydmVkIFdvcmRzPC90
aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIi8+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4u
L3Jlc291cmNlcy9nbHNsLWZlYXR1cmUtdGVzdHMuY3NzIi8+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pz
L3dlYmdsLXRlc3QtdXRpbHMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQg
aWQ9InZlcnRleFNoYWRlcjAiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4K
K3N0cnVjdCAkcmVwbGFjZU1lIHsKKyAgdmVjNCAkcmVwbGFjZU1lOworfTsKK3N0cnVjdCBGb28g
eworICAkcmVwbGFjZU1lICRyZXBsYWNlTWU7Cit9OworYXR0cmlidXRlIHZlYzQgcG9zaXRpb247
Cit2b2lkIG1haW4oKQoreworICAgIEZvbyBmOworICAgIGYuJHJlcGxhY2VNZS4kcmVwbGFjZU1l
ID0gcG9zaXRpb247CisgICAgZ2xfUG9zaXRpb24gPSBmLiRyZXBsYWNlTWUuJHJlcGxhY2VNZTsK
K30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIwIiB0eXBlPSJ0ZXh0L3Nv
bWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZlYzQg
JHJlcGxhY2VNZSgpIHsKKyAgICByZXR1cm4gdmVjNCgwLDEsMCwxKTsKK30KK3ZvaWQgbWFpbigp
Cit7CisgICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZSgpOworfQorPC9zY3JpcHQ+Cis8c2Ny
aXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlw
dCI+CithdHRyaWJ1dGUgdmVjNCAkcmVwbGFjZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Q
b3NpdGlvbiA9ICRyZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50
U2hhZGVyMSIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Cit2ZWM0IGZvbyh2ZWM0ICRyZXBsYWNlTWUpIHsKKyAgcmV0dXJuICRy
ZXBsYWNlTWU7Cit9Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IGZvbyh2ZWM0
KDEsMCwxLDEpKTsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMiIgdHlw
ZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgordmFyeWluZyB2ZWM0ICRyZXBsYWNl
TWU7CithdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9z
aXRpb24gPSBwb3NpdGlvbjsKKyAgICAkcmVwbGFjZU1lID0gcG9zaXRpb247Cit9Cis8L3Njcmlw
dD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyMiIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90
LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit2YXJ5aW5nIHZlYzQgJHJl
cGxhY2VNZTsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZTsK
K30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMyIgdHlwZT0idGV4dC9zb21l
dGhpbmctbm90LWphdmFzY3JpcHQiPgorYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Cit2b2lkIG1h
aW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKzxzY3Jp
cHQgaWQ9ImZyYWdtZW50U2hhZGVyMyIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3Jp
cHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cit1bmlmb3JtIHZlYzQgJHJlcGxhY2VNZTsK
K3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0gJHJlcGxhY2VNZTsKK30KKzwvc2Ny
aXB0PgorPHNjcmlwdD4KKyJ1c2Ugc3RyaWN0IjsKKwordmFyIE1ldGFsV29yZHMgPSBbCisgICJh
bGlnbmFzIiwKKyAgImFsaWdub2YiLAorICAiYXNfdHlwZSIsCisgICJhbmQiLAorICAiYXV0byIs
CisgICJjYXRjaCIsCisgICJjaGFyIiwKKyAgImNvbnN0X2Nhc3QiLAorICAiY29uc3RhbnQiLAor
ICAiY29uc3RleHByIiwKKyAgImRlY2x0eXBlIiwKKyAgImRlbGV0ZSIsCisgICJkZXZpY2UiLAor
ICAiZHluYW1pY19jYXN0IiwKKyAgImV4cGxpY2l0IiwKKyAgImV4cG9ydCIsCisgICJmcmFnbWVu
dCIsCisgICJmcmllbmQiLAorICAiaW50MTZfdCIsCisgICJpbnQzMl90IiwKKyAgImludDY0X3Qi
LAorICAiaW50OF90IiwKKyAgImtlcm5lbCIsCisgICJtYWluMCIsCisgICJtZXRhbCIsCisgICJt
dXRhYmxlIiwKKyAgIm5ldyIsCisgICJub2V4Y2VwdCIsCisgICJudWxscHRyX3QiLAorICAibnVs
bHB0ciIsCisgICJvcGVyYXRvciIsCisgICJvdmVycmlkZSIsCisgICJvciIsCisgICJwcml2YXRl
IiwKKyAgInByb3RlY3RlZCIsCisgICJwdHJkaWZmX3QiLAorICAicmF5X2RhdGEiLAorICAicmVn
aXN0ZXIiLAorICAic2lnbmVkIiwKKyAgInNpemVfdCIsCisgICJzdGFnZV9pbiIsCisgICJzdGF0
aWNfYXNzZXJ0IiwKKyAgInN0YXRpY19jYXN0IiwKKyAgInRocmVhZF9sb2NhbCIsCisgICJ0aHJl
YWQiLAorICAidGhyZWFkZ3JvdXBfaW1hZ2VibG9jayIsCisgICJ0aHJlYWRncm91cCIsCisgICJ0
aHJvdyIsCisgICJ0cnkiLAorICAidHlwZWlkIiwKKyAgInR5cGVuYW1lIiwKKyAgInVjaGFyIiwK
KyAgInVpbnQxNl90IiwKKyAgInVpbnQzMl90IiwKKyAgInVpbnQ2NF90IiwKKyAgInVpbnQ4X3Qi
LAorICAidXNob3J0IiwKKyAgInZlcnRleCIsCisgICJ2aXJ0dWFsIiwKKyAgIndjaGFyX3QiLAor
ICAieG9yIiwKKyAgIk5BTiIsCisgICJJTkZJTklUWSIsCisgICJQcmFnbWEiLAorICAiX1ByYWdt
YSIsCisgICJBTkdMRV8xIiwKKyAgIklOVF9NQVgiLAorICAiX19hdHRyaWJ1dGVfXyIsCisgICJf
X2ZpbGVfXyIsCisgICJfX1BSRVRUWV9GVU5DVElPTl9fIgorXTsKKworCitkZXNjcmlwdGlvbigp
OworCit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250
ZXh0KCk7CisKK3ZhciBiYWRXb3JkcyA9IFsKKyAgeyB3b3JkczogIE1ldGFsV29yZHMgfQorXTsK
KworCisKK3ZhciBjaGVja2VkV29yZHMgPSB7fTsKKwordmFyIHNyYyA9IFtdOworZm9yICh2YXIg
aWkgPSAwOyBpaSA8IDQ7ICsraWkpIHsKKyAgdmFyIHZzcmMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgidmVydGV4U2hhZGVyIiArIGlpKS50ZXh0OworICB2YXIgZnNyYyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJmcmFnbWVudFNoYWRlciIgKyBpaSkudGV4dDsKKyAgc3JjLnB1c2goe3Zz
cmM6IHZzcmMsIGZzcmM6IGZzcmN9KTsKK30KKwordmFyIGJhZFdvcmROZHggPSAwOwordmFyIGxp
c3ROZHggPSAwOworCitmdW5jdGlvbiB0ZXN0TmV4dFdvcmQoKSB7CisgIHZhciBsaXN0ID0gYmFk
V29yZHNbYmFkV29yZE5keF0ud29yZHM7CisgIGlmIChsaXN0TmR4ID49IGxpc3QubGVuZ3RoKSB7
CisgICAgKytiYWRXb3JkTmR4OworICAgIGlmIChiYWRXb3JkTmR4ID49IGJhZFdvcmRzLmxlbmd0
aCkgeworICAgICAgZmluaXNoVGVzdCgpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBsaXN0
TmR4ID0gMDsKKyAgICBsaXN0ID0gYmFkV29yZHNbYmFkV29yZE5keF0ud29yZHM7CisgIH0KKyAg
dGVzdFdvcmQobGlzdFtsaXN0TmR4XSk7CisgICsrbGlzdE5keDsKKyAgc2V0VGltZW91dCh0ZXN0
TmV4dFdvcmQsIDApOworfQordGVzdE5leHRXb3JkKCk7CisKK2Z1bmN0aW9uIHRlc3RXb3JkKHdv
cmQpIHsKKyAgaWYgKHdvcmQgaW4gY2hlY2tlZFdvcmRzKSB7CisgICAgcmV0dXJuOworICB9Cisg
IGNoZWNrZWRXb3Jkc1t3b3JkXSA9IHRydWU7CisgIGRlYnVnKCIiKTsKKyAgZGVidWcoInRlc3Rp
bmc6ICIgKyB3b3JkKTsKKworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgc3JjLmxlbmd0aDsgKytp
aSkgeworICAgIHZhciB2cyA9IHNyY1tpaV0udnNyYy5yZXBsYWNlKC9cJHJlcGxhY2VNZS9nLCB3
b3JkKTsKKyAgICB2YXIgZnMgPSBzcmNbaWldLmZzcmMucmVwbGFjZSgvXCRyZXBsYWNlTWUvZywg
d29yZCk7CisKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgdmFyIHByb2dyYW0gPSB3dHUu
bG9hZFByb2dyYW0oZ2wsIHZzLCBmcywgZnVuY3Rpb24obXNnKSB7CisgICAgICBkZWJ1Zyhtc2cp
OworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0sIHRydWUpOworICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICB0ZXN0UGFzc2VkKCJzaGFkZXIgd2l0aDogJyIgKyB3b3JkICsgIicgY29tcGls
ZWQiKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgic2hhZGVyIHdpdGg6ICciICsg
d29yZCArICInIGZhaWxlZCB0byBjb21waWxlIik7CisgICAgfQorICAgIGlmIChwcm9ncmFtKSB7
CisgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgIH0KKyAgICB3dHUuZ2xFcnJv
clNob3VsZEJlKGdsLCBnbC5OT19FUlJPUiwgInNob3VsZCBiZSBubyBHTCBlcnJvcnMiKTsKKyAg
fQorfQorCisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CisKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9y
ZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNz
cyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
cmVzb3VyY2VzL2dsc2wtZmVhdHVyZS10ZXN0cy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzgwNjNkOTJiMmE1
OTFkZjM3OTQwOTQ0Y2UwM2YzOWZlZWY4ZGM1MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2ds
c2wtZmVhdHVyZS10ZXN0cy5jc3MKQEAgLTAsMCArMSwyOSBAQAorY2FudmFzIHsKKyAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7CisgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCgw
LCByZ2JhKDIwMCwgMjAwLCAyMDAsIC41KSA1MCUsIHRyYW5zcGFyZW50IDUwJSksIGxpbmVhci1n
cmFkaWVudChyZ2JhKDIwMCwgMjAwLCAyMDAsIC41KSA1MCUsIHRyYW5zcGFyZW50IDUwJSk7Cisg
IGJhY2tncm91bmQtc2l6ZTogOHB4IDhweDsKK30KKworLnNoYWRlci1zb3VyY2UgeworICBib3Jk
ZXI6IDFweCBkYXNoZWQgYmxhY2s7CisgIHBhZGRpbmc6IDFlbTsKK30KKworLnNoYWRlci1zb3Vy
Y2UgbGk6bnRoLWNoaWxkKG9kZCkgeyBiYWNrZ3JvdW5kOiAjZjhmOGY4OyB9Cisuc2hhZGVyLXNv
dXJjZSBsaTpudGgtY2hpbGQoZXZlbikgeyBiYWNrZ3JvdW5kOiAjZjBmMGYwOyB9CisKKy50ZXN0
aW1hZ2VzIHsKK30KKworLnRlc3RpbWFnZXMgYnIgeworICBjbGVhcjogYm90aDsKK30KKworLnRl
c3RpbWFnZXMgPiBkaXYgeworICBmbG9hdDogbGVmdDsKKyAgbWFyZ2luOiAxZW07Cit9CisKK0lN
RyB7CisgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439225</attachid>
            <date>2021-09-24 18:30:09 -0700</date>
            <delta_ts>2021-10-04 17:43:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20210924183008.patch</filename>
            <type>text/plain</type>
            <size>16839</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMDcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggOTBmNjdhYmZjM2Q1NDJlNTUwMzY5OWQzMmRiOTlhMjEwNmNjZTM3MC4uNzljNjQ5YmQ5MGZm
ZmYxODY1M2MzMzAwOGM1NmI5MGRkMDdjMmI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA5LTI0ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjI5OTA1Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgQ2hhbmdl
IFRyYW5zbGF0b3JNZXRhbERpcmVjdCB0byBwcmVmaXggJ191JyB0byBhbGwgdXNlciBkZWZpbmVk
IHZhcmlhYmxlcy4KKyAgICAgICAgQ2xlYW4gdXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQg
QU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVpbmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3Rl
ZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOgorICAgICAgICAoc2g6OkdldE1zbEtl
eXdvcmRzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTmFtZS5jcHA6CisgICAgICAgIChOYW1lOjplbWl0IGNvbnN0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmNwcDoKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0VGV4dHVyZUVudik6CisgICAgICAgIChTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QpOgorICAgICAgICAoc2g6OkdldFRleHR1cmVUeXBlTmFt
ZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6OkdlbmVyYXRlVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nT3V0cHV0KToKKwogMjAyMS0wOS0yMyAgS3lsZSBQaWRkaW5ndG9uICA8a3BpZGRpbmd0
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHTDIsIFNhZmFyaSAxNSAtIGlPUzE1XSBQcm9i
bGVtcyB3aXRoIGRyYXdFbGVtZW50cyBpbiBzb21lIGNvbmRpdGlvbnMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCmluZGV4IDJkODYyMjJiYjNkODlhNTVk
YzNmMjI3MDVmYWRjZjgwZTMyOGI5MDYuLjEwMDcxYjE3NGIwYzM1M2YyZTIzODdkZTQ2OTE4ZjZj
OGFlODM2MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0
LmNwcApAQCAtNTgsOCArNTgsOCBAQCBuYW1lc3BhY2Ugc2gKIG5hbWVzcGFjZQogewogCi1jb25z
dGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmllbGQoImNvdmVyYWdlTWFzayIsIFN5bWJvbFR5cGU6
OlVzZXJEZWZpbmVkKTsKLWNvbnN0ZXhwciBOYW1lIGtFbXVJbnN0YW5jZUlERmllbGQoImVtdWxh
dGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1l
IGtDb3ZlcmFnZU1hc2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlwZTo6QW5nbGVJbnRl
cm5hbCk7Citjb25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxkKCJlbXVsYXRlZEluc3Rh
bmNlSUQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKIGNvbnN0ZXhwciBOYW1lIGtTYW1w
bGVNYXNrV3JpdGVGdW5jTmFtZSgid3JpdGVTYW1wbGVNYXNrIiwgU3ltYm9sVHlwZTo6QW5nbGVJ
bnRlcm5hbCk7CiAjaWYgMAogY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUo
IkRpc2NhcmRXcmFwcGVyIik7CkBAIC02Nyw4ICs2Nyw4IEBAIGNvbnN0ZXhwciBOYW1lIGtEaXNj
YXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBlciIpOwogY29uc3RleHByIE5hbWUga0Vt
dWxhdGVkRGVwdGhSYW5nZVBhcmFtcygiRGVwdGhSYW5nZVBhcmFtcyIpOwogY29uc3RleHByIE5h
bWUga1VuaWZvcm1zQmxvY2tOYW1lKCJBbmdsZVVuaWZvcm1zIik7CiBjb25zdGV4cHIgTmFtZSBr
VW5pZm9ybXNWYXJOYW1lKGtVbmlmb3Jtc1Zhcik7Ci1jb25zdGV4cHIgTmFtZSBrRmxpcHBlZFBv
aW50Q29vcmROYW1lKCJmbGlwcGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVk
KTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxpcHBlZEZyYWdDb29y
ZCIsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKK2NvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9p
bnRDb29yZE5hbWUoImZsaXBwZWRQb2ludENvb3JkIiwgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5h
bCk7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRGcmFnQ29v
cmQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKIAogY29uc3RleHByIGNvbnN0IFRWYXJp
YWJsZSBrZ2xfVmVydGV4SURNZXRhbCgKICAgICBCdWlsdEluSWQ6OmdsX1ZlcnRleElELApAQCAt
ODc2LDcgKzg3Niw2IEBAIHN0YXRpYyBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+IEdldE1zbEtl
eXdvcmRzKCkKICAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaG9ydCIpOwogICAgIGtleXdvcmRzLmVt
cGxhY2UoInNpZ25lZCIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInNpemVfdCIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoInNpemVvZiIpOwogICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YWdlX2lu
Iik7CiAgICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fzc2VydCIpOwogICAgIGtleXdvcmRz
LmVtcGxhY2UoInN0YXRpY19jYXN0Iik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5j
cHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKaW5kZXggMDdjNWQxODVlNmZhZDM3NTY5ZWZjYmQ4
NTVmMmFlNDAxZTY0M2M4YS4uOWY0NDJiNzllMzNiNzNlYmJlN2FjMDhiYjg2YWZkMWMwMDQzZjVj
NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9O
YW1lLmNwcApAQCAtNjksMTEgKzY5LDE5IEBAIHZvaWQgTmFtZTo6ZW1pdChUSW5mb1NpbmtCYXNl
ICZvdXQpIGNvbnN0CiAgICAgc3dpdGNoIChtU3ltYm9sVHlwZSkKICAgICB7CiAgICAgICAgIGNh
c2UgU3ltYm9sVHlwZTo6QnVpbHRJbjoKKyAgICAgICAgICAgIG91dCA8PCBtUmF3TmFtZTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkOgog
ICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKLSAgICAgICAgICAgIG91dCA8
PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIGlmIChtUmF3TmFtZSAhPSAibWFpbiIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgb3V0IDw8IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggPDwg
bVJhd05hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgb3V0IDw8IG1SYXdOYW1lOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7Ci0KICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsOgog
ICAgICAgICAgICAgQVNTRVJUKCFtUmF3TmFtZS5lbXB0eSgpKTsKICAgICAgICAgICAgIGlmICht
UmF3TmFtZS5iZWdpbnNXaXRoKGtBbmdsZUludGVybmFsUHJlZml4KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKaW5k
ZXggMmZkMDkxMTY1MDI0NGQ5NDhkMWQwNDg0MGIxYjM1ZjgwN2I4ZTdkMC4uYTQxZDBkYzE1YmRm
ZTlhY2UwMGE3MzliNjhiMmQ2ZTM3NDk1ZTQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5
bWJvbEVudi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKQEAgLTM5MCwxMyAr
MzkwLDEyIEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0VGV4dHVyZUVudihUQmFz
aWNUeXBlIHNhbXBsZXJUeXBlKQogICAgIGlmIChlbnYgPT0gbnVsbHB0cikKICAgICB7CiAgICAg
ICAgIGF1dG8gKnRleHR1cmVUeXBlID0gbmV3IFRUeXBlKHNhbXBsZXJUeXBlKTsKLSAgICAgICAg
YXV0byAqdGV4dHVyZSAgICAgPSBuZXcgVEZpZWxkKHRleHR1cmVUeXBlLCBJbW11dGFibGVTdHJp
bmcoInRleHR1cmUiKSwga05vU291cmNlTG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIGF1dG8gKnRleHR1cmUg
PQorICAgICAgICAgICAgbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0
ZXh0dXJlIiksIGtOb1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1h
cmtBc1BvaW50ZXIoKnRleHR1cmUsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAotICAgICAgICBh
dXRvICpzYW1wbGVyID0KLSAgICAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1w
bGVyU3RydWN0KCksIGZhbHNlKSwgSW1tdXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGtOb1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOwor
ICAgICAgICBhdXRvICpzYW1wbGVyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJT
dHJ1Y3QoKSwgZmFsc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11
dGFibGVTdHJpbmcoInNhbXBsZXIiKSwga05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpCdWlsdElu
KTsKICAgICAgICAgbWFya0FzUG9pbnRlcigqc2FtcGxlciwgQWRkcmVzc1NwYWNlOjpUaHJlYWQp
OwogCiAgICAgICAgIHN0ZDo6c3RyaW5nIGVudk5hbWU7CkBAIC00MTUsNyArNDE0LDcgQEAgY29u
c3QgVFN0cnVjdHVyZSAmU3ltYm9sRW52OjpnZXRTYW1wbGVyU3RydWN0KCkKICAgICBpZiAoIW1T
YW1wbGVyKQogICAgIHsKICAgICAgICAgbVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJv
bFRhYmxlLCBJbW11dGFibGVTdHJpbmcoIm1ldGFsOjpzYW1wbGVyIiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV3IFRGaWVsZExpc3QoKSwgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGRMaXN0
KCksIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwogICAgIH0KICAgICByZXR1cm4gKm1TYW1wbGVyOwog
fQpAQCAtNzAxLDUgKzcwMCw1IEBAIE5hbWUgc2g6OkdldFRleHR1cmVUeXBlTmFtZShUQmFzaWNU
eXBlIHNhbXBsZXJUeXBlKQogCiAjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFNRQogCi0gICAgcmV0
dXJuIE5hbWUobmFtZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgIHJldHVybiBOYW1l
KG5hbWUsIFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91
dGlscy5tbSBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9t
ZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0KaW5kZXggNzkxMjg1YmI0NWY5ZTg2MzQ4M2E0
MGQ4ZTcwMDk1NTZjZjEwZWU1Mi4uOGIwODJhYjRhOTFhZDkyM2Q1NmIzMzU1MDBjMDE3Y2FiMmY1
MjliNiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3Jl
bmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0
aWxzLm1tCkBAIC0xNywxNSArMTcsMTUgQEAgbmFtZXNwYWNlCiB7CiAgICAgY29uc3RleHByIGNo
YXIga1hmYkJpbmRpbmdzTWFya2VyW10gICAgPSAiQEBYRkItQmluZGluZ3NAQCI7CiAgICAgY29u
c3RleHByIGNoYXIga1hmYk91dE1hcmtlcltdICAgICA9ICJBTkdMRV9AQFhGQi1PVVRAQCI7Cisg
ICAgY29uc3RleHByIGNoYXIga1VzZXJEZWZpbmVkTmFtZVByZWZpeFtdID0gIl91IjsgIC8vIERl
ZmluZWQgaW4gR0xTTEFORy9TaGFkZXJMYW5nLmgKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IE4+Cisg
ICAgY29uc3RleHByIHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtOXSkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoTiA+IDAsICJDKysgc2hvdWxkbid0IGFsbG93IE4gdG8g
YmUgemVybyIpOwogCi10ZW1wbGF0ZSA8c2l6ZV90IE4+Ci1jb25zdGV4cHIgc2l6ZV90IENvbnN0
U3RyTGVuKGNvbnN0IGNoYXIgKCYpW05dKQotewotICAgIHN0YXRpY19hc3NlcnQoTiA+IDAsICJD
Kysgc2hvdWxkbid0IGFsbG93IE4gdG8gYmUgemVybyIpOwotCi0gICAgLy8gVGhlIGxlbmd0aCBv
ZiBhIHN0cmluZyBkZWZpbmVkIGFzIGEgY2hhciBhcnJheSBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJy
YXkgbWludXMgMSAodGhlCi0gICAgLy8gdGVybWluYXRpbmcgJ1wwJykuCi0gICAgcmV0dXJuIE4g
LSAxOworICAgICAgICAvLyBUaGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGRlZmluZWQgYXMgYSBjaGFy
IGFycmF5IGlzIHRoZSBzaXplIG9mIHRoZSBhcnJheSBtaW51cyAxCisgICAgICAgIC8vICggdGVy
bWluYXRpbmcgJ1wwJykuCisgICAgICAgIHJldHVybiBOIC0gMTsKIH0KIAogc3RkOjpzdHJpbmcg
R2V0WGZiQnVmZmVyTmFtZU10bChjb25zdCB1aW50MzJfdCBidWZmZXJJbmRleCkKQEAgLTI1OCw3
ICsyNTgsNyBAQCBzdGQ6OnN0cmluZyBHZW5lcmF0ZVRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ091
dHB1dChjb25zdCBnbDo6VHJhbnNmb3JtRmVlZGJhY2tWYQogICAgICAgICAgICAgICAgICAgICAg
ICA8PCAiXSArIChnbF9WZXJ0ZXhJRCArIEFOR0xFX2luc3RhbmNlSWRNb2QgKiAiCiAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICJBTkdMRV8iIDw8IHN0ZDo6c3RyaW5nKHNoOjprVW5pZm9ybXNW
YXIpIDw8ICIuQU5HTEVfeGZiVmVydGljZXNQZXJEcmF3KSAqICIgPDwgc3RyaWRlCiAgICAgICAg
ICAgICAgICAgICAgICAgIDw8ICIgKyAiIDw8IG9mZnNldCA8PCAiXSA9ICIgPDwgImFzX3R5cGU8
ZmxvYXQ+IiA8PCAiKCIKLSAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFOR0xFX3ZlcnRleE91
dC4iIDw8IHZhcnlpbmcubmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgPDwgIkFOR0xFX3Zl
cnRleE91dC4iIDw8IGtVc2VyRGVmaW5lZE5hbWVQcmVmaXggPDwgdmFyeWluZy5uYW1lOwogCiAg
ICAgICAgICAgICAgICAgaWYgKHZhcnlpbmcuaXNBcnJheSgpKQogICAgICAgICAgICAgICAgIHsK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmOTAyZjdlMTdlOGZkMjhkYWY0MmNkZWI4ZjJhNzk0ZjliZDgyODk0Li40ZjJkYWU0
ODNmZmE4ZGQzZGFhYjc0OTBiMTJjMzBhNGM4MDc2MTUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMjEtMDktMjQgIEt5bGUgUGlkZGluZ3RvbiAgPGtwaWRkaW5ndG9uQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTaGFkZXJ0b3kgInRydWNoZXQgZGlzdHJpY3QiIGZhaWxzIHRvIGNvbXBpbGUgd2l0
aCBlcnJvcjogSW50ZXJuYWwgZXJyb3IgY29tcGlsaW5nIHNoYWRlciB3aXRoIE1ldGFsIGJhY2tl
bmQiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjkz
NzgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzgyMjk5MDUzPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEtlbm5ldGggUnVzc2VsbC4KKworICAgICAgICBBZGQgYSB0ZXN0IHRlc3RpbmcgTWV0YWwg
cmVzZXJ2ZWQgd29yZHMgYW5kIHN0YW5kYXJkIGxpYnJhcnkgbWFjcm9zLgorCisgICAgICAgICog
d2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQt
d29yZHMtMi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29u
Zm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbDogQWRk
ZWQuCisgICAgICAgICogd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9j
b25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sOiBB
ZGRlZC4KKworCiAyMDIxLTA5LTI0ICBFcmljIEh1dGNoaXNvbiAgPGVodXRjaGlzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIFsgQ2F0YWxpbmEgQmlnU3VyIERlYnVnIF0gZmFzdC93b3JrZXJzL3Vz
ZS1tYWNoaW5lLXN0YWNrLmh0bWwgaXMgYSBmbGFreSBjcmFzaC4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJl
c2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9j
b25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjRhYWY1Y2IwZTkyOGIzMmY2ZjQ5YTE4M2ZkMjFjYmYxMWJmZjVk
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFu
Y2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93
IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuCisKK1Rlc3Q6IC4uLy4uLy4u
L3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXIt
d2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIKK1sgUEFTUyBdIEFsbCB0
ZXN0cyBwYXNzZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9y
bWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbCBiL0xheW91
dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJl
c2VydmVkLXdvcmRzLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWVjMGRjZWIyMjUwMjVjY2Y2OGFkNWY0
ZjZmZjEzYjA5ZWNlNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcGVu
ZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5o
dG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhLS0gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmdsLWNvbmZvcm1hbmNlLXRlc3RzLiBETyBOT1QgRURJ
VCAtLT4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4KKzx0aXRsZT5XZWJHTCBDb25mb3JtYW5jZSBUZXN0IFdyYXBwZXIgZm9yIHNoYWRlci13
aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbDwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcmVzb3VyY2Vz
L3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZy
YW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+CitUZXN0OiA8YSBocmVmPSIuLi8uLi8u
Li9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVy
LXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yIj4uLi8uLi8uLi9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgt
cmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yPC9hPgorPGRpdiBpZD0iaWZyYW1l
Ij4KKzxpZnJhbWUgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmds
VmVyc2lvbj0yIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+Cis8L2Rpdj4KKzxk
aXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1h
bmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNl
L2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzRhMDA3ODZjZjg2NjUzOTRmMDIzMTQ0OTM3OTFmYzU1NjUwYzIxOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbApA
QCAtMCwwICsxLDI0MyBAQAorPCEtLQorQ29weXJpZ2h0IChjKSAyMDIxIFRoZSBLaHJvbm9zIEdy
b3VwIEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4K
Ky0tPgorCis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+Cis8dGl0bGU+V2ViR0wgR0xTTCBDb25mb3JtYW5jZSBUZXN0cyAtIE5vbiBSZXNlcnZl
ZCBXb3JkczwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi8uLi9yZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNzcyIvPgorPHNjcmlwdCBz
cmM9Ii4uLy4uLy4uL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIwIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2
YXNjcmlwdCI+CitzdHJ1Y3QgJHJlcGxhY2VNZSB7CisgIHZlYzQgJHJlcGxhY2VNZTsKK307Citz
dHJ1Y3QgRm9vIHsKKyAgJHJlcGxhY2VNZSAkcmVwbGFjZU1lOworfTsKK2F0dHJpYnV0ZSB2ZWM0
IHBvc2l0aW9uOwordm9pZCBtYWluKCkKK3sKKyAgICBGb28gZjsKKyAgICBmLiRyZXBsYWNlTWUu
JHJlcGxhY2VNZSA9IHBvc2l0aW9uOworICAgIGdsX1Bvc2l0aW9uID0gZi4kcmVwbGFjZU1lLiRy
ZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hhZGVyMCIgdHlw
ZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7Cit2ZWM0ICRyZXBsYWNlTWUoKSB7CisgICAgcmV0dXJuIHZlYzQoMCwxLDAsMSk7Cit9Cit2
b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9ICRyZXBsYWNlTWUoKTsKK30KKzwvc2Ny
aXB0PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMSIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90
LWphdmFzY3JpcHQiPgorYXR0cmlidXRlIHZlYzQgJHJlcGxhY2VNZTsKK3ZvaWQgbWFpbigpCit7
CisgICAgZ2xfUG9zaXRpb24gPSAkcmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlk
PSJmcmFnbWVudFNoYWRlcjEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4K
K3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordmVjNCBmb28odmVjNCAkcmVwbGFjZU1lKSB7Cisg
IHJldHVybiAkcmVwbGFjZU1lOworfQordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3Ig
PSBmb28odmVjNCgxLDAsMSwxKSk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZlcnRleFNo
YWRlcjIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ZhcnlpbmcgdmVj
NCAkcmVwbGFjZU1lOworYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Cit2b2lkIG1haW4oKQorewor
ICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgJHJlcGxhY2VNZSA9IHBvc2l0aW9uOwor
fQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjIiIHR5cGU9InRleHQvc29t
ZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordmFyeWlu
ZyB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9ICRy
ZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZlcnRleFNoYWRlcjMiIHR5cGU9
InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9u
Owordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uOworfQorPC9zY3Jp
cHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjMiIHR5cGU9InRleHQvc29tZXRoaW5nLW5v
dC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordW5pZm9ybSB2ZWM0ICRy
ZXBsYWNlTWU7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9ICRyZXBsYWNlTWU7
Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBNZXRhbFdvcmRz
ID0gWworICAiYWxpZ25hcyIsCisgICJhbGlnbm9mIiwKKyAgImFzX3R5cGUiLAorICAiYW5kIiwK
KyAgImF1dG8iLAorICAiY2F0Y2giLAorICAiY2hhciIsCisgICJjb25zdF9jYXN0IiwKKyAgImNv
bnN0YW50IiwKKyAgImNvbnN0ZXhwciIsCisgICJkZWNsdHlwZSIsCisgICJkZWxldGUiLAorICAi
ZGV2aWNlIiwKKyAgImR5bmFtaWNfY2FzdCIsCisgICJleHBsaWNpdCIsCisgICJleHBvcnQiLAor
ICAiZnJhZ21lbnQiLAorICAiZnJpZW5kIiwKKyAgImludDE2X3QiLAorICAiaW50MzJfdCIsCisg
ICJpbnQ2NF90IiwKKyAgImludDhfdCIsCisgICJrZXJuZWwiLAorICAibWFpbjAiLAorICAibWV0
YWwiLAorICAibXV0YWJsZSIsCisgICJuZXciLAorICAibm9leGNlcHQiLAorICAibnVsbHB0cl90
IiwKKyAgIm51bGxwdHIiLAorICAib3BlcmF0b3IiLAorICAib3ZlcnJpZGUiLAorICAib3IiLAor
ICAicHJpdmF0ZSIsCisgICJwcm90ZWN0ZWQiLAorICAicHRyZGlmZl90IiwKKyAgInJheV9kYXRh
IiwKKyAgInJlZ2lzdGVyIiwKKyAgInNpZ25lZCIsCisgICJzaXplX3QiLAorICAic3RhZ2VfaW4i
LAorICAic3RhdGljX2Fzc2VydCIsCisgICJzdGF0aWNfY2FzdCIsCisgICJ0aHJlYWRfbG9jYWwi
LAorICAidGhyZWFkIiwKKyAgInRocmVhZGdyb3VwX2ltYWdlYmxvY2siLAorICAidGhyZWFkZ3Jv
dXAiLAorICAidGhyb3ciLAorICAidHJ5IiwKKyAgInR5cGVpZCIsCisgICJ0eXBlbmFtZSIsCisg
ICJ1Y2hhciIsCisgICJ1aW50MTZfdCIsCisgICJ1aW50MzJfdCIsCisgICJ1aW50NjRfdCIsCisg
ICJ1aW50OF90IiwKKyAgInVzaG9ydCIsCisgICJ2ZXJ0ZXgiLAorICAidmlydHVhbCIsCisgICJ3
Y2hhcl90IiwKKyAgInhvciIsCisgICJOQU4iLAorICAiSU5GSU5JVFkiLAorICAiUHJhZ21hIiwK
KyAgIl9QcmFnbWEiLAorICAiQU5HTEVfMSIsCisgICJJTlRfTUFYIiwKK107CisKKworZGVzY3Jp
cHRpb24oKTsKKwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFyIGdsID0gd3R1LmNyZWF0
ZTNEQ29udGV4dCgpOworCit2YXIgYmFkV29yZHMgPSBbCisgIHsgd29yZHM6ICBNZXRhbFdvcmRz
IH0KK107CisKKworCit2YXIgY2hlY2tlZFdvcmRzID0ge307CisKK3ZhciBzcmMgPSBbXTsKK2Zv
ciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgIHZhciB2c3JjID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInZlcnRleFNoYWRlciIgKyBpaSkudGV4dDsKKyAgdmFyIGZzcmMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhZ21lbnRTaGFkZXIiICsgaWkpLnRleHQ7CisgIHNyYy5w
dXNoKHt2c3JjOiB2c3JjLCBmc3JjOiBmc3JjfSk7Cit9CisKK3ZhciBiYWRXb3JkTmR4ID0gMDsK
K3ZhciBsaXN0TmR4ID0gMDsKKworZnVuY3Rpb24gdGVzdE5leHRXb3JkKCkgeworICB2YXIgbGlz
dCA9IGJhZFdvcmRzW2JhZFdvcmROZHhdLndvcmRzOworICBpZiAobGlzdE5keCA+PSBsaXN0Lmxl
bmd0aCkgeworICAgICsrYmFkV29yZE5keDsKKyAgICBpZiAoYmFkV29yZE5keCA+PSBiYWRXb3Jk
cy5sZW5ndGgpIHsKKyAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbGlzdE5keCA9IDA7CisgICAgbGlzdCA9IGJhZFdvcmRzW2JhZFdvcmROZHhdLndvcmRzOwor
ICB9CisgIHRlc3RXb3JkKGxpc3RbbGlzdE5keF0pOworICArK2xpc3ROZHg7CisgIHNldFRpbWVv
dXQodGVzdE5leHRXb3JkLCAwKTsKK30KK3Rlc3ROZXh0V29yZCgpOworCitmdW5jdGlvbiB0ZXN0
V29yZCh3b3JkKSB7CisgIGlmICh3b3JkIGluIGNoZWNrZWRXb3JkcykgeworICAgIHJldHVybjsK
KyAgfQorICBjaGVja2VkV29yZHNbd29yZF0gPSB0cnVlOworICBkZWJ1ZygiIik7CisgIGRlYnVn
KCJ0ZXN0aW5nOiAiICsgd29yZCk7CisKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNyYy5sZW5n
dGg7ICsraWkpIHsKKyAgICB2YXIgdnMgPSBzcmNbaWldLnZzcmMucmVwbGFjZSgvXCRyZXBsYWNl
TWUvZywgd29yZCk7CisgICAgdmFyIGZzID0gc3JjW2lpXS5mc3JjLnJlcGxhY2UoL1wkcmVwbGFj
ZU1lL2csIHdvcmQpOworCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIHZhciBwcm9ncmFt
ID0gd3R1LmxvYWRQcm9ncmFtKGdsLCB2cywgZnMsIGZ1bmN0aW9uKG1zZykgeworICAgICAgZGVi
dWcobXNnKTsKKyAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9LCB0cnVlKTsKKyAgICBpZiAo
c3VjY2VzcykgeworICAgICAgdGVzdFBhc3NlZCgic2hhZGVyIHdpdGg6ICciICsgd29yZCArICIn
IGNvbXBpbGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoInNoYWRlciB3aXRo
OiAnIiArIHdvcmQgKyAiJyBmYWlsZWQgdG8gY29tcGlsZSIpOworICAgIH0KKyAgICBpZiAocHJv
Z3JhbSkgeworICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICB9CisgICAgd3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJzaG91bGQgYmUgbm8gR0wgZXJyb3Jz
Iik7CisgIH0KK30KKworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgorCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440129</attachid>
            <date>2021-10-04 17:43:39 -0700</date>
            <delta_ts>2021-10-06 13:40:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229378-20211004174338.patch</filename>
            <type>text/plain</type>
            <size>20325</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNDEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGMzODI3ODVkMGM2MDJlYzIzN2ZjMWZiMWY3MjM3YjJjNzY3ZDQ1ZS4uZmM5ZDcyMGE4ZTc5
YjM4ZGJkMjYwNDA5Y2MzNDFkMzBjMDMzNjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTEwLTAxICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjI5OTA1Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgQ2hhbmdl
IFRyYW5zbGF0b3JNZXRhbERpcmVjdCB0byBwcmVmaXggJ191JyB0byBhbGwgdXNlciBkZWZpbmVk
IHZhcmlhYmxlcy4KKyAgICAgICAgQ2xlYW4gdXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQg
QU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVpbmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3Rl
ZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOgorICAgICAgICAoc2g6OkdldE1zbEtl
eXdvcmRzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTmFtZS5jcHA6CisgICAgICAgIChOYW1lOjplbWl0IGNvbnN0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmNwcDoKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0VGV4dHVyZUVudik6CisgICAgICAgIChTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QpOgorICAgICAgICAoc2g6OkdldFRleHR1cmVUeXBlTmFt
ZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6OkdlbmVyYXRlVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nT3V0cHV0KToKKwogMjAyMS0wOS0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vc3RseSBmaXggTWFjIENNYWtlIGJ1aWxkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAppbmRleCAyZDg2
MjIyYmIzZDg5YTU1ZGMzZjIyNzA1ZmFkY2Y4MGUzMjhiOTA2Li40NWQzY2QzYzYwOGRiZTJiN2M3
MDkxNGFlNThmNTQ5MGFjNzJmY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0
b3JNZXRhbERpcmVjdC5jcHAKQEAgLTIwLDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmgiCiAjaW5jbHVkZSAiY29tcGls
ZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmVkdWNlSW50ZXJmYWNlQmxvY2tz
LmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3Qv
UmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlS2V5d29yZHMuaCIKICNpbmNsdWRlICJjb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlT3V0QXJncy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVQaXBlbGluZXMuaCIKICNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JN
ZXRhbERpcmVjdC9SZXdyaXRlVW5hZGRyZXNzYWJsZVJlZmVyZW5jZXMuaCIKQEAgLTU4LDggKzU3
LDggQEAgbmFtZXNwYWNlIHNoCiBuYW1lc3BhY2UKIHsKIAotY29uc3RleHByIE5hbWUga0NvdmVy
YWdlTWFza0ZpZWxkKCJjb3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Ci1j
b25zdGV4cHIgTmFtZSBrRW11SW5zdGFuY2VJREZpZWxkKCJlbXVsYXRlZEluc3RhbmNlSUQiLCBT
eW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrQ292ZXJhZ2VNYXNrRmll
bGQoImNvdmVyYWdlTWFzayIsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworY29uc3RleHBy
IE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9sVHlw
ZTo6QW5nbGVJbnRlcm5hbCk7CiBjb25zdGV4cHIgTmFtZSBrU2FtcGxlTWFza1dyaXRlRnVuY05h
bWUoIndyaXRlU2FtcGxlTWFzayIsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOwogI2lmIDAK
IGNvbnN0ZXhwciBOYW1lIGtEaXNjYXJkV3JhcHBlckZ1bmNOYW1lKCJEaXNjYXJkV3JhcHBlciIp
OwpAQCAtNjcsOCArNjYsOCBAQCBjb25zdGV4cHIgTmFtZSBrRGlzY2FyZFdyYXBwZXJGdW5jTmFt
ZSgiRGlzY2FyZFdyYXBwZXIiKTsKIGNvbnN0ZXhwciBOYW1lIGtFbXVsYXRlZERlcHRoUmFuZ2VQ
YXJhbXMoIkRlcHRoUmFuZ2VQYXJhbXMiKTsKIGNvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc0Jsb2Nr
TmFtZSgiQW5nbGVVbmlmb3JtcyIpOwogY29uc3RleHByIE5hbWUga1VuaWZvcm1zVmFyTmFtZShr
VW5pZm9ybXNWYXIpOwotY29uc3RleHByIE5hbWUga0ZsaXBwZWRQb2ludENvb3JkTmFtZSgiZmxp
cHBlZFBvaW50Q29vcmQiLCBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZCk7Ci1jb25zdGV4cHIgTmFt
ZSBrRmxpcHBlZEZyYWdDb29yZE5hbWUoImZsaXBwZWRGcmFnQ29vcmQiLCBTeW1ib2xUeXBlOjpV
c2VyRGVmaW5lZCk7Citjb25zdGV4cHIgTmFtZSBrRmxpcHBlZFBvaW50Q29vcmROYW1lKCJmbGlw
cGVkUG9pbnRDb29yZCIsIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWwpOworY29uc3RleHByIE5h
bWUga0ZsaXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6
QW5nbGVJbnRlcm5hbCk7CiAKIGNvbnN0ZXhwciBjb25zdCBUVmFyaWFibGUga2dsX1ZlcnRleElE
TWV0YWwoCiAgICAgQnVpbHRJbklkOjpnbF9WZXJ0ZXhJRCwKQEAgLTgyNCw5MSArODIzLDYgQEAg
VEludGVybVN3aXp6bGUgKlRyYW5zbGF0b3JNZXRhbERpcmVjdDo6Z2V0RHJpdmVyVW5pZm9ybU5l
Z0ZsaXBZUmVmKAogICAgIHJldHVybiBuZWdGbGlwWTsKIH0KIAotc3RhdGljIHN0ZDo6c2V0PElt
bXV0YWJsZVN0cmluZz4gR2V0TXNsS2V5d29yZHMoKQotewotICAgIHN0ZDo6c2V0PEltbXV0YWJs
ZVN0cmluZz4ga2V5d29yZHM7Ci0KLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhbGlnbmFzIik7Ci0g
ICAga2V5d29yZHMuZW1wbGFjZSgiYWxpZ25vZiIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImFz
X3R5cGUiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhdXRvIik7Ci0gICAga2V5d29yZHMuZW1w
bGFjZSgiY2F0Y2giKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjaGFyIik7Ci0gICAga2V5d29y
ZHMuZW1wbGFjZSgiY2xhc3MiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJjb25zdF9jYXN0Iik7
Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RhbnQiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJjb25zdGV4cHIiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZWNsdHlwZSIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoImRlbGV0ZSIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImRldmljZSIp
OwotICAgIGtleXdvcmRzLmVtcGxhY2UoImR5bmFtaWNfY2FzdCIpOwotICAgIGtleXdvcmRzLmVt
cGxhY2UoImVudW0iKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJleHBsaWNpdCIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoImV4cG9ydCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImV4dGVybiIp
OwotICAgIGtleXdvcmRzLmVtcGxhY2UoImZyYWdtZW50Iik7Ci0gICAga2V5d29yZHMuZW1wbGFj
ZSgiZnJpZW5kIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiZ290byIpOwotICAgIGtleXdvcmRz
LmVtcGxhY2UoImhhbGYiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJpbmxpbmUiKTsKLSAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJpbnQxNl90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiaW50MzJf
dCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImludDY0X3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJpbnQ4X3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJrZXJuZWwiKTsKLSAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJsb25nIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgibWFpbjAiKTsKLSAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJtZXRhbCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoIm11dGFi
bGUiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJuYW1lc3BhY2UiKTsKLSAgICBrZXl3b3Jkcy5l
bXBsYWNlKCJuZXciKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJub2V4Y2VwdCIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoIm51bGxwdHJfdCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoIm51bGxw
dHIiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJvcGVyYXRvciIpOwotICAgIGtleXdvcmRzLmVt
cGxhY2UoIm92ZXJyaWRlIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgicHJpdmF0ZSIpOwotICAg
IGtleXdvcmRzLmVtcGxhY2UoInByb3RlY3RlZCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInB0
cmRpZmZfdCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInB1YmxpYyIpOwotICAgIGtleXdvcmRz
LmVtcGxhY2UoInJheV9kYXRhIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgicmVnaXN0ZXIiKTsK
LSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaG9ydCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInNp
Z25lZCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInNpemVfdCIpOwotICAgIGtleXdvcmRzLmVt
cGxhY2UoInNpemVvZiIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YWdlX2luIik7Ci0gICAg
a2V5d29yZHMuZW1wbGFjZSgic3RhdGljX2Fzc2VydCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2Uo
InN0YXRpY19jYXN0Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgic3RhdGljIik7Ci0gICAga2V5
d29yZHMuZW1wbGFjZSgidGVtcGxhdGUiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aGlzIik7
Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkX2xvY2FsIik7Ci0gICAga2V5d29yZHMuZW1w
bGFjZSgidGhyZWFkIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidGhyZWFkZ3JvdXBfaW1hZ2Vi
bG9jayIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdyb3VwIik7Ci0gICAga2V5d29y
ZHMuZW1wbGFjZSgidGhyb3ciKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0cnkiKTsKLSAgICBr
ZXl3b3Jkcy5lbXBsYWNlKCJ0eXBlZGVmIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidHlwZWlk
Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidHlwZW5hbWUiKTsKLSAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJ1Y2hhciIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQxNl90Iik7Ci0gICAga2V5
d29yZHMuZW1wbGFjZSgidWludDMyX3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50NjRf
dCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInVpbnQ4X3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJ1bmlvbiIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInVuc2lnbmVkIik7Ci0gICAga2V5
d29yZHMuZW1wbGFjZSgidXNob3J0Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidXNpbmciKTsK
LSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2ZXJ0ZXgiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ2
aXJ0dWFsIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidm9sYXRpbGUiKTsKLSAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJ3Y2hhcl90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiTkFOIik7Ci0gICAg
cmV0dXJuIGtleXdvcmRzOwotfQotCiBzdGF0aWMgaW5saW5lIE1ldGFsU2hhZGVyVHlwZSBtZXRh
bFNoYWRlclR5cGVGcm9tR0xTTChzaDo6R0xlbnVtIHNoYWRlclR5cGUpCiB7CiAgICAgc3dpdGNo
IChzaGFkZXJUeXBlKQpAQCAtMTM3NywxMiArMTI5MSw2IEBAIGJvb2wgVHJhbnNsYXRvck1ldGFs
RGlyZWN0Ojp0cmFuc2xhdGVJbXBsKFRJbnRlcm1CbG9jayAmcm9vdCwgU2hDb21waWxlT3B0aW9u
cyBjCiAgICAgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgaWYgKCFSZXdy
aXRlS2V5d29yZHMoKnRoaXMsIHJvb3QsIGlkR2VuLCBHZXRNc2xLZXl3b3JkcygpKSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBpZiAoIVJlZHVjZUludGVyZmFj
ZUJsb2NrcygqdGhpcywgcm9vdCwgaWRHZW4pKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUu
Y3BwCmluZGV4IDA3YzVkMTg1ZTZmYWQzNzU2OWVmY2JkODU1ZjJhZTQwMWU2NDNjOGEuLjlmNDQy
Yjc5ZTMzYjczZWJiZTdhYzA4YmI4NmFmZDFjMDA0M2Y1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERp
cmVjdC9OYW1lLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5jcHAKQEAgLTY5LDExICs2OSwx
OSBAQCB2b2lkIE5hbWU6OmVtaXQoVEluZm9TaW5rQmFzZSAmb3V0KSBjb25zdAogICAgIHN3aXRj
aCAobVN5bWJvbFR5cGUpCiAgICAgewogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46
CisgICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZDoKICAgICAgICAgICAgIEFTU0VSVCghbVJh
d05hbWUuZW1wdHkoKSk7Ci0gICAgICAgICAgICBvdXQgPDwgbVJhd05hbWU7CisgICAgICAgICAg
ICBpZiAobVJhd05hbWUgIT0gIm1haW4iKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG91dCA8PCBrVXNlckRlZmluZWROYW1lUHJlZml4IDw8IG1SYXdOYW1lOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG91dCA8
PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAg
IGNhc2UgU3ltYm9sVHlwZTo6QW5nbGVJbnRlcm5hbDoKICAgICAgICAgICAgIEFTU0VSVCghbVJh
d05hbWUuZW1wdHkoKSk7CiAgICAgICAgICAgICBpZiAobVJhd05hbWUuYmVnaW5zV2l0aChrQW5n
bGVJbnRlcm5hbFByZWZpeCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52LmNw
cCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwCmluZGV4IDJmZDA5MTE2NTAyNDRkOTQ4ZDFk
MDQ4NDBiMWIzNWY4MDdiOGU3ZDAuLmE0MWQwZGMxNWJkZmU5YWNlMDBhNzM5YjY4YjJkNmUzNzQ5
NWU0NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9TeW1ib2xFbnYuY3BwCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRh
bERpcmVjdC9TeW1ib2xFbnYuY3BwCkBAIC0zOTAsMTMgKzM5MCwxMiBAQCBjb25zdCBUU3RydWN0
dXJlICZTeW1ib2xFbnY6OmdldFRleHR1cmVFbnYoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKICAg
ICBpZiAoZW52ID09IG51bGxwdHIpCiAgICAgewogICAgICAgICBhdXRvICp0ZXh0dXJlVHlwZSA9
IG5ldyBUVHlwZShzYW1wbGVyVHlwZSk7Ci0gICAgICAgIGF1dG8gKnRleHR1cmUgICAgID0gbmV3
IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtOb1NvdXJj
ZUxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ltYm9sVHlwZTo6VXNl
ckRlZmluZWQpOworICAgICAgICBhdXRvICp0ZXh0dXJlID0KKyAgICAgICAgICAgIG5ldyBURmll
bGQodGV4dHVyZVR5cGUsIEltbXV0YWJsZVN0cmluZygidGV4dHVyZSIpLCBrTm9Tb3VyY2VMb2Ms
IFN5bWJvbFR5cGU6OkJ1aWx0SW4pOwogICAgICAgICBtYXJrQXNQb2ludGVyKCp0ZXh0dXJlLCBB
ZGRyZXNzU3BhY2U6OlRocmVhZCk7CiAKLSAgICAgICAgYXV0byAqc2FtcGxlciA9Ci0gICAgICAg
ICAgICBuZXcgVEZpZWxkKG5ldyBUVHlwZSgmZ2V0U2FtcGxlclN0cnVjdCgpLCBmYWxzZSksIElt
bXV0YWJsZVN0cmluZygic2FtcGxlciIpLAotICAgICAgICAgICAgICAgICAgICAgICBrTm9Tb3Vy
Y2VMb2MsIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgYXV0byAqc2FtcGxlciA9
IG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCksIGZhbHNlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1tdXRhYmxlU3RyaW5nKCJzYW1wbGVyIiks
IGtOb1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50
ZXIoKnNhbXBsZXIsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAogICAgICAgICBzdGQ6OnN0cmlu
ZyBlbnZOYW1lOwpAQCAtNDE1LDcgKzQxNCw3IEBAIGNvbnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVu
djo6Z2V0U2FtcGxlclN0cnVjdCgpCiAgICAgaWYgKCFtU2FtcGxlcikKICAgICB7CiAgICAgICAg
IG1TYW1wbGVyID0gbmV3IFRTdHJ1Y3R1cmUoJm1TeW1ib2xUYWJsZSwgSW1tdXRhYmxlU3RyaW5n
KCJtZXRhbDo6c2FtcGxlciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dyBURmllbGRMaXN0KCksIFN5bWJvbFR5cGU6OlVzZXJEZWZpbmVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuZXcgVEZpZWxkTGlzdCgpLCBTeW1ib2xUeXBlOjpCdWlsdElu
KTsKICAgICB9CiAgICAgcmV0dXJuICptU2FtcGxlcjsKIH0KQEAgLTcwMSw1ICs3MDAsNSBAQCBO
YW1lIHNoOjpHZXRUZXh0dXJlVHlwZU5hbWUoVEJhc2ljVHlwZSBzYW1wbGVyVHlwZSkKIAogI3Vu
ZGVmIEhBTkRMRV9URVhUVVJFX05BTUUKIAotICAgIHJldHVybiBOYW1lKG5hbWUsIFN5bWJvbFR5
cGU6OlVzZXJEZWZpbmVkKTsKKyAgICByZXR1cm4gTmFtZShuYW1lLCBTeW1ib2xUeXBlOjpCdWls
dEluKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdM
RS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFuZ19tdGxfdXRpbHMubW0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0
aWxzLm1tCmluZGV4IDc5MTI4NWJiNDVmOWU4NjM0ODNhNDBkOGU3MDA5NTU2Y2YxMGVlNTIuLjhi
MDgyYWI0YTkxYWQ5MjNkNTZiMzM1NTAwYzAxN2NhYjJmNTI5YjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xzbGFu
Z19tdGxfdXRpbHMubW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xF
L3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbQpAQCAtMTcsMTUgKzE3LDE1
IEBAIG5hbWVzcGFjZQogewogICAgIGNvbnN0ZXhwciBjaGFyIGtYZmJCaW5kaW5nc01hcmtlcltd
ICAgID0gIkBAWEZCLUJpbmRpbmdzQEAiOwogICAgIGNvbnN0ZXhwciBjaGFyIGtYZmJPdXRNYXJr
ZXJbXSAgICAgPSAiQU5HTEVfQEBYRkItT1VUQEAiOworICAgIGNvbnN0ZXhwciBjaGFyIGtVc2Vy
RGVmaW5lZE5hbWVQcmVmaXhbXSA9ICJfdSI7ICAvLyBEZWZpbmVkIGluIEdMU0xBTkcvU2hhZGVy
TGFuZy5oCisgICAgdGVtcGxhdGUgPHNpemVfdCBOPgorICAgIGNvbnN0ZXhwciBzaXplX3QgQ29u
c3RTdHJMZW4oY29uc3QgY2hhciAoJilbTl0pCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0
KE4gPiAwLCAiQysrIHNob3VsZG4ndCBhbGxvdyBOIHRvIGJlIHplcm8iKTsKIAotdGVtcGxhdGUg
PHNpemVfdCBOPgotY29uc3RleHByIHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtO
XSkKLXsKLSAgICBzdGF0aWNfYXNzZXJ0KE4gPiAwLCAiQysrIHNob3VsZG4ndCBhbGxvdyBOIHRv
IGJlIHplcm8iKTsKLQotICAgIC8vIFRoZSBsZW5ndGggb2YgYSBzdHJpbmcgZGVmaW5lZCBhcyBh
IGNoYXIgYXJyYXkgaXMgdGhlIHNpemUgb2YgdGhlIGFycmF5IG1pbnVzIDEgKHRoZQotICAgIC8v
IHRlcm1pbmF0aW5nICdcMCcpLgotICAgIHJldHVybiBOIC0gMTsKKyAgICAgICAgLy8gVGhlIGxl
bmd0aCBvZiBhIHN0cmluZyBkZWZpbmVkIGFzIGEgY2hhciBhcnJheSBpcyB0aGUgc2l6ZSBvZiB0
aGUgYXJyYXkgbWludXMgMQorICAgICAgICAvLyAoIHRlcm1pbmF0aW5nICdcMCcpLgorICAgICAg
ICByZXR1cm4gTiAtIDE7CiB9CiAKIHN0ZDo6c3RyaW5nIEdldFhmYkJ1ZmZlck5hbWVNdGwoY29u
c3QgdWludDMyX3QgYnVmZmVySW5kZXgpCkBAIC0yNTgsNyArMjU4LDcgQEAgc3RkOjpzdHJpbmcg
R2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdPdXRwdXQoY29uc3QgZ2w6OlRyYW5zZm9y
bUZlZWRiYWNrVmEKICAgICAgICAgICAgICAgICAgICAgICAgPDwgIl0gKyAoZ2xfVmVydGV4SUQg
KyBBTkdMRV9pbnN0YW5jZUlkTW9kICogIgogICAgICAgICAgICAgICAgICAgICAgICA8PCAiQU5H
TEVfIiA8PCBzdGQ6OnN0cmluZyhzaDo6a1VuaWZvcm1zVmFyKSA8PCAiLkFOR0xFX3hmYlZlcnRp
Y2VzUGVyRHJhdykgKiAiIDw8IHN0cmlkZQogICAgICAgICAgICAgICAgICAgICAgICA8PCAiICsg
IiA8PCBvZmZzZXQgPDwgIl0gPSAiIDw8ICJhc190eXBlPGZsb2F0PiIgPDwgIigiCi0gICAgICAg
ICAgICAgICAgICAgICAgIDw8ICJBTkdMRV92ZXJ0ZXhPdXQuIiA8PCB2YXJ5aW5nLm5hbWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV92ZXJ0ZXhPdXQuIiA8PCBrVXNlckRlZmlu
ZWROYW1lUHJlZml4IDw8IHZhcnlpbmcubmFtZTsKIAogICAgICAgICAgICAgICAgIGlmICh2YXJ5
aW5nLmlzQXJyYXkoKSkKICAgICAgICAgICAgICAgICB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTcyNzcxODQ3ZWU2MzU3
ZTcwMTMwODNjM2NkMDg2NDY5M2ZjOGJjYS4uMzE5MjJhZjcwODBjZjc4ZTZlZjIzNGE5YTkxZGE0
NjlkNDViODA5NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTEwLTAxICBLeWxlIFBpZGRp
bmd0b24gIDxrcGlkZGluZ3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVj
aGV0IGRpc3RyaWN0IiBmYWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9y
IGNvbXBpbGluZyBzaGFkZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84MjI5OTA1Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisK
KyAgICAgICAgQWRkIGEgdGVzdCB0ZXN0aW5nIE1ldGFsIHJlc2VydmVkIHdvcmRzIGFuZCBzdGFu
ZGFyZCBsaWJyYXJ5IG1hY3Jvcy4KKworICAgICAgICAqIHdlYmdsL3BlbmRpbmcvY29uZm9ybWFu
Y2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFk
ZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3Bl
bmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3No
YWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbDogQWRkZWQuCisKKwogMjAyMS0xMC0wMSAg
WXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIERpc2FibGUgbmV3
IGluY3VtYmVudC13aW5kb3cgdW50aWwgaXQgaXMgZnVsbHkgaW1wbGVtZW50ZWQKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRl
ci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMt
Mi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRhYWY1Y2IwZTkyOGIzMmY2ZjQ5YTE4M2ZkMjFj
YmYxMWJmZjVkMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcv
Y29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTItZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorVGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlz
dGVkIGJlbG93IGluIGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuCisKK1Rlc3Q6
IC4uLy4uLy4uL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlz
Yy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw/d2ViZ2xWZXJzaW9uPTIKK1sgUEFT
UyBdIEFsbCB0ZXN0cyBwYXNzZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3BlbmRp
bmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRl
ci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWVjMGRjZWIyMjUwMjVj
Y2Y2OGFkNWY0ZjZmZjEzYjA5ZWNlNTk0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ2wvcGVuZGluZy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQt
d29yZHMtMi5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzwhLS0gVGhpcyBmaWxlIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IFRvb2xzL1NjcmlwdHMvdXBkYXRlLXdlYmdsLWNvbmZvcm1hbmNlLXRlc3RzLiBE
TyBOT1QgRURJVCAtLT4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBDb25mb3JtYW5jZSBUZXN0IFdyYXBwZXIgZm9y
IHNoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbDwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4v
cmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cg
aW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+CitUZXN0OiA8YSBocmVm
PSIuLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21p
c2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yIj4uLi8u
Li8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hh
ZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yPC9hPgorPGRpdiBp
ZD0iaWZyYW1lIj4KKzxpZnJhbWUgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5o
dG1sP3dlYmdsVmVyc2lvbj0yIiB3aWR0aD0iODAwIiBoZWlnaHQ9IjYwMCI+PC9pZnJhbWU+Cis8
L2Rpdj4KKzxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVz
L2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzRhMDA3ODZjZjg2NjUzOTRmMDIzMTQ0OTM3OTFmYzU1NjUwYzIxOAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rl
c3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRz
LTIuaHRtbApAQCAtMCwwICsxLDI0MyBAQAorPCEtLQorQ29weXJpZ2h0IChjKSAyMDIxIFRoZSBL
aHJvbm9zIEdyb3VwIEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50
eHQgZmlsZS4KKy0tPgorCis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBj
aGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgR0xTTCBDb25mb3JtYW5jZSBUZXN0cyAtIE5v
biBSZXNlcnZlZCBXb3JkczwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi9yZXNvdXJjZXMvZ2xzbC1mZWF0dXJlLXRlc3RzLmNzcyIvPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2pzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIwIiB0eXBlPSJ0ZXh0L3NvbWV0aGlu
Zy1ub3QtamF2YXNjcmlwdCI+CitzdHJ1Y3QgJHJlcGxhY2VNZSB7CisgIHZlYzQgJHJlcGxhY2VN
ZTsKK307CitzdHJ1Y3QgRm9vIHsKKyAgJHJlcGxhY2VNZSAkcmVwbGFjZU1lOworfTsKK2F0dHJp
YnV0ZSB2ZWM0IHBvc2l0aW9uOwordm9pZCBtYWluKCkKK3sKKyAgICBGb28gZjsKKyAgICBmLiRy
ZXBsYWNlTWUuJHJlcGxhY2VNZSA9IHBvc2l0aW9uOworICAgIGdsX1Bvc2l0aW9uID0gZi4kcmVw
bGFjZU1lLiRyZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9ImZyYWdtZW50U2hh
ZGVyMCIgdHlwZT0idGV4dC9zb21ldGhpbmctbm90LWphdmFzY3JpcHQiPgorcHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7Cit2ZWM0ICRyZXBsYWNlTWUoKSB7CisgICAgcmV0dXJuIHZlYzQoMCwxLDAs
MSk7Cit9Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9ICRyZXBsYWNlTWUoKTsK
K30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMSIgdHlwZT0idGV4dC9zb21l
dGhpbmctbm90LWphdmFzY3JpcHQiPgorYXR0cmlidXRlIHZlYzQgJHJlcGxhY2VNZTsKK3ZvaWQg
bWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSAkcmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8
c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjEiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZh
c2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordmVjNCBmb28odmVjNCAkcmVwbGFj
ZU1lKSB7CisgIHJldHVybiAkcmVwbGFjZU1lOworfQordm9pZCBtYWluKCkKK3sKKyAgICBnbF9G
cmFnQ29sb3IgPSBmb28odmVjNCgxLDAsMSwxKSk7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9
InZlcnRleFNoYWRlcjIiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3Zh
cnlpbmcgdmVjNCAkcmVwbGFjZU1lOworYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Cit2b2lkIG1h
aW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb247CisgICAgJHJlcGxhY2VNZSA9IHBv
c2l0aW9uOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjIiIHR5cGU9
InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwordmFyeWluZyB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdD
b2xvciA9ICRyZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZlcnRleFNoYWRl
cjMiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0
IHBvc2l0aW9uOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uOwor
fQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRlcjMiIHR5cGU9InRleHQvc29t
ZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwordW5pZm9y
bSB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1haW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9ICRy
ZXBsYWNlTWU7Cit9Cis8L3NjcmlwdD4KKzxzY3JpcHQ+CisidXNlIHN0cmljdCI7CisKK3ZhciBN
ZXRhbFdvcmRzID0gWworICAiYWxpZ25hcyIsCisgICJhbGlnbm9mIiwKKyAgImFzX3R5cGUiLAor
ICAiYW5kIiwKKyAgImF1dG8iLAorICAiY2F0Y2giLAorICAiY2hhciIsCisgICJjb25zdF9jYXN0
IiwKKyAgImNvbnN0YW50IiwKKyAgImNvbnN0ZXhwciIsCisgICJkZWNsdHlwZSIsCisgICJkZWxl
dGUiLAorICAiZGV2aWNlIiwKKyAgImR5bmFtaWNfY2FzdCIsCisgICJleHBsaWNpdCIsCisgICJl
eHBvcnQiLAorICAiZnJhZ21lbnQiLAorICAiZnJpZW5kIiwKKyAgImludDE2X3QiLAorICAiaW50
MzJfdCIsCisgICJpbnQ2NF90IiwKKyAgImludDhfdCIsCisgICJrZXJuZWwiLAorICAibWFpbjAi
LAorICAibWV0YWwiLAorICAibXV0YWJsZSIsCisgICJuZXciLAorICAibm9leGNlcHQiLAorICAi
bnVsbHB0cl90IiwKKyAgIm51bGxwdHIiLAorICAib3BlcmF0b3IiLAorICAib3ZlcnJpZGUiLAor
ICAib3IiLAorICAicHJpdmF0ZSIsCisgICJwcm90ZWN0ZWQiLAorICAicHRyZGlmZl90IiwKKyAg
InJheV9kYXRhIiwKKyAgInJlZ2lzdGVyIiwKKyAgInNpZ25lZCIsCisgICJzaXplX3QiLAorICAi
c3RhZ2VfaW4iLAorICAic3RhdGljX2Fzc2VydCIsCisgICJzdGF0aWNfY2FzdCIsCisgICJ0aHJl
YWRfbG9jYWwiLAorICAidGhyZWFkIiwKKyAgInRocmVhZGdyb3VwX2ltYWdlYmxvY2siLAorICAi
dGhyZWFkZ3JvdXAiLAorICAidGhyb3ciLAorICAidHJ5IiwKKyAgInR5cGVpZCIsCisgICJ0eXBl
bmFtZSIsCisgICJ1Y2hhciIsCisgICJ1aW50MTZfdCIsCisgICJ1aW50MzJfdCIsCisgICJ1aW50
NjRfdCIsCisgICJ1aW50OF90IiwKKyAgInVzaG9ydCIsCisgICJ2ZXJ0ZXgiLAorICAidmlydHVh
bCIsCisgICJ3Y2hhcl90IiwKKyAgInhvciIsCisgICJOQU4iLAorICAiSU5GSU5JVFkiLAorICAi
UHJhZ21hIiwKKyAgIl9QcmFnbWEiLAorICAiQU5HTEVfMSIsCisgICJJTlRfTUFYIiwKK107CisK
KworZGVzY3JpcHRpb24oKTsKKwordmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwordmFyIGdsID0g
d3R1LmNyZWF0ZTNEQ29udGV4dCgpOworCit2YXIgYmFkV29yZHMgPSBbCisgIHsgd29yZHM6ICBN
ZXRhbFdvcmRzIH0KK107CisKKworCit2YXIgY2hlY2tlZFdvcmRzID0ge307CisKK3ZhciBzcmMg
PSBbXTsKK2ZvciAodmFyIGlpID0gMDsgaWkgPCA0OyArK2lpKSB7CisgIHZhciB2c3JjID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInZlcnRleFNoYWRlciIgKyBpaSkudGV4dDsKKyAgdmFyIGZz
cmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhZ21lbnRTaGFkZXIiICsgaWkpLnRleHQ7
CisgIHNyYy5wdXNoKHt2c3JjOiB2c3JjLCBmc3JjOiBmc3JjfSk7Cit9CisKK3ZhciBiYWRXb3Jk
TmR4ID0gMDsKK3ZhciBsaXN0TmR4ID0gMDsKKworZnVuY3Rpb24gdGVzdE5leHRXb3JkKCkgewor
ICB2YXIgbGlzdCA9IGJhZFdvcmRzW2JhZFdvcmROZHhdLndvcmRzOworICBpZiAobGlzdE5keCA+
PSBsaXN0Lmxlbmd0aCkgeworICAgICsrYmFkV29yZE5keDsKKyAgICBpZiAoYmFkV29yZE5keCA+
PSBiYWRXb3Jkcy5sZW5ndGgpIHsKKyAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbGlzdE5keCA9IDA7CisgICAgbGlzdCA9IGJhZFdvcmRzW2JhZFdvcmROZHhd
LndvcmRzOworICB9CisgIHRlc3RXb3JkKGxpc3RbbGlzdE5keF0pOworICArK2xpc3ROZHg7Cisg
IHNldFRpbWVvdXQodGVzdE5leHRXb3JkLCAwKTsKK30KK3Rlc3ROZXh0V29yZCgpOworCitmdW5j
dGlvbiB0ZXN0V29yZCh3b3JkKSB7CisgIGlmICh3b3JkIGluIGNoZWNrZWRXb3JkcykgeworICAg
IHJldHVybjsKKyAgfQorICBjaGVja2VkV29yZHNbd29yZF0gPSB0cnVlOworICBkZWJ1ZygiIik7
CisgIGRlYnVnKCJ0ZXN0aW5nOiAiICsgd29yZCk7CisKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IHNyYy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgdnMgPSBzcmNbaWldLnZzcmMucmVwbGFjZSgv
XCRyZXBsYWNlTWUvZywgd29yZCk7CisgICAgdmFyIGZzID0gc3JjW2lpXS5mc3JjLnJlcGxhY2Uo
L1wkcmVwbGFjZU1lL2csIHdvcmQpOworCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworICAgIHZh
ciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtKGdsLCB2cywgZnMsIGZ1bmN0aW9uKG1zZykgewor
ICAgICAgZGVidWcobXNnKTsKKyAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9LCB0cnVlKTsK
KyAgICBpZiAoc3VjY2VzcykgeworICAgICAgdGVzdFBhc3NlZCgic2hhZGVyIHdpdGg6ICciICsg
d29yZCArICInIGNvbXBpbGVkIik7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoInNo
YWRlciB3aXRoOiAnIiArIHdvcmQgKyAiJyBmYWlsZWQgdG8gY29tcGlsZSIpOworICAgIH0KKyAg
ICBpZiAocHJvZ3JhbSkgeworICAgICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICB9
CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJzaG91bGQgYmUgbm8g
R0wgZXJyb3JzIik7CisgIH0KK30KKworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>440435</attachid>
            <date>2021-10-06 13:40:42 -0700</date>
            <delta_ts>2021-10-06 14:45:27 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-229378-20211006134041.patch</filename>
            <type>text/plain</type>
            <size>39273</size>
            <attacher name="Kyle Piddington">kpiddington</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzNjM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggZGMzODI3ODVkMGM2MDJlYzIzN2ZjMWZiMWY3MjM3YjJjNzY3ZDQ1ZS4uMDI4OWExOTI4MjQ4
YWU2MTg4MWQ0NzUxODBhOWIxNjBiZDUwNDc0MCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTEwLTA2ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGlu
Z3RvbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBm
YWlscyB0byBjb21waWxlIHdpdGggZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFk
ZXIgd2l0aCBNZXRhbCBiYWNrZW5kIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjI5OTA1Mz4K
KworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgQ2hhbmdl
IFRyYW5zbGF0b3JNZXRhbERpcmVjdCB0byBwcmVmaXggJ191JyB0byBhbGwgdXNlciBkZWZpbmVk
IHZhcmlhYmxlcy4KKyAgICAgICAgQ2xlYW4gdXAgYnVpbHRpbnMgbGlrZSBzYW1wbGVycyBhbmQg
QU5HTEUgc3RydWN0cyB0aGF0IHdlcmUgYmVpbmcKKyAgICAgICAgYWNjaWRlbnRseSBwcm9tb3Rl
ZCB0byB1c2VyRGVmaW5lZCB2YXJpYWJsZXMuCisKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QuY3BwOgorICAgICAgICAoc2g6OkdldE1zbEtl
eXdvcmRzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QvTmFtZS5jcHA6CisgICAgICAgIChOYW1lOjplbWl0IGNvbnN0KToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvU3ltYm9sRW52
LmNwcDoKKyAgICAgICAgKFN5bWJvbEVudjo6Z2V0VGV4dHVyZUVudik6CisgICAgICAgIChTeW1i
b2xFbnY6OmdldFNhbXBsZXJTdHJ1Y3QpOgorICAgICAgICAoc2g6OkdldFRleHR1cmVUeXBlTmFt
ZSk6CisgICAgICAgICogc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210
bF91dGlscy5tbToKKyAgICAgICAgKHJ4OjptdGw6OkdlbmVyYXRlVHJhbnNmb3JtRmVlZGJhY2tW
YXJ5aW5nT3V0cHV0KToKKwogMjAyMS0wOS0yOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIE1vc3RseSBmaXggTWFjIENNYWtlIGJ1aWxkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBlNjcxZjhkNTZlZWVhYzQ1YjU4NWQ4ZWNiNTUxNjIzMmQzMzU4NDZl
Li4yNDE4ZTk2Mjg3ZDAyOWMwZWIxNzhjYmQ4N2YwNGJhNmRkMjI3NDI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCQlERjgzRTI0MjI2MzlGQ0Q1MDAwODI1RUYgLyogVG9w
b3NvcnRTdHJ1Y3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEZGODFGRjMzMjU4MTkxOTcwMDg5NEUyNCAvKiBUb3Bvc29ydFN0cnVjdHMuY3BwICov
OyB9OwogCQlERjgzRTI0MzI2MzlGQ0Q1MDAwODI1RUYgLyogUmV3cml0ZVBpcGVsaW5lcy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkYzQzI1
ODE5MTk3MDA4OTRFMjQgLyogUmV3cml0ZVBpcGVsaW5lcy5jcHAgKi87IH07CiAJCURGODNFMjQ0
MjYzOUZDRDUwMDA4MjVFRiAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3RydWN0c01ldGFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGQTBDMkM1MjVD
QjZBNzYwMDEwNTMwNiAvKiBOYW1lRW1iZWRkZWRVbmlmb3JtU3RydWN0c01ldGFsLmNwcCAqLzsg
fTsKLQkJREY4M0UyNDUyNjM5RkNENTAwMDgyNUVGIC8qIFJld3JpdGVLZXl3b3Jkcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY0RjI1ODE5
MTk3MDA4OTRFMjQgLyogUmV3cml0ZUtleXdvcmRzLmNwcCAqLzsgfTsKIAkJREY4M0UyNDYyNjM5
RkNENTAwMDgyNUVGIC8qIERpc2NvdmVyRGVwZW5kZW50RnVuY3Rpb25zLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjI5MjU4MTkxOTcwMDg5
NEUyNCAvKiBEaXNjb3ZlckRlcGVuZGVudEZ1bmN0aW9ucy5jcHAgKi87IH07CiAJCURGODNFMjQ3
MjYzOUZDRDUwMDA4MjVFRiAvKiBSZXdyaXRlQ2FzZURlY2xhcmF0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRjgxRkY1ODI1ODE5MTk3MDA4
OTRFMjQgLyogUmV3cml0ZUNhc2VEZWNsYXJhdGlvbnMuY3BwICovOyB9OwogCQlERjgzRTI0ODI2
MzlGQ0Q1MDAwODI1RUYgLyogRW1pdE1ldGFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZGODFGRjJEMjU4MTkxOTcwMDg5NEUyNCAvKiBFbWl0TWV0
YWwuY3BwICovOyB9OwpAQCAtMzg0Miw3ICszODQxLDYgQEAKIAkJCQlERjgzRTI3NDI2MzlGRDMz
MDAwODI1RUYgLyogUmV3cml0ZURvV2hpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREY4M0Uy
NUMyNjM5RkQzMzAwMDgyNUVGIC8qIFJld3JpdGVFeHByZXNzaW9uc1dpdGhTaGFkZXJTdG9yYWdl
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJREY4M0UyN0YyNjM5RkQzMzAwMDgyNUVGIC8q
IFJld3JpdGVJbnRlcnBvbGF0ZUF0T2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCURGODNF
MjQ1MjYzOUZDRDUwMDA4MjVFRiAvKiBSZXdyaXRlS2V5d29yZHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJREY4M0UyMzQyNjM5RkNENTAwMDgyNUVGIC8qIFJld3JpdGVPdXRBcmdzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCURGODNFMjQzMjYzOUZDRDUwMDA4MjVFRiAvKiBSZXdyaXRlUGlwZWxp
bmVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCURGODNFMjUxMjYzOUZEMzMwMDA4MjVFRiAvKiBS
ZXdyaXRlUmVwZWF0ZWRBc3NpZ25Ub1N3aXp6bGVkLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC5jcHAKaW5kZXggMmQ4NjIyMmJi
M2Q4OWE1NWRjM2YyMjcwNWZhZGNmODBlMzI4YjkwNi4uNDVkM2NkM2M2MDhkYmUyYjdjNzA5MTRh
ZTU4ZjU0OTBhYzcyZmNlZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0
YWxEaXJlY3QuY3BwCkBAIC0yMCw3ICsyMCw2IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNs
YXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvTmFtZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1JlZHVjZUludGVyZmFjZUJsb2Nrcy5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1Jld3Jp
dGVDYXNlRGVjbGFyYXRpb25zLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFu
c2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
dHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZU91dEFyZ3MuaCIKICNpbmNs
dWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9SZXdyaXRlUGlw
ZWxpbmVzLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxE
aXJlY3QvUmV3cml0ZVVuYWRkcmVzc2FibGVSZWZlcmVuY2VzLmgiCkBAIC01OCw4ICs1Nyw4IEBA
IG5hbWVzcGFjZSBzaAogbmFtZXNwYWNlCiB7CiAKLWNvbnN0ZXhwciBOYW1lIGtDb3ZlcmFnZU1h
c2tGaWVsZCgiY292ZXJhZ2VNYXNrIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOwotY29uc3Rl
eHByIE5hbWUga0VtdUluc3RhbmNlSURGaWVsZCgiZW11bGF0ZWRJbnN0YW5jZUlEIiwgU3ltYm9s
VHlwZTo6VXNlckRlZmluZWQpOworY29uc3RleHByIE5hbWUga0NvdmVyYWdlTWFza0ZpZWxkKCJj
b3ZlcmFnZU1hc2siLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKK2NvbnN0ZXhwciBOYW1l
IGtFbXVJbnN0YW5jZUlERmllbGQoImVtdWxhdGVkSW5zdGFuY2VJRCIsIFN5bWJvbFR5cGU6OkFu
Z2xlSW50ZXJuYWwpOwogY29uc3RleHByIE5hbWUga1NhbXBsZU1hc2tXcml0ZUZ1bmNOYW1lKCJ3
cml0ZVNhbXBsZU1hc2siLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKICNpZiAwCiBjb25z
dGV4cHIgTmFtZSBrRGlzY2FyZFdyYXBwZXJGdW5jTmFtZSgiRGlzY2FyZFdyYXBwZXIiKTsKQEAg
LTY3LDggKzY2LDggQEAgY29uc3RleHByIE5hbWUga0Rpc2NhcmRXcmFwcGVyRnVuY05hbWUoIkRp
c2NhcmRXcmFwcGVyIik7CiBjb25zdGV4cHIgTmFtZSBrRW11bGF0ZWREZXB0aFJhbmdlUGFyYW1z
KCJEZXB0aFJhbmdlUGFyYW1zIik7CiBjb25zdGV4cHIgTmFtZSBrVW5pZm9ybXNCbG9ja05hbWUo
IkFuZ2xlVW5pZm9ybXMiKTsKIGNvbnN0ZXhwciBOYW1lIGtVbmlmb3Jtc1Zhck5hbWUoa1VuaWZv
cm1zVmFyKTsKLWNvbnN0ZXhwciBOYW1lIGtGbGlwcGVkUG9pbnRDb29yZE5hbWUoImZsaXBwZWRQ
b2ludENvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOwotY29uc3RleHByIE5hbWUga0Zs
aXBwZWRGcmFnQ29vcmROYW1lKCJmbGlwcGVkRnJhZ0Nvb3JkIiwgU3ltYm9sVHlwZTo6VXNlckRl
ZmluZWQpOworY29uc3RleHByIE5hbWUga0ZsaXBwZWRQb2ludENvb3JkTmFtZSgiZmxpcHBlZFBv
aW50Q29vcmQiLCBTeW1ib2xUeXBlOjpBbmdsZUludGVybmFsKTsKK2NvbnN0ZXhwciBOYW1lIGtG
bGlwcGVkRnJhZ0Nvb3JkTmFtZSgiZmxpcHBlZEZyYWdDb29yZCIsIFN5bWJvbFR5cGU6OkFuZ2xl
SW50ZXJuYWwpOwogCiBjb25zdGV4cHIgY29uc3QgVFZhcmlhYmxlIGtnbF9WZXJ0ZXhJRE1ldGFs
KAogICAgIEJ1aWx0SW5JZDo6Z2xfVmVydGV4SUQsCkBAIC04MjQsOTEgKzgyMyw2IEBAIFRJbnRl
cm1Td2l6emxlICpUcmFuc2xhdG9yTWV0YWxEaXJlY3Q6OmdldERyaXZlclVuaWZvcm1OZWdGbGlw
WVJlZigKICAgICByZXR1cm4gbmVnRmxpcFk7CiB9CiAKLXN0YXRpYyBzdGQ6OnNldDxJbW11dGFi
bGVTdHJpbmc+IEdldE1zbEtleXdvcmRzKCkKLXsKLSAgICBzdGQ6OnNldDxJbW11dGFibGVTdHJp
bmc+IGtleXdvcmRzOwotCi0gICAga2V5d29yZHMuZW1wbGFjZSgiYWxpZ25hcyIpOwotICAgIGtl
eXdvcmRzLmVtcGxhY2UoImFsaWdub2YiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJhc190eXBl
Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiYXV0byIpOwotICAgIGtleXdvcmRzLmVtcGxhY2Uo
ImNhdGNoIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiY2hhciIpOwotICAgIGtleXdvcmRzLmVt
cGxhY2UoImNsYXNzIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiY29uc3RfY2FzdCIpOwotICAg
IGtleXdvcmRzLmVtcGxhY2UoImNvbnN0YW50Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiY29u
c3RleHByIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiZGVjbHR5cGUiKTsKLSAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJkZWxldGUiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJkZXZpY2UiKTsKLSAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJkeW5hbWljX2Nhc3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJlbnVtIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiZXhwbGljaXQiKTsKLSAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJleHBvcnQiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJleHRlcm4iKTsKLSAg
ICBrZXl3b3Jkcy5lbXBsYWNlKCJmcmFnbWVudCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImZy
aWVuZCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImdvdG8iKTsKLSAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJoYWxmIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgiaW5saW5lIik7Ci0gICAga2V5d29y
ZHMuZW1wbGFjZSgiaW50MTZfdCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoImludDMyX3QiKTsK
LSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJpbnQ2NF90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgi
aW50OF90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgia2VybmVsIik7Ci0gICAga2V5d29yZHMu
ZW1wbGFjZSgibG9uZyIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoIm1haW4wIik7Ci0gICAga2V5
d29yZHMuZW1wbGFjZSgibWV0YWwiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJtdXRhYmxlIik7
Ci0gICAga2V5d29yZHMuZW1wbGFjZSgibmFtZXNwYWNlIik7Ci0gICAga2V5d29yZHMuZW1wbGFj
ZSgibmV3Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgibm9leGNlcHQiKTsKLSAgICBrZXl3b3Jk
cy5lbXBsYWNlKCJudWxscHRyX3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJudWxscHRyIik7
Ci0gICAga2V5d29yZHMuZW1wbGFjZSgib3BlcmF0b3IiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJvdmVycmlkZSIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInByaXZhdGUiKTsKLSAgICBrZXl3
b3Jkcy5lbXBsYWNlKCJwcm90ZWN0ZWQiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwdHJkaWZm
X3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJwdWJsaWMiKTsKLSAgICBrZXl3b3Jkcy5lbXBs
YWNlKCJyYXlfZGF0YSIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInJlZ2lzdGVyIik7Ci0gICAg
a2V5d29yZHMuZW1wbGFjZSgic2hvcnQiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaWduZWQi
KTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzaXplX3QiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNl
KCJzaXplb2YiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGFnZV9pbiIpOwotICAgIGtleXdv
cmRzLmVtcGxhY2UoInN0YXRpY19hc3NlcnQiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJzdGF0
aWNfY2FzdCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInN0YXRpYyIpOwotICAgIGtleXdvcmRz
LmVtcGxhY2UoInRlbXBsYXRlIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidGhpcyIpOwotICAg
IGtleXdvcmRzLmVtcGxhY2UoInRocmVhZF9sb2NhbCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2Uo
InRocmVhZCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInRocmVhZGdyb3VwX2ltYWdlYmxvY2si
KTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ0aHJlYWRncm91cCIpOwotICAgIGtleXdvcmRzLmVt
cGxhY2UoInRocm93Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidHJ5Iik7Ci0gICAga2V5d29y
ZHMuZW1wbGFjZSgidHlwZWRlZiIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVpZCIpOwot
ICAgIGtleXdvcmRzLmVtcGxhY2UoInR5cGVuYW1lIik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgi
dWNoYXIiKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50MTZfdCIpOwotICAgIGtleXdvcmRz
LmVtcGxhY2UoInVpbnQzMl90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidWludDY0X3QiKTsK
LSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1aW50OF90Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgi
dW5pb24iKTsKLSAgICBrZXl3b3Jkcy5lbXBsYWNlKCJ1bnNpZ25lZCIpOwotICAgIGtleXdvcmRz
LmVtcGxhY2UoInVzaG9ydCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInVzaW5nIik7Ci0gICAg
a2V5d29yZHMuZW1wbGFjZSgidmVydGV4Iik7Ci0gICAga2V5d29yZHMuZW1wbGFjZSgidmlydHVh
bCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoInZvbGF0aWxlIik7Ci0gICAga2V5d29yZHMuZW1w
bGFjZSgid2NoYXJfdCIpOwotICAgIGtleXdvcmRzLmVtcGxhY2UoIk5BTiIpOwotICAgIHJldHVy
biBrZXl3b3JkczsKLX0KLQogc3RhdGljIGlubGluZSBNZXRhbFNoYWRlclR5cGUgbWV0YWxTaGFk
ZXJUeXBlRnJvbUdMU0woc2g6OkdMZW51bSBzaGFkZXJUeXBlKQogewogICAgIHN3aXRjaCAoc2hh
ZGVyVHlwZSkKQEAgLTEzNzcsMTIgKzEyOTEsNiBAQCBib29sIFRyYW5zbGF0b3JNZXRhbERpcmVj
dDo6dHJhbnNsYXRlSW1wbChUSW50ZXJtQmxvY2sgJnJvb3QsIFNoQ29tcGlsZU9wdGlvbnMgYwog
ICAgIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQotICAgIGlmICghUmV3cml0ZUtl
eXdvcmRzKCp0aGlzLCByb290LCBpZEdlbiwgR2V0TXNsS2V5d29yZHMoKSkpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKCFSZWR1Y2VJbnRlcmZhY2VCbG9j
a3MoKnRoaXMsIHJvb3QsIGlkR2VuKSkKICAgICB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9y
L1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvSWRHZW4uY3Bw
CmluZGV4IDM1NjQ1ZGJmNDY0MWU0NTZhMDFkYWU1NzE5NmU2YmNlMDU2YjQ5Y2EuLjk5M2FhYzFk
OGJjNTQ0Zjg0NGVhMGIxZjdlNTE5ZWI5MWIwZDg3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVj
dC9JZEdlbi5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3Ry
YW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L0lkR2VuLmNwcApAQCAtOSw5ICs5LDcgQEAK
ICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KICNpbmNsdWRlIDx1
bm9yZGVyZWRfc2V0PgotCi0jaW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9y
TWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgiCi0KKyNpbmNsdWRlICJjb21waWxlci90cmFu
c2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgogdXNpbmcgbmFtZXNwYWNlIHNo
OwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L05h
bWUuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3Iv
VHJhbnNsYXRvck1ldGFsRGlyZWN0L05hbWUuY3BwCmluZGV4IDA3YzVkMTg1ZTZmYWQzNzU2OWVm
Y2JkODU1ZjJhZTQwMWU2NDNjOGEuLmYxNWQ4YzgwNTg0YTgxZWU2MzA3MWE2ZDQ5MjJmNWM3NzM4
YjFkYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci90
cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9OYW1lLmNwcAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJl
Y3QvTmFtZS5jcHAKQEAgLTY5LDExICs2OSwyMCBAQCB2b2lkIE5hbWU6OmVtaXQoVEluZm9TaW5r
QmFzZSAmb3V0KSBjb25zdAogICAgIHN3aXRjaCAobVN5bWJvbFR5cGUpCiAgICAgewogICAgICAg
ICBjYXNlIFN5bWJvbFR5cGU6OkJ1aWx0SW46Ci0gICAgICAgIGNhc2UgU3ltYm9sVHlwZTo6VXNl
ckRlZmluZWQ6CiAgICAgICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAg
ICAgICAgb3V0IDw8IG1SYXdOYW1lOwogICAgICAgICAgICAgYnJlYWs7Ci0KKyAgICAgICAgY2Fz
ZSBTeW1ib2xUeXBlOjpVc2VyRGVmaW5lZDoKKyAgICAgICAgICAgIEFTU0VSVCghbVJhd05hbWUu
ZW1wdHkoKSk7CisgICAgICAgICAgICBpZiAobVJhd05hbWUgIT0gIm1haW4iKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG91dCA8PCBrVXNlckRlZmluZWROYW1lUHJlZml4IDw8IG1S
YXdOYW1lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG91dCA8PCBtUmF3TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN5bWJvbFR5cGU6OkFuZ2xlSW50ZXJuYWw6CiAgICAg
ICAgICAgICBBU1NFUlQoIW1SYXdOYW1lLmVtcHR5KCkpOwogICAgICAgICAgICAgaWYgKG1SYXdO
YW1lLmJlZ2luc1dpdGgoa0FuZ2xlSW50ZXJuYWxQcmVmaXgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFs
RGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5jcHAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRz
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTM2NzZiZTgwZTQxMjBiOTlmNWE3
ZmQ2OTc5Nzc5YTI2ODIyMTUyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRv
ci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ2NCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IDIwMjAgVGhlIEFOR0xFIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0jaW5jbHVkZSA8Y2N0eXBlPgotI2luY2x1
ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+
Ci0jaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KLSNpbmNsdWRlIDxtYXA+Ci0KLSNpbmNsdWRlICJj
b21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9Bc3RIZWxwZXJzLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvRGVidWcu
aCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9S
ZXdyaXRlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL3RyZWVfdXRp
bC9JbnRlcm1SZWJ1aWxkLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBzaDsKLQotLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotbmFtZXNwYWNlCi17Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdXNp
bmcgUmVtYXBwaW5nID0gc3RkOjp1bm9yZGVyZWRfbWFwPGNvbnN0IFQgKiwgY29uc3QgVCAqPjsK
LQotY2xhc3MgUmV3cml0ZXIgOiBwdWJsaWMgVEludGVybVJlYnVpbGQKLXsKLSAgcHJpdmF0ZToK
LSAgICBjb25zdCBzdGQ6OnNldDxJbW11dGFibGVTdHJpbmc+ICZtS2V5d29yZHM7Ci0gICAgSWRH
ZW4gJm1JZEdlbjsKLSAgICBSZW1hcHBpbmc8VEZpZWxkPiBtb2RpZmllZEZpZWxkczsKLSAgICBS
ZW1hcHBpbmc8VEZpZWxkTGlzdD4gbUZpZWxkTGlzdHM7Ci0gICAgUmVtYXBwaW5nPFRGdW5jdGlv
bj4gbUZ1bmN0aW9uczsKLSAgICBSZW1hcHBpbmc8VEludGVyZmFjZUJsb2NrPiBtSW50ZXJmYWNl
QmxvY2tzOwotICAgIFJlbWFwcGluZzxUU3RydWN0dXJlPiBtU3RydWN0dXJlczsKLSAgICBSZW1h
cHBpbmc8VFZhcmlhYmxlPiBtVmFyaWFibGVzOwotICAgIHN0ZDo6bWFwPEltbXV0YWJsZVN0cmlu
Zywgc3RkOjpzdHJpbmc+IG1QcmVkZWZpbmVkTmFtZXM7Ci0gICAgc3RkOjpzdHJpbmcgbU5ld05h
bWVCdWZmZXI7Ci0KLSAgcHJpdmF0ZToKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBJ
bW11dGFibGVTdHJpbmcgbWF5YmVDcmVhdGVOZXdOYW1lKFQgY29uc3QgJm9iamVjdCkKLSAgICB7
Ci0gICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKG9iamVjdCwgZmFsc2UpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBhdXRvIGl0ID0gbVByZWRlZmluZWROYW1lcy5maW5kKE5hbWUob2JqZWN0KS5y
YXdOYW1lKCkpOwotICAgICAgICAgICAgaWYgKGl0ICE9IG1QcmVkZWZpbmVkTmFtZXMuZW5kKCkp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEltbXV0YWJsZVN0cmluZyhp
dC0+c2Vjb25kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtSWRHZW4uY3Jl
YXRlTmV3TmFtZShOYW1lKG9iamVjdCkpLnJhd05hbWUoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gTmFtZShvYmplY3QpLnJhd05hbWUoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBURmllbGQg
KmNyZWF0ZVJlbmFtZWQoY29uc3QgVEZpZWxkICZmaWVsZCkKLSAgICB7Ci0gICAgICAgIGF1dG8g
KnJlbmFtZWQgPQotICAgICAgICAgICAgbmV3IFRGaWVsZChjb25zdF9jYXN0PFRUeXBlICo+KCZn
ZXRSZW5hbWVkT3JPcmlnaW5hbCgqZmllbGQudHlwZSgpKSksCi0gICAgICAgICAgICAgICAgICAg
ICAgIG1heWJlQ3JlYXRlTmV3TmFtZShmaWVsZCksIGZpZWxkLmxpbmUoKSwgZmllbGQuc3ltYm9s
VHlwZSgpKTsKLQotICAgICAgICByZXR1cm4gcmVuYW1lZDsKLSAgICB9Ci0KLSAgICBjb25zdCBU
RmllbGRMaXN0ICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRGaWVsZExpc3QgJmZpZWxkTGlzdCkKLSAg
ICB7Ci0gICAgICAgIGF1dG8gKnJlbmFtZWQgPSBuZXcgVEZpZWxkTGlzdCgpOwotICAgICAgICBm
b3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExpc3QpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJlbmFtZWQtPnB1c2hfYmFjayhjb25zdF9jYXN0PFRGaWVsZCAqPigmZ2V0UmVuYW1lZE9y
T3JpZ2luYWwoKmZpZWxkKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZW5hbWVkOwot
ICAgIH0KLQotICAgIGNvbnN0IFRGdW5jdGlvbiAqY3JlYXRlUmVuYW1lZChjb25zdCBURnVuY3Rp
b24gJmZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgYXV0byAqcmVuYW1lZCA9Ci0gICAgICAgICAg
ICBuZXcgVEZ1bmN0aW9uKCZtU3ltYm9sVGFibGUsIG1heWJlQ3JlYXRlTmV3TmFtZShmdW5jdGlv
biksIGZ1bmN0aW9uLnN5bWJvbFR5cGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmdl
dFJlbmFtZWRPck9yaWdpbmFsKGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uLmlzS25vd25Ub05vdEhhdmVTaWRlRWZmZWN0cygpKTsK
LQotICAgICAgICBjb25zdCBzaXplX3QgcGFyYW1Db3VudCA9IGZ1bmN0aW9uLmdldFBhcmFtQ291
bnQoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbUNvdW50OyArK2kpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmcGFyYW0gPSAqZnVuY3Rpb24u
Z2V0UGFyYW0oaSk7Ci0gICAgICAgICAgICByZW5hbWVkLT5hZGRQYXJhbWV0ZXIoJmdldFJlbmFt
ZWRPck9yaWdpbmFsKHBhcmFtKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZnVuY3Rpb24u
aXNEZWZpbmVkKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbmFtZWQtPnNldERlZmluZWQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmdW5jdGlvbi5oYXNQcm90b3R5cGVEZWNsYXJh
dGlvbigpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZW5hbWVkLT5zZXRIYXNQcm90b3R5cGVE
ZWNsYXJhdGlvbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlbmFtZWQ7Ci0gICAg
fQotCi0gICAgY29uc3QgVEludGVyZmFjZUJsb2NrICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAmaW50ZXJmYWNlQmxvY2spCi0gICAgewotICAgICAgICBUTGF5b3V0UXVhbGlm
aWVyIGxheW91dFF1YWxpZmllciA9IFRMYXlvdXRRdWFsaWZpZXI6OkNyZWF0ZSgpOwotICAgICAg
ICBsYXlvdXRRdWFsaWZpZXIuYmxvY2tTdG9yYWdlICAgICA9IGludGVyZmFjZUJsb2NrLmJsb2Nr
U3RvcmFnZSgpOwotICAgICAgICBsYXlvdXRRdWFsaWZpZXIuYmluZGluZyAgICAgICAgICA9IGlu
dGVyZmFjZUJsb2NrLmJsb2NrQmluZGluZygpOwotCi0gICAgICAgIGF1dG8gKnJlbmFtZWQgPQot
ICAgICAgICAgICAgbmV3IFRJbnRlcmZhY2VCbG9jaygmbVN5bWJvbFRhYmxlLCBtYXliZUNyZWF0
ZU5ld05hbWUoaW50ZXJmYWNlQmxvY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwoaW50ZXJmYWNlQmxvY2suZmllbGRzKCkpLCBsYXlvdXRR
dWFsaWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUJsb2Nr
LnN5bWJvbFR5cGUoKSwgaW50ZXJmYWNlQmxvY2suZXh0ZW5zaW9uKCkpOwotCi0gICAgICAgIHJl
dHVybiByZW5hbWVkOwotICAgIH0KLQotICAgIGNvbnN0IFRTdHJ1Y3R1cmUgKmNyZWF0ZVJlbmFt
ZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgYXV0byAqcmVu
YW1lZCA9Ci0gICAgICAgICAgICBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBtYXliZUNy
ZWF0ZU5ld05hbWUoc3RydWN0dXJlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZnZXRS
ZW5hbWVkT3JPcmlnaW5hbChzdHJ1Y3R1cmUuZmllbGRzKCkpLCBzdHJ1Y3R1cmUuc3ltYm9sVHlw
ZSgpKTsKLQotICAgICAgICByZW5hbWVkLT5zZXRBdEdsb2JhbFNjb3BlKHN0cnVjdHVyZS5hdEds
b2JhbFNjb3BlKCkpOwotCi0gICAgICAgIHJldHVybiByZW5hbWVkOwotICAgIH0KLQotICAgIGNv
bnN0IFRUeXBlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRUeXBlICZ0eXBlKQotICAgIHsKLSAgICAg
ICAgVFR5cGUgKnJlbmFtZWQ7Ci0KLSAgICAgICAgaWYgKGNvbnN0IFRTdHJ1Y3R1cmUgKnN0cnVj
dHVyZSA9IHR5cGUuZ2V0U3RydWN0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJlbmFtZWQg
PSBuZXcgVFR5cGUoJmdldFJlbmFtZWRPck9yaWdpbmFsKCpzdHJ1Y3R1cmUpLCB0eXBlLmlzU3Ry
dWN0U3BlY2lmaWVyKCkpOwotICAgICAgICAgICAgcmVuYW1lZC0+c2V0UXVhbGlmaWVyKHR5cGUu
Z2V0UXVhbGlmaWVyKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbnN0IFRJbnRl
cmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJsb2NrKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJlbmFtZWQgPSBuZXcgVFR5cGUoJmdldFJlbmFtZWRPck9y
aWdpbmFsKCppbnRlcmZhY2VCbG9jayksIHR5cGUuZ2V0UXVhbGlmaWVyKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0TGF5b3V0UXVhbGlmaWVyKCkpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgTE9HSUNfRVJST1IoKTsg
IC8vIENhbid0IHJlbmFtZSBidWlsdC1pbiB0eXBlcy4KLSAgICAgICAgICAgIHJlbmFtZWQgPSBu
dWxscHRyOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHR5cGUuaXNBcnJheSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZW5hbWVkLT5tYWtlQXJyYXlzKHR5cGUuZ2V0QXJyYXlTaXplcygp
KTsKLSAgICAgICAgfQotICAgICAgICByZW5hbWVkLT5zZXRQcmVjaXNlKHR5cGUuaXNQcmVjaXNl
KCkpOwotICAgICAgICByZW5hbWVkLT5zZXRJbnZhcmlhbnQodHlwZS5pc0ludmFyaWFudCgpKTsK
LSAgICAgICAgcmVuYW1lZC0+c2V0TWVtb3J5UXVhbGlmaWVyKHR5cGUuZ2V0TWVtb3J5UXVhbGlm
aWVyKCkpOwotICAgICAgICByZW5hbWVkLT5zZXRMYXlvdXRRdWFsaWZpZXIodHlwZS5nZXRMYXlv
dXRRdWFsaWZpZXIoKSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlbmFtZWQ7Ci0gICAgfQotCi0gICAg
Y29uc3QgVFZhcmlhYmxlICpjcmVhdGVSZW5hbWVkKGNvbnN0IFRWYXJpYWJsZSAmdmFyaWFibGUp
Ci0gICAgewotICAgICAgICBhdXRvICpyZW5hbWVkID0gbmV3IFRWYXJpYWJsZSgmbVN5bWJvbFRh
YmxlLCBtYXliZUNyZWF0ZU5ld05hbWUodmFyaWFibGUpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmZ2V0UmVuYW1lZE9yT3JpZ2luYWwodmFyaWFibGUuZ2V0VHlwZSgp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuc3ltYm9s
VHlwZSgpLCB2YXJpYWJsZS5leHRlbnNpb24oKSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlbmFtZWQ7
Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci0gICAgY29uc3QgVCAqdHJ5R2V0
UmVuYW1lZEltcGwoY29uc3QgVCAmb2JqZWN0LCBSZW1hcHBpbmc8VD4gKnJlbWFwcGluZykKLSAg
ICB7Ci0gICAgICAgIGlmICghbmVlZHNSZW5hbWluZyhvYmplY3QsIHRydWUpKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZW1hcHBpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXQgPSByZW1hcHBpbmctPmZp
bmQoJm9iamVjdCk7Ci0gICAgICAgICAgICBpZiAoaXQgIT0gcmVtYXBwaW5nLT5lbmQoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFQgKnJlbmFtZWRPYmplY3QgPSBjcmVh
dGVSZW5hbWVkKG9iamVjdCk7Ci0KLSAgICAgICAgaWYgKHJlbWFwcGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgKCpyZW1hcHBpbmcpWyZvYmplY3RdID0gcmVuYW1lZE9iamVjdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiByZW5hbWVkT2JqZWN0OwotICAgIH0KLQotICAgIGNvbnN0
IFRGaWVsZCAqdHJ5R2V0UmVuYW1lZChjb25zdCBURmllbGQgJmZpZWxkKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZpZWxkLCAmbW9kaWZpZWRGaWVsZHMpOwotICAg
IH0KLQotICAgIGNvbnN0IFRGaWVsZExpc3QgKnRyeUdldFJlbmFtZWQoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKGZp
ZWxkTGlzdCwgJm1GaWVsZExpc3RzKTsKLSAgICB9Ci0KLSAgICBjb25zdCBURnVuY3Rpb24gKnRy
eUdldFJlbmFtZWQoY29uc3QgVEZ1bmN0aW9uICZmdW5jKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHRyeUdldFJlbmFtZWRJbXBsKGZ1bmMsICZtRnVuY3Rpb25zKTsKLSAgICB9Ci0KLSAgICBjb25z
dCBUSW50ZXJmYWNlQmxvY2sgKnRyeUdldFJlbmFtZWQoY29uc3QgVEludGVyZmFjZUJsb2NrICZp
bnRlcmZhY2VCbG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbChp
bnRlcmZhY2VCbG9jaywgJm1JbnRlcmZhY2VCbG9ja3MpOwotICAgIH0KLQotICAgIGNvbnN0IFRT
dHJ1Y3R1cmUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHRyeUdldFJlbmFtZWRJbXBsKHN0cnVjdHVyZSwgJm1TdHJ1Y3R1
cmVzKTsKLSAgICB9Ci0KLSAgICBjb25zdCBUVHlwZSAqdHJ5R2V0UmVuYW1lZChjb25zdCBUVHlw
ZSAmdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh0eXBlLCBz
dGF0aWNfY2FzdDxSZW1hcHBpbmc8VFR5cGU+ICo+KG51bGxwdHIpKTsKLSAgICB9Ci0KLSAgICBj
b25zdCBUVmFyaWFibGUgKnRyeUdldFJlbmFtZWQoY29uc3QgVFZhcmlhYmxlICZ2YXJpYWJsZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB0cnlHZXRSZW5hbWVkSW1wbCh2YXJpYWJsZSwgJm1WYXJp
YWJsZXMpOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICAgIGNvbnN0IFQg
JmdldFJlbmFtZWRPck9yaWdpbmFsKGNvbnN0IFQgJm9iamVjdCkKLSAgICB7Ci0gICAgICAgIGNv
bnN0IFQgKnJlbmFtZWQgPSB0cnlHZXRSZW5hbWVkKG9iamVjdCk7Ci0gICAgICAgIGlmIChyZW5h
bWVkKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlbmFtZWQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLSAgICBib29sIG5lZWRzUmVuYW1pbmdJbXBsKGNvbnN0IFQgJm9iamVjdCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IFN5bWJvbFR5cGUgc3ltYm9sVHlwZSA9IG9iamVjdC5zeW1ib2xU
eXBlKCk7Ci0gICAgICAgIHN3aXRjaCAoc3ltYm9sVHlwZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgY2FzZSBTeW1ib2xUeXBlOjpCdWlsdEluOgotICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBl
OjpBbmdsZUludGVybmFsOgotICAgICAgICAgICAgY2FzZSBTeW1ib2xUeXBlOjpFbXB0eToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGNhc2UgU3ltYm9sVHlw
ZTo6VXNlckRlZmluZWQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjb25zdCBJbW11dGFibGVTdHJpbmcgbmFtZSA9IE5hbWUob2JqZWN0KS5yYXdOYW1lKCk7
Ci0gICAgICAgIGlmIChtS2V5d29yZHMuZmluZChuYW1lKSAhPSBtS2V5d29yZHMuZW5kKCkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG5hbWUuYmVnaW5zV2l0aChrQW5nbGVJbnRlcm5hbFByZWZpeCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGJvb2wgbmVlZHNSZW5hbWluZyhjb25zdCBURmllbGQgJmZpZWxkLCBi
b29sIHJlY3Vyc2l2ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5n
SW1wbChmaWVsZCkgfHwgKHJlY3Vyc2l2ZSAmJiBuZWVkc1JlbmFtaW5nKCpmaWVsZC50eXBlKCks
IHRydWUpKTsKLSAgICB9Ci0KLSAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEZpZWxkTGlz
dCAmZmllbGRMaXN0LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChyZWN1cnNpdmUpOwotICAgICAgICBmb3IgKGNvbnN0IFRGaWVsZCAqZmllbGQgOiBmaWVsZExp
c3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKCpmaWVsZCwgdHJ1
ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJv
b2wgbmVlZHNSZW5hbWluZyhjb25zdCBURnVuY3Rpb24gJmZ1bmN0aW9uLCBib29sIHJlY3Vyc2l2
ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChuZWVkc1JlbmFtaW5nSW1wbChmdW5jdGlvbikp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKCFyZWN1cnNpdmUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IHNpemVfdCBwYXJhbUNvdW50ID0gZnVuY3Rpb24u
Z2V0UGFyYW1Db3VudCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtQ291
bnQ7ICsraSkKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVFZhcmlhYmxlICZwYXJhbSA9
ICpmdW5jdGlvbi5nZXRQYXJhbShpKTsKLSAgICAgICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHBh
cmFtLCB0cnVlKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVEludGVyZmFjZUJsb2NrICZpbnRlcmZh
Y2VCbG9jaywgYm9vbCByZWN1cnNpdmUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbmVl
ZHNSZW5hbWluZ0ltcGwoaW50ZXJmYWNlQmxvY2spIHx8Ci0gICAgICAgICAgICAgICAocmVjdXJz
aXZlICYmIG5lZWRzUmVuYW1pbmcoaW50ZXJmYWNlQmxvY2suZmllbGRzKCksIHRydWUpKTsKLSAg
ICB9Ci0KLSAgICBib29sIG5lZWRzUmVuYW1pbmcoY29uc3QgVFN0cnVjdHVyZSAmc3RydWN0dXJl
LCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc1JlbmFt
aW5nSW1wbChzdHJ1Y3R1cmUpIHx8Ci0gICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIG5lZWRz
UmVuYW1pbmcoc3RydWN0dXJlLmZpZWxkcygpLCB0cnVlKSk7Ci0gICAgfQotCi0gICAgYm9vbCBu
ZWVkc1JlbmFtaW5nKGNvbnN0IFRUeXBlICZ0eXBlLCBib29sIHJlY3Vyc2l2ZSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGlmIChjb25zdCBUU3RydWN0dXJlICpzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0
cnVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmVlZHNSZW5hbWluZygqc3Ry
dWN0dXJlLCByZWN1cnNpdmUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNvbnN0IFRJ
bnRlcmZhY2VCbG9jayAqaW50ZXJmYWNlQmxvY2sgPSB0eXBlLmdldEludGVyZmFjZUJsb2NrKCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nKCppbnRlcmZhY2VC
bG9jaywgcmVjdXJzaXZlKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgbmVl
ZHNSZW5hbWluZyhjb25zdCBUVmFyaWFibGUgJnZhcmlhYmxlLCBib29sIHJlY3Vyc2l2ZSkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZWVkc1JlbmFtaW5nSW1wbCh2YXJpYWJsZSkgfHwK
LSAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgbmVlZHNSZW5hbWluZyh2YXJpYWJsZS5nZXRU
eXBlKCksIHRydWUpKTsKLSAgICB9Ci0KLSAgcHVibGljOgotICAgIFJld3JpdGVyKFRDb21waWxl
ciAmY29tcGlsZXIsIElkR2VuICZpZEdlbiwgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5n
PiAma2V5d29yZHMpCi0gICAgICAgIDogVEludGVybVJlYnVpbGQoY29tcGlsZXIsIGZhbHNlLCB0
cnVlKSwgbUtleXdvcmRzKGtleXdvcmRzKSwgbUlkR2VuKGlkR2VuKQotICAgIHt9Ci0KLSAgICBQ
b3N0UmVzdWx0IHZpc2l0U3ltYm9sUG9zdChUSW50ZXJtU3ltYm9sICZzeW1ib2xOb2RlKQotICAg
IHsKLSAgICAgICAgY29uc3QgVFZhcmlhYmxlICZ2YXIgPSBzeW1ib2xOb2RlLnZhcmlhYmxlKCk7
Ci0gICAgICAgIGlmIChuZWVkc1JlbmFtaW5nKHZhciwgdHJ1ZSkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGNvbnN0IFRWYXJpYWJsZSAmclZhciA9IGdldFJlbmFtZWRPck9yaWdpbmFsKHZhcik7
Ci0gICAgICAgICAgICByZXR1cm4gKm5ldyBUSW50ZXJtU3ltYm9sKCZyVmFyKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gc3ltYm9sTm9kZTsKLSAgICB9Ci0KLSAgICBQb3N0UmVzdWx0IHZp
c2l0RnVuY3Rpb25Qcm90b3R5cGUoVEludGVybUZ1bmN0aW9uUHJvdG90eXBlICZmdW5jUHJvdG9O
b2RlKQotICAgIHsKLSAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jID0gKmZ1bmNQcm90b05v
ZGUuZ2V0RnVuY3Rpb24oKTsKLSAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVuYywgdHJ1ZSkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5h
bWVkT3JPcmlnaW5hbChmdW5jKTsKLSAgICAgICAgICAgIHJldHVybiAqbmV3IFRJbnRlcm1GdW5j
dGlvblByb3RvdHlwZSgmckZ1bmMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmdW5jUHJv
dG9Ob2RlOwotICAgIH0KLQotICAgIFBvc3RSZXN1bHQgdmlzaXREZWNsYXJhdGlvblBvc3QoVElu
dGVybURlY2xhcmF0aW9uICZkZWNsTm9kZSkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIERlY2xh
cmF0aW9uIGRlY2wgICAgID0gVmlld0RlY2xhcmF0aW9uKGRlY2xOb2RlKTsKLSAgICAgICAgY29u
c3QgVFZhcmlhYmxlICZ2YXIgPSBkZWNsLnN5bWJvbC52YXJpYWJsZSgpOwotICAgICAgICBpZiAo
bmVlZHNSZW5hbWluZyh2YXIsIHRydWUpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBU
VmFyaWFibGUgJnJWYXIgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbCh2YXIpOwotICAgICAgICAgICAg
cmV0dXJuICpuZXcgVEludGVybURlY2xhcmF0aW9uKCZyVmFyLCBkZWNsLmluaXRFeHByKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZGVjbE5vZGU7Ci0gICAgfQotCi0gICAgUG9zdFJlc3Vs
dCB2aXNpdEZ1bmN0aW9uRGVmaW5pdGlvblBvc3QoVEludGVybUZ1bmN0aW9uRGVmaW5pdGlvbiAm
ZnVuY0RlZk5vZGUpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBUSW50ZXJtRnVuY3Rpb25Qcm90
b3R5cGUgJmZ1bmNQcm90b05vZGUgPSAqZnVuY0RlZk5vZGUuZ2V0RnVuY3Rpb25Qcm90b3R5cGUo
KTsKLSAgICAgICAgY29uc3QgVEZ1bmN0aW9uICZmdW5jICAgICAgICAgICAgICAgICAgID0gKmZ1
bmNQcm90b05vZGUuZ2V0RnVuY3Rpb24oKTsKLSAgICAgICAgaWYgKG5lZWRzUmVuYW1pbmcoZnVu
YywgdHJ1ZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMg
PSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsKLSAgICAgICAgICAgIGF1dG8gKnJGdW5jUHJv
dG9Ob2RlICAgPSBuZXcgVEludGVybUZ1bmN0aW9uUHJvdG90eXBlKCZyRnVuYyk7Ci0gICAgICAg
ICAgICByZXR1cm4gKm5ldyBUSW50ZXJtRnVuY3Rpb25EZWZpbml0aW9uKHJGdW5jUHJvdG9Ob2Rl
LCBmdW5jRGVmTm9kZS5nZXRCb2R5KCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmdW5j
RGVmTm9kZTsKLSAgICB9Ci0KLSAgICBQb3N0UmVzdWx0IHZpc2l0QWdncmVnYXRlUG9zdChUSW50
ZXJtQWdncmVnYXRlICZhZ2dyZWdhdGVOb2RlKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYg
KGFnZ3JlZ2F0ZU5vZGUuaXNDb25zdHJ1Y3RvcigpKQotICAgICAgICB7Ci0gICAgICAgICAgICBj
b25zdCBUVHlwZSAmdHlwZSA9IGFnZ3JlZ2F0ZU5vZGUuZ2V0VHlwZSgpOwotICAgICAgICAgICAg
aWYgKG5lZWRzUmVuYW1pbmcodHlwZSwgdHJ1ZSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVFR5cGUgJnJUeXBlID0gZ2V0UmVuYW1lZE9yT3JpZ2luYWwodHlwZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZUNvbnN0cnVjdG9y
KHJUeXBlLCBhZ2dyZWdhdGVOb2RlLmdldFNlcXVlbmNlKCkpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgVEZ1bmN0
aW9uICZmdW5jID0gKmFnZ3JlZ2F0ZU5vZGUuZ2V0RnVuY3Rpb24oKTsKLSAgICAgICAgICAgIGlm
IChuZWVkc1JlbmFtaW5nKGZ1bmMsIHRydWUpKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGNvbnN0IFRGdW5jdGlvbiAmckZ1bmMgPSBnZXRSZW5hbWVkT3JPcmlnaW5hbChmdW5jKTsK
LSAgICAgICAgICAgICAgICBzd2l0Y2ggKGFnZ3JlZ2F0ZU5vZGUuZ2V0T3AoKSkKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVE9wZXJhdG9yOjpFT3BDYWxsRnVu
Y3Rpb25JbkFTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUSW50ZXJtQWdncmVn
YXRlOjpDcmVhdGVGdW5jdGlvbkNhbGwockZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZU5vZGUu
Z2V0U2VxdWVuY2UoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBUT3BlcmF0b3I6OkVP
cENhbGxJbnRlcm5hbFJhd0Z1bmN0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFRJbnRlcm1BZ2dyZWdhdGU6OkNyZWF0ZVJhd0Z1bmN0aW9uQ2FsbChyRnVuYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWdncmVnYXRlTm9kZS5nZXRTZXF1ZW5jZSgpKTsKLQotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRJbnRlcm1BZ2dyZWdh
dGU6OkNyZWF0ZUJ1aWx0SW5GdW5jdGlvbkNhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgckZ1bmMsIGFnZ3JlZ2F0ZU5vZGUuZ2V0U2VxdWVuY2UoKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhZ2dyZWdhdGVOb2Rl
OwotICAgIH0KLQotICAgIGNvbnN0IHZvaWQgcHJlZGVmaW5lTmFtZShjb25zdCBJbW11dGFibGVT
dHJpbmcgbmFtZSwgc3RkOjpzdHJpbmcgcHJlUG9wdWxhdGVkTmFtZSkKLSAgICB7Ci0gICAgICAg
IG1QcmVkZWZpbmVkTmFtZXNbbmFtZV0gPSBwcmVQb3B1bGF0ZWROYW1lOwotICAgIH0KLX07Ci0K
LX0gIC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQot
Ym9vbCBzaDo6UmV3cml0ZUtleXdvcmRzKFRDb21waWxlciAmY29tcGlsZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgVEludGVybUJsb2NrICZyb290LAotICAgICAgICAgICAgICAgICAgICAg
ICAgIElkR2VuICZpZEdlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnNl
dDxJbW11dGFibGVTdHJpbmc+ICZrZXl3b3JkcykKLXsKLSAgICBSZXdyaXRlciByZXdyaXRlcihj
b21waWxlciwgaWRHZW4sIGtleXdvcmRzKTsKLSAgICBjb25zdCBhdXRvICZpbnB1dEF0dHJzICAg
ICA9IGNvbXBpbGVyLmdldEF0dHJpYnV0ZXMoKTsKLSAgICBmb3IoY29uc3QgYXV0byAmIHZhciA6
IGlucHV0QXR0cnMpCi0gICAgewotICAgICAgICByZXdyaXRlci5wcmVkZWZpbmVOYW1lKEltbXV0
YWJsZVN0cmluZyh2YXIubmFtZSksIHZhci5tYXBwZWROYW1lKTsKLSAgICB9Ci0gICAgaWYgKCFy
ZXdyaXRlci5yZWJ1aWxkUm9vdChyb290KSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJhbnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3
cml0ZUtleXdvcmRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdHJh
bnNsYXRvci9UcmFuc2xhdG9yTWV0YWxEaXJlY3QvUmV3cml0ZUtleXdvcmRzLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxNjJiYzc5YjQxMThmOWM3NDQ3NWMyNjhiNjlkZTYyNWM1
N2Y0NTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1l
dGFsRGlyZWN0L1Jld3JpdGVLZXl3b3Jkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBA
QAotLy8KLS8vIENvcHlyaWdodCAyMDIwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgotLy8KLQotI2lmbmRlZiBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JNRVRB
TERJUkVDVF9SRVdSSVRFS0VZV09SRFNfSF8KLSNkZWZpbmUgQ09NUElMRVJfVFJBTlNMQVRPUl9U
UkFOU0xBVE9STUVUQUxESVJFQ1RfUkVXUklURUtFWVdPUkRTX0hfCi0KLSNpbmNsdWRlIDxzZXQ+
Ci0KLSNpbmNsdWRlICJjb21tb24vYW5nbGV1dGlscy5oIgotI2luY2x1ZGUgImNvbXBpbGVyL3Ry
YW5zbGF0b3IvQ29tcGlsZXIuaCIKLSNpbmNsdWRlICJjb21waWxlci90cmFuc2xhdG9yL1RyYW5z
bGF0b3JNZXRhbERpcmVjdC9JZEdlbi5oIgotCi1uYW1lc3BhY2Ugc2gKLXsKLQotLy8gVGhpcyB3
YWxrcyB0aGUgdHJlZSBhbmQgcmVuYW1lcyBhbGwgbmFtZXMgdGhhdCBjb25mbGljdCB3aXRoIHRo
ZSBpbnB1dCBga2V5d29yZHNgLgotQU5HTEVfTk9fRElTQ0FSRCBib29sIFJld3JpdGVLZXl3b3Jk
cyhUQ29tcGlsZXIgJmNvbXBpbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUSW50ZXJtQmxvY2sgJnJvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIElkR2VuICZpZEdlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzZXQ8SW1tdXRhYmxlU3RyaW5nPiAma2V5d29yZHMpOwotCi19ICAvLyBu
YW1lc3BhY2Ugc2gKLQotI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SX1RSQU5TTEFUT1JN
RVRBTERJUkVDVF9SRVdSSVRFS0VZV09SRFNfSF8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci90cmFuc2xhdG9yL1RyYW5zbGF0b3JNZXRhbERpcmVjdC9T
eW1ib2xFbnYuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5z
bGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKaW5kZXggMmZkMDkxMTY1
MDI0NGQ5NDhkMWQwNDg0MGIxYjM1ZjgwN2I4ZTdkMC4uYTQxZDBkYzE1YmRmZTlhY2UwMGE3Mzli
NjhiMmQ2ZTM3NDk1ZTQ0NiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJhbnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3RyYW5zbGF0b3IvVHJh
bnNsYXRvck1ldGFsRGlyZWN0L1N5bWJvbEVudi5jcHAKQEAgLTM5MCwxMyArMzkwLDEyIEBAIGNv
bnN0IFRTdHJ1Y3R1cmUgJlN5bWJvbEVudjo6Z2V0VGV4dHVyZUVudihUQmFzaWNUeXBlIHNhbXBs
ZXJUeXBlKQogICAgIGlmIChlbnYgPT0gbnVsbHB0cikKICAgICB7CiAgICAgICAgIGF1dG8gKnRl
eHR1cmVUeXBlID0gbmV3IFRUeXBlKHNhbXBsZXJUeXBlKTsKLSAgICAgICAgYXV0byAqdGV4dHVy
ZSAgICAgPSBuZXcgVEZpZWxkKHRleHR1cmVUeXBlLCBJbW11dGFibGVTdHJpbmcoInRleHR1cmUi
KSwga05vU291cmNlTG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW1i
b2xUeXBlOjpVc2VyRGVmaW5lZCk7CisgICAgICAgIGF1dG8gKnRleHR1cmUgPQorICAgICAgICAg
ICAgbmV3IFRGaWVsZCh0ZXh0dXJlVHlwZSwgSW1tdXRhYmxlU3RyaW5nKCJ0ZXh0dXJlIiksIGtO
b1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6QnVpbHRJbik7CiAgICAgICAgIG1hcmtBc1BvaW50ZXIo
KnRleHR1cmUsIEFkZHJlc3NTcGFjZTo6VGhyZWFkKTsKIAotICAgICAgICBhdXRvICpzYW1wbGVy
ID0KLSAgICAgICAgICAgIG5ldyBURmllbGQobmV3IFRUeXBlKCZnZXRTYW1wbGVyU3RydWN0KCks
IGZhbHNlKSwgSW1tdXRhYmxlU3RyaW5nKCJzYW1wbGVyIiksCi0gICAgICAgICAgICAgICAgICAg
ICAgIGtOb1NvdXJjZUxvYywgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgICAgICBhdXRv
ICpzYW1wbGVyID0gbmV3IFRGaWVsZChuZXcgVFR5cGUoJmdldFNhbXBsZXJTdHJ1Y3QoKSwgZmFs
c2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbW11dGFibGVTdHJpbmco
InNhbXBsZXIiKSwga05vU291cmNlTG9jLCBTeW1ib2xUeXBlOjpCdWlsdEluKTsKICAgICAgICAg
bWFya0FzUG9pbnRlcigqc2FtcGxlciwgQWRkcmVzc1NwYWNlOjpUaHJlYWQpOwogCiAgICAgICAg
IHN0ZDo6c3RyaW5nIGVudk5hbWU7CkBAIC00MTUsNyArNDE0LDcgQEAgY29uc3QgVFN0cnVjdHVy
ZSAmU3ltYm9sRW52OjpnZXRTYW1wbGVyU3RydWN0KCkKICAgICBpZiAoIW1TYW1wbGVyKQogICAg
IHsKICAgICAgICAgbVNhbXBsZXIgPSBuZXcgVFN0cnVjdHVyZSgmbVN5bWJvbFRhYmxlLCBJbW11
dGFibGVTdHJpbmcoIm1ldGFsOjpzYW1wbGVyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV3IFRGaWVsZExpc3QoKSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBURmllbGRMaXN0KCksIFN5bWJvbFR5
cGU6OkJ1aWx0SW4pOwogICAgIH0KICAgICByZXR1cm4gKm1TYW1wbGVyOwogfQpAQCAtNzAxLDUg
KzcwMCw1IEBAIE5hbWUgc2g6OkdldFRleHR1cmVUeXBlTmFtZShUQmFzaWNUeXBlIHNhbXBsZXJU
eXBlKQogCiAjdW5kZWYgSEFORExFX1RFWFRVUkVfTkFNRQogCi0gICAgcmV0dXJuIE5hbWUobmFt
ZSwgU3ltYm9sVHlwZTo6VXNlckRlZmluZWQpOworICAgIHJldHVybiBOYW1lKG5hbWUsIFN5bWJv
bFR5cGU6OkJ1aWx0SW4pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFsL210bF9nbHNsYW5nX210bF91dGlscy5tbSBiL1Nv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9tZXRhbC9tdGxfZ2xz
bGFuZ19tdGxfdXRpbHMubW0KaW5kZXggNzkxMjg1YmI0NWY5ZTg2MzQ4M2E0MGQ4ZTcwMDk1NTZj
ZjEwZWU1Mi4uZjYzYjhmOGNjODQ3NGUwYWFjODljZjFlOWVlZGM0NzdiNWM3NzdmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL21ldGFs
L210bF9nbHNsYW5nX210bF91dGlscy5tbQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliQU5HTEUvcmVuZGVyZXIvbWV0YWwvbXRsX2dsc2xhbmdfbXRsX3V0aWxzLm1tCkBAIC0x
NywxNiArMTcsMTYgQEAgbmFtZXNwYWNlCiB7CiAgICAgY29uc3RleHByIGNoYXIga1hmYkJpbmRp
bmdzTWFya2VyW10gICAgPSAiQEBYRkItQmluZGluZ3NAQCI7CiAgICAgY29uc3RleHByIGNoYXIg
a1hmYk91dE1hcmtlcltdICAgICA9ICJBTkdMRV9AQFhGQi1PVVRAQCI7CisgICAgY29uc3RleHBy
IGNoYXIga1VzZXJEZWZpbmVkTmFtZVByZWZpeFtdID0gIl91IjsgIC8vIERlZmluZWQgaW4gR0xT
TEFORy9TaGFkZXJMYW5nLmgKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IE4+CisgICAgY29uc3RleHBy
IHNpemVfdCBDb25zdFN0ckxlbihjb25zdCBjaGFyICgmKVtOXSkKKyAgICB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoTiA+IDAsICJDKysgc2hvdWxkbid0IGFsbG93IE4gdG8gYmUgemVybyIpOwog
Ci10ZW1wbGF0ZSA8c2l6ZV90IE4+Ci1jb25zdGV4cHIgc2l6ZV90IENvbnN0U3RyTGVuKGNvbnN0
IGNoYXIgKCYpW05dKQotewotICAgIHN0YXRpY19hc3NlcnQoTiA+IDAsICJDKysgc2hvdWxkbid0
IGFsbG93IE4gdG8gYmUgemVybyIpOwotCi0gICAgLy8gVGhlIGxlbmd0aCBvZiBhIHN0cmluZyBk
ZWZpbmVkIGFzIGEgY2hhciBhcnJheSBpcyB0aGUgc2l6ZSBvZiB0aGUgYXJyYXkgbWludXMgMSAo
dGhlCi0gICAgLy8gdGVybWluYXRpbmcgJ1wwJykuCi0gICAgcmV0dXJuIE4gLSAxOwotfQorICAg
ICAgICAvLyBUaGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGRlZmluZWQgYXMgYSBjaGFyIGFycmF5IGlz
IHRoZSBzaXplIG9mIHRoZSBhcnJheSBtaW51cyAxCisgICAgICAgIC8vICggdGVybWluYXRpbmcg
J1wwJykuCisgICAgICAgIHJldHVybiBOIC0gMTsKKyAgICB9CiAKIHN0ZDo6c3RyaW5nIEdldFhm
YkJ1ZmZlck5hbWVNdGwoY29uc3QgdWludDMyX3QgYnVmZmVySW5kZXgpCiB7CkBAIC0yNTgsNyAr
MjU4LDcgQEAgc3RkOjpzdHJpbmcgR2VuZXJhdGVUcmFuc2Zvcm1GZWVkYmFja1ZhcnlpbmdPdXRw
dXQoY29uc3QgZ2w6OlRyYW5zZm9ybUZlZWRiYWNrVmEKICAgICAgICAgICAgICAgICAgICAgICAg
PDwgIl0gKyAoZ2xfVmVydGV4SUQgKyBBTkdMRV9pbnN0YW5jZUlkTW9kICogIgogICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiQU5HTEVfIiA8PCBzdGQ6OnN0cmluZyhzaDo6a1VuaWZvcm1zVmFy
KSA8PCAiLkFOR0xFX3hmYlZlcnRpY2VzUGVyRHJhdykgKiAiIDw8IHN0cmlkZQogICAgICAgICAg
ICAgICAgICAgICAgICA8PCAiICsgIiA8PCBvZmZzZXQgPDwgIl0gPSAiIDw8ICJhc190eXBlPGZs
b2F0PiIgPDwgIigiCi0gICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV92ZXJ0ZXhPdXQu
IiA8PCB2YXJ5aW5nLm5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgIDw8ICJBTkdMRV92ZXJ0
ZXhPdXQuIiA8PCBrVXNlckRlZmluZWROYW1lUHJlZml4IDw8IHZhcnlpbmcubmFtZTsKIAogICAg
ICAgICAgICAgICAgIGlmICh2YXJ5aW5nLmlzQXJyYXkoKSkKICAgICAgICAgICAgICAgICB7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggODgyNDQ3NGE1MzI4NWFkMmZkMTVmOTM1NDNjZTlmNDQyMDk3NGQzZC4uMGI4ZDUyZTIx
YzEzYjYwZjM5MWVhYTQzOWIxZTJjMThkZjFkYmY0NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDIxLTEwLTA2ICBLeWxlIFBpZGRpbmd0b24gIDxrcGlkZGluZ3RvbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU2hhZGVydG95ICJ0cnVjaGV0IGRpc3RyaWN0IiBmYWlscyB0byBjb21waWxlIHdpdGgg
ZXJyb3I6IEludGVybmFsIGVycm9yIGNvbXBpbGluZyBzaGFkZXIgd2l0aCBNZXRhbCBiYWNrZW5k
IgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI5Mzc4
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84MjI5OTA1Mz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgQWRkIGEgdGVzdCB0ZXN0aW5nIE1ldGFsIHJl
c2VydmVkIHdvcmRzIGFuZCBzdGFuZGFyZCBsaWJyYXJ5IG1hY3Jvcy4KKworICAgICAgICAqIHdl
YmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdv
cmRzLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJnbC9wZW5kaW5nL2NvbmZv
cm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHdlYmdsL3BlbmRpbmcvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbDogQWRk
ZWQuCisKKwogMjAyMS0xMC0wNiAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IHNlcmlhbGl6YXRpb24gb2YgQ1NTTWVkaWFSdWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXIt
d2l0aC1yZXNlcnZlZC13b3Jkcy0yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmdsL3Bl
bmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0YWFmNWNiMGU5MjhiMzJmNmY0OWExODNmZDIxY2Jm
MTFiZmY1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2Nv
bmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDQgQEAKK1RoaXMgdGVzdCBydW5zIHRoZSBXZWJHTCBUZXN0IGxpc3Rl
ZCBiZWxvdyBpbiBhbiBpZnJhbWUgYW5kIHJlcG9ydHMgUEFTUyBvciBGQUlMLgorCitUZXN0OiAu
Li8uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9nbHNsL21pc2Mv
c2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sP3dlYmdsVmVyc2lvbj0yCitbIFBBU1Mg
XSBBbGwgdGVzdHMgcGFzc2VkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5n
L2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXIt
d2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjFlYzBkY2ViMjI1MDI1Y2Nm
NjhhZDVmNGY2ZmYxM2IwOWVjZTU5NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmdsL3BlbmRpbmcvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdv
cmRzLTIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8IS0tIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVy
YXRlZCBieSBUb29scy9TY3JpcHRzL3VwZGF0ZS13ZWJnbC1jb25mb3JtYW5jZS10ZXN0cy4gRE8g
Tk9UIEVESVQgLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFy
c2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgQ29uZm9ybWFuY2UgVGVzdCBXcmFwcGVyIGZvciBz
aGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0yLmh0bWw8L3RpdGxlPgorPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uLy4uL3Jl
c291cmNlcy93ZWJraXQtd2ViZ2wtdGVzdC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHA+VGhpcyB0ZXN0IHJ1bnMgdGhlIFdlYkdMIFRlc3QgbGlzdGVkIGJlbG93IGlu
IGFuIGlmcmFtZSBhbmQgcmVwb3J0cyBQQVNTIG9yIEZBSUwuPC9wPgorVGVzdDogPGEgaHJlZj0i
Li4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNj
L3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbD93ZWJnbFZlcnNpb249MiI+Li4vLi4v
Li4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRl
ci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRtbD93ZWJnbFZlcnNpb249MjwvYT4KKzxkaXYgaWQ9
ImlmcmFtZSI+Cis8aWZyYW1lIHNyYz0iLi4vLi4vLi4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvY29uZm9ybWFuY2UvZ2xzbC9taXNjL3NoYWRlci13aXRoLXJlc2VydmVkLXdvcmRzLTIuaHRt
bD93ZWJnbFZlcnNpb249MiIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPC9k
aXY+Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9j
b25mb3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcGVuZGluZy9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25m
b3JtYW5jZS9nbHNsL21pc2Mvc2hhZGVyLXdpdGgtcmVzZXJ2ZWQtd29yZHMtMi5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjlhZTAzMjc4ODYzZjY5ZDJiZTVlYmMxYjQ0ZDAxNDk5YTcxNGNlMTUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9wZW5kaW5nL3Jlc291cmNlcy93ZWJnbF90ZXN0
X2ZpbGVzL2NvbmZvcm1hbmNlL2dsc2wvbWlzYy9zaGFkZXItd2l0aC1yZXNlcnZlZC13b3Jkcy0y
Lmh0bWwKQEAgLTAsMCArMSwyMjYgQEAKKzwhLS0KK0NvcHlyaWdodCAoYykgMjAyMSBUaGUgS2hy
b25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
biBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0
IGZpbGUuCistLT4KKworPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hh
cnNldD0idXRmLTgiPgorPHRpdGxlPldlYkdMIEdMU0wgQ29uZm9ybWFuY2UgVGVzdHMgLSBOb24g
UmVzZXJ2ZWQgV29yZHM8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vcmVzb3VyY2VzL2dsc2wtZmVhdHVyZS10ZXN0cy5jc3MiLz4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi8uLi9qcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vLi4vanMvd2ViZ2wtdGVzdC11dGlscy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdCBpZD0idmVydGV4U2hhZGVyMCIgdHlwZT0idGV4dC9zb21ldGhpbmct
bm90LWphdmFzY3JpcHQiPgorc3RydWN0ICRyZXBsYWNlTWUgeworICB2ZWM0ICRyZXBsYWNlTWU7
Cit9Oworc3RydWN0IEZvbyB7CisgICRyZXBsYWNlTWUgJHJlcGxhY2VNZTsKK307CithdHRyaWJ1
dGUgdmVjNCBwb3NpdGlvbjsKK3ZvaWQgbWFpbigpCit7CisgICAgRm9vIGY7CisgICAgZi4kcmVw
bGFjZU1lLiRyZXBsYWNlTWUgPSBwb3NpdGlvbjsKKyAgICBnbF9Qb3NpdGlvbiA9IGYuJHJlcGxh
Y2VNZS4kcmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJmcmFnbWVudFNoYWRl
cjAiIHR5cGU9InRleHQvc29tZXRoaW5nLW5vdC1qYXZhc2NyaXB0Ij4KK3ByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OwordmVjNCAkcmVwbGFjZU1lKCkgeworICAgIHJldHVybiB2ZWM0KDAsMSwwLDEp
OworfQordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVwbGFjZU1lKCk7Cit9
Cis8L3NjcmlwdD4KKzxzY3JpcHQgaWQ9InZlcnRleFNoYWRlcjEiIHR5cGU9InRleHQvc29tZXRo
aW5nLW5vdC1qYXZhc2NyaXB0Ij4KK2F0dHJpYnV0ZSB2ZWM0ICRyZXBsYWNlTWU7Cit2b2lkIG1h
aW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gJHJlcGxhY2VNZTsKK30KKzwvc2NyaXB0PgorPHNj
cmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIxIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNj
cmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZlYzQgZm9vKHZlYzQgJHJlcGxhY2VN
ZSkgeworICByZXR1cm4gJHJlcGxhY2VNZTsKK30KK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJh
Z0NvbG9yID0gZm9vKHZlYzQoMSwwLDEsMSkpOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2
ZXJ0ZXhTaGFkZXIyIiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+Cit2YXJ5
aW5nIHZlYzQgJHJlcGxhY2VNZTsKK2F0dHJpYnV0ZSB2ZWM0IHBvc2l0aW9uOwordm9pZCBtYWlu
KCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICRyZXBsYWNlTWUgPSBwb3Np
dGlvbjsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIyIiB0eXBlPSJ0
ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
K3ZhcnlpbmcgdmVjNCAkcmVwbGFjZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29s
b3IgPSAkcmVwbGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJ2ZXJ0ZXhTaGFkZXIz
IiB0eXBlPSJ0ZXh0L3NvbWV0aGluZy1ub3QtamF2YXNjcmlwdCI+CithdHRyaWJ1dGUgdmVjNCBw
b3NpdGlvbjsKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSBwb3NpdGlvbjsKK30K
Kzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZnJhZ21lbnRTaGFkZXIzIiB0eXBlPSJ0ZXh0L3NvbWV0
aGluZy1ub3QtamF2YXNjcmlwdCI+CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3VuaWZvcm0g
dmVjNCAkcmVwbGFjZU1lOwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSAkcmVw
bGFjZU1lOworfQorPC9zY3JpcHQ+Cis8c2NyaXB0PgorInVzZSBzdHJpY3QiOworCit2YXIgTWV0
YWxXb3JkcyA9IFsKKyAgImFsaWduYXMiLAorICAiYWxpZ25vZiIsCisgICJhc190eXBlIiwKKyAg
ImFuZCIsCisgICJhdXRvIiwKKyAgImNhdGNoIiwKKyAgImNoYXIiLAorICAiY29uc3RfY2FzdCIs
CisgICJjb25zdGFudCIsCisgICJjb25zdGV4cHIiLAorICAiZGVjbHR5cGUiLAorICAiZGVsZXRl
IiwKKyAgImRldmljZSIsCisgICJkeW5hbWljX2Nhc3QiLAorICAiZXhwbGljaXQiLAorICAiZXhw
b3J0IiwKKyAgImZyYWdtZW50IiwKKyAgImZyaWVuZCIsCisgICJpbnQxNl90IiwKKyAgImludDMy
X3QiLAorICAiaW50NjRfdCIsCisgICJpbnQ4X3QiLAorICAia2VybmVsIiwKKyAgIm1haW4wIiwK
KyAgIm1ldGFsIiwKKyAgIm11dGFibGUiLAorICAibmV3IiwKKyAgIm5vZXhjZXB0IiwKKyAgIm51
bGxwdHJfdCIsCisgICJudWxscHRyIiwKKyAgIm9wZXJhdG9yIiwKKyAgIm92ZXJyaWRlIiwKKyAg
Im9yIiwKKyAgInByaXZhdGUiLAorICAicHJvdGVjdGVkIiwKKyAgInB0cmRpZmZfdCIsCisgICJy
YXlfZGF0YSIsCisgICJyZWdpc3RlciIsCisgICJzaWduZWQiLAorICAic2l6ZV90IiwKKyAgInN0
YWdlX2luIiwKKyAgInN0YXRpY19hc3NlcnQiLAorICAic3RhdGljX2Nhc3QiLAorICAidGhyZWFk
X2xvY2FsIiwKKyAgInRocmVhZCIsCisgICJ0aHJlYWRncm91cF9pbWFnZWJsb2NrIiwKKyAgInRo
cmVhZGdyb3VwIiwKKyAgInRocm93IiwKKyAgInRyeSIsCisgICJ0eXBlaWQiLAorICAidHlwZW5h
bWUiLAorICAidWNoYXIiLAorICAidWludDE2X3QiLAorICAidWludDMyX3QiLAorICAidWludDY0
X3QiLAorICAidWludDhfdCIsCisgICJ1c2hvcnQiLAorICAidmVydGV4IiwKKyAgInZpcnR1YWwi
LAorICAid2NoYXJfdCIsCisgICJ4b3IiLAorICAiTkFOIiwKKyAgIklORklOSVRZIiwKKyAgIlBy
YWdtYSIsCisgICJfUHJhZ21hIiwKKyAgIkFOR0xFXzEiLAorICAiSU5UX01BWCIsCitdOworCisK
K2Rlc2NyaXB0aW9uKCk7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKK3ZhciBnbCA9IHd0
dS5jcmVhdGUzRENvbnRleHQoKTsKKwordmFyIHNvdXJjZXMgPSBbXTsKK2ZvciAodmFyIGlpID0g
MDsgaWkgPCA0OyArK2lpKSB7CisgIHZhciB2c3JjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InZlcnRleFNoYWRlciIgKyBpaSkudGV4dDsKKyAgdmFyIGZzcmMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZnJhZ21lbnRTaGFkZXIiICsgaWkpLnRleHQ7CisgIHNvdXJjZXMucHVzaCh7dnNy
YzogdnNyYywgZnNyYzogZnNyY30pOworfQorCit2YXIgYmFkV29yZE5keCA9IDA7Cit2YXIgbGlz
dE5keCA9IDA7CisKK2Z1bmN0aW9uIHRlc3ROZXh0V29yZCgpIHsKKyAgdmFyIGxpc3QgPSBNZXRh
bFdvcmRzOworICBpZiAobGlzdE5keCA+PSBsaXN0Lmxlbmd0aCkgeworICAgICAgZmluaXNoVGVz
dCgpOworICAgICAgcmV0dXJuOworICB9CisgIHRlc3RXb3JkKGxpc3RbbGlzdE5keF0pOworICAr
K2xpc3ROZHg7CisgIHNldFRpbWVvdXQodGVzdE5leHRXb3JkLCAwKTsKK30KK3Rlc3ROZXh0V29y
ZCgpOworCitmdW5jdGlvbiB0ZXN0V29yZCh3b3JkKSB7CisgIGRlYnVnKCIiKTsKKyAgZGVidWco
InRlc3Rpbmc6ICIgKyB3b3JkKTsKKworICBzb3VyY2VzLmZvckVhY2goc3JjID0+IHsKKyAgICB2
YXIgdnMgPSBzcmMudnNyYy5yZXBsYWNlKC9cJHJlcGxhY2VNZS9nLCB3b3JkKTsKKyAgICB2YXIg
ZnMgPSBzcmMuZnNyYy5yZXBsYWNlKC9cJHJlcGxhY2VNZS9nLCB3b3JkKTsKKworICAgIHZhciBz
dWNjZXNzID0gdHJ1ZTsKKyAgICB2YXIgcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3JhbShnbCwgdnMs
IGZzLCBmdW5jdGlvbihtc2cpIHsKKyAgICAgIGRlYnVnKG1zZyk7CisgICAgICBzdWNjZXNzID0g
ZmFsc2U7CisgICAgfSwgdHJ1ZSk7CisgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgIHRlc3RQYXNz
ZWQoInNoYWRlciB3aXRoOiAnIiArIHdvcmQgKyAiJyBjb21waWxlZCIpOworICAgIH0gZWxzZSB7
CisgICAgICB0ZXN0RmFpbGVkKCJzaGFkZXIgd2l0aDogJyIgKyB3b3JkICsgIicgZmFpbGVkIHRv
IGNvbXBpbGUiKTsKKyAgICB9CisgICAgaWYgKHByb2dyYW0pIHsKKyAgICAgIGdsLmRlbGV0ZVBy
b2dyYW0ocHJvZ3JhbSk7CisgICAgfQorICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5P
X0VSUk9SLCAic2hvdWxkIGJlIG5vIEdMIGVycm9ycyIpOworICB9KTsKK30KKworCit2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgorCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>