<?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>190668</bug_id>
          
          <creation_ts>2018-10-17 10:33:51 -0700</creation_ts>
          <short_desc>Introduce ReflectApplyFunctionCallDotNode to optimize Reflect.apply</short_desc>
          <delta_ts>2020-11-30 16:55:46 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214294</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>190671</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1470162</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-10-17 10:33:51 -0700</bug_when>
    <thetext>Currently, it only checks for Function.apply and actually slows down the call to Reflect.apply.  We should either provide an optimized Reflect.apply or remove the check against Function.apply when we detect Reflect.apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470163</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-17 10:34:35 -0700</bug_when>
    <thetext>&lt;rdar://problem/45342781&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671195</commentid>
    <comment_count>2</comment_count>
      <attachid>404186</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-13 15:22:15 -0700</bug_when>
    <thetext>Created attachment 404186
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1671196</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-13 15:23:13 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #2)
&gt; Created attachment 404186 [details]
&gt; Patch

Warmed-up runs, --outer 25:

                                      r264266                    patch                                       

reflect-apply-array-literal      273.3377+-18.5141    ^     18.7225+-0.5229        ^ definitely 14.5994x faster
reflect-apply-spread              78.0319+-1.9222     ^     57.0211+-1.0070        ^ definitely 1.3685x faster
reflect-apply                     76.8752+-10.2207    ^     57.1569+-0.5991        ^ definitely 1.3450x faster

&lt;geometric&gt;                      117.0257+-4.6683     ^     39.3459+-0.4078        ^ definitely 2.9743x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673552</commentid>
    <comment_count>4</comment_count>
      <attachid>404186</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-07-21 12:03:43 -0700</bug_when>
    <thetext>Comment on attachment 404186
Patch

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

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2041
&gt; +            // Reflect.apply(...args)
&gt; +            SpreadExpressionNode* spread = static_cast&lt;SpreadExpressionNode*&gt;(listNode-&gt;m_expr);
&gt; +            RefPtr&lt;RegisterID&gt; spreadRegister = generator.emitNode(spread-&gt;expression());
&gt; +            generator.emitExpressionInfo(spread-&gt;divot(), spread-&gt;divotStart(), spread-&gt;divotEnd());
&gt; +            RefPtr&lt;RegisterID&gt; functionRegister = generator.emitGetByVal(generator.newTemporary(), spreadRegister.get(), generator.emitLoad(nullptr, jsNumber(0)));
&gt; +            RefPtr&lt;RegisterID&gt; thisRegister = generator.emitGetByVal(generator.newTemporary(), spreadRegister.get(), generator.emitLoad(nullptr, jsNumber(1)));
&gt; +            RefPtr&lt;RegisterID&gt; argumentsRegister = generator.emitGetByVal(generator.newTemporary(), spreadRegister.get(), generator.emitLoad(nullptr, jsNumber(2)));
&gt; +
&gt; +            emitIsObject(argumentsRegister.get());
&gt; +            generator.emitCallVarargsInTailPosition(returnValue.get(), functionRegister.get(), thisRegister.get(), argumentsRegister.get(), generator.newTemporary(), 0, divot(), divotStart(), divotEnd(), DebuggableCall::Yes);
&gt; +            generator.emitJump(end.get());

how is this spec compliant? Don&apos;t we need to run the iterator protocol?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673569</commentid>
    <comment_count>5</comment_count>
      <attachid>404186</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-07-21 12:24:08 -0700</bug_when>
    <thetext>Comment on attachment 404186
Patch

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

&gt; JSTests/stress/reflect-apply.js:140
&gt; +    var args = [1, 2];

The spec (https://tc39.es/ecma262/#sec-reflect.apply) says that the 3rd argument can be anything that is array-like.  Can you also add cases for object that are array-like e.g. the arguments object in a function, a plain old object with indexed properties, a proxy of an array with a get handler.  Other interesting cases to test with: an array with a few holes in the front or middle, an array with a trailing comma.

Also, in a separate file, add a case for an object with an indexed property in its prototype.  You&apos;ll want a different test file because the &quot;object with an indexed property in its prototype&quot; case will put the VM into a &quot;haveABadTime&quot; state.  You can also keep all the other test cases to run in this state.  You can call this other test file reflect-apply-while-having-a-bad-time.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673813</commentid>
    <comment_count>6</comment_count>
      <attachid>404922</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-22 07:38:06 -0700</bug_when>
    <thetext>Created attachment 404922
Patch

Add more test cases and reflect-apply-while-having-a-bad-time.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673814</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-22 07:46:41 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; how is this spec compliant? Don&apos;t we need to run the iterator protocol?

Please note we are emitting `spread` &amp; `new_array_with_spread` bytecode ops here, which convert iterable to an array (see `slow_path_spread` and IteratorHelpers.js).
The same approach is used in CallFunctionCallDotNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673816</commentid>
    <comment_count>8</comment_count>
      <attachid>404922</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-22 07:49:41 -0700</bug_when>
    <thetext>Comment on attachment 404922
Patch

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

&gt; JSTests/stress/reflect-apply.js:170
&gt; +shouldBe(Reflect.apply(...(function* () {

I&apos;ve added a test case with spread &amp; generator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680302</commentid>
    <comment_count>9</comment_count>
      <attachid>404922</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-14 09:45:32 -0700</bug_when>
    <thetext>Comment on attachment 404922
Patch

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

&gt; Source/JavaScriptCore/builtins/BuiltinNames.h:49
&gt; +    macro(reflectApplyFunction) \

Originally these were sorted alphabetically, with our traditional WebKit &quot;sorted as the Unix sort tool does&quot;. But it seems that people instead started adding new ones at the bottom?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680662</commentid>
    <comment_count>10</comment_count>
      <attachid>404922</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-15 22:27:14 -0700</bug_when>
    <thetext>Comment on attachment 404922
Patch

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

Still reviewing, but one comment.

&gt; Source/JavaScriptCore/runtime/JSGlobalObject.cpp:1076
&gt; +    m_linkTimeConstants[static_cast&lt;unsigned&gt;(LinkTimeConstant::reflectApplyFunction)].initLater([] (const Initializer&lt;JSCell&gt;&amp; init) {
&gt; +            init.set(JSFunction::create(init.vm, reflectObjectApplyCodeGenerator(init.vm), init.owner));
&gt; +        });

Instead,

1. Let&apos;s rename ReflectObject&apos;s apply function to `reflectApply` function.
2. Let&apos;s mark it as @globalPrivate

Then, this is done automatically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687094</commentid>
    <comment_count>11</comment_count>
      <attachid>408355</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-09 12:04:46 -0700</bug_when>
    <thetext>Created attachment 408355
Patch

Rename Reflect.apply and mark as @globalPrivate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687104</commentid>
    <comment_count>12</comment_count>
      <attachid>408355</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-09-09 12:55:43 -0700</bug_when>
    <thetext>Comment on attachment 408355
Patch

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

&gt; Source/JavaScriptCore/runtime/ReflectObject.cpp:82
&gt; +    JSC_BUILTIN_FUNCTION_WITHOUT_TRANSITION(vm.propertyNames-&gt;builtinNames().applyPublicName(), reflectObjectReflectApplyCodeGenerator, static_cast&lt;unsigned&gt;(PropertyAttribute::DontEnum));

Let&apos;s get link-time-constant from global object instead via `globalObject-&gt;linkTimeConstant(...)`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687194</commentid>
    <comment_count>13</comment_count>
      <attachid>408382</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-09-09 16:25:37 -0700</bug_when>
    <thetext>Created attachment 408382
Patch

Avoid creating extra JSFunction for Reflect.apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710866</commentid>
    <comment_count>14</comment_count>
      <attachid>408382</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-11-30 16:55:46 -0800</bug_when>
    <thetext>Comment on attachment 408382
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:17
&gt; +        To accomodate monkey-patching, Reflect.apply is exposed via @globalPrivate

accomodate =&gt; accommodate

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:2001
&gt; +RegisterID* ReflectApplyFunctionCallDotNode::emitBytecode(BytecodeGenerator&amp; generator, RegisterID* dst)

I wonder if we can somehow abstract this function to deal with all the variants that are doing similar things.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404186</attachid>
            <date>2020-07-13 15:22:15 -0700</date>
            <delta_ts>2020-07-22 07:38:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190668-20200714012213.patch</filename>
            <type>text/plain</type>
            <size>26162</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjQzMTApCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDIwLTA3LTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZSB0byBvcHRpbWl6ZSBSZWZsZWN0LmFwcGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA2NjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5
LWFycmF5LWxpdGVyYWwuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZs
ZWN0LWFwcGx5LXNwcmVhZC5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Jl
ZmxlY3QtYXBwbHkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LWFwcGx5Lmpz
OgorCiAyMDIwLTA3LTEzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIENsZWFuIHVwIFNvdXJjZVByb3ZpZGVyIGFuZCBhZGQgY2FsbGVyIHJlbGF0aXZl
IGxvYWQgc2NyaXB0IHRvIGpzYy5jcHAKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3Jl
ZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LWFycmF5LWxpdGVyYWwuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS1hcnJheS1saXRlcmFsLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorZnVuY3Rpb24gZm4oKSB7fQorbm9Jbmxp
bmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpCisgICAg
UmVmbGVjdC5hcHBseShmbiwgbnVsbCwgWzEsIDIsIDNdKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCShub25leGlzdGVudCkKKysr
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNSBAQAordmFyIGFyZ3MgPSBbZnVuY3Rpb24oKSB7fSwgbnVsbCwg
WzEsIDIsIDNdXTsKK25vSW5saW5lKFJlZmxlY3QuYXBwbHkpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDFlNjsgKytpKQorICAgIFJlZmxlY3QuYXBwbHkoLi4uYXJncyk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHkuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYgQEAKK2Z1bmN0aW9uIGZuKCkge30KK3ZhciBhcmdzID0gWzEsIDIsIDNdOworbm9Jbmxp
bmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgM2U2OyArK2kpCisgICAg
UmVmbGVjdC5hcHBseShmbiwgbnVsbCwgYXJncyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9yZWZs
ZWN0LWFwcGx5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3QtYXBwbHku
anMJKHJldmlzaW9uIDI2NDI2NikKKysrIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3QtYXBwbHkuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTg5LDMgKzg5LDc0IEBAIHNob3VsZEJlKFJlZmxlY3QuYXBwbHko
ZnVuY3Rpb24gKCkgewogICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOwogICAgIHJldHVy
biBhcmd1bWVudHMubGVuZ3RoOwogfSwgdGhpc09iamVjdCwgW10pLCAwKQorCitzaG91bGRCZShS
ZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBd
LCAzKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFszXV0pLCAxKTsKKwordmFyIGFyZ3NMaXN0ID0g
WzEsIDJdOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzBdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDIpOworICAg
IHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3Ro
OworfSwgdGhpc09iamVjdCwgYXJnc0xpc3QpLCAyKTsKKworc2hvdWxkVGhyb3coKCkgPT4gewor
ICAgIFJlZmxlY3QuYXBwbHkoLi4uW2ZvbywgYmFyLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KC4uLltudWxsLCBudWxsLCB7fV0pOworfSwgYFR5cGVFcnJvcjogUmVm
bGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbmApOwor
CitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZnVuY3Rpb24gKCkg
e30sIG51bGwsICJzdHIiXSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVz
IHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4g
eworICAgIFJlZmxlY3QuYXBwbHkoZm9vLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VF
cnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmFwcGx5KFN5bWJvbCgpLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVu
Y2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICBSZWZsZWN0LmFwcGx5KC0zLjUsIG51bGwsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVu
Y2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmF6YCk7CisKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICBSZWZsZWN0LmFwcGx5KHVuZGVmaW5lZCwgbnVsbCwgWzEsIDJdLCBmb28pOworfSwg
YFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hvdWxkVGhy
b3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZmFsc2UsIG51bGwsIFsxLCAyXSk7Cit9LCBg
VHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBh
IGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJncyA9IFsxLCAy
XTsKKyAgICBSZWZsZWN0LmFwcGx5KGZvbywgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICB2YXIgYXJncyA9IFsxLCAyXTsKKyAgICBSZWZsZWN0LmFwcGx5KHRydWUsIGJhciwgYXJncyk7
Cit9LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IGJhcmApOworCitzaG91
bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSgiIiwgbnVsbCwge30pOworfSwgYFR5
cGVFcnJvcjogUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBm
dW5jdGlvbmApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmdW5j
dGlvbiAoKSB7fSwgbnVsbCwgMyk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVp
cmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworUmVmbGVjdC5hcHBseSA9
ICgpID0+IDQyOwordmFyIHRocm93ZXIgPSAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigidW5yZWFj
aGFibGUiKTsgfQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLlt0aHJvd2VyLCBudWxsLCBb
MV1dKSwgNDIpOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSh0aHJvd2VyLCBudWxsLCBbMl0pLCA0
Mik7CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KHRocm93ZXIsIG51bGwsIGFyZ3NMaXN0KSwgNDIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjQyNjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEg
QEAKKzIwMjAtMDctMTMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgor
CisgICAgICAgIEludHJvZHVjZSBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlIHRvIG9w
dGltaXplIFJlZmxlY3QuYXBwbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5MDY2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEEgbmV3IG5vZGUgaXMgaW50cm9kdWNlZCBpbnN0ZWFkIG9mIGV4dGVuZGlu
ZyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUKKyAgICAgICAgYXMgUmVmbGVjdC5hcHBseSBoYXMg
ZGlmZmVyZW50IHBhcmFtZXRlciBvcmRlciwgdGhyb3dzIGZvciBub24tb2JqZWN0CisgICAgICAg
IGBhcmd1bWVudHNMaXN0YCwgaXMgbmV2ZXIgdXNlZCBpbiBidWlsdC1pbnMgbm9yIHdpdGggYHN1
cGVyYCwKKyAgICAgICAgYW5kIHJlcXVpcmVzIGRpZmZlcmVudCBzcHJlYWQgZXhwcmVzc2lvbiBo
YW5kbGluZyBwZXJmb3JtYW5jZS13aXNlLgorCisgICAgICAgIG5vdEFGdW5jdGlvblNvdXJjZUFw
cGVuZGVyKCkgaXMgbW9kaWZpZWQgdG8gc3BlY2lhbC1jYXNlIFJlZmxlY3QuYXBwbHkKKyAgICAg
ICAgYmVjYXVzZSB3ZSBjYW4ndCBoYXZlIE9wSXNGdW5jdGlvbiBjaGVjayBiZWZvcmUgYXJndW1l
bnQgbm9kZXMgYXJlCisgICAgICAgIGVtaXR0ZWQgaW4gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKCkuCisKKyAgICAgICAgVG8gYWNjb21vZGF0ZSBtb25rZXktcGF0Y2hlZCBSZWZsZWN0LmFw
cGx5LCBKU0Z1bmN0aW9uIGlzIGV4cG9zZWQKKyAgICAgICAgYXMgbGF6aWx5LWluaXRpYWxpemVk
IGxpbmstdGltZS1jb25zdGFudCwgYW5kIGlzIGNoZWNrZWQgYWdhaW5zdCB2aWEKKyAgICAgICAg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50KCkuCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgYWR2YW5jZXMgcmVmbGVjdC1hcHBseS1hcnJheS1saXRlcmFsLmpz
IG1pY3JvYmVuY2htYXJrCisgICAgICAgIGJ5IGEgZmFjdG9yIG9mIDE0LCB3aGlsZSBvdGhlciBh
ZGRlZCBvbmVzIHByb2dyZXNzIGJ5IH4zNSUuCisgICAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5h
cHBseSBwZXJmb3JtYW5jZSBpcyBuZXV0cmFsLgorCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmg6CisgICAgICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2Fs
bCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElm
Tm90RnVuY3Rpb25BcHBseSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29k
ZSk6CisgICAgICAgICogcGFyc2VyL0FTVEJ1aWxkZXIuaDoKKyAgICAgICAgKEpTQzo6QVNUQnVp
bGRlcjo6bWFrZUZ1bmN0aW9uQ2FsbE5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3Ry
dWN0b3JzLmg6CisgICAgICAgIChKU0M6OlJlZmxlY3RBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OlJlZmxlY3RBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rl
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHA6CisgICAgICAgIChK
U0M6Om5vdEFGdW5jdGlvblNvdXJjZUFwcGVuZGVyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OlJlZmxlY3RP
YmplY3Q6OmZpbmlzaENyZWF0aW9uKToKKwogMjAyMC0wNy0xMCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjY0MjQyLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAko
cmV2aXNpb24gMjY0MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUo
bWFjcm8pIFwKICAgICBtYWNybyhhZGQpIFwKICAgICBtYWNybyhhcHBseUZ1bmN0aW9uKSBcCisg
ICAgbWFjcm8ocmVmbGVjdEFwcGx5RnVuY3Rpb24pIFwKICAgICBtYWNybyhhcnJheVNwZWNpZXND
cmVhdGUpIFwKICAgICBtYWNybyhhc3NlcnQpIFwKICAgICBtYWNybyhjYWxsRnVuY3Rpb24pIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29u
c3RhbnQuaAkocmV2aXNpb24gMjY0MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBA
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoT2JqZWN0LCBudWxscHRyKSBcCiAgICAgdihB
cnJheSwgbnVsbHB0cikgXAogICAgIHYoYXBwbHlGdW5jdGlvbiwgbnVsbHB0cikgXAorICAgIHYo
cmVmbGVjdEFwcGx5RnVuY3Rpb24sIG51bGxwdHIpIFwKICAgICB2KGNhbGxGdW5jdGlvbiwgbnVs
bHB0cikgXAogICAgIHYoaGFzT3duUHJvcGVydHlGdW5jdGlvbiwgbnVsbHB0cikgXAogICAgIHYo
Y3JlYXRlUHJpdmF0ZVN5bWJvbCwgbnVsbHB0cikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDI2NDI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ4LDE0ICsxNDQ4LDkgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZkZhbHNlKAogICAgIE9wSmZhbHNlOjpl
bWl0KHRoaXMsIGNvbmQsIHRhcmdldC5iaW5kKHRoaXMpKTsKIH0KIAotdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25kLCBMYWJl
bCYgdGFyZ2V0KQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdExpbmtUaW1l
Q29uc3RhbnQoUmVnaXN0ZXJJRCogY29uZCwgTGlua1RpbWVDb25zdGFudCBjb25zdGFudCwgTGFi
ZWwmIHRhcmdldCkKIHsKLSAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgY29uZCwgbW92ZUxpbmtU
aW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6Y2FsbEZ1bmN0aW9uKSwgdGFy
Z2V0LmJpbmQodGhpcykpOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElm
Tm90RnVuY3Rpb25BcHBseShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KQotewotICAg
IE9wSm5lcVB0cjo6ZW1pdCh0aGlzLCBjb25kLCBtb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRy
LCBMaW5rVGltZUNvbnN0YW50OjphcHBseUZ1bmN0aW9uKSwgdGFyZ2V0LmJpbmQodGhpcykpOwor
ICAgIE9wSm5lcVB0cjo6ZW1pdCh0aGlzLCBjb25kLCBtb3ZlTGlua1RpbWVDb25zdGFudChudWxs
cHRyLCBjb25zdGFudCksIHRhcmdldC5iaW5kKHRoaXMpKTsKIH0KIAogdW5zaWduZWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdp
c3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KQpAQCAtMzIzMiw3ICszMjI3LDcgQEAgRXhwZWN0
ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdAogICAgICAgICBpZiAoY2FsbEFyZ3Vt
ZW50cy5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID49IDIpCiAgICAgICAgICAgICByZXR1
cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOwogICAgICAgICAKLSAgICAgICAgT3BKbmVxUHRyOjplbWl0
KHRoaXMsIGZ1bmMsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3Rh
bnQ6Ok9iamVjdCksIHJlYWxDYWxsLT5iaW5kKHRoaXMpKTsKKyAgICAgICAgZW1pdEp1bXBJZk5v
dExpbmtUaW1lQ29uc3RhbnQoZnVuYywgTGlua1RpbWVDb25zdGFudDo6T2JqZWN0LCByZWFsQ2Fs
bC5nZXQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkK
ICAgICAgICAgICAgIGVtaXROZXdPYmplY3QoZHN0KTsKQEAgLTMyNDgsNyArMzI0Myw3IEBAIEV4
cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXQKICAgICAgICAgaWYgKGNhbGxB
cmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA+IDIpCiAgICAgICAgICAgICBy
ZXR1cm4gTm9FeHBlY3RlZEZ1bmN0aW9uOwogICAgICAgICAKLSAgICAgICAgT3BKbmVxUHRyOjpl
bWl0KHRoaXMsIGZ1bmMsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29u
c3RhbnQ6OkFycmF5KSwgcmVhbENhbGwtPmJpbmQodGhpcykpOworICAgICAgICBlbWl0SnVtcElm
Tm90TGlua1RpbWVDb25zdGFudChmdW5jLCBMaW5rVGltZUNvbnN0YW50OjpBcnJheSwgcmVhbENh
bGwuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkp
IHsKICAgICAgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPT0gMikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI2NDI2NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODg3LDggKzg4Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wKExhYmVsJiB0YXJnZXQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wSWZUcnVlKFJl
Z2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpOwogICAgICAgICB2b2lkIGVtaXRKdW1wSWZG
YWxzZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKLSAgICAgICAgdm9pZCBlbWl0
SnVtcElmTm90RnVuY3Rpb25DYWxsKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpOwot
ICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJlZ2lzdGVySUQqIGNvbmQs
IExhYmVsJiB0YXJnZXQpOworICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0
YW50KFJlZ2lzdGVySUQqIGNvbmQsIExpbmtUaW1lQ29uc3RhbnQsIExhYmVsJiB0YXJnZXQpOwog
ICAgICAgICB1bnNpZ25lZCBlbWl0V2lkZUp1bXBJZk5vdEZ1bmN0aW9uSGFzT3duUHJvcGVydHko
UmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgcmVjb3JkSGFz
T3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcChTdHJ1Y3R1cmVGb3JJbkNvbnRleHQmLCB1
bnNpZ25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJ
KHJldmlzaW9uIDI2NDI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4MCw3ICsxODgwLDcgQEAgUmVn
aXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogCiAgICAgaWYgKGVtaXRDYWxs
Q2hlY2spIHsKICAgICAgICAgbWFrZUZ1bmN0aW9uKCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
SnVtcElmTm90RnVuY3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChmdW5jdGlvbi5n
ZXQoKSwgTGlua1RpbWVDb25zdGFudDo6Y2FsbEZ1bmN0aW9uLCByZWFsQ2FsbC5nZXQoKSk7CiAg
ICAgfQogICAgIHsKICAgICAgICAgaWYgKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fZXhwciAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwci0+aXNTcHJlYWRF
eHByZXNzaW9uKCkpIHsKQEAgLTE5OTAsNiArMTk5MCw5MiBAQCBSZWdpc3RlcklEKiBIYXNPd25Q
cm9wZXJ0eUZ1bmN0aW9uQ2FsbERvCiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwogfQog
CitSZWdpc3RlcklEKiBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAg
IEFTU0VSVChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAmJiBzdGF0aWNfY2FzdDxSZXNvbHZlTm9k
ZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLlJl
ZmxlY3QpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRpb25hbENo
YWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFzZS5nZXQo
KSk7CisKKyAgICBpZiAobV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkgPD0gbWF4RGlz
dGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQorICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJl
c3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQoKSwgc3Vi
ZXhwcmVzc2lvbkVuZCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJs
aWNOYW1lKCkpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAgIGdlbmVy
YXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKKyAgICBpZiAobV9kaXN0
YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkgPiBtYXhEaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9y
QXBwbHkpIHsKKyAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKKyAgICAgICAgZ2VuZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0
ZXIoKSwgYmFzZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0
aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9u
LCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVn
Z2FibGVDYWxsOjpZZXMpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0LCByZXR1
cm5WYWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAgUmVmPExhYmVsPiByZWFsQ2FsbCA9IGdlbmVy
YXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50KGZ1bmN0aW9u
LmdldCgpLCBMaW5rVGltZUNvbnN0YW50OjpyZWZsZWN0QXBwbHlGdW5jdGlvbiwgcmVhbENhbGwu
Z2V0KCkpOworCisgICAgYXV0byBlbWl0SXNPYmplY3QgPSBbJl0gKFJlZ2lzdGVySUQqIGFyZ3Vt
ZW50c1JlZ2lzdGVyKSB7CisgICAgICAgIFJlZjxMYWJlbD4gaXNPYmplY3QgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5l
bWl0SXNPYmplY3QoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBhcmd1bWVudHNSZWdpc3Rlciks
IGlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRUaHJvd1R5cGVFcnJvcigi
UmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgdGhpcmQgYXJndW1lbnQgYmUgYW4gb2JqZWN0Il9z
KTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChpc09iamVjdC5nZXQoKSk7CisgICAgfTsK
KworICAgIEFyZ3VtZW50TGlzdE5vZGUqIGxpc3ROb2RlID0gbV9hcmdzLT5tX2xpc3ROb2RlOwor
ICAgIGlmIChsaXN0Tm9kZSAmJiBsaXN0Tm9kZS0+bV9leHByKSB7CisgICAgICAgIGlmIChsaXN0
Tm9kZS0+bV9leHByLT5pc1NwcmVhZEV4cHJlc3Npb24oKSkgeworICAgICAgICAgICAgLy8gUmVm
bGVjdC5hcHBseSguLi5hcmdzKQorICAgICAgICAgICAgU3ByZWFkRXhwcmVzc2lvbk5vZGUqIHNw
cmVhZCA9IHN0YXRpY19jYXN0PFNwcmVhZEV4cHJlc3Npb25Ob2RlKj4obGlzdE5vZGUtPm1fZXhw
cik7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3ByZWFkUmVnaXN0ZXIgPSBnZW5l
cmF0b3IuZW1pdE5vZGUoc3ByZWFkLT5leHByZXNzaW9uKCkpOworICAgICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzcHJlYWQtPmRpdm90KCksIHNwcmVhZC0+ZGl2b3RTdGFy
dCgpLCBzcHJlYWQtPmRpdm90RW5kKCkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmN0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgc3ByZWFkUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5lbWl0TG9hZChudWxs
cHRyLCBqc051bWJlcigwKSkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNS
ZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBzcHJlYWRSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzTnVt
YmVyKDEpKSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJndW1lbnRzUmVnaXN0
ZXIgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgc3By
ZWFkUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBqc051bWJlcigy
KSkpOworCisgICAgICAgICAgICBlbWl0SXNPYmplY3QoYXJndW1lbnRzUmVnaXN0ZXIuZ2V0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJnc0luVGFpbFBvc2l0aW9uKHJl
dHVyblZhbHVlLmdldCgpLCBmdW5jdGlvblJlZ2lzdGVyLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0
KCksIGFyZ3VtZW50c1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIDAs
IGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChBcmd1bWVudExpc3ROb2RlKiB0aGlzTm9kZSA9IGxpc3ROb2RlLT5tX25leHQpIHsK
KyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvblJlZ2lzdGVyID0gZ2VuZXJh
dG9yLmVtaXROb2RlKGxpc3ROb2RlKTsKKworICAgICAgICAgICAgaWYgKEFyZ3VtZW50TGlzdE5v
ZGUqIGFyZ3VtZW50c05vZGUgPSB0aGlzTm9kZS0+bV9uZXh0KSB7CisgICAgICAgICAgICAgICAg
aWYgKGFyZ3VtZW50c05vZGUtPm1fZXhwci0+aXNTaW1wbGVBcnJheSgpICYmICFhcmd1bWVudHNO
b2RlLT5tX25leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVmbGVjdC5hcHBseShmbiwg
dGhpc0FyZywgW2FyZzAsIGFyZzEsIC4uLl0pCisgICAgICAgICAgICAgICAgICAgIEFyZ3VtZW50
c05vZGUgYXJyYXlBcmd1bWVudHMoc3RhdGljX2Nhc3Q8QXJyYXlOb2RlKj4oYXJndW1lbnRzTm9k
ZS0+bV9leHByKS0+dG9Bcmd1bWVudExpc3QoZ2VuZXJhdG9yLnBhcnNlckFyZW5hKCksIDAsIDAp
KTsKKyAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVy
YXRvciwgJmFycmF5QXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIHRoaXNOb2RlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmN0aW9uUmVnaXN0ZXIuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2Fs
bDo6WWVzKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAv
LyBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzQXJnLCBhcmdzTGlzdCwgLi4uKQorICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKHRoaXNOb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFy
Z3VtZW50c1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50c05vZGUpOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkgaWdub3JlcyBleHRyYSBhcmd1bWVu
dHMsIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGV2YWx1YXRlIHRoZW0gZm9yIHNpZGUgZWZmZWN0cy4K
KyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIG5vZGUgPSBhcmd1bWVudHNOb2RlLT5tX25l
eHQ7IG5vZGU7IG5vZGUgPSBub2RlLT5tX25leHQpCisgICAgICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdE5vZGUobm9kZS0+bV9leHByKTsKKworICAgICAgICAgICAgICAgICAgICBl
bWl0SXNPYmplY3QoYXJndW1lbnRzUmVnaXN0ZXIuZ2V0KCkpOworICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdENhbGxWYXJhcmdzSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmN0aW9uUmVnaXN0ZXIuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJndW1lbnRz
UmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgMCwgZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KHJlYWxDYWxsLmdldCgpKTsKKyAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJh
dG9yLCBtX2FyZ3MpOworICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIGJhc2UuZ2V0KCkpOworICAgIGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9u
KHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2Fi
bGVDYWxsOjpZZXMpOworCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOworICAg
IGdlbmVyYXRvci5lbWl0UHJvZmlsZVR5cGUocmV0dXJuVmFsdWUuZ2V0KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOworfQorCiBzdGF0
aWMgYm9vbCBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMoQXJndW1lbnRzTm9kZSogYXJncykKIHsK
ICAgICByZXR1cm4gIWFyZ3MtPm1fbGlzdE5vZGUgfHwgIWFyZ3MtPm1fbGlzdE5vZGUtPm1fZXhw
ciB8fCAhYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0CkBAIC0yMDM2LDggKzIxMjIsNyBAQCBSZWdp
c3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCks
IHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgaWYgKGVtaXRDYWxsQ2hlY2spIHsKICAgICAgICAg
bWFrZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVCghbV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkg
fHwgc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkgIT0gIlJl
ZmxlY3QiKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KGZ1
bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmTm90TGlua1RpbWVDb25zdGFudChmdW5jdGlvbi5nZXQoKSwgTGlua1RpbWVDb25zdGFudDo6
YXBwbHlGdW5jdGlvbiwgcmVhbENhbGwuZ2V0KCkpOwogICAgIH0KICAgICBpZiAobWF5QmVDYWxs
KSB7CiAgICAgICAgIGlmIChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5tX2xpc3ROb2Rl
LT5tX2V4cHIpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRl
ci5oCShyZXZpc2lvbiAyNjQyNjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FT
VEJ1aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0NCwxMSArMTQ0NCwxMCBAQCBFeHByZXNz
aW9uTm9kZSogQVNUQnVpbGRlcjo6bWFrZUZ1bmN0aW9uCiAgICAgRnVuY3Rpb25DYWxsRG90Tm9k
ZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYgKCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90
LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jYWxs
UHVibGljTmFtZSgpIHx8IGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuY2FsbFByaXZhdGVOYW1lKCkpKQogICAgICAgICBub2RlID0gbmV3ICht
X3BhcnNlckFyZW5hKSBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNl
KCksIGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5cGUoKSwgYXJncywgZGl2b3QsIGRpdm90U3Rh
cnQsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOworICAgIGVsc2UgaWYgKCFwcmV2
aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5hcHBseVB1YmxpY05hbWUoKSAmJiBkb3QtPmJhc2UoKS0+aXNS
ZXNvbHZlTm9kZSgpICYmIHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZG90LT5iYXNlKCkpLT5p
ZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0KSkKKyAgICAgICAgbm9k
ZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShs
b2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5cGUoKSwgYXJn
cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxkRGVwdGgpOwog
ICAgIGVsc2UgaWYgKCFwcmV2aW91c0Jhc2VXYXNTdXBlciAmJiAoZG90LT5pZGVudGlmaWVyKCkg
PT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5hcHBseVB1YmxpY05hbWUoKSB8
fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmFwcGx5UHJpdmF0ZU5hbWUoKSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMg
b25seSBuZWVkZWQgYmVjYXVzZSB3ZSBoYXZlbid0IHRhdWdodCB0aGUgYnl0ZWNvZGUgZ2VuZXJh
dG9yIHRvIGlubGluZQotICAgICAgICAvLyBSZWZsZWN0LmFwcGx5IHlldC4gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA2NjguCi0gICAgICAgIGlmICghZG90
LT5iYXNlKCktPmlzUmVzb2x2ZU5vZGUoKSB8fCBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGRv
dC0+YmFzZSgpKS0+aWRlbnRpZmllcigpICE9IG1fdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVjdCkK
LSAgICAgICAgICAgIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5
cGUoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxk
RGVwdGgpOworICAgICAgICBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBBcHBseUZ1bmN0aW9u
Q2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZG90
LT50eXBlKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlD
aGlsZERlcHRoKTsKICAgICB9IGVsc2UgaWYgKCFwcmV2aW91c0Jhc2VXYXNTdXBlciAKICAgICAg
ICAgJiYgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5oYXNPd25Qcm9w
ZXJ0eQogICAgICAgICAmJiBhcmdzLT5tX2xpc3ROb2RlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaAkocmV2aXNpb24gMjY0MjY2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAg
IH0KIAorICAgIGlubGluZSBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpSZWZsZWN0
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24s
IEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRG90VHlwZSB0
eXBlLCBBcmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2
b3RFbmQsIHNpemVfdCBkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpCisgICAgICAgIDog
RnVuY3Rpb25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIHR5cGUsIGFyZ3MsIGRp
dm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCkKKyAgICAgICAgLCBtX2Rpc3RhbmNlVG9Jbm5lcm1v
c3RDYWxsT3JBcHBseShkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpCisgICAgeworICAg
IH0KKwogICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVuY3Rpb25D
YWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9k
ZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIERvdFR5cGUgdHlwZSwgQXJndW1lbnRz
Tm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3Qg
ZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQogICAgICAgICA6IEZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCB0eXBlLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFy
dCwgZGl2b3RFbmQpCiAgICAgICAgICwgbV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHko
ZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkocmV2aXNpb24gMjY0MjY2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI1LDYgKzEwMjUsMTUgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHNpemVfdCBtX2Rpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JB
cHBseTsKICAgICB9OwogICAgIAorICAgIGNsYXNzIFJlZmxlY3RBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25DYWxsRG90Tm9kZSB7CisgICAgcHVibGljOgor
ICAgICAgICBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2Nh
dGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiwgRG90VHlwZSwg
QXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6
ZV90IGRpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSk7CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBSZWdpc3Rl
cklEKiA9IG51bGxwdHIpIGZpbmFsOworICAgICAgICBzaXplX3QgbV9kaXN0YW5jZVRvSW5uZXJt
b3N0Q2FsbE9yQXBwbHk7CisgICAgfTsKKwogICAgIGNsYXNzIEFwcGx5RnVuY3Rpb25DYWxsRG90
Tm9kZSBmaW5hbCA6IHB1YmxpYyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIERvdFR5cGUsIEFyZ3VtZW50
c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVfdCBkaXN0
YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAJKHJldmlzaW9uIDI2NDI2NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODksNiArMTg5LDggQEAgc3RhdGljIFN0cmluZyBub3RBRnVuY3Rp
b25Tb3VyY2VBcHBlbmRlcgogICAgIFN0cmluZyBiYXNlID0gZnVuY3Rpb25DYWxsQmFzZShzb3Vy
Y2VUZXh0KTsKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBkZWZhdWx0QXBwcm94aW1h
dGVTb3VyY2VFcnJvcihvcmlnaW5hbE1lc3NhZ2UsIHNvdXJjZVRleHQpOworICAgIGlmIChiYXNl
ID09ICJSZWZsZWN0LmFwcGx5IikKKyAgICAgICAgcmV0dXJuICJSZWZsZWN0LmFwcGx5IHJlcXVp
cmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uIl9zOwogICAgIFN0cmluZ0J1aWxk
ZXIgYnVpbGRlcihTdHJpbmdCdWlsZGVyOjpPdmVyZmxvd0hhbmRsZXI6OlJlY29yZE92ZXJmbG93
KTsKICAgICBidWlsZGVyLmFwcGVuZChiYXNlLCAiIGlzIG5vdCBhIGZ1bmN0aW9uLiAoSW4gJyIs
IHNvdXJjZVRleHQsICInLCAnIiwgYmFzZSwgIicgaXMgIik7CiAgICAgaWYgKHR5cGUgPT0gVHlw
ZVN5bWJvbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDI2NDI2NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1OSw2ICsx
MDU5LDEwIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMKICAgICBt
X2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50
OjpjYWxsRnVuY3Rpb24pXS5zZXQodm0sIHRoaXMsIGNhbGxGdW5jdGlvbik7CiAgICAgbV9saW5r
VGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6YXBw
bHlGdW5jdGlvbildLnNldCh2bSwgdGhpcywgYXBwbHlGdW5jdGlvbik7CiAKKyAgICBtX2xpbmtU
aW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjpyZWZs
ZWN0QXBwbHlGdW5jdGlvbildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxs
PiYgaW5pdCkgeworICAgICAgICAgICAgaW5pdC5zZXQoSlNGdW5jdGlvbjo6Y3JlYXRlKGluaXQu
dm0sIHJlZmxlY3RPYmplY3RBcHBseUNvZGVHZW5lcmF0b3IoaW5pdC52bSksIGluaXQub3duZXIp
KTsKKyAgICAgICAgfSk7CisKICAgICB7CiAgICAgICAgIEpTVmFsdWUgaGFzT3duUHJvcGVydHlG
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4ob2JqZWN0UHJvdG90eXBlKCktPmdldCh0aGlz
LCB2bS5wcm9wZXJ0eU5hbWVzLT5oYXNPd25Qcm9wZXJ0eSkpOwogICAgICAgICBjYXRjaFNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9SZWZsZWN0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcAkocmV2aXNpb24gMjY0MjY2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWZsZWN0T2Jq
ZWN0LmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKIApAQCAtNTQsNyArNTUsNiBAQCBj
b25zdCBDbGFzc0luZm8gUmVmbGVjdE9iamVjdDo6c19pbmZvID0gCiAKIC8qIFNvdXJjZSBmb3Ig
UmVmbGVjdE9iamVjdC5sdXQuaAogQGJlZ2luIHJlZmxlY3RPYmplY3RUYWJsZQotICAgIGFwcGx5
ICAgICAgICAgICAgICAgICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uIDMKICAgICBjb25zdHJ1Y3QgICAgICAgICAgICAgICAgcmVmbGVj
dE9iamVjdENvbnN0cnVjdCAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCiAgICAg
ZGVmaW5lUHJvcGVydHkgICAgICAgICAgIHJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eSAgICAg
ICAgICAgRG9udEVudW18RnVuY3Rpb24gMwogICAgIGRlbGV0ZVByb3BlcnR5ICAgICAgICAgICBK
U0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIK
QEAgLTc1LDEwICs3NSwxMSBAQCBSZWZsZWN0T2JqZWN0OjpSZWZsZWN0T2JqZWN0KFZNJiB2bSwg
U3RyCiB7CiB9CiAKLXZvaWQgUmVmbGVjdE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCopCit2b2lkIFJlZmxlY3RPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
YXBwbHlQdWJsaWNOYW1lKCksIGdsb2JhbE9iamVjdC0+bGlua1RpbWVDb25zdGFudChMaW5rVGlt
ZUNvbnN0YW50OjpyZWZsZWN0QXBwbHlGdW5jdGlvbiksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404922</attachid>
            <date>2020-07-22 07:38:06 -0700</date>
            <delta_ts>2020-09-09 12:04:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190668-20200722173804.patch</filename>
            <type>text/plain</type>
            <size>36042</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjQ2OTMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA3LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZSB0byBvcHRpbWl6ZSBSZWZsZWN0LmFwcGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA2NjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5
LWFycmF5LWxpdGVyYWwuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZs
ZWN0LWFwcGx5LXNwcmVhZC5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Jl
ZmxlY3QtYXBwbHkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LWFwcGx5LXdo
aWxlLWhhdmluZy1hLWJhZC10aW1lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcmVmbGVj
dC1hcHBseS5qczoKKwogMjAyMC0wNy0yMSAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJv
QGdub21lLm9yZz4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyNjQzMzApOiBpbmZpbml0ZSBsb29w
IGluIEpTQyBzdHJlc3MgdGVzdHMgdXNpbmcgY2xvb3AKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL3JlZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LWFycmF5LWxpdGVyYWwuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS1hcnJheS1s
aXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorZnVuY3Rpb24gZm4oKSB7
fQorbm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyAr
K2kpCisgICAgUmVmbGVjdC5hcHBseShmbiwgbnVsbCwgWzEsIDIsIDNdKTsKSW5kZXg6IEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAordmFyIGFyZ3MgPSBbZnVuY3Rpb24oKSB7
fSwgbnVsbCwgWzEsIDIsIDNdXTsKK25vSW5saW5lKFJlZmxlY3QuYXBwbHkpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNjsgKytpKQorICAgIFJlZmxlY3QuYXBwbHkoLi4uYXJncyk7CkluZGV4
OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHkuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYgQEAKK2Z1bmN0aW9uIGZuKCkge30KK3ZhciBhcmdzID0gWzEsIDIsIDNd
Oworbm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgM2U2OyAr
K2kpCisgICAgUmVmbGVjdC5hcHBseShmbiwgbnVsbCwgYXJncyk7CkluZGV4OiBKU1Rlc3RzL3N0
cmVzcy9yZWZsZWN0LWFwcGx5LXdoaWxlLWhhdmluZy1hLWJhZC10aW1lLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL3JlZmxlY3QtYXBwbHktd2hpbGUtaGF2aW5nLWEtYmFkLXRpbWUu
anMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS13aGlsZS1o
YXZpbmctYS1iYWQtdGltZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBAQAorZnVu
Y3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4
cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7
Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgZXJy
b3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBt
ZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhl
cnJvcikpOworfQorCitPYmplY3QucHJvdG90eXBlWzBdID0gImJhZC10aW1lLTAiOworT2JqZWN0
LnByb3RvdHlwZVsxXSA9ICJiYWQtdGltZS0xIjsKK09iamVjdC5wcm90b3R5cGVbMl0gPSAiYmFk
LXRpbWUtMiI7CitPYmplY3QucHJvdG90eXBlWzNdID0gImJhZC10aW1lLTMiOworCitzaG91bGRC
ZShSZWZsZWN0LmFwcGx5Lmxlbmd0aCwgMyk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBS
ZWZsZWN0LmFwcGx5KCJoZWxsbyIsIDQyKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hvdWxkVGhy
b3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeyB9LCA0MiwgbnVsbCk7
Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVu
dCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcnJheSA9
IHsKKyAgICAgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
b2siKTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IDAoKSB7CisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIm5nIik7CisgICAgICAgIH0KKyAgICB9OworICAgIFJlZmxlY3QuYXBwbHkoZnVu
Y3Rpb24gKCkgeyB9LCB7fSwgYXJyYXkpOworfSwgYEVycm9yOiBva2ApOworCitzaG91bGRUaHJv
dygoKSA9PiB7CisgICAgdmFyIGFycmF5ID0geworICAgICAgICBnZXQgbGVuZ3RoKCkgeworICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0sCisgICAgICAgIGdldCAwKCkgeworICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJvayIpOworICAgICAgICB9CisgICAgfTsKKyAgICBSZWZs
ZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsgfSwge30sIGFycmF5KTsKK30sIGBFcnJvcjogb2tgKTsK
KwordmFyIGFycmF5ID0geworICAgIGdldCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0sCisgICAgZ2V0IDAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibmciKTsKKyAg
ICB9Cit9Oworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1
bWVudHMubGVuZ3RoIH0sIHt9LCBhcnJheSksIDApOworCit2YXIgZ2xvYmFsT2JqZWN0ID0gdGhp
czsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50
c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0
aGlzLCBudWxsKTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIG51bGwsIFswLDEs
Ml0pLCAzKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91
bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7Cisg
ICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCBnbG9iYWxP
YmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgbnVsbCwgWzAsMSwyXSks
IDMpCisKK3ZhciB0aGlzT2JqZWN0ID0ge307CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0
aW9uICgpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVj
dCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbXSksIDAp
CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKHRo
aXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09i
amVjdCwgW10pLCAwKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAg
ICBzaG91bGRCZShhcmd1bWVudHNbMF0sICJiYWQtdGltZS0wIik7CisgICAgc2hvdWxkQmUoYXJn
dW1lbnRzWzFdLCAiYmFkLXRpbWUtMSIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgMik7
CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5s
ZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbLCwgMl0pLCAzKTsKKworc2hvdWxkQmUoUmVmbGVjdC5h
cHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAwKTsKKyAgICBz
aG91bGRCZShhcmd1bWVudHNbMV0sICJiYWQtdGltZS0xIik7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwgMyk7Cisg
ICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg7Cit9LCB0aGlzT2JqZWN0LCBbMCwsLCAzXSksIDQpOworCitzaG91bGRCZShSZWZsZWN0LmFw
cGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNo
b3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAiYmFk
LXRpbWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwgImJhZC10aW1lLTMiKTsKKyAg
ICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aDsKK30sIHRoaXNPYmplY3QsIFswLCAxLCwsXSksIDQpOworCitzaG91bGRCZShSZWZsZWN0LmFw
cGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNo
b3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7
CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbMCwgMSxdKSwg
Mik7CisKK3ZhciBhcmdzTGlzdCA9IFsxLCAyXTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVu
Y3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMSk7CisgICAgc2hvdWxkQmUo
YXJndW1lbnRzWzFdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICBy
ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIGFyZ3NMaXN0KSwgMik7CisK
K3ZhciBwcm94eSA9IG5ldyBQcm94eShbXSwgeworICAgIGdldDogKF90YXJnZXQsIGtleSkgPT4g
a2V5ID09PSAibGVuZ3RoIiA/IDMgOiAra2V5LAorfSk7CitzaG91bGRCZShSZWZsZWN0LmFwcGx5
KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3Vs
ZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAg
ICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aDsKK30sIHRoaXNPYmplY3QsIHByb3h5KSwgMyk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHko
ZnVuY3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBzaG91bGRCZShhcmd1bWVudHNb
MF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJn
dW1lbnRzWzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKHR5cGVvZiB0aGlzLCAic3lt
Ym9sIik7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCBTeW1ib2woKSwge2xlbmd0
aDogMywgMDogMCwgMTogMX0pLCAzKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHNob3VsZEJlKFJl
ZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMF0s
IDApOworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDEpOworICAgICAgICBzaG91bGRC
ZShhcmd1bWVudHNbMl0sIDIpOworICAgICAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsK
KyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfSwgdGhpc09iamVjdCwgYXJn
dW1lbnRzKSwgMyk7Cit9KSgwLCAxLCAyKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSguLi5b
ZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMyk7CisgICAgc2hvdWxk
QmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0
aGlzT2JqZWN0LCBbM11dKSwgMSk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoLi4uKGZ1bmN0
aW9uKiAoKSB7CisgICAgeWllbGQgZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICAgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAicyIpOworICAgICAgICBzaG91bGRCZShh
cmd1bWVudHNbMV0sICJ0Iik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgInIiKTsK
KyAgICAgICAgc2hvdWxkQmUodGhpcywgMS43OCk7CisgICAgICAgIHJldHVybiBhcmd1bWVudHMu
bGVuZ3RoOworICAgIH07CisgICAgeWllbGQqIG5ldyBTZXQoWzEuNzhdKTsKKyAgICB5aWVsZCBu
ZXcgU3RyaW5nKCJzdHIiKTsKK30pKCkpLCAzKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAg
IFJlZmxlY3QuYXBwbHkoLi4uW2ZvbywgYmFyLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJvcjog
Q2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBS
ZWZsZWN0LmFwcGx5KC4uLltudWxsLCBudWxsLCB7fV0pOworfSwgYFR5cGVFcnJvcjogUmVmbGVj
dC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbmApOworCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZnVuY3Rpb24gKCkge30s
IG51bGwsICJzdHIiXSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRo
ZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4gewor
ICAgIFJlZmxlY3QuYXBwbHkoZm9vLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KFN5bWJvbCgpLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VF
cnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmFwcGx5KC0zLjUsIG51bGwsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VF
cnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmF6YCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmFwcGx5KHVuZGVmaW5lZCwgbnVsbCwgWzEsIDJdLCBmb28pOworfSwgYFJl
ZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hvdWxkVGhyb3co
KCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZmFsc2UsIG51bGwsIFsxLCAyXSk7Cit9LCBgVHlw
ZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGZ1
bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJncyA9IFsxLCAyXTsK
KyAgICBSZWZsZWN0LmFwcGx5KGZvbywgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJvcjog
Q2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2
YXIgYXJncyA9IFsxLCAyXTsKKyAgICBSZWZsZWN0LmFwcGx5KHRydWUsIGJhciwgYXJncyk7Cit9
LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IGJhcmApOworCitzaG91bGRU
aHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSgiIiwgbnVsbCwge30pOworfSwgYFR5cGVF
cnJvcjogUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5j
dGlvbmApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmdW5jdGlv
biAoKSB7fSwgbnVsbCwgMyk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVz
IHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworUmVmbGVjdC5hcHBseSA9ICgp
ID0+IDQyOwordmFyIHRocm93ZXIgPSAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigidW5yZWFjaGFi
bGUiKTsgfQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLlt0aHJvd2VyLCBudWxsLCBbMV1d
KSwgNDIpOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSh0aHJvd2VyLCBudWxsLCBbMl0pLCA0Mik7
CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KHRocm93ZXIsIG51bGwsIGFyZ3NMaXN0KSwgNDIpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9yZWZsZWN0LWFwcGx5LmpzCShyZXZpc2lvbiAyNjQ2OTMpCisrKyBKU1Rlc3Rz
L3N0cmVzcy9yZWZsZWN0LWFwcGx5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OSwzICs4OSwxNTAg
QEAgc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CiAgICAgc2hvdWxkQmUodGhp
cywgdGhpc09iamVjdCk7CiAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CiB9LCB0aGlzT2Jq
ZWN0LCBbXSksIDApCisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAg
IHNob3VsZEJlKGFyZ3VtZW50c1swXSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVu
dHNbMV0sIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBz
aG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsK
K30sIHRoaXNPYmplY3QsIFssLCAyXSksIDMpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1
bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJl
KGFyZ3VtZW50c1sxXSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVu
ZGVmaW5lZCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzNdLCAzKTsKKyAgICBzaG91bGRCZSh0
aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNP
YmplY3QsIFswLCwsIDNdKSwgNCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24g
KCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7CisgICAg
c2hvdWxkQmUoYXJndW1lbnRzWzNdLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRoaXMsIHRo
aXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwg
WzAsIDEsLCxdKSwgNCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgewor
ICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFd
LCAxKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFswLCAxLF0pLCAyKTsKKwordmFyIGFyZ3NMaXN0
ID0gWzEsIDJdOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hv
dWxkQmUoYXJndW1lbnRzWzBdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDIpOwor
ICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVu
Z3RoOworfSwgdGhpc09iamVjdCwgYXJnc0xpc3QpLCAyKTsKKwordmFyIHByb3h5ID0gbmV3IFBy
b3h5KFtdLCB7CisgICAgZ2V0OiAoX3RhcmdldCwga2V5KSA9PiBrZXkgPT09ICJsZW5ndGgiID8g
MyA6ICtrZXksCit9KTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAg
IHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAx
KTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIDIpOworICAgIHNob3VsZEJlKHRoaXMsIHRo
aXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwg
cHJveHkpLCAzKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAg
InVzZSBzdHJpY3QiOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5l
ZCk7CisgICAgc2hvdWxkQmUodHlwZW9mIHRoaXMsICJzeW1ib2wiKTsKKyAgICByZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aDsKK30sIFN5bWJvbCgpLCB7bGVuZ3RoOiAzLCAwOiAwLCAxOiAxfSksIDMp
OworCisoZnVuY3Rpb24oKSB7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAo
KSB7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgICAgIHNob3VsZEJl
KGFyZ3VtZW50c1sxXSwgMSk7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgMik7Cisg
ICAgICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aDsKKyAgICB9LCB0aGlzT2JqZWN0LCBhcmd1bWVudHMpLCAzKTsKK30pKDAsIDEs
IDIpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7CisgICAgc2hv
dWxkQmUoYXJndW1lbnRzWzBdLCAzKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsK
KyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFszXV0pLCAxKTsK
Kworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSguLi4oZnVuY3Rpb24qICgpIHsKKyAgICB5aWVsZCBm
dW5jdGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBzaG91bGRCZShhcmd1
bWVudHNbMF0sICJzIik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgInQiKTsKKyAg
ICAgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAiciIpOworICAgICAgICBzaG91bGRCZSh0aGlz
LCAxLjc4KTsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfTsKKyAgICB5
aWVsZCogbmV3IFNldChbMS43OF0pOworICAgIHlpZWxkIG5ldyBTdHJpbmcoInN0ciIpOworfSko
KSksIDMpOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZm9v
LCBiYXIsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBm
b29gKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLi4uW251bGws
IG51bGwsIHt9XSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBm
aXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7fSwgbnVsbCwgInN0ciJdKTsKK30sIGBU
eXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFu
IG9iamVjdGApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmb28s
IGJhciwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBmb29gKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoU3ltYm9s
KCksIGJhciwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlh
YmxlOiBiYXJgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLTMu
NSwgbnVsbCwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlh
YmxlOiBiYXpgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkodW5k
ZWZpbmVkLCBudWxsLCBbMSwgMl0sIGZvbyk7Cit9LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZp
bmQgdmFyaWFibGU6IGZvb2ApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5h
cHBseShmYWxzZSwgbnVsbCwgWzEsIDJdKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hvdWxkVGhy
b3coKCkgPT4geworICAgIHZhciBhcmdzID0gWzEsIDJdOworICAgIFJlZmxlY3QuYXBwbHkoZm9v
LCBiYXIsIGFyZ3MpOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBm
b29gKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcmdzID0gWzEsIDJdOworICAg
IFJlZmxlY3QuYXBwbHkodHJ1ZSwgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJvcjogQ2Fu
J3QgZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZs
ZWN0LmFwcGx5KCIiLCBudWxsLCB7fSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJl
cXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93
KCgpID0+IHsKKyAgICBSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHt9LCBudWxsLCAzKTsKK30s
IGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJl
IGFuIG9iamVjdGApOworCitSZWZsZWN0LmFwcGx5ID0gKCkgPT4gNDI7Cit2YXIgdGhyb3dlciA9
ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpOyB9CisKK3Nob3VsZEJlKFJl
ZmxlY3QuYXBwbHkoLi4uW3Rocm93ZXIsIG51bGwsIFsxXV0pLCA0Mik7CitzaG91bGRCZShSZWZs
ZWN0LmFwcGx5KHRocm93ZXIsIG51bGwsIFsyXSksIDQyKTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBw
bHkodGhyb3dlciwgbnVsbCwgYXJnc0xpc3QpLCA0Mik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI2NDY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MSBAQAorMjAyMC0wNy0yMSAgQWxleGV5IFNo
dmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFJlZmxl
Y3RBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgdG8gb3B0aW1pemUgUmVmbGVjdC5hcHBseQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBuZXcgbm9kZSBp
cyBpbnRyb2R1Y2VkIGluc3RlYWQgb2YgZXh0ZW5kaW5nIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZQorICAgICAgICBhcyBSZWZsZWN0LmFwcGx5IGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVyIG9yZGVy
LCB0aHJvd3MgZm9yIG51bGxpc2gKKyAgICAgICAgYGFyZ3VtZW50c0xpc3RgLCBpcyBuZXZlciB1
c2VkIGluIGJ1aWx0LWlucyBub3Igd2l0aCBgc3VwZXJgLAorICAgICAgICBhbmQgcmVxdWlyZXMg
ZGlmZmVyZW50IHNwcmVhZCBleHByZXNzaW9uIGhhbmRsaW5nIHBlcmZvcm1hbmNlLXdpc2UuCisK
KyAgICAgICAgbm90QUZ1bmN0aW9uU291cmNlQXBwZW5kZXIoKSBpcyBtb2RpZmllZCB0byBzcGVj
aWFsLWNhc2UgUmVmbGVjdC5hcHBseQorICAgICAgICBiZWNhdXNlIHdlIGNhbid0IGhhdmUgT3BJ
c0Z1bmN0aW9uIGNoZWNrIGJlZm9yZSBhcmd1bWVudCBub2RlcyBhcmUKKyAgICAgICAgZW1pdHRl
ZCBpbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoKS4KKworICAgICAgICBUbyBhY2NvbW9k
YXRlIG1vbmtleS1wYXRjaGVkIFJlZmxlY3QuYXBwbHksIEpTRnVuY3Rpb24gaXMgZXhwb3NlZAor
ICAgICAgICBhcyBsYXppbHktaW5pdGlhbGl6ZWQgbGluay10aW1lLWNvbnN0YW50LCBhbmQgaXMg
Y2hlY2tlZCBhZ2FpbnN0IHZpYQorICAgICAgICBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJ
Zk5vdExpbmtUaW1lQ29uc3RhbnQoKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhZHZhbmNlcyBy
ZWZsZWN0LWFwcGx5LWFycmF5LWxpdGVyYWwuanMgbWljcm9iZW5jaG1hcmsKKyAgICAgICAgYnkg
YSBmYWN0b3Igb2YgMTQsIHdoaWxlIHByb2dyZXNzaW5nIG90aGVyIGFkZGVkIG9uZXMgYnkgfjM1
JS4KKyAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5IHBlcmZvcm1hbmNlIGlzIG5ldXRy
YWwuIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaDoKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdEZ1
bmN0aW9uQXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAg
ICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAg
ICAgKEpTQzo6UmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToK
KyAgICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6
Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9y
cy5oOgorICAgICAgICAoSlNDOjpSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpSZWZs
ZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoK
KyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpu
b3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcik6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KiBydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWZsZWN0T2JqZWN0
OjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDctMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IERpc2FsbG93U2NvcGUsIERpc2FsbG93R0MsIGFu
ZCBEaXNhbGxvd1ZNUmVlbnRyeSBpbXBsZW1lbnRhdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyNjQ2OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgSlNDX0NPTU1PTl9C
WVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShtYWNybykgXAogICAgIG1hY3Jv
KGFkZCkgXAogICAgIG1hY3JvKGFwcGx5RnVuY3Rpb24pIFwKKyAgICBtYWNybyhyZWZsZWN0QXBw
bHlGdW5jdGlvbikgXAogICAgIG1hY3JvKGFycmF5U3BlY2llc0NyZWF0ZSkgXAogICAgIG1hY3Jv
KGFzc2VydCkgXAogICAgIG1hY3JvKGNhbGxGdW5jdGlvbikgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCShyZXZpc2lvbiAy
NjQ2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAzLDcgQEAgY2xhc3MgSlNHbG9iYWxPYmpl
Y3Q7CiAgICAgdihPYmplY3QsIG51bGxwdHIpIFwKICAgICB2KEFycmF5LCBudWxscHRyKSBcCiAg
ICAgdihhcHBseUZ1bmN0aW9uLCBudWxscHRyKSBcCisgICAgdihyZWZsZWN0QXBwbHlGdW5jdGlv
biwgbnVsbHB0cikgXAogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNP
d25Qcm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9s
LCBudWxscHRyKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjY0NjkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0NDgsMTQgKzE0NDgsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SnVtcElmRmFsc2UoCiAgICAgT3BKZmFsc2U6OmVtaXQodGhpcywgY29uZCwgdGFy
Z2V0LmJpbmQodGhpcykpOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElm
Tm90RnVuY3Rpb25DYWxsKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpCit2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChSZWdpc3RlcklE
KiBjb25kLCBMaW5rVGltZUNvbnN0YW50IGNvbnN0YW50LCBMYWJlbCYgdGFyZ2V0KQogewotICAg
IE9wSm5lcVB0cjo6ZW1pdCh0aGlzLCBjb25kLCBtb3ZlTGlua1RpbWVDb25zdGFudChudWxscHRy
LCBMaW5rVGltZUNvbnN0YW50OjpjYWxsRnVuY3Rpb24pLCB0YXJnZXQuYmluZCh0aGlzKSk7Ci19
Ci0KLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJl
Z2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpCi17Ci0gICAgT3BKbmVxUHRyOjplbWl0KHRo
aXMsIGNvbmQsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6
OmFwcGx5RnVuY3Rpb24pLCB0YXJnZXQuYmluZCh0aGlzKSk7CisgICAgT3BKbmVxUHRyOjplbWl0
KHRoaXMsIGNvbmQsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIGNvbnN0YW50KSwgdGFy
Z2V0LmJpbmQodGhpcykpOwogfQogCiB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdp
ZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVs
JiB0YXJnZXQpCkBAIC0zMjMyLDcgKzMyMjcsNyBAQCBFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0CiAgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKCkgPj0gMikKICAgICAgICAgICAgIHJldHVybiBOb0V4cGVjdGVkRnVuY3Rp
b247CiAgICAgICAgIAotICAgICAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgZnVuYywgbW92ZUxp
bmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6T2JqZWN0KSwgcmVhbENh
bGwtPmJpbmQodGhpcykpOworICAgICAgICBlbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChm
dW5jLCBMaW5rVGltZUNvbnN0YW50OjpPYmplY3QsIHJlYWxDYWxsLmdldCgpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKQogICAgICAgICAgICAgZW1pdE5l
d09iamVjdChkc3QpOwpAQCAtMzI0OCw3ICszMjQzLDcgQEAgRXhwZWN0ZWRGdW5jdGlvbiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdAogICAgICAgICBpZiAoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpID4gMikKICAgICAgICAgICAgIHJldHVybiBOb0V4cGVjdGVkRnVu
Y3Rpb247CiAgICAgICAgIAotICAgICAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgZnVuYywgbW92
ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6QXJyYXkpLCByZWFs
Q2FsbC0+YmluZCh0aGlzKSk7CisgICAgICAgIGVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50
KGZ1bmMsIExpbmtUaW1lQ29uc3RhbnQ6OkFycmF5LCByZWFsQ2FsbC5nZXQoKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewogICAgICAgICAgICAgaWYg
KGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSA9PSAyKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjY0NjkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC04ODcsOCAr
ODg3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEp1bXAoTGFiZWwmIHRh
cmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwgTGFi
ZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQqIGNv
bmQsIExhYmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNh
bGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1
bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7Cisg
ICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQoUmVnaXN0ZXJJRCogY29u
ZCwgTGlua1RpbWVDb25zdGFudCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVt
aXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBM
YWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNl
dCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjY0NjkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01LDcgKzUsOCBAQAogKiAgQ29weXJpZ2h0IChDKSAyMDA3IENhbWVy
b24gWndhcmljaCAoY3d6d2FyaWNoQHV3YXRlcmxvby5jYSkKICogIENvcHlyaWdodCAoQykgMjAw
NyBNYWtzIE9ybG92aWNoCiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVyaWNA
d2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KKyogIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEsIFMuTC4KKyogIENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkg
U2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogKgogKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4
ODAsNyArMTg4MSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkK
IAogICAgIGlmIChlbWl0Q2FsbENoZWNrKSB7CiAgICAgICAgIG1ha2VGdW5jdGlvbigpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChmdW5jdGlvbi5nZXQoKSwg
cmVhbENhbGwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdExpbmtUaW1l
Q29uc3RhbnQoZnVuY3Rpb24uZ2V0KCksIExpbmtUaW1lQ29uc3RhbnQ6OmNhbGxGdW5jdGlvbiwg
cmVhbENhbGwuZ2V0KCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGlmIChtX2FyZ3MtPm1fbGlz
dE5vZGUgJiYgbV9hcmdzLT5tX2xpc3ROb2RlLT5tX2V4cHIgJiYgbV9hcmdzLT5tX2xpc3ROb2Rl
LT5tX2V4cHItPmlzU3ByZWFkRXhwcmVzc2lvbigpKSB7CkBAIC0xOTkwLDYgKzE5OTEsOTIgQEAg
UmVnaXN0ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEbwogICAgIHJldHVybiByZXR1
cm5WYWx1ZS5nZXQoKTsKIH0KIAorUmVnaXN0ZXJJRCogUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICBBU1NFUlQobV9iYXNlLT5pc1Jlc29sdmVOb2RlKCkgJiYgc3Rh
dGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkgPT0gZ2VuZXJhdG9y
LnByb3BlcnR5TmFtZXMoKS5SZWZsZWN0KTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKKworICAgIGlmICht
X2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRp
b25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAgaWYgKG1fZGlzdGFuY2VUb0lubmVybW9zdENh
bGxPckFwcGx5IDw9IG1heERpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSkKKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhw
cmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CisKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0
aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpKTsKKyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFz
ZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCkp
OworCisgICAgaWYgKG1fZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5ID4gbWF4RGlzdGFu
Y2VUb0lubmVybW9zdENhbGxPckFwcGx5KSB7CisgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFy
Z3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxB
cmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgp
LCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5tb3ZlKGRzdCwgcmV0dXJuVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIFJlZjxMYWJl
bD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICBSZWY8TGFiZWw+IGVuZCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90TGlua1Rp
bWVDb25zdGFudChmdW5jdGlvbi5nZXQoKSwgTGlua1RpbWVDb25zdGFudDo6cmVmbGVjdEFwcGx5
RnVuY3Rpb24sIHJlYWxDYWxsLmdldCgpKTsKKworICAgIGF1dG8gZW1pdElzT2JqZWN0ID0gWyZd
IChSZWdpc3RlcklEKiBhcmd1bWVudHNSZWdpc3RlcikgeworICAgICAgICBSZWY8TGFiZWw+IGlz
T2JqZWN0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVt
cElmVHJ1ZShnZW5lcmF0b3IuZW1pdElzT2JqZWN0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
YXJndW1lbnRzUmVnaXN0ZXIpLCBpc09iamVjdC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5l
bWl0VGhyb3dUeXBlRXJyb3IoIlJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdCJfcyk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaXNPYmpl
Y3QuZ2V0KCkpOworICAgIH07CisKKyAgICBBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9kZSA9IG1f
YXJncy0+bV9saXN0Tm9kZTsKKyAgICBpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPm1fZXhwcikg
eworICAgICAgICBpZiAobGlzdE5vZGUtPm1fZXhwci0+aXNTcHJlYWRFeHByZXNzaW9uKCkpIHsK
KyAgICAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkoLi4uYXJncykKKyAgICAgICAgICAgIFNwcmVh
ZEV4cHJlc3Npb25Ob2RlKiBzcHJlYWQgPSBzdGF0aWNfY2FzdDxTcHJlYWRFeHByZXNzaW9uTm9k
ZSo+KGxpc3ROb2RlLT5tX2V4cHIpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNw
cmVhZFJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXROb2RlKHNwcmVhZC0+ZXhwcmVzc2lvbigpKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ByZWFkLT5kaXZvdCgp
LCBzcHJlYWQtPmRpdm90U3RhcnQoKSwgc3ByZWFkLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRHZXRC
eVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNwcmVhZFJlZ2lzdGVyLmdldCgpLCBnZW5l
cmF0b3IuZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIoMCkpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgc3ByZWFkUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5lbWl0
TG9hZChudWxscHRyLCBqc051bWJlcigxKSkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGFyZ3VtZW50c1JlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIHNwcmVhZFJlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3IuZW1pdExvYWQo
bnVsbHB0ciwganNOdW1iZXIoMikpKTsKKworICAgICAgICAgICAgZW1pdElzT2JqZWN0KGFyZ3Vt
ZW50c1JlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbFZhcmFy
Z3NJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb25SZWdpc3Rlci5nZXQo
KSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmd1bWVudHNSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCAwLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERl
YnVnZ2FibGVDYWxsOjpZZXMpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5n
ZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoQXJndW1lbnRMaXN0Tm9kZSogdGhpc05vZGUgPSBs
aXN0Tm9kZS0+bV9uZXh0KSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rp
b25SZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShsaXN0Tm9kZSk7CisKKyAgICAgICAgICAg
IGlmIChBcmd1bWVudExpc3ROb2RlKiBhcmd1bWVudHNOb2RlID0gdGhpc05vZGUtPm1fbmV4dCkg
eworICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNOb2RlLT5tX2V4cHItPmlzU2ltcGxlQXJy
YXkoKSAmJiAhYXJndW1lbnRzTm9kZS0+bV9uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFJlZmxlY3QuYXBwbHkoZm4sIHRoaXNBcmcsIFthcmcwLCBhcmcxLCAuLi5dKQorICAgICAgICAg
ICAgICAgICAgICBBcmd1bWVudHNOb2RlIGFycmF5QXJndW1lbnRzKHN0YXRpY19jYXN0PEFycmF5
Tm9kZSo+KGFyZ3VtZW50c05vZGUtPm1fZXhwciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRvci5w
YXJzZXJBcmVuYSgpLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsICZhcnJheUFyZ3VtZW50cyk7CisgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB0
aGlzTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBv
c2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvblJlZ2lzdGVyLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gUmVmbGVjdC5hcHBseShmbiwgdGhpc0FyZywgYXJnc0xpc3Qs
IC4uLikKKyAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3Rl
ciA9IGdlbmVyYXRvci5lbWl0Tm9kZSh0aGlzTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBhcmd1bWVudHNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShh
cmd1bWVudHNOb2RlKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBSZWZsZWN0LmFwcGx5IGln
bm9yZXMgZXh0cmEgYXJndW1lbnRzLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBldmFsdWF0ZSB0aGVt
IGZvciBzaWRlIGVmZmVjdHMuCisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBub2RlID0g
YXJndW1lbnRzTm9kZS0+bV9uZXh0OyBub2RlOyBub2RlID0gbm9kZS0+bV9uZXh0KQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUtPm1fZXhwcik7CisKKyAg
ICAgICAgICAgICAgICAgICAgZW1pdElzT2JqZWN0KGFyZ3VtZW50c1JlZ2lzdGVyLmdldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJnc0luVGFpbFBvc2l0
aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvblJlZ2lzdGVyLmdldCgpLCB0aGlzUmVnaXN0
ZXIuZ2V0KCksIGFyZ3VtZW50c1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIDAsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6
Olllcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
SnVtcChlbmQuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChyZWFsQ2FsbC5nZXQoKSk7CisgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKKyAgICBnZW5lcmF0b3IubW92ZShjYWxs
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1p
dENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBk
aXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKworICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwoZW5kLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVl
LmdldCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOworICAgIHJldHVybiByZXR1cm5WYWx1
ZS5nZXQoKTsKK30KKwogc3RhdGljIGJvb2wgYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKEFyZ3Vt
ZW50c05vZGUqIGFyZ3MpCiB7CiAgICAgcmV0dXJuICFhcmdzLT5tX2xpc3ROb2RlIHx8ICFhcmdz
LT5tX2xpc3ROb2RlLT5tX2V4cHIgfHwgIWFyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dApAQCAtMjAz
Niw4ICsyMTIzLDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1
YmV4cHJlc3Npb25TdGFydCgpLCBzdWJleHByZXNzaW9uRW5kKCkpOwogICAgIGlmIChlbWl0Q2Fs
bENoZWNrKSB7CiAgICAgICAgIG1ha2VGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQoIW1fYmFz
ZS0+aXNSZXNvbHZlTm9kZSgpIHx8IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+
aWRlbnRpZmllcigpICE9ICJSZWZsZWN0Iik7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
Tm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQoZnVuY3Rpb24uZ2V0KCks
IExpbmtUaW1lQ29uc3RhbnQ6OmFwcGx5RnVuY3Rpb24sIHJlYWxDYWxsLmdldCgpKTsKICAgICB9
CiAgICAgaWYgKG1heUJlQ2FsbCkgewogICAgICAgICBpZiAobV9hcmdzLT5tX2xpc3ROb2RlICYm
IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2aXNpb24gMjY0NjkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NDQsMTEg
KzE0NDQsMTAgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbgogICAg
IEZ1bmN0aW9uQ2FsbERvdE5vZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmICghcHJldmlvdXNC
YXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuY2FsbFB1YmxpY05hbWUoKSB8fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNhbGxQcml2YXRlTmFtZSgpKSkKICAg
ICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUo
bG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZG90LT50eXBlKCksIGFy
Z3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsK
KyAgICBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigp
ID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkg
JiYgZG90LT5iYXNlKCktPmlzUmVzb2x2ZU5vZGUoKSAmJiBzdGF0aWNfY2FzdDxSZXNvbHZlTm9k
ZSo+KGRvdC0+YmFzZSgpKS0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+UmVm
bGVjdCkpCisgICAgICAgIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIFJlZmxlY3RBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIo
KSwgZG90LT50eXBlKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgY2FsbE9y
QXBwbHlDaGlsZERlcHRoKTsKICAgICBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYg
KGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
YXBwbHlQdWJsaWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5hcHBseVByaXZhdGVOYW1lKCkpKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNoZWNrIGlzIG9ubHkgbmVlZGVkIGJlY2F1c2Ugd2UgaGF2ZW4ndCB0YXVnaHQg
dGhlIGJ5dGVjb2RlIGdlbmVyYXRvciB0byBpbmxpbmUKLSAgICAgICAgLy8gUmVmbGVjdC5hcHBs
eSB5ZXQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4
LgotICAgICAgICBpZiAoIWRvdC0+YmFzZSgpLT5pc1Jlc29sdmVOb2RlKCkgfHwgc3RhdGljX2Nh
c3Q8UmVzb2x2ZU5vZGUqPihkb3QtPmJhc2UoKSktPmlkZW50aWZpZXIoKSAhPSBtX3ZtLnByb3Bl
cnR5TmFtZXMtPlJlZmxlY3QpCi0gICAgICAgICAgICBub2RlID0gbmV3IChtX3BhcnNlckFyZW5h
KSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlk
ZW50aWZpZXIoKSwgZG90LT50eXBlKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVu
ZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJB
cmVuYSkgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90
LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQsIGNhbGxPckFwcGx5Q2hpbGREZXB0aCk7CiAgICAgfSBlbHNlIGlmICghcHJldmlvdXNC
YXNlV2FzU3VwZXIgCiAgICAgICAgICYmIGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVy
dHlOYW1lcy0+aGFzT3duUHJvcGVydHkKICAgICAgICAgJiYgYXJncy0+bV9saXN0Tm9kZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJ
KHJldmlzaW9uIDI2NDY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNv
bnN0cnVjdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNiArNDQ3LDEyIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIHsKICAgICB9CiAKKyAgICBpbmxpbmUgUmVmbGVjdEFwcGx5RnVuY3Rpb25D
YWxsRG90Tm9kZTo6UmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIERvdFR5cGUgdHlwZSwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0
UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3Qg
SlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgZGlzdGFuY2VUb0lubmVybW9zdENhbGxP
ckFwcGx5KQorICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlk
ZW50LCB0eXBlLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCisgICAgICAgICwg
bV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkoZGlzdGFuY2VUb0lubmVybW9zdENhbGxP
ckFwcGx5KQorICAgIHsKKyAgICB9CisKICAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3RO
b2RlOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBEb3RU
eXBlIHR5cGUsIEFyZ3VtZW50c05vZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZv
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBkaXZvdEVuZCwgc2l6ZV90IGRpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSkKICAgICAg
ICAgOiBGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBiYXNlLCBpZGVudCwgdHlwZSwgYXJn
cywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kKQogICAgICAgICAsIG1fZGlzdGFuY2VUb0lu
bmVybW9zdENhbGxPckFwcGx5KGRpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDI2NDY5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAy
NSw2ICsxMDI1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV9kaXN0YW5j
ZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHk7CiAgICAgfTsKICAgICAKKyAgICBjbGFzcyBSZWZsZWN0
QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5v
ZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9k
ZShjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRl
bnRpZmllciYsIERvdFR5cGUsIEFyZ3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZGl2b3RFbmQsIHNpemVfdCBkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpOwor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSBudWxscHRyKSBmaW5hbDsKKyAgICAgICAgc2l6ZV90
IG1fZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5OworICAgIH07CisKICAgICBjbGFzcyBB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25DYWxsRG90Tm9k
ZSB7CiAgICAgcHVibGljOgogICAgICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3Qg
SlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXIm
LCBEb3RUeXBlLCBBcmd1bWVudHNOb2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBj
b25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRp
dm90RW5kLCBzaXplX3QgZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyNjQ2OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSw4IEBAIHN0YXRp
YyBTdHJpbmcgbm90QUZ1bmN0aW9uU291cmNlQXBwZW5kZXIKICAgICBTdHJpbmcgYmFzZSA9IGZ1
bmN0aW9uQ2FsbEJhc2Uoc291cmNlVGV4dCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1
cm4gZGVmYXVsdEFwcHJveGltYXRlU291cmNlRXJyb3Iob3JpZ2luYWxNZXNzYWdlLCBzb3VyY2VU
ZXh0KTsKKyAgICBpZiAoYmFzZSA9PSAiUmVmbGVjdC5hcHBseSIpCisgICAgICAgIHJldHVybiAi
UmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbiJf
czsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoU3RyaW5nQnVpbGRlcjo6T3ZlcmZsb3dIYW5k
bGVyOjpSZWNvcmRPdmVyZmxvdyk7CiAgICAgYnVpbGRlci5hcHBlbmQoYmFzZSwgIiBpcyBub3Qg
YSBmdW5jdGlvbi4gKEluICciLCBzb3VyY2VUZXh0LCAiJywgJyIsIGJhc2UsICInIGlzICIpOwog
ICAgIGlmICh0eXBlID09IFR5cGVTeW1ib2wpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyNjQ2OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNzEsNiArMTA3MSwxMCBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3Rvciog
bG93ZXJOYW1lICMjCiAgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTGlua1RpbWVDb25zdGFudDo6Y2FsbEZ1bmN0aW9uKV0uc2V0KHZtLCB0aGlzLCBjYWxsRnVu
Y3Rpb24pOwogICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExp
bmtUaW1lQ29uc3RhbnQ6OmFwcGx5RnVuY3Rpb24pXS5zZXQodm0sIHRoaXMsIGFwcGx5RnVuY3Rp
b24pOwogCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlu
a1RpbWVDb25zdGFudDo6cmVmbGVjdEFwcGx5RnVuY3Rpb24pXS5pbml0TGF0ZXIoW10gKGNvbnN0
IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgICAgIGluaXQuc2V0KEpTRnVu
Y3Rpb246OmNyZWF0ZShpbml0LnZtLCByZWZsZWN0T2JqZWN0QXBwbHlDb2RlR2VuZXJhdG9yKGlu
aXQudm0pLCBpbml0Lm93bmVyKSk7CisgICAgICAgIH0pOworCiAgICAgewogICAgICAgICBKU1Zh
bHVlIGhhc093blByb3BlcnR5RnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG9iamVjdFBy
b3RvdHlwZSgpLT5nZXQodGhpcywgdm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVydHkpKTsK
ICAgICAgICAgY2F0Y2hTY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHJldmlzaW9uIDI2
NDY5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiUmVmbGVjdE9iamVjdC5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAK
QEAgLTU0LDcgKzU1LDYgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZmxlY3RPYmplY3Q6OnNfaW5mbyA9
IAogCiAvKiBTb3VyY2UgZm9yIFJlZmxlY3RPYmplY3QubHV0LmgKIEBiZWdpbiByZWZsZWN0T2Jq
ZWN0VGFibGUKLSAgICBhcHBseSAgICAgICAgICAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAzCiAgICAgY29uc3RydWN0ICAg
ICAgICAgICAgICAgIHJlZmxlY3RPYmplY3RDb25zdHJ1Y3QgICAgICAgICAgICAgICAgRG9udEVu
dW18RnVuY3Rpb24gMgogICAgIGRlZmluZVByb3BlcnR5ICAgICAgICAgICByZWZsZWN0T2JqZWN0
RGVmaW5lUHJvcGVydHkgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKICAgICBkZWxldGVQ
cm9wZXJ0eSAgICAgICAgICAgSlNCdWlsdGluICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
b250RW51bXxGdW5jdGlvbiAyCkBAIC03NSwxMCArNzUsMTEgQEAgUmVmbGVjdE9iamVjdDo6UmVm
bGVjdE9iamVjdChWTSYgdm0sIFN0cgogewogfQogCi12b2lkIFJlZmxlY3RPYmplY3Q6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKQordm9pZCBSZWZsZWN0T2JqZWN0Ojpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2bSwgaW5m
bygpKSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpLCBnbG9iYWxPYmplY3QtPmxpbmtU
aW1lQ29uc3RhbnQoTGlua1RpbWVDb25zdGFudDo6cmVmbGVjdEFwcGx5RnVuY3Rpb24pLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiB9CiAKIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408355</attachid>
            <date>2020-09-09 12:04:46 -0700</date>
            <delta_ts>2020-09-09 16:25:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190668-20200909220445.patch</filename>
            <type>text/plain</type>
            <size>34356</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjY3OTIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA5LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZSB0byBvcHRpbWl6ZSBSZWZsZWN0LmFwcGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTA2NjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5
LWFycmF5LWxpdGVyYWwuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZs
ZWN0LWFwcGx5LXNwcmVhZC5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3Jl
ZmxlY3QtYXBwbHkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LWFwcGx5LXdo
aWxlLWhhdmluZy1hLWJhZC10aW1lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcmVmbGVj
dC1hcHBseS5qczoKKwogMjAyMC0wOS0wOSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBn
bWFpbC5jb20+CiAKICAgICAgICAgRG9uJ3QgZW1pdERpcmVjdEJpbmRpbmcoKSBpZiB0aGVyZSBp
cyBhIFsuLi5yZXN0XSBlbGVtZW50IGJpbmRpbmcKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL3JlZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LWFycmF5LWxpdGVyYWwuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS1hcnJheS1saXRl
cmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorZnVuY3Rpb24gZm4oKSB7fQor
bm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kp
CisgICAgUmVmbGVjdC5hcHBseShmbiwgbnVsbCwgWzEsIDIsIDNdKTsKSW5kZXg6IEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCShub25leGlzdGVu
dCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHktc3ByZWFkLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAordmFyIGFyZ3MgPSBbZnVuY3Rpb24oKSB7fSwg
bnVsbCwgWzEsIDIsIDNdXTsKK25vSW5saW5lKFJlZmxlY3QuYXBwbHkpOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNjsgKytpKQorICAgIFJlZmxlY3QuYXBwbHkoLi4uYXJncyk7CkluZGV4OiBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBwbHkuanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYgQEAKK2Z1bmN0aW9uIGZuKCkge30KK3ZhciBhcmdzID0gWzEsIDIsIDNdOwor
bm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgM2U2OyArK2kp
CisgICAgUmVmbGVjdC5hcHBseShmbiwgbnVsbCwgYXJncyk7CkluZGV4OiBKU1Rlc3RzL3N0cmVz
cy9yZWZsZWN0LWFwcGx5LXdoaWxlLWhhdmluZy1hLWJhZC10aW1lLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL3JlZmxlY3QtYXBwbHktd2hpbGUtaGF2aW5nLWEtYmFkLXRpbWUuanMJ
KG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS13aGlsZS1oYXZp
bmctYS1iYWQtdGltZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBAQAorZnVuY3Rp
b24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVj
dGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9
CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3Ig
PSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBtZXNz
YWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0cmluZyhlcnJv
cikpOworfQorCitPYmplY3QucHJvdG90eXBlWzBdID0gImJhZC10aW1lLTAiOworT2JqZWN0LnBy
b3RvdHlwZVsxXSA9ICJiYWQtdGltZS0xIjsKK09iamVjdC5wcm90b3R5cGVbMl0gPSAiYmFkLXRp
bWUtMiI7CitPYmplY3QucHJvdG90eXBlWzNdID0gImJhZC10aW1lLTMiOworCitzaG91bGRCZShS
ZWZsZWN0LmFwcGx5Lmxlbmd0aCwgMyk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZs
ZWN0LmFwcGx5KCJoZWxsbyIsIDQyKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVx
dWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hvdWxkVGhyb3co
KCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeyB9LCA0MiwgbnVsbCk7Cit9
LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBi
ZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcnJheSA9IHsK
KyAgICAgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigib2si
KTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IDAoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIm5nIik7CisgICAgICAgIH0KKyAgICB9OworICAgIFJlZmxlY3QuYXBwbHkoZnVuY3Rp
b24gKCkgeyB9LCB7fSwgYXJyYXkpOworfSwgYEVycm9yOiBva2ApOworCitzaG91bGRUaHJvdygo
KSA9PiB7CisgICAgdmFyIGFycmF5ID0geworICAgICAgICBnZXQgbGVuZ3RoKCkgeworICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0sCisgICAgICAgIGdldCAwKCkgeworICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJvayIpOworICAgICAgICB9CisgICAgfTsKKyAgICBSZWZsZWN0
LmFwcGx5KGZ1bmN0aW9uICgpIHsgfSwge30sIGFycmF5KTsKK30sIGBFcnJvcjogb2tgKTsKKwor
dmFyIGFycmF5ID0geworICAgIGdldCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVybiAwOworICAg
IH0sCisgICAgZ2V0IDAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibmciKTsKKyAgICB9
Cit9Oworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVu
dHMubGVuZ3RoIH0sIHt9LCBhcnJheSksIDApOworCit2YXIgZ2xvYmFsT2JqZWN0ID0gdGhpczsK
K3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sx
XSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlz
LCBudWxsKTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIG51bGwsIFswLDEsMl0p
LCAzKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRC
ZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAg
c2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCBnbG9iYWxPYmpl
Y3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgbnVsbCwgWzAsMSwyXSksIDMp
CisKK3ZhciB0aGlzT2JqZWN0ID0ge307CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9u
ICgpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7
CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbXSksIDApCisK
K3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKHRoaXMs
IHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVj
dCwgW10pLCAwKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBz
aG91bGRCZShhcmd1bWVudHNbMF0sICJiYWQtdGltZS0wIik7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzFdLCAiYmFkLXRpbWUtMSIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgMik7Cisg
ICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5n
dGg7Cit9LCB0aGlzT2JqZWN0LCBbLCwgMl0pLCAzKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBs
eShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAwKTsKKyAgICBzaG91
bGRCZShhcmd1bWVudHNbMV0sICJiYWQtdGltZS0xIik7CisgICAgc2hvdWxkQmUoYXJndW1lbnRz
WzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwgMyk7CisgICAg
c2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7
Cit9LCB0aGlzT2JqZWN0LCBbMCwsLCAzXSksIDQpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5
KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3Vs
ZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAiYmFkLXRp
bWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwgImJhZC10aW1lLTMiKTsKKyAgICBz
aG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsK
K30sIHRoaXNPYmplY3QsIFswLCAxLCwsXSksIDQpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5
KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3Vs
ZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7Cisg
ICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbMCwgMSxdKSwgMik7
CisKK3ZhciBhcmdzTGlzdCA9IFsxLCAyXTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rp
b24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMSk7CisgICAgc2hvdWxkQmUoYXJn
dW1lbnRzWzFdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1
cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIGFyZ3NMaXN0KSwgMik7CisKK3Zh
ciBwcm94eSA9IG5ldyBQcm94eShbXSwgeworICAgIGdldDogKF90YXJnZXQsIGtleSkgPT4ga2V5
ID09PSAibGVuZ3RoIiA/IDMgOiAra2V5LAorfSk7CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1
bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJl
KGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBz
aG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsK
K30sIHRoaXNPYmplY3QsIHByb3h5KSwgMyk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVu
Y3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0s
IDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKHR5cGVvZiB0aGlzLCAic3ltYm9s
Iik7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCBTeW1ib2woKSwge2xlbmd0aDog
MywgMDogMCwgMTogMX0pLCAzKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHNob3VsZEJlKFJlZmxl
Y3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDAp
OworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDEpOworICAgICAgICBzaG91bGRCZShh
cmd1bWVudHNbMl0sIDIpOworICAgICAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfSwgdGhpc09iamVjdCwgYXJndW1l
bnRzKSwgMyk7Cit9KSgwLCAxLCAyKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSguLi5bZnVu
Y3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMyk7CisgICAgc2hvdWxkQmUo
dGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlz
T2JqZWN0LCBbM11dKSwgMSk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoLi4uKGZ1bmN0aW9u
KiAoKSB7CisgICAgeWllbGQgZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAg
ICAgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAicyIpOworICAgICAgICBzaG91bGRCZShhcmd1
bWVudHNbMV0sICJ0Iik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgInIiKTsKKyAg
ICAgICAgc2hvdWxkQmUodGhpcywgMS43OCk7CisgICAgICAgIHJldHVybiBhcmd1bWVudHMubGVu
Z3RoOworICAgIH07CisgICAgeWllbGQqIG5ldyBTZXQoWzEuNzhdKTsKKyAgICB5aWVsZCBuZXcg
U3RyaW5nKCJzdHIiKTsKK30pKCkpLCAzKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJl
ZmxlY3QuYXBwbHkoLi4uW2ZvbywgYmFyLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJvcjogQ2Fu
J3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZs
ZWN0LmFwcGx5KC4uLltudWxsLCBudWxsLCB7fV0pOworfSwgYFR5cGVFcnJvcjogUmVmbGVjdC5h
cHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbmApOworCitzaG91
bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZnVuY3Rpb24gKCkge30sIG51
bGwsICJzdHIiXSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSB0
aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAg
IFJlZmxlY3QuYXBwbHkoZm9vLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJvcjog
Q2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBS
ZWZsZWN0LmFwcGx5KFN5bWJvbCgpLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KC0zLjUsIG51bGwsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VFcnJv
cjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmF6YCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KHVuZGVmaW5lZCwgbnVsbCwgWzEsIDJdLCBmb28pOworfSwgYFJlZmVy
ZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hvdWxkVGhyb3coKCkg
PT4geworICAgIFJlZmxlY3QuYXBwbHkoZmFsc2UsIG51bGwsIFsxLCAyXSk7Cit9LCBgVHlwZUVy
cm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0
aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJncyA9IFsxLCAyXTsKKyAg
ICBSZWZsZWN0LmFwcGx5KGZvbywgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJvcjogQ2Fu
J3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIg
YXJncyA9IFsxLCAyXTsKKyAgICBSZWZsZWN0LmFwcGx5KHRydWUsIGJhciwgYXJncyk7Cit9LCBg
UmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IGJhcmApOworCitzaG91bGRUaHJv
dygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSgiIiwgbnVsbCwge30pOworfSwgYFR5cGVFcnJv
cjogUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlv
bmApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmdW5jdGlvbiAo
KSB7fSwgbnVsbCwgMyk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRo
ZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworUmVmbGVjdC5hcHBseSA9ICgpID0+
IDQyOwordmFyIHRocm93ZXIgPSAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigidW5yZWFjaGFibGUi
KTsgfQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLlt0aHJvd2VyLCBudWxsLCBbMV1dKSwg
NDIpOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSh0aHJvd2VyLCBudWxsLCBbMl0pLCA0Mik7Citz
aG91bGRCZShSZWZsZWN0LmFwcGx5KHRocm93ZXIsIG51bGwsIGFyZ3NMaXN0KSwgNDIpOwpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3N0cmVzcy9yZWZsZWN0LWFwcGx5LmpzCShyZXZpc2lvbiAyNjY3ODUpCisrKyBKU1Rlc3RzL3N0
cmVzcy9yZWZsZWN0LWFwcGx5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC04OSwzICs4OSwxNTAgQEAg
c2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CiAgICAgc2hvdWxkQmUodGhpcywg
dGhpc09iamVjdCk7CiAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CiB9LCB0aGlzT2JqZWN0
LCBbXSksIDApCisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNo
b3VsZEJlKGFyZ3VtZW50c1swXSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNb
MV0sIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91
bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30s
IHRoaXNPYmplY3QsIFssLCAyXSksIDMpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0
aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFy
Z3VtZW50c1sxXSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVm
aW5lZCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzNdLCAzKTsKKyAgICBzaG91bGRCZSh0aGlz
LCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmpl
Y3QsIFswLCwsIDNdKSwgNCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkg
eworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRz
WzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7CisgICAgc2hv
dWxkQmUoYXJndW1lbnRzWzNdLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRoaXMsIHRoaXNP
YmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwgWzAs
IDEsLCxdKSwgNCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAg
IHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAx
KTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFswLCAxLF0pLCAyKTsKKwordmFyIGFyZ3NMaXN0ID0g
WzEsIDJdOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzBdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDIpOworICAg
IHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3Ro
OworfSwgdGhpc09iamVjdCwgYXJnc0xpc3QpLCAyKTsKKwordmFyIHByb3h5ID0gbmV3IFByb3h5
KFtdLCB7CisgICAgZ2V0OiAoX3RhcmdldCwga2V5KSA9PiBrZXkgPT09ICJsZW5ndGgiID8gMyA6
ICtrZXksCit9KTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNo
b3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAxKTsK
KyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIDIpOworICAgIHNob3VsZEJlKHRoaXMsIHRoaXNP
YmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwgcHJv
eHkpLCAzKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgInVz
ZSBzdHJpY3QiOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUo
YXJndW1lbnRzWzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7
CisgICAgc2hvdWxkQmUodHlwZW9mIHRoaXMsICJzeW1ib2wiKTsKKyAgICByZXR1cm4gYXJndW1l
bnRzLmxlbmd0aDsKK30sIFN5bWJvbCgpLCB7bGVuZ3RoOiAzLCAwOiAwLCAxOiAxfSksIDMpOwor
CisoZnVuY3Rpb24oKSB7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7
CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgICAgIHNob3VsZEJlKGFy
Z3VtZW50c1sxXSwgMSk7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgMik7CisgICAg
ICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aDsKKyAgICB9LCB0aGlzT2JqZWN0LCBhcmd1bWVudHMpLCAzKTsKK30pKDAsIDEsIDIp
OworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzBdLCAzKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAg
ICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFszXV0pLCAxKTsKKwor
c2hvdWxkQmUoUmVmbGVjdC5hcHBseSguLi4oZnVuY3Rpb24qICgpIHsKKyAgICB5aWVsZCBmdW5j
dGlvbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBzaG91bGRCZShhcmd1bWVu
dHNbMF0sICJzIik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgInQiKTsKKyAgICAg
ICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAiciIpOworICAgICAgICBzaG91bGRCZSh0aGlzLCAx
Ljc4KTsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfTsKKyAgICB5aWVs
ZCogbmV3IFNldChbMS43OF0pOworICAgIHlpZWxkIG5ldyBTdHJpbmcoInN0ciIpOworfSkoKSks
IDMpOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZm9vLCBi
YXIsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29g
KTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLi4uW251bGwsIG51
bGwsIHt9XSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJz
dCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBS
ZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7fSwgbnVsbCwgInN0ciJdKTsKK30sIGBUeXBl
RXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFuIG9i
amVjdGApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmb28sIGJh
ciwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBm
b29gKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoU3ltYm9sKCks
IGJhciwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBiYXJgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLTMuNSwg
bnVsbCwgWzEsIGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxl
OiBiYXpgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkodW5kZWZp
bmVkLCBudWxsLCBbMSwgMl0sIGZvbyk7Cit9LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQg
dmFyaWFibGU6IGZvb2ApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBs
eShmYWxzZSwgbnVsbCwgWzEsIDJdKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVx
dWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hvdWxkVGhyb3co
KCkgPT4geworICAgIHZhciBhcmdzID0gWzEsIDJdOworICAgIFJlZmxlY3QuYXBwbHkoZm9vLCBi
YXIsIGFyZ3MpOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29g
KTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcmdzID0gWzEsIDJdOworICAgIFJl
ZmxlY3QuYXBwbHkodHJ1ZSwgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJvcjogQ2FuJ3Qg
ZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZsZWN0
LmFwcGx5KCIiLCBudWxsLCB7fSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVp
cmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgp
ID0+IHsKKyAgICBSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHt9LCBudWxsLCAzKTsKK30sIGBU
eXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFu
IG9iamVjdGApOworCitSZWZsZWN0LmFwcGx5ID0gKCkgPT4gNDI7Cit2YXIgdGhyb3dlciA9ICgp
ID0+IHsgdGhyb3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpOyB9CisKK3Nob3VsZEJlKFJlZmxl
Y3QuYXBwbHkoLi4uW3Rocm93ZXIsIG51bGwsIFsxXV0pLCA0Mik7CitzaG91bGRCZShSZWZsZWN0
LmFwcGx5KHRocm93ZXIsIG51bGwsIFsyXSksIDQyKTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHko
dGhyb3dlciwgbnVsbCwgYXJnc0xpc3QpLCA0Mik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDI2Njc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0OSBAQAorMjAyMC0wOS0wOSAgQWxleGV5IFNodmF5
a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFJlZmxlY3RB
cHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUgdG8gb3B0aW1pemUgUmVmbGVjdC5hcHBseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBuZXcgbm9kZSBpcyBp
bnRyb2R1Y2VkIGluc3RlYWQgb2YgZXh0ZW5kaW5nIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZQor
ICAgICAgICBhcyBSZWZsZWN0LmFwcGx5IGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVyIG9yZGVyLCB0
aHJvd3MgZm9yIG51bGxpc2gKKyAgICAgICAgYGFyZ3VtZW50c0xpc3RgLCBpcyBuZXZlciB1c2Vk
IGluIGJ1aWx0LWlucyBub3Igd2l0aCBgc3VwZXJgLAorICAgICAgICBhbmQgcmVxdWlyZXMgZGlm
ZmVyZW50IHNwcmVhZCBleHByZXNzaW9uIGhhbmRsaW5nIHBlcmZvcm1hbmNlLXdpc2UuCisKKyAg
ICAgICAgbm90QUZ1bmN0aW9uU291cmNlQXBwZW5kZXIoKSBpcyBtb2RpZmllZCB0byBzcGVjaWFs
LWNhc2UgUmVmbGVjdC5hcHBseQorICAgICAgICBiZWNhdXNlIHdlIGNhbid0IGhhdmUgT3BJc0Nh
bGxhYmxlIGNoZWNrIGJlZm9yZSBhcmd1bWVudCBub2RlcyBhcmUKKyAgICAgICAgZW1pdHRlZCBp
biBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoKS4KKworICAgICAgICBUbyBhY2NvbW9kYXRl
IG1vbmtleS1wYXRjaGluZywgUmVmbGVjdC5hcHBseSBpcyBleHBvc2VkIGFzIEBnbG9iYWxQcml2
YXRlCisgICAgICAgIGFuZCBjaGVja2VkIGFnYWluc3QgdmlhIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudCgpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFk
dmFuY2VzIHJlZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcyBtaWNyb2JlbmNobWFyaworICAg
ICAgICBieSBhIGZhY3RvciBvZiAxNCwgd2hpbGUgcHJvZ3Jlc3Npbmcgb3RoZXIgYWRkZWQgb25l
cyBieSB+MzUlLgorICAgICAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkgcGVyZm9ybWFuY2Ug
aXMgbmV1dHJhbC4gTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogYnVpbHRpbnMvUmVm
bGVjdE9iamVjdC5qczoKKyAgICAgICAgKGdsb2JhbFByaXZhdGUucmVmbGVjdEFwcGx5KToKKyAg
ICAgICAgKGFwcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJ
Zk5vdExpbmtUaW1lQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkpOiBEZWxldGVk
LgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAq
IGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVmbGVjdEFwcGx5
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHBhcnNlci9BU1RC
dWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2Rl
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpS
ZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxE
b3ROb2RlKToKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpub3RBRnVuY3Rpb25Tb3VyY2VBcHBl
bmRlcik6CisgICAgICAgICogcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpT
Qzo6UmVmbGVjdE9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDIwLTA5LTA5ICBBbGV4ZXkg
U2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBEb24ndCBlbWl0RGly
ZWN0QmluZGluZygpIGlmIHRoZXJlIGlzIGEgWy4uLnJlc3RdIGVsZW1lbnQgYmluZGluZwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1JlZmxlY3RPYmplY3QuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL1JlZmxlY3RPYmplY3QuanMJ
KHJldmlzaW9uIDI2Njc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9SZWZs
ZWN0T2JqZWN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw5IEBACiAgKi8KIAogLy8g
aHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5hcHBseQotZnVuY3Rp
b24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpCitAb3ZlcnJpZGRl
bk5hbWU9ImFwcGx5IgorQGdsb2JhbFByaXZhdGUKK2Z1bmN0aW9uIHJlZmxlY3RBcHBseSh0YXJn
ZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkKIHsKICAgICAidXNlIHN0cmljdCI7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNjY3ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQ0OCwxNCArMTQ0OCw5IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1w
SWZGYWxzZSgKICAgICBPcEpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kLCB0YXJnZXQuYmluZCh0aGlz
KSk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNh
bGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50KFJlZ2lzdGVySUQqIGNvbmQsIExpbmtU
aW1lQ29uc3RhbnQgY29uc3RhbnQsIExhYmVsJiB0YXJnZXQpCiB7Ci0gICAgT3BKbmVxUHRyOjpl
bWl0KHRoaXMsIGNvbmQsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29u
c3RhbnQ6OmNhbGxGdW5jdGlvbiksIHRhcmdldC5iaW5kKHRoaXMpKTsKLX0KLQotdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCogY29u
ZCwgTGFiZWwmIHRhcmdldCkKLXsKLSAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgY29uZCwgbW92
ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6YXBwbHlGdW5jdGlv
biksIHRhcmdldC5iaW5kKHRoaXMpKTsKKyAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgY29uZCwg
bW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgY29uc3RhbnQpLCB0YXJnZXQuYmluZCh0aGlz
KSk7CiB9CiAKIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0V2lkZUp1bXBJZk5vdEZ1
bmN0aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkKQEAg
LTMyNDUsNyArMzI0MCw3IEBAIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXQKICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMo
KSA+PSAyKQogICAgICAgICAgICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsKICAgICAgICAg
Ci0gICAgICAgIE9wSm5lcVB0cjo6ZW1pdCh0aGlzLCBmdW5jLCBtb3ZlTGlua1RpbWVDb25zdGFu
dChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50OjpPYmplY3QpLCByZWFsQ2FsbC0+YmluZCh0aGlz
KSk7CisgICAgICAgIGVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50KGZ1bmMsIExpbmtUaW1l
Q29uc3RhbnQ6Ok9iamVjdCwgcmVhbENhbGwuZ2V0KCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgICAgICBlbWl0TmV3T2JqZWN0KGRzdCk7
CkBAIC0zMjYxLDcgKzMyNTYsNyBAQCBFeHBlY3RlZEZ1bmN0aW9uIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0CiAgICAgICAgIGlmIChjYWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkgPiAyKQogICAgICAgICAgICAgcmV0dXJuIE5vRXhwZWN0ZWRGdW5jdGlvbjsKICAgICAg
ICAgCi0gICAgICAgIE9wSm5lcVB0cjo6ZW1pdCh0aGlzLCBmdW5jLCBtb3ZlTGlua1RpbWVDb25z
dGFudChudWxscHRyLCBMaW5rVGltZUNvbnN0YW50OjpBcnJheSksIHJlYWxDYWxsLT5iaW5kKHRo
aXMpKTsKKyAgICAgICAgZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQoZnVuYywgTGlua1Rp
bWVDb25zdGFudDo6QXJyYXksIHJlYWxDYWxsLmdldCgpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7CiAgICAgICAgICAgICBpZiAoY2FsbEFyZ3VtZW50
cy5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpID09IDIpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiAyNjY3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4OCw4ICs4ODgsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0SnVtcChMYWJlbCYgdGFyZ2V0KTsKICAgICAg
ICAgdm9pZCBlbWl0SnVtcElmVHJ1ZShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
ICAgICAgICAgdm9pZCBlbWl0SnVtcElmRmFsc2UoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRh
cmdldCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklE
KiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcElmTm90RnVuY3Rp
b25BcHBseShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKKyAgICAgICAgdm9pZCBl
bWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChSZWdpc3RlcklEKiBjb25kLCBMaW5rVGltZUNv
bnN0YW50LCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdW5zaWduZWQgZW1pdFdpZGVKdW1wSWZO
b3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQp
OwogICAgICAgICB2b2lkIHJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3Ao
U3RydWN0dXJlRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2Vu
ZXJpY1BhdGgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAyNjY3ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUsNyArNSw4IEBACiAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2FtZXJvbiBad2FyaWNoIChj
d3p3YXJpY2hAdXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChDKSAyMDA3IE1ha3MgT3Jsb3Zp
Y2gKICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorKiAgQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSwgUy5MLgorKiAgQ29weXJpZ2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxzaHZh
aWthbGVzaEBnbWFpbC5jb20+CiAqCiAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTg4Nyw3ICsxODg4LDcg
QEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogCiAgICAgaWYgKGVt
aXRDYWxsQ2hlY2spIHsKICAgICAgICAgbWFrZUZ1bmN0aW9uKCk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmTm90RnVuY3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChmdW5j
dGlvbi5nZXQoKSwgTGlua1RpbWVDb25zdGFudDo6Y2FsbEZ1bmN0aW9uLCByZWFsQ2FsbC5nZXQo
KSk7CiAgICAgfQogICAgIHsKICAgICAgICAgaWYgKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwciAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwci0+aXNT
cHJlYWRFeHByZXNzaW9uKCkpIHsKQEAgLTE5OTcsNiArMTk5OCw5MiBAQCBSZWdpc3RlcklEKiBI
YXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvCiAgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgp
OwogfQogCitSZWdpc3RlcklEKiBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0
Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQor
eworICAgIEFTU0VSVChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSAmJiBzdGF0aWNfY2FzdDxSZXNv
bHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSA9PSBnZW5lcmF0b3IucHJvcGVydHlOYW1l
cygpLlJlZmxlY3QpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOworCisgICAgaWYgKG1fYmFzZS0+aXNPcHRp
b25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9wdGlvbmFsQ2hlY2soYmFz
ZS5nZXQoKSk7CisKKyAgICBpZiAobV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkgPD0g
bWF4RGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQorICAgICAgICBnZW5lcmF0b3IuZW1p
dEV4cHJlc3Npb25JbmZvKHN1YmV4cHJlc3Npb25EaXZvdCgpLCBzdWJleHByZXNzaW9uU3RhcnQo
KSwgc3ViZXhwcmVzc2lvbkVuZCgpKTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlv
biA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCks
IGJhc2UuZ2V0KCksIGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkuYXBw
bHlQdWJsaWNOYW1lKCkpOworICAgIGlmIChpc09wdGlvbmFsQ2hhaW5CYXNlKCkpCisgICAgICAg
IGdlbmVyYXRvci5lbWl0T3B0aW9uYWxDaGVjayhmdW5jdGlvbi5nZXQoKSk7CisKKyAgICBpZiAo
bV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkgPiBtYXhEaXN0YW5jZVRvSW5uZXJtb3N0
Q2FsbE9yQXBwbHkpIHsKKyAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVy
YXRvciwgbV9hcmdzKTsKKyAgICAgICAgZ2VuZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbEluVGFp
bFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCks
IERlYnVnZ2FibGVDYWxsOjpZZXMpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmUoZHN0
LCByZXR1cm5WYWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAgUmVmPExhYmVsPiByZWFsQ2FsbCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7CisgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RMaW5rVGltZUNvbnN0YW50KGZ1
bmN0aW9uLmdldCgpLCBMaW5rVGltZUNvbnN0YW50OjpyZWZsZWN0QXBwbHksIHJlYWxDYWxsLmdl
dCgpKTsKKworICAgIGF1dG8gZW1pdElzT2JqZWN0ID0gWyZdIChSZWdpc3RlcklEKiBhcmd1bWVu
dHNSZWdpc3RlcikgeworICAgICAgICBSZWY8TGFiZWw+IGlzT2JqZWN0ID0gZ2VuZXJhdG9yLm5l
d0xhYmVsKCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShnZW5lcmF0b3IuZW1p
dElzT2JqZWN0KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYXJndW1lbnRzUmVnaXN0ZXIpLCBp
c09iamVjdC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0VGhyb3dUeXBlRXJyb3IoIlJl
ZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFuIG9iamVjdCJfcyk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoaXNPYmplY3QuZ2V0KCkpOworICAgIH07CisK
KyAgICBBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZTsKKyAg
ICBpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPm1fZXhwcikgeworICAgICAgICBpZiAobGlzdE5v
ZGUtPm1fZXhwci0+aXNTcHJlYWRFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgICAgIC8vIFJlZmxl
Y3QuYXBwbHkoLi4uYXJncykKKyAgICAgICAgICAgIFNwcmVhZEV4cHJlc3Npb25Ob2RlKiBzcHJl
YWQgPSBzdGF0aWNfY2FzdDxTcHJlYWRFeHByZXNzaW9uTm9kZSo+KGxpc3ROb2RlLT5tX2V4cHIp
OworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNwcmVhZFJlZ2lzdGVyID0gZ2VuZXJh
dG9yLmVtaXROb2RlKHNwcmVhZC0+ZXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8oc3ByZWFkLT5kaXZvdCgpLCBzcHJlYWQtPmRpdm90U3RhcnQo
KSwgc3ByZWFkLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBm
dW5jdGlvblJlZ2lzdGVyID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIHNwcmVhZFJlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0
ciwganNOdW1iZXIoMCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0aGlzUmVn
aXN0ZXIgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
c3ByZWFkUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5lbWl0TG9hZChudWxscHRyLCBqc051bWJl
cigxKSkpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGFyZ3VtZW50c1JlZ2lzdGVy
ID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNwcmVh
ZFJlZ2lzdGVyLmdldCgpLCBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIoMikp
KTsKKworICAgICAgICAgICAgZW1pdElzT2JqZWN0KGFyZ3VtZW50c1JlZ2lzdGVyLmdldCgpKTsK
KyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbFZhcmFyZ3NJblRhaWxQb3NpdGlvbihyZXR1
cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb25SZWdpc3Rlci5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgp
LCBhcmd1bWVudHNSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAwLCBk
aXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoQXJndW1lbnRMaXN0Tm9kZSogdGhpc05vZGUgPSBsaXN0Tm9kZS0+bV9uZXh0KSB7Cisg
ICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb25SZWdpc3RlciA9IGdlbmVyYXRv
ci5lbWl0Tm9kZShsaXN0Tm9kZSk7CisKKyAgICAgICAgICAgIGlmIChBcmd1bWVudExpc3ROb2Rl
KiBhcmd1bWVudHNOb2RlID0gdGhpc05vZGUtPm1fbmV4dCkgeworICAgICAgICAgICAgICAgIGlm
IChhcmd1bWVudHNOb2RlLT5tX2V4cHItPmlzU2ltcGxlQXJyYXkoKSAmJiAhYXJndW1lbnRzTm9k
ZS0+bV9uZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkoZm4sIHRo
aXNBcmcsIFthcmcwLCBhcmcxLCAuLi5dKQorICAgICAgICAgICAgICAgICAgICBBcmd1bWVudHNO
b2RlIGFycmF5QXJndW1lbnRzKHN0YXRpY19jYXN0PEFycmF5Tm9kZSo+KGFyZ3VtZW50c05vZGUt
Pm1fZXhwciktPnRvQXJndW1lbnRMaXN0KGdlbmVyYXRvci5wYXJzZXJBcmVuYSgpLCAwLCAwKSk7
CisgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0
b3IsICZhcnJheUFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCB0aGlzTm9kZSk7CisgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbEluVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jdGlvblJlZ2lzdGVyLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6
Olllcyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
UmVmbGVjdC5hcHBseShmbiwgdGhpc0FyZywgYXJnc0xpc3QsIC4uLikKKyAgICAgICAgICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRoaXNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9k
ZSh0aGlzTm9kZSk7CisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBhcmd1
bWVudHNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudHNOb2RlKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBSZWZsZWN0LmFwcGx5IGlnbm9yZXMgZXh0cmEgYXJndW1lbnRz
LCBidXQgd2Ugc3RpbGwgbmVlZCB0byBldmFsdWF0ZSB0aGVtIGZvciBzaWRlIGVmZmVjdHMuCisg
ICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBub2RlID0gYXJndW1lbnRzTm9kZS0+bV9uZXh0
OyBub2RlOyBub2RlID0gbm9kZS0+bV9uZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlKG5vZGUtPm1fZXhwcik7CisKKyAgICAgICAgICAgICAgICAgICAgZW1p
dElzT2JqZWN0KGFyZ3VtZW50c1JlZ2lzdGVyLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJnc0luVGFpbFBvc2l0aW9uKHJldHVyblZhbHVlLmdldCgp
LCBmdW5jdGlvblJlZ2lzdGVyLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3VtZW50c1Jl
Z2lzdGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIDAsIGRpdm90KCksIGRpdm90
U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChy
ZWFsQ2FsbC5nZXQoKSk7CisgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKKyAgICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBiYXNlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihy
ZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxl
Q2FsbDo6WWVzKTsKKworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlKHJldHVyblZhbHVlLmdldCgpLCBkaXZvdFN0YXJ0KCks
IGRpdm90RW5kKCkpOworICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKK30KKwogc3RhdGlj
IGJvb2wgYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKEFyZ3VtZW50c05vZGUqIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuICFhcmdzLT5tX2xpc3ROb2RlIHx8ICFhcmdzLT5tX2xpc3ROb2RlLT5tX2V4cHIg
fHwgIWFyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dApAQCAtMjA0Myw4ICsyMTMwLDcgQEAgUmVnaXN0
ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oc3ViZXhwcmVzc2lvbkRpdm90KCksIHN1YmV4cHJlc3Npb25TdGFydCgpLCBz
dWJleHByZXNzaW9uRW5kKCkpOwogICAgIGlmIChlbWl0Q2FsbENoZWNrKSB7CiAgICAgICAgIG1h
a2VGdW5jdGlvbigpOwotICAgICAgICBBU1NFUlQoIW1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpIHx8
IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpICE9ICJSZWZs
ZWN0Iik7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5j
dGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
Zk5vdExpbmtUaW1lQ29uc3RhbnQoZnVuY3Rpb24uZ2V0KCksIExpbmtUaW1lQ29uc3RhbnQ6OmFw
cGx5RnVuY3Rpb24sIHJlYWxDYWxsLmdldCgpKTsKICAgICB9CiAgICAgaWYgKG1heUJlQ2FsbCkg
ewogICAgICAgICBpZiAobV9hcmdzLT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+
bV9leHByKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIu
aAkocmV2aXNpb24gMjY2Nzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NDMsMTEgKzE0NDMsMTAgQEAgRXhwcmVzc2lv
bk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbgogICAgIEZ1bmN0aW9uQ2FsbERvdE5vZGUq
IG5vZGUgPSBudWxscHRyOwogICAgIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+
aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY2FsbFB1
YmxpY05hbWUoKSB8fCBkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmNhbGxQcml2YXRlTmFtZSgpKSkKICAgICAgICAgbm9kZSA9IG5ldyAobV9w
YXJzZXJBcmVuYSkgQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgp
LCBkb3QtPmlkZW50aWZpZXIoKSwgZG90LT50eXBlKCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0
LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKKyAgICBlbHNlIGlmICghcHJldmlv
dXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkgJiYgZG90LT5iYXNlKCktPmlzUmVz
b2x2ZU5vZGUoKSAmJiBzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGRvdC0+YmFzZSgpKS0+aWRl
bnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVjdCkpCisgICAgICAgIG5vZGUg
PSBuZXcgKG1fcGFyc2VyQXJlbmEpIFJlZmxlY3RBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUobG9j
YXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZG90LT50eXBlKCksIGFyZ3Ms
IGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERlcHRoKTsKICAg
ICBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgJiYgKGRvdC0+aWRlbnRpZmllcigpID09
IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQdWJsaWNOYW1lKCkgfHwg
ZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5h
cHBseVByaXZhdGVOYW1lKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIG9u
bHkgbmVlZGVkIGJlY2F1c2Ugd2UgaGF2ZW4ndCB0YXVnaHQgdGhlIGJ5dGVjb2RlIGdlbmVyYXRv
ciB0byBpbmxpbmUKLSAgICAgICAgLy8gUmVmbGVjdC5hcHBseSB5ZXQuIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4LgotICAgICAgICBpZiAoIWRvdC0+
YmFzZSgpLT5pc1Jlc29sdmVOb2RlKCkgfHwgc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihkb3Qt
PmJhc2UoKSktPmlkZW50aWZpZXIoKSAhPSBtX3ZtLnByb3BlcnR5TmFtZXMtPlJlZmxlY3QpCi0g
ICAgICAgICAgICBub2RlID0gbmV3IChtX3BhcnNlckFyZW5hKSBBcHBseUZ1bmN0aW9uQ2FsbERv
dE5vZGUobG9jYXRpb24sIGRvdC0+YmFzZSgpLCBkb3QtPmlkZW50aWZpZXIoKSwgZG90LT50eXBl
KCksIGFyZ3MsIGRpdm90LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgY2FsbE9yQXBwbHlDaGlsZERl
cHRoKTsKKyAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRvdC0+
dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGNhbGxPckFwcGx5Q2hp
bGREZXB0aCk7CiAgICAgfSBlbHNlIGlmICghcHJldmlvdXNCYXNlV2FzU3VwZXIgCiAgICAgICAg
ICYmIGRvdC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+aGFzT3duUHJvcGVy
dHkKICAgICAgICAgJiYgYXJncy0+bV9saXN0Tm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDI2Njc4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NDAsNiArNDQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICB9
CiAKKyAgICBpbmxpbmUgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6UmVmbGVjdEFw
cGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBF
eHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIERvdFR5cGUgdHlw
ZSwgQXJndW1lbnRzTm9kZSogYXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90
RW5kLCBzaXplX3QgZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQorICAgICAgICA6IEZ1
bmN0aW9uQ2FsbERvdE5vZGUobG9jYXRpb24sIGJhc2UsIGlkZW50LCB0eXBlLCBhcmdzLCBkaXZv
dCwgZGl2b3RTdGFydCwgZGl2b3RFbmQpCisgICAgICAgICwgbV9kaXN0YW5jZVRvSW5uZXJtb3N0
Q2FsbE9yQXBwbHkoZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KQorICAgIHsKKyAgICB9
CisKICAgICBpbmxpbmUgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpBcHBseUZ1bmN0aW9uQ2Fs
bERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgRXhwcmVzc2lvbk5vZGUq
IGJhc2UsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBEb3RUeXBlIHR5cGUsIEFyZ3VtZW50c05v
ZGUqIGFyZ3MsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGRpdm90U3RhcnQsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGRp
c3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSkKICAgICAgICAgOiBGdW5jdGlvbkNhbGxEb3RO
b2RlKGxvY2F0aW9uLCBiYXNlLCBpZGVudCwgdHlwZSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQs
IGRpdm90RW5kKQogICAgICAgICAsIG1fZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KGRp
c3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgJKHJldmlzaW9uIDI2Njc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvTm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzMSw2ICsxMDMxLDE1IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBzaXplX3QgbV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBw
bHk7CiAgICAgfTsKICAgICAKKyAgICBjbGFzcyBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3RO
b2RlIGZpbmFsIDogcHVibGljIEZ1bmN0aW9uQ2FsbERvdE5vZGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRp
b24mLCBFeHByZXNzaW9uTm9kZSogYmFzZSwgY29uc3QgSWRlbnRpZmllciYsIERvdFR5cGUsIEFy
Z3VtZW50c05vZGUqLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpTVGV4dFBv
c2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQsIHNpemVf
dCBkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSBudWxscHRyKSBmaW5hbDsKKyAgICAgICAgc2l6ZV90IG1fZGlzdGFuY2VUb0lubmVybW9z
dENhbGxPckFwcGx5OworICAgIH07CisKICAgICBjbGFzcyBBcHBseUZ1bmN0aW9uQ2FsbERvdE5v
ZGUgZmluYWwgOiBwdWJsaWMgRnVuY3Rpb25DYWxsRG90Tm9kZSB7CiAgICAgcHVibGljOgogICAg
ICAgICBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhw
cmVzc2lvbk5vZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBEb3RUeXBlLCBBcmd1bWVudHNO
b2RlKiwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgZGlzdGFu
Y2VUb0lubmVybW9zdENhbGxPckFwcGx5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNjY3ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSw4IEBAIHN0YXRpYyBTdHJpbmcgbm90QUZ1bmN0aW9u
U291cmNlQXBwZW5kZXIKICAgICBTdHJpbmcgYmFzZSA9IGZ1bmN0aW9uQ2FsbEJhc2Uoc291cmNl
VGV4dCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFwcHJveGltYXRl
U291cmNlRXJyb3Iob3JpZ2luYWxNZXNzYWdlLCBzb3VyY2VUZXh0KTsKKyAgICBpZiAoYmFzZSA9
PSAiUmVmbGVjdC5hcHBseSIpCisgICAgICAgIHJldHVybiAiUmVmbGVjdC5hcHBseSByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbiJfczsKICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXIoU3RyaW5nQnVpbGRlcjo6T3ZlcmZsb3dIYW5kbGVyOjpSZWNvcmRPdmVyZmxvdyk7
CiAgICAgYnVpbGRlci5hcHBlbmQoYmFzZSwgIiBpcyBub3QgYSBmdW5jdGlvbi4gKEluICciLCBz
b3VyY2VUZXh0LCAiJywgJyIsIGJhc2UsICInIGlzICIpOwogICAgIGlmICh0eXBlID09IFR5cGVT
eW1ib2wpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWZsZWN0
T2JqZWN0LmNwcAkocmV2aXNpb24gMjY2Nzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVmbGVjdE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWZsZWN0T2JqZWN0LmgiCiAKKyNpbmNs
dWRlICJCdWlsdGluTmFtZXMuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKIApAQCAtNTQsNyArNTUsNiBAQCBjb25zdCBDbGFzc0luZm8g
UmVmbGVjdE9iamVjdDo6c19pbmZvID0gCiAKIC8qIFNvdXJjZSBmb3IgUmVmbGVjdE9iamVjdC5s
dXQuaAogQGJlZ2luIHJlZmxlY3RPYmplY3RUYWJsZQotICAgIGFwcGx5ICAgICAgICAgICAgICAg
ICAgICBKU0J1aWx0aW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uIDMKICAgICBjb25zdHJ1Y3QgICAgICAgICAgICAgICAgcmVmbGVjdE9iamVjdENvbnN0cnVj
dCAgICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCiAgICAgZGVmaW5lUHJvcGVydHkg
ICAgICAgICAgIHJlZmxlY3RPYmplY3REZWZpbmVQcm9wZXJ0eSAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMwogICAgIGRlbGV0ZVByb3BlcnR5ICAgICAgICAgICBKU0J1aWx0aW4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKQEAgLTc1LDEwICs3NSwx
MSBAQCBSZWZsZWN0T2JqZWN0OjpSZWZsZWN0T2JqZWN0KFZNJiB2bSwgU3RyCiB7CiB9CiAKLXZv
aWQgUmVmbGVjdE9iamVjdDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCop
Cit2b2lkIFJlZmxlY3RPYmplY3Q6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKHZtLCBpbmZvKCkpKTsKKyAgICBKU0NfQlVJTFRJTl9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBwbHlQ
dWJsaWNOYW1lKCksIHJlZmxlY3RPYmplY3RSZWZsZWN0QXBwbHlDb2RlR2VuZXJhdG9yLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgSlND
X1RPX1NUUklOR19UQUdfV0lUSE9VVF9UUkFOU0lUSU9OKCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408382</attachid>
            <date>2020-09-09 16:25:37 -0700</date>
            <delta_ts>2020-11-30 16:55:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190668-20200910022535.patch</filename>
            <type>text/plain</type>
            <size>35476</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2Nzk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NDg2OGVmODA4ZWViZGEwNDRiZDkyOTBiMWI4ZWFkMjk2ZDRmYTI1Li44ZTdiOWNmNzFiNjY3ZWFh
MzBhYjc4M2I4YTg5MzU0MTRkOWFiN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAyMC0wOS0wOSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFp
bC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIFJlZmxlY3RBcHBseUZ1bmN0aW9uQ2FsbERvdE5v
ZGUgdG8gb3B0aW1pemUgUmVmbGVjdC5hcHBseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwNjY4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQSBuZXcgbm9kZSBpcyBpbnRyb2R1Y2VkIGluc3RlYWQgb2Yg
ZXh0ZW5kaW5nIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZQorICAgICAgICBhcyBSZWZsZWN0LmFw
cGx5IGhhcyBkaWZmZXJlbnQgcGFyYW1ldGVyIG9yZGVyLCB0aHJvd3MgZm9yIG51bGxpc2gKKyAg
ICAgICAgYGFyZ3VtZW50c0xpc3RgLCBpcyBuZXZlciB1c2VkIGluIGJ1aWx0LWlucyBub3Igd2l0
aCBgc3VwZXJgLAorICAgICAgICBhbmQgcmVxdWlyZXMgZGlmZmVyZW50IHNwcmVhZCBleHByZXNz
aW9uIGhhbmRsaW5nIHBlcmZvcm1hbmNlLXdpc2UuCisKKyAgICAgICAgbm90QUZ1bmN0aW9uU291
cmNlQXBwZW5kZXIoKSBpcyBtb2RpZmllZCB0byBzcGVjaWFsLWNhc2UgUmVmbGVjdC5hcHBseQor
ICAgICAgICBiZWNhdXNlIHdlIGNhbid0IGhhdmUgT3BJc0NhbGxhYmxlIGNoZWNrIGJlZm9yZSBh
cmd1bWVudCBub2RlcyBhcmUKKyAgICAgICAgZW1pdHRlZCBpbiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdENhbGwoKS4KKworICAgICAgICBUbyBhY2NvbW9kYXRlIG1vbmtleS1wYXRjaGluZywgUmVm
bGVjdC5hcHBseSBpcyBleHBvc2VkIHZpYSBAZ2xvYmFsUHJpdmF0ZQorICAgICAgICBhbmQgY2hl
Y2tlZCBhZ2FpbnN0IGJ5IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SnVtcElmTm90TGlua1RpbWVD
b25zdGFudCgpLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGFkdmFuY2VzIHJlZmxlY3QtYXBwbHkt
YXJyYXktbGl0ZXJhbC5qcyBtaWNyb2JlbmNobWFyaworICAgICAgICBieSBhIGZhY3RvciBvZiAx
NCwgd2hpbGUgcHJvZ3Jlc3Npbmcgb3RoZXIgYWRkZWQgb25lcyBieSB+MzUlLgorICAgICAgICBG
dW5jdGlvbi5wcm90b3R5cGUuYXBwbHkgcGVyZm9ybWFuY2UgaXMgbmV1dHJhbC4gTm8gYmVoYXZp
b3IgY2hhbmdlLgorCisgICAgICAgICogYnVpbHRpbnMvUmVmbGVjdE9iamVjdC5qczoKKyAgICAg
ICAgKGdsb2JhbFByaXZhdGUucmVmbGVjdEFwcGx5KToKKyAgICAgICAgKGFwcGx5KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEV4cGVjdGVkRnVuY3Rpb25T
bmlwcGV0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RG
dW5jdGlvbkNhbGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0Nv
ZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6UmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpl
bWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIHBhcnNlci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChK
U0M6OkFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKToKKyAgICAgICAgKiBwYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpSZWZsZWN0QXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlOjpSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKToKKyAgICAgICAgKiBw
YXJzZXIvTm9kZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwOgor
ICAgICAgICAoSlNDOjpub3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcik6CisgICAgICAgICogcnVu
dGltZS9SZWZsZWN0T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UmVmbGVjdE9iamVjdDo6Zmlu
aXNoQ3JlYXRpb24pOgorCiAyMDIwLTA5LTA5ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEJpZ0ludCBzaG91bGQgUEFDQ2FnZSBpdHMgZGF0YSBwb2lu
dGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvUmVmbGVjdE9i
amVjdC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9SZWZsZWN0T2JqZWN0Lmpz
CmluZGV4IDRiY2YwYzJmY2E4ZDJlNWJmNmRkNTY2OTczNGQyODhmMmQxNjkwZjIuLjNhZjBjN2Jj
NTJjNDI3MTU5Mzk3NDE1ZmMzOWYzYjBmMDA1MDVjMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9SZWZsZWN0T2JqZWN0LmpzCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9SZWZsZWN0T2JqZWN0LmpzCkBAIC0yNCw3ICsyNCw5IEBACiAgKi8K
IAogLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVmbGVjdC5hcHBseQot
ZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpCitAb3Zl
cnJpZGRlbk5hbWU9ImFwcGx5IgorQGdsb2JhbFByaXZhdGUKK2Z1bmN0aW9uIHJlZmxlY3RBcHBs
eSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkKIHsKICAgICAidXNlIHN0cmlj
dCI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggYjFhNTQ4YTFmZmIwMzNmOTExMzE3MzFhZGMwYjVh
OGViZThlYTFhNi4uODZiODIzN2FmMjhlODg5ZmRhYTJiMzA2ODI0MDY5YTA0YTVlOGNmOSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAKQEAgLTE0NDgsMTQgKzE0NDgsOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SnVtcElmRmFsc2UoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkKICAg
ICBPcEpmYWxzZTo6ZW1pdCh0aGlzLCBjb25kLCB0YXJnZXQuYmluZCh0aGlzKSk7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJ
RCogY29uZCwgTGFiZWwmIHRhcmdldCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRKdW1w
SWZOb3RMaW5rVGltZUNvbnN0YW50KFJlZ2lzdGVySUQqIGNvbmQsIExpbmtUaW1lQ29uc3RhbnQg
Y29uc3RhbnQsIExhYmVsJiB0YXJnZXQpCiB7Ci0gICAgT3BKbmVxUHRyOjplbWl0KHRoaXMsIGNv
bmQsIG1vdmVMaW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OmNhbGxG
dW5jdGlvbiksIHRhcmdldC5iaW5kKHRoaXMpKTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRh
cmdldCkKLXsKLSAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgY29uZCwgbW92ZUxpbmtUaW1lQ29u
c3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6YXBwbHlGdW5jdGlvbiksIHRhcmdldC5i
aW5kKHRoaXMpKTsKKyAgICBPcEpuZXFQdHI6OmVtaXQodGhpcywgY29uZCwgbW92ZUxpbmtUaW1l
Q29uc3RhbnQobnVsbHB0ciwgY29uc3RhbnQpLCB0YXJnZXQuYmluZCh0aGlzKSk7CiB9CiAKIHVu
c2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0V2lkZUp1bXBJZk5vdEZ1bmN0aW9uSGFzT3du
UHJvcGVydHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCkKQEAgLTMyNDUsNyArMzI0
MCw3IEBAIEV4cGVjdGVkRnVuY3Rpb24gQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFeHBlY3RlZEZ1
bmN0aW9uU25pcHBldChSZWdpc3RlcklEKiBkc3QsCiAgICAgICAgIGlmIChjYWxsQXJndW1lbnRz
LmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPj0gMikKICAgICAgICAgICAgIHJldHVybiBO
b0V4cGVjdGVkRnVuY3Rpb247CiAgICAgICAgIAotICAgICAgICBPcEpuZXFQdHI6OmVtaXQodGhp
cywgZnVuYywgbW92ZUxpbmtUaW1lQ29uc3RhbnQobnVsbHB0ciwgTGlua1RpbWVDb25zdGFudDo6
T2JqZWN0KSwgcmVhbENhbGwtPmJpbmQodGhpcykpOworICAgICAgICBlbWl0SnVtcElmTm90TGlu
a1RpbWVDb25zdGFudChmdW5jLCBMaW5rVGltZUNvbnN0YW50OjpPYmplY3QsIHJlYWxDYWxsLmdl
dCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKQogICAg
ICAgICAgICAgZW1pdE5ld09iamVjdChkc3QpOwpAQCAtMzI2MSw3ICszMjU2LDcgQEAgRXhwZWN0
ZWRGdW5jdGlvbiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0
KFJlZ2lzdGVySUQqIGRzdCwKICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMoKSA+IDIpCiAgICAgICAgICAgICByZXR1cm4gTm9FeHBlY3RlZEZ1bmN0
aW9uOwogICAgICAgICAKLSAgICAgICAgT3BKbmVxUHRyOjplbWl0KHRoaXMsIGZ1bmMsIG1vdmVM
aW5rVGltZUNvbnN0YW50KG51bGxwdHIsIExpbmtUaW1lQ29uc3RhbnQ6OkFycmF5KSwgcmVhbENh
bGwtPmJpbmQodGhpcykpOworICAgICAgICBlbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChm
dW5jLCBMaW5rVGltZUNvbnN0YW50OjpBcnJheSwgcmVhbENhbGwuZ2V0KCkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKICAgICAgICAgICAgIGlmIChj
YWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkgPT0gMikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAppbmRleCBkMjgyNTM0YTk2YTg0MTU5YzEyOWM1YzE0ZTNhNzhjNzQwMDRiOWZmLi5mYWRjNjkw
YTU3OWM1YjQzN2I5OGFlYmY5MTE3N2ZjMTE1YTdhMmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC04ODgs
OCArODg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEp1bXAoTGFiZWwm
IHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZlRydWUoUmVnaXN0ZXJJRCogY29uZCwg
TGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZkZhbHNlKFJlZ2lzdGVySUQq
IGNvbmQsIExhYmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlv
bkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7Ci0gICAgICAgIHZvaWQgZW1p
dEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7
CisgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdExpbmtUaW1lQ29uc3RhbnQoUmVnaXN0ZXJJRCog
Y29uZCwgTGlua1RpbWVDb25zdGFudCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVk
IGVtaXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25k
LCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9m
ZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IGI3ODM5MmM4ZWU4YjQwMTQw
ZDNhZWJhMDRiNzY3NmQxM2NlNWNhOTYuLjQ2MmY5Y2IwZjMxMmQ2ZmRkMjlkZjU1MTI1OTkzZjRh
NzE5NDlkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKQEAgLTUsNyArNSw4IEBACiAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
Q2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQogKiAgQ29weXJpZ2h0IChD
KSAyMDA3IE1ha3MgT3Jsb3ZpY2gKICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8
ZXJpY0B3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorKiAg
Q29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSwgUy5MLgorKiAgQ29weXJpZ2h0IChDKSAyMDIwIEFs
ZXhleSBTaHZheWthIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAqCiAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTg4Nyw3ICsxODg4LDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLAogCiAgICAgaWYgKGVt
aXRDYWxsQ2hlY2spIHsKICAgICAgICAgbWFrZUZ1bmN0aW9uKCk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmTm90RnVuY3Rpb25DYWxsKGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChmdW5j
dGlvbi5nZXQoKSwgTGlua1RpbWVDb25zdGFudDo6Y2FsbEZ1bmN0aW9uLCByZWFsQ2FsbC5nZXQo
KSk7CiAgICAgfQogICAgIHsKICAgICAgICAgaWYgKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwciAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwci0+aXNT
cHJlYWRFeHByZXNzaW9uKCkpIHsKQEAgLTE5OTcsNiArMTk5OCw5MiBAQCBSZWdpc3RlcklEKiBI
YXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdl
bmVyYXRvciYgZwogICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKIH0KIAorUmVnaXN0ZXJJ
RCogUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBBU1NFUlQobV9i
YXNlLT5pc1Jlc29sdmVOb2RlKCkgJiYgc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2Up
LT5pZGVudGlmaWVyKCkgPT0gZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5SZWZsZWN0KTsKKwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobV9iYXNlKTsKKworICAgIGlmIChtX2Jhc2UtPmlzT3B0aW9uYWxDaGFpbkJhc2UoKSkK
KyAgICAgICAgZ2VuZXJhdG9yLmVtaXRPcHRpb25hbENoZWNrKGJhc2UuZ2V0KCkpOworCisgICAg
aWYgKG1fZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5IDw9IG1heERpc3RhbmNlVG9Jbm5l
cm1vc3RDYWxsT3JBcHBseSkKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhz
dWJleHByZXNzaW9uRGl2b3QoKSwgc3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25F
bmQoKSk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1p
dEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBnZW5l
cmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpKTsK
KyAgICBpZiAoaXNPcHRpb25hbENoYWluQmFzZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdE9w
dGlvbmFsQ2hlY2soZnVuY3Rpb24uZ2V0KCkpOworCisgICAgaWYgKG1fZGlzdGFuY2VUb0lubmVy
bW9zdENhbGxPckFwcGx5ID4gbWF4RGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5KSB7Cisg
ICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7Cisg
ICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2Uu
Z2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5W
YWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6
WWVzKTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlKGRzdCwgcmV0dXJuVmFsdWUuZ2V0
KCkpOworICAgIH0KKworICAgIFJlZjxMYWJlbD4gcmVhbENhbGwgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKKyAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChmdW5jdGlvbi5nZXQoKSwgTGlu
a1RpbWVDb25zdGFudDo6cmVmbGVjdEFwcGx5LCByZWFsQ2FsbC5nZXQoKSk7CisKKyAgICBhdXRv
IGVtaXRJc09iamVjdCA9IFsmXSAoUmVnaXN0ZXJJRCogYXJndW1lbnRzUmVnaXN0ZXIpIHsKKyAg
ICAgICAgUmVmPExhYmVsPiBpc09iamVjdCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc09iamVjdChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGFyZ3VtZW50c1JlZ2lzdGVyKSwgaXNPYmplY3QuZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IuZW1pdFRocm93VHlwZUVycm9yKCJSZWZsZWN0LmFwcGx5IHJlcXVp
cmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3QiX3MpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGlzT2JqZWN0LmdldCgpKTsKKyAgICB9OworCisgICAgQXJndW1lbnRMaXN0
Tm9kZSogbGlzdE5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7CisgICAgaWYgKGxpc3ROb2RlICYm
IGxpc3ROb2RlLT5tX2V4cHIpIHsKKyAgICAgICAgaWYgKGxpc3ROb2RlLT5tX2V4cHItPmlzU3By
ZWFkRXhwcmVzc2lvbigpKSB7CisgICAgICAgICAgICAvLyBSZWZsZWN0LmFwcGx5KC4uLmFyZ3Mp
CisgICAgICAgICAgICBTcHJlYWRFeHByZXNzaW9uTm9kZSogc3ByZWFkID0gc3RhdGljX2Nhc3Q8
U3ByZWFkRXhwcmVzc2lvbk5vZGUqPihsaXN0Tm9kZS0+bV9leHByKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBzcHJlYWRSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0Tm9kZShzcHJl
YWQtPmV4cHJlc3Npb24oKSk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKHNwcmVhZC0+ZGl2b3QoKSwgc3ByZWFkLT5kaXZvdFN0YXJ0KCksIHNwcmVhZC0+ZGl2b3RF
bmQoKSk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb25SZWdpc3RlciA9
IGdlbmVyYXRvci5lbWl0R2V0QnlWYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcHJlYWRS
ZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzTnVtYmVyKDApKSk7
CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGhpc1JlZ2lzdGVyID0gZ2VuZXJhdG9y
LmVtaXRHZXRCeVZhbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHNwcmVhZFJlZ2lzdGVyLmdl
dCgpLCBnZW5lcmF0b3IuZW1pdExvYWQobnVsbHB0ciwganNOdW1iZXIoMSkpKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBhcmd1bWVudHNSZWdpc3RlciA9IGdlbmVyYXRvci5lbWl0
R2V0QnlWYWwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcHJlYWRSZWdpc3Rlci5nZXQoKSwg
Z2VuZXJhdG9yLmVtaXRMb2FkKG51bGxwdHIsIGpzTnVtYmVyKDIpKSk7CisKKyAgICAgICAgICAg
IGVtaXRJc09iamVjdChhcmd1bWVudHNSZWdpc3Rlci5nZXQoKSk7CisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdENhbGxWYXJhcmdzSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCksIGZ1
bmN0aW9uUmVnaXN0ZXIuZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJndW1lbnRzUmVnaXN0
ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgMCwgZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpLCBEZWJ1Z2dhYmxlQ2FsbDo6WWVzKTsKKyAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKEFyZ3VtZW50TGlz
dE5vZGUqIHRoaXNOb2RlID0gbGlzdE5vZGUtPm1fbmV4dCkgeworICAgICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUobGlzdE5v
ZGUpOworCisgICAgICAgICAgICBpZiAoQXJndW1lbnRMaXN0Tm9kZSogYXJndW1lbnRzTm9kZSA9
IHRoaXNOb2RlLT5tX25leHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTm9kZS0+
bV9leHByLT5pc1NpbXBsZUFycmF5KCkgJiYgIWFyZ3VtZW50c05vZGUtPm1fbmV4dCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBSZWZsZWN0LmFwcGx5KGZuLCB0aGlzQXJnLCBbYXJnMCwgYXJn
MSwgLi4uXSkKKyAgICAgICAgICAgICAgICAgICAgQXJndW1lbnRzTm9kZSBhcnJheUFyZ3VtZW50
cyhzdGF0aWNfY2FzdDxBcnJheU5vZGUqPihhcmd1bWVudHNOb2RlLT5tX2V4cHIpLT50b0FyZ3Vt
ZW50TGlzdChnZW5lcmF0b3IucGFyc2VyQXJlbmEoKSwgMCwgMCkpOworICAgICAgICAgICAgICAg
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCAmYXJyYXlBcmd1bWVu
dHMpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgdGhpc05vZGUpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdENhbGxJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb25SZWdp
c3Rlci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBk
aXZvdFN0YXJ0KCksIGRpdm90RW5kKCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFJlZmxlY3QuYXBwbHkoZm4s
IHRoaXNBcmcsIGFyZ3NMaXN0LCAuLi4pCisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdp
c3RlcklEPiB0aGlzUmVnaXN0ZXIgPSBnZW5lcmF0b3IuZW1pdE5vZGUodGhpc05vZGUpOworICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYXJndW1lbnRzUmVnaXN0ZXIgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUoYXJndW1lbnRzTm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gUmVmbGVjdC5hcHBseSBpZ25vcmVzIGV4dHJhIGFyZ3VtZW50cywgYnV0IHdlIHN0aWxsIG5l
ZWQgdG8gZXZhbHVhdGUgdGhlbSBmb3Igc2lkZSBlZmZlY3RzLgorICAgICAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8gbm9kZSA9IGFyZ3VtZW50c05vZGUtPm1fbmV4dDsgbm9kZTsgbm9kZSA9IG5v
ZGUtPm1fbmV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShu
b2RlLT5tX2V4cHIpOworCisgICAgICAgICAgICAgICAgICAgIGVtaXRJc09iamVjdChhcmd1bWVu
dHNSZWdpc3Rlci5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bFZhcmFyZ3NJblRhaWxQb3NpdGlvbihyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb25SZWdpc3Rl
ci5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmd1bWVudHNSZWdpc3Rlci5nZXQoKSwgZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCAwLCBkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5k
KCksIERlYnVnZ2FibGVDYWxsOjpZZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwor
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CisgICAg
Z2VuZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7
CisgICAgZ2VuZXJhdG9yLmVtaXRDYWxsSW5UYWlsUG9zaXRpb24ocmV0dXJuVmFsdWUuZ2V0KCks
IGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSwgRGVidWdnYWJsZUNhbGw6Olllcyk7CisKKyAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlVHlwZShyZXR1cm5WYWx1ZS5nZXQoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAg
ICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7Cit9CisKIHN0YXRpYyBib29sIGFyZVRyaXZpYWxB
cHBseUFyZ3VtZW50cyhBcmd1bWVudHNOb2RlKiBhcmdzKQogewogICAgIHJldHVybiAhYXJncy0+
bV9saXN0Tm9kZSB8fCAhYXJncy0+bV9saXN0Tm9kZS0+bV9leHByIHx8ICFhcmdzLT5tX2xpc3RO
b2RlLT5tX25leHQKQEAgLTIwNDMsOCArMjEzMCw3IEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhzdWJleHByZXNzaW9uRGl2b3QoKSwg
c3ViZXhwcmVzc2lvblN0YXJ0KCksIHN1YmV4cHJlc3Npb25FbmQoKSk7CiAgICAgaWYgKGVtaXRD
YWxsQ2hlY2spIHsKICAgICAgICAgbWFrZUZ1bmN0aW9uKCk7Ci0gICAgICAgIEFTU0VSVCghbV9i
YXNlLT5pc1Jlc29sdmVOb2RlKCkgfHwgc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2Up
LT5pZGVudGlmaWVyKCkgIT0gIlJlZmxlY3QiKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZOb3RGdW5jdGlvbkFwcGx5KGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CisgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90TGlua1RpbWVDb25zdGFudChmdW5jdGlvbi5nZXQo
KSwgTGlua1RpbWVDb25zdGFudDo6YXBwbHlGdW5jdGlvbiwgcmVhbENhbGwuZ2V0KCkpOwogICAg
IH0KICAgICBpZiAobWF5QmVDYWxsKSB7CiAgICAgICAgIGlmIChtX2FyZ3MtPm1fbGlzdE5vZGUg
JiYgbV9hcmdzLT5tX2xpc3ROb2RlLT5tX2V4cHIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9BU1RCdWlsZGVyLmgKaW5kZXggY2Q1MzdmYWQ2OTVjOGE0ODliZjc4ZGEyODVmYjJkMjkw
YzExOTY2NS4uNjExMDk0YWY0Mzk2ZTE1NjViMjZiZTcwZjRjOTdhNmQ0NWViNzBmYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKQEAgLTE0NDMsMTEgKzE0NDMs
MTAgQEAgRXhwcmVzc2lvbk5vZGUqIEFTVEJ1aWxkZXI6Om1ha2VGdW5jdGlvbkNhbGxOb2RlKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24KICAgICBGdW5jdGlvbkNhbGxEb3ROb2RlKiBu
b2RlID0gbnVsbHB0cjsKICAgICBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlk
ZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNhbGxQdWJs
aWNOYW1lKCkgfHwgZG90LT5pZGVudGlmaWVyKCkgPT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5jYWxsUHJpdmF0ZU5hbWUoKSkpCiAgICAgICAgIG5vZGUgPSBuZXcgKG1fcGFy
c2VyQXJlbmEpIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwg
ZG90LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwg
ZGl2b3RFbmQsIGNhbGxPckFwcGx5Q2hpbGREZXB0aCk7CisgICAgZWxzZSBpZiAoIXByZXZpb3Vz
QmFzZVdhc1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpICYmIGRvdC0+YmFzZSgpLT5pc1Jlc29s
dmVOb2RlKCkgJiYgc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihkb3QtPmJhc2UoKSktPmlkZW50
aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPlJlZmxlY3QpKQorICAgICAgICBub2RlID0g
bmV3IChtX3BhcnNlckFyZW5hKSBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlKGxvY2F0
aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgpLCBhcmdzLCBk
aXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGNhbGxPckFwcGx5Q2hpbGREZXB0aCk7CiAgICAg
ZWxzZSBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyICYmIChkb3QtPmlkZW50aWZpZXIoKSA9PSBt
X3ZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmFwcGx5UHVibGljTmFtZSgpIHx8IGRv
dC0+aWRlbnRpZmllcigpID09IG1fdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuYXBw
bHlQcml2YXRlTmFtZSgpKSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBjaGVjayBpcyBvbmx5
IG5lZWRlZCBiZWNhdXNlIHdlIGhhdmVuJ3QgdGF1Z2h0IHRoZSBieXRlY29kZSBnZW5lcmF0b3Ig
dG8gaW5saW5lCi0gICAgICAgIC8vIFJlZmxlY3QuYXBwbHkgeWV0LiBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MDY2OC4KLSAgICAgICAgaWYgKCFkb3QtPmJh
c2UoKS0+aXNSZXNvbHZlTm9kZSgpIHx8IHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oZG90LT5i
YXNlKCkpLT5pZGVudGlmaWVyKCkgIT0gbV92bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0KQotICAg
ICAgICAgICAgbm9kZSA9IG5ldyAobV9wYXJzZXJBcmVuYSkgQXBwbHlGdW5jdGlvbkNhbGxEb3RO
b2RlKGxvY2F0aW9uLCBkb3QtPmJhc2UoKSwgZG90LT5pZGVudGlmaWVyKCksIGRvdC0+dHlwZSgp
LCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGNhbGxPckFwcGx5Q2hpbGREZXB0
aCk7CisgICAgICAgIG5vZGUgPSBuZXcgKG1fcGFyc2VyQXJlbmEpIEFwcGx5RnVuY3Rpb25DYWxs
RG90Tm9kZShsb2NhdGlvbiwgZG90LT5iYXNlKCksIGRvdC0+aWRlbnRpZmllcigpLCBkb3QtPnR5
cGUoKSwgYXJncywgZGl2b3QsIGRpdm90U3RhcnQsIGRpdm90RW5kLCBjYWxsT3JBcHBseUNoaWxk
RGVwdGgpOwogICAgIH0gZWxzZSBpZiAoIXByZXZpb3VzQmFzZVdhc1N1cGVyIAogICAgICAgICAm
JiBkb3QtPmlkZW50aWZpZXIoKSA9PSBtX3ZtLnByb3BlcnR5TmFtZXMtPmhhc093blByb3BlcnR5
CiAgICAgICAgICYmIGFyZ3MtPm1fbGlzdE5vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKaW5kZXggNjlmZGEyZWZkZmUwYThiNjg2NWViNjNh
NTMzNGM1MGE2MzJiYjVmOC4uZjMyNzI3MmIwZTU0ZGNmZjVlMWZjNTFjMGY1MDRlYzI2YTFjOTcz
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0
b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3Jz
LmgKQEAgLTQ0MCw2ICs0NDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAor
ICAgIGlubGluZSBSZWZsZWN0QXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjpSZWZsZWN0QXBwbHlG
dW5jdGlvbkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIEV4cHJl
c3Npb25Ob2RlKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgRG90VHlwZSB0eXBlLCBB
cmd1bWVudHNOb2RlKiBhcmdzLCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3QsIGNvbnN0IEpT
VGV4dFBvc2l0aW9uJiBkaXZvdFN0YXJ0LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RFbmQs
IHNpemVfdCBkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpCisgICAgICAgIDogRnVuY3Rp
b25DYWxsRG90Tm9kZShsb2NhdGlvbiwgYmFzZSwgaWRlbnQsIHR5cGUsIGFyZ3MsIGRpdm90LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCkKKyAgICAgICAgLCBtX2Rpc3RhbmNlVG9Jbm5lcm1vc3RDYWxs
T3JBcHBseShkaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkpCisgICAgeworICAgIH0KKwog
ICAgIGlubGluZSBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OkFwcGx5RnVuY3Rpb25DYWxsRG90
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uLCBFeHByZXNzaW9uTm9kZSogYmFz
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIERvdFR5cGUgdHlwZSwgQXJndW1lbnRzTm9kZSog
YXJncywgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYg
ZGl2b3RTdGFydCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgZGlzdGFu
Y2VUb0lubmVybW9zdENhbGxPckFwcGx5KQogICAgICAgICA6IEZ1bmN0aW9uQ2FsbERvdE5vZGUo
bG9jYXRpb24sIGJhc2UsIGlkZW50LCB0eXBlLCBhcmdzLCBkaXZvdCwgZGl2b3RTdGFydCwgZGl2
b3RFbmQpCiAgICAgICAgICwgbV9kaXN0YW5jZVRvSW5uZXJtb3N0Q2FsbE9yQXBwbHkoZGlzdGFu
Y2VUb0lubmVybW9zdENhbGxPckFwcGx5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Ob2Rlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5o
CmluZGV4IDgwM2YwOTkzZTlmZmQ1NTE3NzY4MDUyZjVjOTMyZWM0NjU2YmJmMTMuLmQzYTYwZjJk
MWNhYTRjNDg4Y2IyYzkwNDJjMWI2NGEwYzQ1MWY3OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL05vZGVzLmgKQEAgLTEwMzEsNiArMTAzMSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgc2l6ZV90IG1fZGlzdGFuY2VUb0lubmVybW9zdENhbGxPckFwcGx5OwogICAgIH07CiAgICAg
CisgICAgY2xhc3MgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSBmaW5hbCA6IHB1Ymxp
YyBGdW5jdGlvbkNhbGxEb3ROb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZmxlY3RBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvbk5v
ZGUqIGJhc2UsIGNvbnN0IElkZW50aWZpZXImLCBEb3RUeXBlLCBBcmd1bWVudHNOb2RlKiwgY29u
c3QgSlNUZXh0UG9zaXRpb24mIGRpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZGl2b3RTdGFy
dCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90RW5kLCBzaXplX3QgZGlzdGFuY2VUb0lubmVy
bW9zdENhbGxPckFwcGx5KTsKKworICAgIHByaXZhdGU6CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gbnVsbHB0cikgZmlu
YWw7CisgICAgICAgIHNpemVfdCBtX2Rpc3RhbmNlVG9Jbm5lcm1vc3RDYWxsT3JBcHBseTsKKyAg
ICB9OworCiAgICAgY2xhc3MgQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlIGZpbmFsIDogcHVibGlj
IEZ1bmN0aW9uQ2FsbERvdE5vZGUgewogICAgIHB1YmxpYzoKICAgICAgICAgQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25Ob2RlKiBiYXNl
LCBjb25zdCBJZGVudGlmaWVyJiwgRG90VHlwZSwgQXJndW1lbnRzTm9kZSosIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBkaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGRpdm90U3RhcnQsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBkaXZvdEVuZCwgc2l6ZV90IGRpc3RhbmNlVG9Jbm5lcm1vc3RDYWxs
T3JBcHBseSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlv
bkhlbHBlcnMuY3BwCmluZGV4IDQxNGU3YmRmNzdhYjRmYzc2NGI1NjVkZjZmMWJkNGEwZDY0YjMw
Y2IuLjVjZWIxMDJiZjM5MWU3OTcyYTlkNmJmYjQzYWJjN2RlMjgzNzczMGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCkBAIC0x
ODksNiArMTg5LDggQEAgc3RhdGljIFN0cmluZyBub3RBRnVuY3Rpb25Tb3VyY2VBcHBlbmRlcihj
b25zdCBTdHJpbmcmIG9yaWdpbmFsTWVzc2FnZSwgY29uc3QgU3QKICAgICBTdHJpbmcgYmFzZSA9
IGZ1bmN0aW9uQ2FsbEJhc2Uoc291cmNlVGV4dCk7CiAgICAgaWYgKCFiYXNlKQogICAgICAgICBy
ZXR1cm4gZGVmYXVsdEFwcHJveGltYXRlU291cmNlRXJyb3Iob3JpZ2luYWxNZXNzYWdlLCBzb3Vy
Y2VUZXh0KTsKKyAgICBpZiAoYmFzZSA9PSAiUmVmbGVjdC5hcHBseSIpCisgICAgICAgIHJldHVy
biAiUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlv
biJfczsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIoU3RyaW5nQnVpbGRlcjo6T3ZlcmZsb3dI
YW5kbGVyOjpSZWNvcmRPdmVyZmxvdyk7CiAgICAgYnVpbGRlci5hcHBlbmQoYmFzZSwgIiBpcyBu
b3QgYSBmdW5jdGlvbi4gKEluICciLCBzb3VyY2VUZXh0LCAiJywgJyIsIGJhc2UsICInIGlzICIp
OwogICAgIGlmICh0eXBlID09IFR5cGVTeW1ib2wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9SZWZsZWN0T2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZmxlY3RPYmplY3QuY3BwCmluZGV4IDMyMjU1ZjhlNmEwNzY4YWVlZWI2ZTg0
OGNmOThkZTNhOTY2YTljN2MuLjM1YjZlNDQ3NGI3MTQ0NmViOTE5YzA3MWM4YzI4Mzg1N2ZjNjRi
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZmxlY3RPYmplY3Qu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVm
bGVjdE9iamVjdC5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCiAjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAKQEAgLTU0LDcgKzU1
LDYgQEAgY29uc3QgQ2xhc3NJbmZvIFJlZmxlY3RPYmplY3Q6OnNfaW5mbyA9IHsgIlJlZmxlY3Qi
LCAmQmFzZTo6c19pbmZvLCAmcmVmbGVjdE9iamUKIAogLyogU291cmNlIGZvciBSZWZsZWN0T2Jq
ZWN0Lmx1dC5oCiBAYmVnaW4gcmVmbGVjdE9iamVjdFRhYmxlCi0gICAgYXBwbHkgICAgICAgICAg
ICAgICAgICAgIEpTQnVpbHRpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18
RnVuY3Rpb24gMwogICAgIGNvbnN0cnVjdCAgICAgICAgICAgICAgICByZWZsZWN0T2JqZWN0Q29u
c3RydWN0ICAgICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDIKICAgICBkZWZpbmVQcm9w
ZXJ0eSAgICAgICAgICAgcmVmbGVjdE9iamVjdERlZmluZVByb3BlcnR5ICAgICAgICAgICBEb250
RW51bXxGdW5jdGlvbiAzCiAgICAgZGVsZXRlUHJvcGVydHkgICAgICAgICAgIEpTQnVpbHRpbiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMgpAQCAtNzUsMTAg
Kzc1LDExIEBAIFJlZmxlY3RPYmplY3Q6OlJlZmxlY3RPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKIHsKIH0KIAotdm9pZCBSZWZsZWN0T2JqZWN0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KikKK3ZvaWQgUmVmbGVjdE9iamVjdDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHModm0sIGluZm8oKSkpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5hcHBseVB1YmxpY05hbWUoKSwgZ2xvYmFsT2JqZWN0LT5saW5rVGltZUNvbnN0YW50
KExpbmtUaW1lQ29uc3RhbnQ6OnJlZmxlY3RBcHBseSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICBKU0NfVE9fU1RSSU5HX1RBR19XSVRI
T1VUX1RSQU5TSVRJT04oKTsKIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9K
U1Rlc3RzL0NoYW5nZUxvZwppbmRleCAwM2VlOThiNDdkZGIyZDZmYjMyOTc0ZDZkZGZjYmM3MGU4
NDliMDdmLi45MWZkZjM2ZThlMDJjNDI2YTZmODI4MjBhMmJjZWM4ODUwZDQ3OWMwIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIwLTA5LTA5ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNv
bT4KKworICAgICAgICBJbnRyb2R1Y2UgUmVmbGVjdEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZSB0
byBvcHRpbWl6ZSBSZWZsZWN0LmFwcGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTA2NjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LWFycmF5LWxp
dGVyYWwuanM6IEFkZGVkLgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5
LXNwcmVhZC5qczogQWRkZWQuCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBw
bHkuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9yZWZsZWN0LWFwcGx5LXdoaWxlLWhhdmlu
Zy1hLWJhZC10aW1lLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvcmVmbGVjdC1hcHBseS5q
czoKKwogMjAyMC0wOS0wOSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+
CiAKICAgICAgICAgRG9uJ3QgZW1pdERpcmVjdEJpbmRpbmcoKSBpZiB0aGVyZSBpcyBhIFsuLi5y
ZXN0XSBlbGVtZW50IGJpbmRpbmcKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3JlZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L3JlZmxlY3QtYXBwbHktYXJyYXktbGl0ZXJhbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDA0ZDgzNDFjM2M2
YWRkNjA4YTVlOGEyMzUzNzE4NWIzM2M1MGFiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS1hcnJheS1saXRlcmFsLmpzCkBAIC0wLDAgKzEs
NSBAQAorZnVuY3Rpb24gZm4oKSB7fQorbm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpCisgICAgUmVmbGVjdC5hcHBseShmbiwgbnVsbCwgWzEs
IDIsIDNdKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBw
bHktc3ByZWFkLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS1zcHJl
YWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uM2QyMjFiZGI1MWNjNDM5ZDQ0NTNlMjEyNDM3ZDkyNjUxNjk0ZmQx
OAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZmxlY3QtYXBw
bHktc3ByZWFkLmpzCkBAIC0wLDAgKzEsNSBAQAordmFyIGFyZ3MgPSBbZnVuY3Rpb24oKSB7fSwg
bnVsbCwgWzEsIDIsIDNdXTsKK25vSW5saW5lKFJlZmxlY3QuYXBwbHkpOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNjsgKytpKQorICAgIFJlZmxlY3QuYXBwbHkoLi4uYXJncyk7CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWZsZWN0LWFwcGx5LmpzIGIvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDBhOTFkNjFmYjcx
YWZkODZjMzJlZWI3Y2I2YzhjMWQ3MTNkMDliCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvcmVmbGVjdC1hcHBseS5qcwpAQCAtMCwwICsxLDYgQEAKK2Z1bmN0aW9u
IGZuKCkge30KK3ZhciBhcmdzID0gWzEsIDIsIDNdOworbm9JbmxpbmUoUmVmbGVjdC5hcHBseSk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgM2U2OyArK2kpCisgICAgUmVmbGVjdC5hcHBseShmbiwg
bnVsbCwgYXJncyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9yZWZsZWN0LWFwcGx5LXdo
aWxlLWhhdmluZy1hLWJhZC10aW1lLmpzIGIvSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS13
aGlsZS1oYXZpbmctYS1iYWQtdGltZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2I3ZmE3MWNmZDhmYWZlMzk1
Njc3YWQyY2UwZGVjMDg3ODYxMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
cmVmbGVjdC1hcHBseS13aGlsZS1oYXZpbmctYS1iYWQtdGltZS5qcwpAQCAtMCwwICsxLDI0MyBA
QAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFj
dHVhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIG1lc3NhZ2UpIHsKKyAgICB2
YXIgZXJyb3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNo
IChlKSB7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvcikKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJub3QgdGhyb3duLiIpOworICAgIGlmIChTdHJpbmcoZXJyb3Ip
ICE9PSBtZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBlcnJvcjogIiArIFN0
cmluZyhlcnJvcikpOworfQorCitPYmplY3QucHJvdG90eXBlWzBdID0gImJhZC10aW1lLTAiOwor
T2JqZWN0LnByb3RvdHlwZVsxXSA9ICJiYWQtdGltZS0xIjsKK09iamVjdC5wcm90b3R5cGVbMl0g
PSAiYmFkLXRpbWUtMiI7CitPYmplY3QucHJvdG90eXBlWzNdID0gImJhZC10aW1lLTMiOworCitz
aG91bGRCZShSZWZsZWN0LmFwcGx5Lmxlbmd0aCwgMyk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmFwcGx5KCJoZWxsbyIsIDQyKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3Qu
YXBwbHkgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hv
dWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeyB9LCA0Miwg
bnVsbCk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSB0aGlyZCBh
cmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkgPT4geworICAgIHZhciBh
cnJheSA9IHsKKyAgICAgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigib2siKTsKKyAgICAgICAgfSwKKyAgICAgICAgZ2V0IDAoKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoIm5nIik7CisgICAgICAgIH0KKyAgICB9OworICAgIFJlZmxlY3QuYXBw
bHkoZnVuY3Rpb24gKCkgeyB9LCB7fSwgYXJyYXkpOworfSwgYEVycm9yOiBva2ApOworCitzaG91
bGRUaHJvdygoKSA9PiB7CisgICAgdmFyIGFycmF5ID0geworICAgICAgICBnZXQgbGVuZ3RoKCkg
eworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0sCisgICAgICAgIGdldCAwKCkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJvayIpOworICAgICAgICB9CisgICAgfTsKKyAg
ICBSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsgfSwge30sIGFycmF5KTsKK30sIGBFcnJvcjog
b2tgKTsKKwordmFyIGFycmF5ID0geworICAgIGdldCBsZW5ndGgoKSB7CisgICAgICAgIHJldHVy
biAwOworICAgIH0sCisgICAgZ2V0IDAoKSB7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibmci
KTsKKyAgICB9Cit9Oworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7IHJldHVy
biBhcmd1bWVudHMubGVuZ3RoIH0sIHt9LCBhcnJheSksIDApOworCit2YXIgZ2xvYmFsT2JqZWN0
ID0gdGhpczsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICJ1c2Ug
c3RyaWN0IjsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFy
Z3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91
bGRCZSh0aGlzLCBudWxsKTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIG51bGws
IFswLDEsMl0pLCAzKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAg
ICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwg
MSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCBn
bG9iYWxPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgbnVsbCwgWzAs
MSwyXSksIDMpCisKK3ZhciB0aGlzT2JqZWN0ID0ge307CitzaG91bGRCZShSZWZsZWN0LmFwcGx5
KGZ1bmN0aW9uICgpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgc2hvdWxkQmUodGhpcywgdGhp
c09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBb
XSksIDApCisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3Vs
ZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwg
dGhpc09iamVjdCwgW10pLCAwKQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgp
IHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sICJiYWQtdGltZS0wIik7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzFdLCAiYmFkLXRpbWUtMSIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sy
XSwgMik7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3Vt
ZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbLCwgMl0pLCAzKTsKKworc2hvdWxkQmUoUmVm
bGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAwKTsK
KyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sICJiYWQtdGltZS0xIik7CisgICAgc2hvdWxkQmUo
YXJndW1lbnRzWzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwg
Myk7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50
cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbMCwsLCAzXSksIDQpOworCitzaG91bGRCZShSZWZs
ZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOwor
ICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJd
LCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1szXSwgImJhZC10aW1lLTMi
KTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFswLCAxLCwsXSksIDQpOworCitzaG91bGRCZShSZWZs
ZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOwor
ICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUodGhpcywgdGhpc09i
amVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCB0aGlzT2JqZWN0LCBbMCwg
MSxdKSwgMik7CisKK3ZhciBhcmdzTGlzdCA9IFsxLCAyXTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBw
bHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMSk7CisgICAgc2hv
dWxkQmUoYXJndW1lbnRzWzFdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsK
KyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIGFyZ3NMaXN0KSwg
Mik7CisKK3ZhciBwcm94eSA9IG5ldyBQcm94eShbXSwgeworICAgIGdldDogKF90YXJnZXQsIGtl
eSkgPT4ga2V5ID09PSAibGVuZ3RoIiA/IDMgOiAra2V5LAorfSk7CitzaG91bGRCZShSZWZsZWN0
LmFwcGx5KGZ1bmN0aW9uICgpIHsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAg
IHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAy
KTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRz
Lmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIHByb3h5KSwgMyk7CisKK3Nob3VsZEJlKFJlZmxlY3Qu
YXBwbHkoZnVuY3Rpb24gKCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBzaG91bGRCZShhcmd1
bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgMSk7CisgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzJdLCAiYmFkLXRpbWUtMiIpOworICAgIHNob3VsZEJlKHR5cGVvZiB0aGlz
LCAic3ltYm9sIik7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9LCBTeW1ib2woKSwg
e2xlbmd0aDogMywgMDogMCwgMTogMX0pLCAzKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHNob3Vs
ZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgICAgICBzaG91bGRCZShhcmd1bWVu
dHNbMF0sIDApOworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDEpOworICAgICAgICBz
aG91bGRCZShhcmd1bWVudHNbMl0sIDIpOworICAgICAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2Jq
ZWN0KTsKKyAgICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfSwgdGhpc09iamVj
dCwgYXJndW1lbnRzKSwgMyk7Cit9KSgwLCAxLCAyKTsKKworc2hvdWxkQmUoUmVmbGVjdC5hcHBs
eSguLi5bZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMyk7CisgICAg
c2hvdWxkQmUodGhpcywgdGhpc09iamVjdCk7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7
Cit9LCB0aGlzT2JqZWN0LCBbM11dKSwgMSk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoLi4u
KGZ1bmN0aW9uKiAoKSB7CisgICAgeWllbGQgZnVuY3Rpb24oKSB7CisgICAgICAgICJ1c2Ugc3Ry
aWN0IjsKKyAgICAgICAgc2hvdWxkQmUoYXJndW1lbnRzWzBdLCAicyIpOworICAgICAgICBzaG91
bGRCZShhcmd1bWVudHNbMV0sICJ0Iik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwg
InIiKTsKKyAgICAgICAgc2hvdWxkQmUodGhpcywgMS43OCk7CisgICAgICAgIHJldHVybiBhcmd1
bWVudHMubGVuZ3RoOworICAgIH07CisgICAgeWllbGQqIG5ldyBTZXQoWzEuNzhdKTsKKyAgICB5
aWVsZCBuZXcgU3RyaW5nKCJzdHIiKTsKK30pKCkpLCAzKTsKKworc2hvdWxkVGhyb3coKCkgPT4g
eworICAgIFJlZmxlY3QuYXBwbHkoLi4uW2ZvbywgYmFyLCBiYXpdKTsKK30sIGBSZWZlcmVuY2VF
cnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICBSZWZsZWN0LmFwcGx5KC4uLltudWxsLCBudWxsLCB7fV0pOworfSwgYFR5cGVFcnJvcjog
UmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYSBmdW5jdGlvbmAp
OworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZnVuY3Rpb24g
KCkge30sIG51bGwsICJzdHIiXSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVp
cmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworc2hvdWxkVGhyb3coKCkg
PT4geworICAgIFJlZmxlY3QuYXBwbHkoZm9vLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZlcmVu
Y2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+
IHsKKyAgICBSZWZsZWN0LmFwcGx5KFN5bWJvbCgpLCBiYXIsIFsxLCBiYXpdKTsKK30sIGBSZWZl
cmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgp
ID0+IHsKKyAgICBSZWZsZWN0LmFwcGx5KC0zLjUsIG51bGwsIFsxLCBiYXpdKTsKK30sIGBSZWZl
cmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogYmF6YCk7CisKK3Nob3VsZFRocm93KCgp
ID0+IHsKKyAgICBSZWZsZWN0LmFwcGx5KHVuZGVmaW5lZCwgbnVsbCwgWzEsIDJdLCBmb28pOwor
fSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hvdWxk
VGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoZmFsc2UsIG51bGwsIFsxLCAyXSk7Cit9
LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBi
ZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICB2YXIgYXJncyA9IFsx
LCAyXTsKKyAgICBSZWZsZWN0LmFwcGx5KGZvbywgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VF
cnJvcjogQ2FuJ3QgZmluZCB2YXJpYWJsZTogZm9vYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsK
KyAgICB2YXIgYXJncyA9IFsxLCAyXTsKKyAgICBSZWZsZWN0LmFwcGx5KHRydWUsIGJhciwgYXJn
cyk7Cit9LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IGJhcmApOworCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSgiIiwgbnVsbCwge30pOworfSwg
YFR5cGVFcnJvcjogUmVmbGVjdC5hcHBseSByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUg
YSBmdW5jdGlvbmApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShm
dW5jdGlvbiAoKSB7fSwgbnVsbCwgMyk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJl
cXVpcmVzIHRoZSB0aGlyZCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKworUmVmbGVjdC5hcHBs
eSA9ICgpID0+IDQyOwordmFyIHRocm93ZXIgPSAoKSA9PiB7IHRocm93IG5ldyBFcnJvcigidW5y
ZWFjaGFibGUiKTsgfQorCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KC4uLlt0aHJvd2VyLCBudWxs
LCBbMV1dKSwgNDIpOworc2hvdWxkQmUoUmVmbGVjdC5hcHBseSh0aHJvd2VyLCBudWxsLCBbMl0p
LCA0Mik7CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KHRocm93ZXIsIG51bGwsIGFyZ3NMaXN0KSwg
NDIpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS5qcyBiL0pTVGVz
dHMvc3RyZXNzL3JlZmxlY3QtYXBwbHkuanMKaW5kZXggMGY2OTJjN2U3MGU1MzEzY2JiZWVmODNm
YzJlNDg3MDZjYmU0NDc2Ni4uOWE4YzYzMTZjM2Y5MmU3ZDRmYmJkYTQyMGQ4MTI1OWE0MTNkMDkz
NyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvcmVmbGVjdC1hcHBseS5qcworKysgYi9KU1Rl
c3RzL3N0cmVzcy9yZWZsZWN0LWFwcGx5LmpzCkBAIC04OSwzICs4OSwxNTAgQEAgc2hvdWxkQmUo
UmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CiAgICAgc2hvdWxkQmUodGhpcywgdGhpc09iamVj
dCk7CiAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CiB9LCB0aGlzT2JqZWN0LCBbXSksIDAp
CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFy
Z3VtZW50c1swXSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIHVuZGVm
aW5lZCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzJdLCAyKTsKKyAgICBzaG91bGRCZSh0aGlz
LCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmpl
Y3QsIFssLCAyXSksIDMpOworCitzaG91bGRCZShSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHsK
KyAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sIDApOworICAgIHNob3VsZEJlKGFyZ3VtZW50c1sx
XSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7Cisg
ICAgc2hvdWxkQmUoYXJndW1lbnRzWzNdLCAzKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2Jq
ZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFswLCws
IDNdKSwgNCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNo
b3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAxKTsK
KyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7CisgICAgc2hvdWxkQmUoYXJn
dW1lbnRzWzNdLCB1bmRlZmluZWQpOworICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOwor
ICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwgWzAsIDEsLCxdKSwg
NCk7CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJl
KGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAxKTsKKyAgICBz
aG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsK
K30sIHRoaXNPYmplY3QsIFswLCAxLF0pLCAyKTsKKwordmFyIGFyZ3NMaXN0ID0gWzEsIDJdOwor
c2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzBdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMV0sIDIpOworICAgIHNob3VsZEJl
KHRoaXMsIHRoaXNPYmplY3QpOworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhp
c09iamVjdCwgYXJnc0xpc3QpLCAyKTsKKwordmFyIHByb3h5ID0gbmV3IFByb3h5KFtdLCB7Cisg
ICAgZ2V0OiAoX3RhcmdldCwga2V5KSA9PiBrZXkgPT09ICJsZW5ndGgiID8gMyA6ICtrZXksCit9
KTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkoZnVuY3Rpb24gKCkgeworICAgIHNob3VsZEJlKGFy
Z3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRzWzFdLCAxKTsKKyAgICBzaG91
bGRCZShhcmd1bWVudHNbMl0sIDIpOworICAgIHNob3VsZEJlKHRoaXMsIHRoaXNPYmplY3QpOwor
ICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfSwgdGhpc09iamVjdCwgcHJveHkpLCAzKTsK
Kworc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgInVzZSBzdHJpY3Qi
OworICAgIHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgc2hvdWxkQmUoYXJndW1lbnRz
WzFdLCAxKTsKKyAgICBzaG91bGRCZShhcmd1bWVudHNbMl0sIHVuZGVmaW5lZCk7CisgICAgc2hv
dWxkQmUodHlwZW9mIHRoaXMsICJzeW1ib2wiKTsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aDsKK30sIFN5bWJvbCgpLCB7bGVuZ3RoOiAzLCAwOiAwLCAxOiAxfSksIDMpOworCisoZnVuY3Rp
b24oKSB7CisgICAgc2hvdWxkQmUoUmVmbGVjdC5hcHBseShmdW5jdGlvbiAoKSB7CisgICAgICAg
IHNob3VsZEJlKGFyZ3VtZW50c1swXSwgMCk7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1sx
XSwgMSk7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1syXSwgMik7CisgICAgICAgIHNob3Vs
ZEJlKHRoaXMsIHRoaXNPYmplY3QpOworICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aDsK
KyAgICB9LCB0aGlzT2JqZWN0LCBhcmd1bWVudHMpLCAzKTsKK30pKDAsIDEsIDIpOworCitzaG91
bGRCZShSZWZsZWN0LmFwcGx5KC4uLltmdW5jdGlvbiAoKSB7CisgICAgc2hvdWxkQmUoYXJndW1l
bnRzWzBdLCAzKTsKKyAgICBzaG91bGRCZSh0aGlzLCB0aGlzT2JqZWN0KTsKKyAgICByZXR1cm4g
YXJndW1lbnRzLmxlbmd0aDsKK30sIHRoaXNPYmplY3QsIFszXV0pLCAxKTsKKworc2hvdWxkQmUo
UmVmbGVjdC5hcHBseSguLi4oZnVuY3Rpb24qICgpIHsKKyAgICB5aWVsZCBmdW5jdGlvbigpIHsK
KyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBzaG91bGRCZShhcmd1bWVudHNbMF0sICJz
Iik7CisgICAgICAgIHNob3VsZEJlKGFyZ3VtZW50c1sxXSwgInQiKTsKKyAgICAgICAgc2hvdWxk
QmUoYXJndW1lbnRzWzJdLCAiciIpOworICAgICAgICBzaG91bGRCZSh0aGlzLCAxLjc4KTsKKyAg
ICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7CisgICAgfTsKKyAgICB5aWVsZCogbmV3IFNl
dChbMS43OF0pOworICAgIHlpZWxkIG5ldyBTdHJpbmcoInN0ciIpOworfSkoKSksIDMpOworCitz
aG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseSguLi5bZm9vLCBiYXIsIGJhel0p
OworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hv
dWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLi4uW251bGwsIG51bGwsIHt9XSk7
Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVu
dCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZsZWN0LmFw
cGx5KC4uLltmdW5jdGlvbiAoKSB7fSwgbnVsbCwgInN0ciJdKTsKK30sIGBUeXBlRXJyb3I6IFJl
ZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOwor
CitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmb28sIGJhciwgWzEsIGJh
el0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKwor
c2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoU3ltYm9sKCksIGJhciwgWzEs
IGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBiYXJgKTsK
Kworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkoLTMuNSwgbnVsbCwgWzEs
IGJhel0pOworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBiYXpgKTsK
Kworc2hvdWxkVGhyb3coKCkgPT4geworICAgIFJlZmxlY3QuYXBwbHkodW5kZWZpbmVkLCBudWxs
LCBbMSwgMl0sIGZvbyk7Cit9LCBgUmVmZXJlbmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6
IGZvb2ApOworCitzaG91bGRUaHJvdygoKSA9PiB7CisgICAgUmVmbGVjdC5hcHBseShmYWxzZSwg
bnVsbCwgWzEsIDJdKTsKK30sIGBUeXBlRXJyb3I6IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhl
IGZpcnN0IGFyZ3VtZW50IGJlIGEgZnVuY3Rpb25gKTsKKworc2hvdWxkVGhyb3coKCkgPT4gewor
ICAgIHZhciBhcmdzID0gWzEsIDJdOworICAgIFJlZmxlY3QuYXBwbHkoZm9vLCBiYXIsIGFyZ3Mp
OworfSwgYFJlZmVyZW5jZUVycm9yOiBDYW4ndCBmaW5kIHZhcmlhYmxlOiBmb29gKTsKKworc2hv
dWxkVGhyb3coKCkgPT4geworICAgIHZhciBhcmdzID0gWzEsIDJdOworICAgIFJlZmxlY3QuYXBw
bHkodHJ1ZSwgYmFyLCBhcmdzKTsKK30sIGBSZWZlcmVuY2VFcnJvcjogQ2FuJ3QgZmluZCB2YXJp
YWJsZTogYmFyYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAgICBSZWZsZWN0LmFwcGx5KCIi
LCBudWxsLCB7fSk7Cit9LCBgVHlwZUVycm9yOiBSZWZsZWN0LmFwcGx5IHJlcXVpcmVzIHRoZSBm
aXJzdCBhcmd1bWVudCBiZSBhIGZ1bmN0aW9uYCk7CisKK3Nob3VsZFRocm93KCgpID0+IHsKKyAg
ICBSZWZsZWN0LmFwcGx5KGZ1bmN0aW9uICgpIHt9LCBudWxsLCAzKTsKK30sIGBUeXBlRXJyb3I6
IFJlZmxlY3QuYXBwbHkgcmVxdWlyZXMgdGhlIHRoaXJkIGFyZ3VtZW50IGJlIGFuIG9iamVjdGAp
OworCitSZWZsZWN0LmFwcGx5ID0gKCkgPT4gNDI7Cit2YXIgdGhyb3dlciA9ICgpID0+IHsgdGhy
b3cgbmV3IEVycm9yKCJ1bnJlYWNoYWJsZSIpOyB9CisKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHko
Li4uW3Rocm93ZXIsIG51bGwsIFsxXV0pLCA0Mik7CitzaG91bGRCZShSZWZsZWN0LmFwcGx5KHRo
cm93ZXIsIG51bGwsIFsyXSksIDQyKTsKK3Nob3VsZEJlKFJlZmxlY3QuYXBwbHkodGhyb3dlciwg
bnVsbCwgYXJnc0xpc3QpLCA0Mik7Cg==
</data>
<flag name="review"
          id="423792"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>