<?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>201994</bug_id>
          
          <creation_ts>2019-09-19 11:25:34 -0700</creation_ts>
          <short_desc>Inline caching is wrong for custom accessors and custom values</short_desc>
          <delta_ts>2019-10-14 08:33:06 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=202827</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>202594</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</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>1572416</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-19 11:25:34 -0700</bug_when>
    <thetext>We just cache these without caring what happens with the prototype that holds it. So we could delete the property, and we&apos;d still execute the IC as if the custom value/accessor were still present</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572483</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-19 14:21:40 -0700</bug_when>
    <thetext>Custom values broken:
```
function assert(b) {
    if (!b)
        throw new Error;
}
function getMultiline(o) {
    return o.multiline;
}
noInline(getMultiline);


const o = {};
o.__proto__ = RegExp;
RegExp.multiline = false;

for (let i = 0; i &lt; 500; ++i) {
    assert(getMultiline(o) === false);
}
delete RegExp.input;
delete RegExp.multiline;
assert(getMultiline(o) === undefined); // fail here
```


Custom accessors broken:
```
function bar(e) {
    return e.nodeType;
}
let node = ...;
for (let i = 0; i &lt; 500; ++i)
    assert(bar(node) === 1);

assert(delete Node.prototype.nodeType);

assert(bar(node) === undefined); // fail here
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572585</commentid>
    <comment_count>2</comment_count>
      <attachid>379185</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-19 18:55:22 -0700</bug_when>
    <thetext>Created attachment 379185
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572992</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-20 17:53:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/50850326&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572995</commentid>
    <comment_count>4</comment_count>
      <attachid>379297</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-20 17:56:11 -0700</bug_when>
    <thetext>Created attachment 379297
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573508</commentid>
    <comment_count>5</comment_count>
      <attachid>379413</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 18:26:44 -0700</bug_when>
    <thetext>Created attachment 379413
WIP

almost done. Just need to add stuff for customs we pull out of thin air (not in property storage and not in the static property table)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573569</commentid>
    <comment_count>6</comment_count>
      <attachid>379431</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-23 22:47:19 -0700</bug_when>
    <thetext>Created attachment 379431
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573604</commentid>
    <comment_count>7</comment_count>
      <attachid>379431</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-09-24 01:04:16 -0700</bug_when>
    <thetext>Comment on attachment 379431
WIP

Attachment 379431 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/13062829

New failing tests:
mozilla-tests.yaml/js1_5/Array/regress-101964.js.mozilla-dfg-eager-no-cjit-validate-phases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574274</commentid>
    <comment_count>8</comment_count>
      <attachid>379589</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-25 16:35:38 -0700</bug_when>
    <thetext>Created attachment 379589
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574275</commentid>
    <comment_count>9</comment_count>
      <attachid>379589</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-25 16:36:39 -0700</bug_when>
    <thetext>Comment on attachment 379589
patch

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

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:394
&gt; -    return generateConditions(
&gt; +    auto result = generateConditions(

will turn this back into a return</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574277</commentid>
    <comment_count>10</comment_count>
      <attachid>379590</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-25 16:40:00 -0700</bug_when>
    <thetext>Created attachment 379590
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574450</commentid>
    <comment_count>11</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-26 08:11:51 -0700</bug_when>
    <thetext>will add this as a test too:


```
&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
	&lt;body&gt;
		&lt;div id=&quot;result&quot;&gt;&lt;/div&gt;
		&lt;script&gt;
		(function() {
			&quot;use strict&quot;;

			let setterCalled = false;

			function accessProperty() {
				let oScript = document.createElement(&quot;script&quot;);
				oScript.src = Math.random();
			}

			// Force &quot;code optimization&quot; by calling the function several times
			for (let i = 0; i &lt; 1000; i++) {
				accessProperty();
			}

			// Define a custom setter for HTMLScriptElement#src
			const descriptor = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, &quot;src&quot;);
			Object.defineProperty(HTMLScriptElement.prototype, &quot;src&quot;, {
				get: descriptor.get,
				set: function() {

					// Switch marker once setter is called
					setterCalled = true;

					descriptor.set.apply(this, arguments);
				},
				enumerable: descriptor.enumerable,
				configurable: descriptor.configurable
			});
		 
			// Access the property once again, which should invoke the setter
			accessProperty();

			// Print result
			document.getElementById(&quot;result&quot;).innerText = &quot;Setter called: &quot; + setterCalled;

		})();
		&lt;/script&gt;
	&lt;/body&gt;
&lt;/html&gt;

```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574464</commentid>
    <comment_count>12</comment_count>
      <attachid>379590</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-26 08:46:38 -0700</bug_when>
    <thetext>Comment on attachment 379590
patch

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

&gt; Source/JavaScriptCore/ChangeLog:1
&gt; +2019-09-25  Saam Barati  &lt;sbarati@apple.com&gt;

I&apos;ll also note in the changelog that this is neutral on my microbenchmarks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575273</commentid>
    <comment_count>13</comment_count>
      <attachid>379590</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-09-30 10:37:24 -0700</bug_when>
    <thetext>Comment on attachment 379590
patch

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

Some comments for now while I continue reading the patch.

&gt; Source/JavaScriptCore/bytecode/PolyProtoAccessChain.cpp:67
&gt; +        if (!structure-&gt;propertyAccessesAreCacheable())
&gt; +            return nullptr;
&gt; +
&gt; +        if (structure-&gt;isProxy())
&gt; +            return nullptr;
&gt; +

Can you explain why this move from above is necessary?  AFAICT, it looks like you just want to flatten dictionaries more aggressively.  Is that correct?  I suppose structure-&gt;propertyAccessesAreCacheable() will fail if the structure is for a dictionary.

&gt; Source/JavaScriptCore/runtime/ClassInfo.h:221
&gt;      unsigned staticClassSize;

You probably missed this field because it only showed up after a rebase.  Can you move it up with the rest as well?

&gt; Source/JavaScriptCore/runtime/Structure.h:56
&gt; +struct HashTable;
&gt; +struct HashTableValue;

Aren&apos;t we supposed to lump these with the struct list below?  See &quot;struct DumpContext&quot; which starts the struct list below.

&gt; Source/JavaScriptCore/tools/JSDollarVM.cpp:647
&gt; +        StaticCustomAccessor* getter = new (NotNull, allocateCell&lt;StaticCustomAccessor&gt;(vm.heap)) StaticCustomAccessor(vm, structure);

/getter/accessor/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575277</commentid>
    <comment_count>14</comment_count>
      <attachid>379590</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-30 11:15:19 -0700</bug_when>
    <thetext>Comment on attachment 379590
patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/PolyProtoAccessChain.cpp:67
&gt;&gt; +
&gt; 
&gt; Can you explain why this move from above is necessary?  AFAICT, it looks like you just want to flatten dictionaries more aggressively.  Is that correct?  I suppose structure-&gt;propertyAccessesAreCacheable() will fail if the structure is for a dictionary.

yes. Precisely, if it&apos;s an uncacheable dictionary, we will not flatten it. This is covered by a microbenchmark I added.

&gt;&gt; Source/JavaScriptCore/runtime/ClassInfo.h:221
&gt;&gt;      unsigned staticClassSize;
&gt; 
&gt; You probably missed this field because it only showed up after a rebase.  Can you move it up with the rest as well?

good call.

&gt;&gt; Source/JavaScriptCore/runtime/Structure.h:56
&gt;&gt; +struct HashTableValue;
&gt; 
&gt; Aren&apos;t we supposed to lump these with the struct list below?  See &quot;struct DumpContext&quot; which starts the struct list below.

probably. Will fix

&gt;&gt; Source/JavaScriptCore/tools/JSDollarVM.cpp:647
&gt;&gt; +        StaticCustomAccessor* getter = new (NotNull, allocateCell&lt;StaticCustomAccessor&gt;(vm.heap)) StaticCustomAccessor(vm, structure);
&gt; 
&gt; /getter/accessor/

will fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575291</commentid>
    <comment_count>15</comment_count>
      <attachid>379590</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-09-30 12:28:39 -0700</bug_when>
    <thetext>Comment on attachment 379590
patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:-313
&gt; -    return m_conditionSet.structuresEnsureValidityAssumingImpurePropertyWatchpoint();

Don&apos;t we need to check `if (!m_conditionSet.isValid())`? If we can ensure that this m_conditionSet is always valid, can we add assert instead?

&gt; Source/JavaScriptCore/bytecode/ObjectPropertyConditionSet.cpp:-65
&gt; -    return (numberOfConditionsWithKind(PropertyCondition::Presence) == 1) != (numberOfConditionsWithKind(PropertyCondition::Equivalence) == 1);

I think implementing this inline here seems better than iterating three times.
if (size() != 1)
    return false;
const ObjectPropertyCondition&amp; condition = *this.begin();
switch (condition.kind()) {
case PropertyCondition::Presence:
case PropertyCondition::Equivalence:
case PropertyCondition::CustomFunctionEquivalence:
    return true;
...
    return false;
}
return false;

&gt; Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:62
&gt; +class AdaptiveValueStructureStubClearingWatchpoint final : public AdaptiveInferredPropertyValueWatchpointBase {

Personally, I think we should rename AdaptiveInferredPropertyValueWatchpointBase to something like `AdaptiveInferredPropertyValueWatchpointCollectionBase` or something because it is not a Watchpoint in fact (It is not inheriting Watchpoint).
Can you add it as a FIXME comment? Or can you rename it?

&gt; Source/JavaScriptCore/bytecode/StructureStubClearingWatchpoint.h:111
&gt; +    Bag&lt;WTF::Variant&lt;StructureTransitionStructureStubClearingWatchpoint, AdaptiveValueStructureStubClearingWatchpoint&gt;&gt; m_watchpoints;

IIRC, this watchpoint class is allocated so many. So, we should save memory as much as possible.
Do we have any ideas? If we do not have an idea for now, please put a FIXME about memory consumption.

&gt; Source/JavaScriptCore/jit/Repatch.cpp:552
&gt; +                                vm, codeBlock, exec, structure, slot.base(), ident.impl(), 0);

I think `static_cast&lt;unsigned&gt;(PropertyAttribute::None)` is better instead of `0`, it is ugly but anyway, it is more readable than 0.

&gt; Source/JavaScriptCore/runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:32
&gt; +template&lt;typename WatchpointSet&gt;

Nice. At some point in the future, we should do this renaming for the other places too :P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575358</commentid>
    <comment_count>16</comment_count>
      <attachid>379590</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-30 16:19:00 -0700</bug_when>
    <thetext>Comment on attachment 379590
patch

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

&gt;&gt; Source/JavaScriptCore/jit/Repatch.cpp:552
&gt;&gt; +                                vm, codeBlock, exec, structure, slot.base(), ident.impl(), 0);
&gt; 
&gt; I think `static_cast&lt;unsigned&gt;(PropertyAttribute::None)` is better instead of `0`, it is ugly but anyway, it is more readable than 0.

will fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575383</commentid>
    <comment_count>17</comment_count>
      <attachid>379862</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-09-30 17:03:43 -0700</bug_when>
    <thetext>Created attachment 379862
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575394</commentid>
    <comment_count>18</comment_count>
      <attachid>379862</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-30 17:50:53 -0700</bug_when>
    <thetext>Comment on attachment 379862
patch for landing

Clearing flags on attachment: 379862

Committed r250540: &lt;https://trac.webkit.org/changeset/250540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575395</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-30 17:50:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1577070</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-10-04 16:36:32 -0700</bug_when>
    <thetext>Regression: bug #202594</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379185</attachid>
            <date>2019-09-19 18:55:22 -0700</date>
            <delta_ts>2019-09-20 17:56:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>23553</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTIgKzU4LDQxIEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2QKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitjbGFzcyBUcml2aWFsQ0Z1bmN0aW9u
UHRyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQdHIgPSB2b2lkKCopKCk7CisKKyAgICBUcml2aWFs
Q0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OworICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIoc3RkOjpu
dWxscHRyX3QpIDogbV9wdHIobnVsbHB0cikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgY29uc3RleHByIFRyaXZpYWxD
RnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgmcHRyKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1f
cHRyKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyPigmcHRyKSkKKyAgICB7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBUcml2aWFsQ0Z1bmN0aW9uUHRyKFJldHVyblR5cGUoKnB0cikoQXJndW1lbnRzLi4uKSkKKyAg
ICAgICAgOiBtX3B0cihyZWludGVycHJldF9jYXN0PFB0cj4ocHRyKSkKKyAgICB7CisgICAgICAg
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKG1fcHRyKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgUHRy
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgdm9pZCogYWRkcmVzcygpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcHRyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyaXZpYWxDRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcml2
aWFsQ0Z1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gb3RoZXIubV9w
dHI7IH0KKworcHJpdmF0ZToKKyAgICBQdHIgbV9wdHI7Cit9OworCiAvLyBDRnVuY3Rpb25QdHIg
Y2FuIG9ubHkgYmUgdXNlZCB0byBob2xkIEMvQysrIGZ1bmN0aW9ucy4KIGNsYXNzIENGdW5jdGlv
blB0ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHRyID0gdm9pZCgqKSgpOwogCi0gICAgQ0Z1bmN0
aW9uUHRyKCkgeyB9CisgICAgQ0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OwogICAgIENGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1MCw2ICs2NTAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAKICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CiAKKyAgICAvL2RhdGFMb2dMbigiQ29u
ZGl0aW9uIHNldDogIiwgbV9jb25kaXRpb25TZXQpOwogICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3BvbHlQcm90b0FjY2Vzc0NoYWluKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIx
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
ICAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZh
bHVlKTsKICAgICB9CisKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY3VzdG9t
RXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21G
dW5jdGlvbikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25k
aXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRXF1aXZhbGVuY2Uodm0sIG93bmVyLCB1
aWQsIGN1c3RvbUZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAg
CiAgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGhhc1Byb3RvdHlwZVdpdGhvdXRC
YXJyaWVyKEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2MiwxMCBAQCB1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6bnVtCiAKIGJvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG51bWJlck9mQ29uZGl0
aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMSkgIT0gKG51bWJl
ck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgPT0g
MSk7CisgICAgdW5zaWduZWQgdG90YWwgPSBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAgICAgICsgbnVtYmVyT2ZDb25kaXRpb25zV2l0
aEtpbmQoUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQorICAgICAgICArIG51bWJlck9m
Q29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZSk7
CisgICAgcmV0dXJuIHRvdGFsID09IDE7CiB9CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0CkBAIC03
MSw3ICs3NCw4IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q28KICAg
ICB1bnNpZ25lZCBudW1Gb3VuZCA9IDA7CiAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5k
KCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlCi0gICAgICAgICAgICB8fCBjb25kaXRp
b24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAgICAgICAg
ICAgfHwgY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UK
KyAgICAgICAgICAgIHx8IGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkN1
c3RvbUVxdWl2YWxlbmNlKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb247CiAgICAg
ICAgICAgICBudW1Gb3VuZCsrOwogICAgICAgICB9CkBAIC0xODcsNyArMTkxLDcgQEAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09i
amVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6
S2luZCBjb25kaXRpb25LaW5kKQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3Qq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQg
Y29uZGl0aW9uS2luZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21GdW5jdGlvbiA9IG51bGxw
dHIpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7
CiAgICAgaWYgKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0SW50ZXJuYWw6OnZlcmJvc2UpCkBA
IC0yMjgsNiArMjMyLDE4IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0
aW8KICAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNl
KHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUVxdWl2YWxlbmNlOiB7CisgICAgICAg
IGF1dG8gZW50cnkgPSBvYmplY3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgdWlkKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkpOworICAgICAgICBpZiAoIShlbnRyeS0+dmFsdWUt
PmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlVuZWN4ZWNwdGVkIGF0dHJpYnV0ZXM6ICIsIGVu
dHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFRyaXZpYWxDRnVuY3Rpb25QdHIoZW50cnktPnZhbHVlLT5wcm9wZXJ0eUdldHRlcigp
KSA9PSBjdXN0b21GdW5jdGlvbiB8fCBUcml2aWFsQ0Z1bmN0aW9uUHRyKGVudHJ5LT52YWx1ZS0+
cHJvcGVydHlQdXR0ZXIoKSkgPT0gY3VzdG9tRnVuY3Rpb24pOworCisgICAgICAgIHJlc3VsdCA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpjdXN0b21FcXVpdmFsZW5jZSh2bSwgb3duZXIsIG9i
amVjdCwgdWlkLCBjdXN0b21GdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBk
ZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKQEAgLTM3OCwxNyArMzk0LDM5IEBAIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKIAogT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0
b20oCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKLSAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25Q
dHIgZnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKICAgICAgICAg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBl
LAogICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlv
bnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgewotICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBwcm90b3R5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgLy9pZiAob2JqZWN0
ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgIC8vICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgYXV0byBraW5kID0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgICAgICBU
cml2aWFsQ0Z1bmN0aW9uUHRyIGN1c3RvbUZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGlmIChvYmplY3QgPT0gcHJvdG90eXBlKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlcyA9IDA7CisgICAgICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXQodm0sIHVpZCwgYXR0cmlidXRlcyk7CisgICAgICAgICAgICAgICAg
aWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBXaGVu
IHdlIHJlaWZ5IGN1c3RvbSBhY2Nlc3NvcnMsIHdlIHdyYXAgdGhlbSBpbiBhIEpTRnVuY3Rpb24g
dGhhdCB3ZSBzaG92ZQorICAgICAgICAgICAgICAgICAgICAvLyBpbnNpZGUgYSBHZXR0ZXJTZXR0
ZXIuIFNvLCBvbmNlIHdlJ3ZlIHJlaWZpZWQgYSBjdXN0b20gYWNjZXNzb3IsIHdlIHdpbGwKKyAg
ICAgICAgICAgICAgICAgICAgLy8gbm8gbG9uZ2VyIHNlZSBpdCBhcyBhICJjdXN0b20iIGFjY2Vz
c29yL3ZhbHVlLiBIZW5jZSwgaWYgb3VyIHByb3BlcnR5IGFjY2VzcyBhY3R1YWxseQorICAgICAg
ICAgICAgICAgICAgICAvLyBub3RpY2VzIGEgY3VzdG9tLCBpdCBtdXN0IGJlIGEgQ3VzdG9tR2V0
dGVyU2V0dGVyVHlwZSBjZWxsIG9yIHNvbWV0aGluZworICAgICAgICAgICAgICAgICAgICAvLyBp
biB0aGUgc3RhdGljIHByb3BlcnR5IHRhYmxlLiBDdXN0b20gdmFsdWVzIGdldCByZWlmaWVkIGlu
dG8gQ3VzdG9tR2V0dGVyU2V0dGVycy4KKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG9iamVjdC0+Z2V0RGlyZWN0KG9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gQ3Vz
dG9tR2V0dGVyU2V0dGVyVHlwZSk7CisgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBQcm9wZXJ0
eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0aW5nIEN1c3RvbUVxdWl2YWxlbmNlIik7
CisgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRXF1
aXZhbGVuY2U7CisgICAgICAgICAgICAgICAgICAgIGN1c3RvbUZ1bmN0aW9uID0gZnVuY3Rpb247
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gcmVzdWx0ID0gZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmpl
Y3QsIHVpZCwga2luZCwgZnVuY3Rpb24pOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkNhbid0IGdlbmVyYXRlIGN1c3RvbSEiKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb25k
aXRpb25zLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsNyArMTY4LDcgQEAgT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQgZ2VuZXJhdGVDb25kaQogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwogT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVy
dHlIaXRDdXN0b20oCiAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCi0gICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlv
blB0ciBmdW5jdGlvbik7CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29u
ZGl0aW9uc0Zvckluc3RhbmNlT2YoCiAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgc2hv
dWxkSGl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNv
bmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsNiArNTQsOSBAQCB2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFBy
CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKICAgICAgICAgb3V0LnByaW50KG1faGVhZGVyLnR5cGUo
KSwgIiBvZiAiLCBtX2hlYWRlci5wb2ludGVyKCksICIgd2l0aCAiLCBpbkNvbnRleHQocmVxdWly
ZWRWYWx1ZSgpLCBjb250ZXh0KSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEN1c3RvbUVx
dWl2YWxlbmNlOgorICAgICAgICBvdXQucHJpbnQobV9oZWFkZXIudHlwZSgpLCAiIG9mICIsIG1f
aGVhZGVyLnBvaW50ZXIoKSk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhhc1Byb3RvdHlw
ZToKICAgICAgICAgb3V0LnByaW50KG1faGVhZGVyLnR5cGUoKSwgIiB3aXRoIHByb3RvdHlwZSAi
LCBpbkNvbnRleHQoSlNWYWx1ZShwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtNjksNiArNzIsOCBAQCB2b2lkIFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50
U3RyZWFtCiBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludCgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNPYmplY3Qq
IGJhc2UpIGNvbnN0CiB7CisgICAgZGF0YUxvZ0xuKCJpc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVy
ZVByb3BlcnR5V2F0Y2hwb2ludDogIiwgKnRoaXMpOworCiAgICAgaWYgKFByb3BlcnR5Q29uZGl0
aW9uSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICJE
ZXRlcm1pbmluZyB2YWxpZGl0eSBvZiAiLCAqdGhpcywgIiB3aXRoIHN0cnVjdHVyZSAiLCBwb2lu
dGVyRHVtcChzdHJ1Y3R1cmUpLCAiIGFuZCBiYXNlICIsCkBAIC04Niw3ICs5MSw5IEBAIGJvb2wg
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3UKICAgICBjYXNlIEFic2VuY2U6CiAg
ICAgY2FzZSBBYnNlbmNlT2ZTZXRFZmZlY3Q6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBj
YXNlIEN1c3RvbUVxdWl2YWxlbmNlOgogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlByb3AgYWNj
ZXNzZXMgbm8gbG9uZ2VyIGNhY2hlYWJsZTogIiwgKnRoaXMpOwogICAgICAgICAgICAgaWYgKFBy
b3BlcnR5Q29uZGl0aW9uSW50ZXJuYWw6OnZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW52YWxpZCBiZWNhdXNlIHByb3BlcnR5IGFjY2Vzc2VzIGFyZSBub3QgY2FjaGVhYmxlLlxu
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDgsNyArMjU1LDIxIEBAIGJvb2wg
UHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3UKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSB9CisgICAgfSAKKyAgICBjYXNlIEN1c3RvbUVx
dWl2YWxlbmNlOiB7CisgICAgICAgIGRhdGFMb2dMbigiQ3VzdG9tRXF1aXZhbGVuY2UgY2hlY2s6
ICIsICp0aGlzKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+c3RhdGljUHJvcGVydGllc1JlaWZp
ZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJzdGF0aWMgcHJvcGVydGllcyB3ZXJlIHJl
aWZpZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBh
dXRvIGVudHJ5ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkodWlkKCkpOworICAg
ICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJObyBtb3JlIHN0YXRpYyBl
bnRyeSEiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGF0YUxvZ0xuKCJlbnRyeSBleGlz
dHMhIik7CisgICAgICAgIHJldHVybiAhIWVudHJ5OworICAgIH0KKyAgICB9CiAgICAgCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjMs
NiArMjg0LDcgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlcwogICAg
IGNhc2UgUHJlc2VuY2U6CiAgICAgY2FzZSBBYnNlbmNlOgogICAgIGNhc2UgRXF1aXZhbGVuY2U6
CisgICAgY2FzZSBDdXN0b21FcXVpdmFsZW5jZToKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+
bmVlZEltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwogICAgIGNhc2UgQWJzZW5jZU9mU2V0RWZm
ZWN0OgogICAgIGNhc2UgSGFzUHJvdG90eXBlOgpAQCAtMjg4LDYgKzMxMCw3IEBAIGJvb2wgUHJv
cGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHIKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBQcmVzZW5jZToKICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgIGNhc2UgQ3VzdG9tRXF1aXZh
bGVuY2U6CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJvcGVydHlT
bG90SXNJbXB1cmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYnJlYWs7
CkBAIC0zMDEsOCArMzI0LDEwIEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxp
ZChTdHIKIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblZhbGlkKAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAog
ewotICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICBkYXRhTG9nTG4oIlRyYW5zaXRpb24gd2F0Y2hw
b2ludCBmaXJlZCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAogICAgIHN3
aXRjaCAobV9oZWFkZXIudHlwZSgpKSB7CiAgICAgY2FzZSBFcXVpdmFsZW5jZTogewpAQCAtMzI5
LDYgKzM1NCwxOSBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WCiAg
ICAgICAgIAogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEN1c3RvbUVxdWl2YWxl
bmNlOiB7CisgICAgICAgIC8vIFdlIGp1c3QgdXNlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNo
cG9pbnQgZm9yIHRoaXMuIEEgc3RydWN0dXJlIFMgc3RhcnRzCisgICAgICAgIC8vIG9mZiB3aXRo
IGEgcHJvcGVydHkgUCBpbiB0aGUgc3RhdGljIHByb3BlcnR5IGhhc2ggdGFibGUuIElmIFMgdHJh
bnNpdGlvbnMgdG8KKyAgICAgICAgLy8gUycsIGVpdGhlciBQIHJlbWFpbnMgaW4gdGhlIHN0YXRp
YyBwcm9wZXJ0eSB0YWJsZSBvciBub3QuIElmIG5vdCwgdGhlbiB3ZQorICAgICAgICAvLyBhcmUg
bm8gbG9uZ2VyIHZhbGlkLiBTbyB0aGUgYWJvdmUgY2hlY2sgb2YgdHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQKKyAgICAgICAgLy8gaXMgc3VmZmljaWVudC4KKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgbWFrZSB0aGlzIHNtYXJ0ZXIgaW4gdGhlIGZ1dHVy
ZSwgc2luY2Ugd2Ugc29tZXRpbWVzIHJlaWZ5IHN0YXRpYyBwcm9wZXJ0aWVzLgorICAgICAgICAv
LyBXZSBjb3VsZCBtYWtlIHRoaXMgYWRhcHQgdG8gbG9va2luZyBhdCB0aGUgb2JqZWN0J3Mgc3Rv
cmFnZSBmb3Igc3VjaCByZWlmaWVkIGN1c3RvbQorICAgICAgICAvLyBmdW5jdGlvbnMsIGJ1dCB3
ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAg
ICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTM0Nyw4ICszODUsMTMgQEAgYm9v
bCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVBc3N1bQogYm9vbCBQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNXYXRjaGFibGUoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTT2JqZWN0KiBi
YXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAogewotICAgIHJldHVybiBpc1N0
aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQorICAgIGRhdGFMb2dMbigiaXMgd2F0Y2hhYmxlPyIp
OworCisgICAgYm9vbCByZXN1bHQgPSBpc1N0aWxsVmFsaWQoc3RydWN0dXJlLCBiYXNlKQogICAg
ICAgICAmJiBpc1dhdGNoYWJsZVdoZW5WYWxpZChzdHJ1Y3R1cmUsIGVmZm9ydCk7CisgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgIGRhdGFMb2dMbigiTm90IHdhdGNoYWJsZSEiKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsTGl2ZShWTSYg
dm0pIGNvbnN0CkBAIC00MTcsNiArNDYwLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQwogICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVu
Y2U6CiAgICAgICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRXF1aXZhbGVuY2U6CisgICAg
ICAgIG91dC5wcmludCgiQ3VzdG9tRXF1aXZhbGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6SGFzUHJvdG90eXBlOgogICAgICAgICBvdXQu
cHJpbnQoIkhhc1Byb3RvdHlwZSIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNp
b24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAgICAg
ICBBYnNlbmNlLAogICAgICAgICBBYnNlbmNlT2ZTZXRFZmZlY3QsCiAgICAgICAgIEVxdWl2YWxl
bmNlLCAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRoaXMgd2lsbCBiZSBhIHBhaXIgb2Yg
d2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMsIHdlIHdpbGwg
c2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRoZSBuZXcgc3RydWN0dXJlLgorICAg
ICAgICBDdXN0b21FcXVpdmFsZW5jZSwgLy8gQ3VzdG9tIHZhbHVlIG9yIGFjY2Vzc29yLgogICAg
ICAgICBIYXNQcm90b3R5cGUKICAgICB9OwogCkBAIC0xMjIsNiArMTIzLDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKICAgICAgICAgcmV0dXJu
IGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CiAgICAgfQorCisgICAgc3Rh
dGljIFByb3BlcnR5Q29uZGl0aW9uIGN1c3RvbUVxdWl2YWxlbmNlKAorICAgICAgICBWTSYsIEpT
Q2VsbCogb3duZXIsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25QdHIg
ZnVuY3Rpb24pCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0ob3duZXIpOworCisgICAgICAg
IFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVyID0gSGVh
ZGVyKHVpZCwgQ3VzdG9tRXF1aXZhbGVuY2UpOworICAgICAgICByZXN1bHQudS5jdXN0b21FcXVp
dmFsZW5jZS5mdW5jdGlvbiA9IGZ1bmN0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KICAgICAKICAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gaGFzUHJvdG90eXBlV2l0aG91
dEJhcnJpZXIoSlNPYmplY3QqIHByb3RvdHlwZSkKICAgICB7CkBAIC0xOTMsNiArMjA1LDkgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgogICAgICAgICAgICAgcmVzdWx0IF49
IEVuY29kZWRKU1ZhbHVlSGFzaDo6aGFzaCh1LmVxdWl2YWxlbmNlLnZhbHVlKTsKICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1c3RvbUVxdWl2YWxlbmNlOgorICAgICAgICAgICAg
cmVzdWx0IF49IFdURjo6UHRySGFzaDx2b2lkKj46Omhhc2goYml0d2lzZV9jYXN0PHZvaWQqPih1
LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0aW9uKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTIxMyw2ICsyMjgsOCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gdS5wcm90b3R5cGUucHJvdG90eXBlID09IG90aGVy
LnUucHJvdG90eXBlLnByb3RvdHlwZTsKICAgICAgICAgY2FzZSBFcXVpdmFsZW5jZToKICAgICAg
ICAgICAgIHJldHVybiB1LmVxdWl2YWxlbmNlLnZhbHVlID09IG90aGVyLnUuZXF1aXZhbGVuY2Uu
dmFsdWU7CisgICAgICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXR1
cm4gdS5jdXN0b21FcXVpdmFsZW5jZS5mdW5jdGlvbiA9PSBvdGhlci51LmN1c3RvbUVxdWl2YWxl
bmNlLmZ1bmN0aW9uOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTMyMiw2ICszMzksOSBAQCBwcml2YXRl
OgogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CiAg
ICAgICAgIH0gZXF1aXZhbGVuY2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBUcml2
aWFsQ0Z1bmN0aW9uUHRyIGZ1bmN0aW9uOworICAgICAgICB9IGN1c3RvbUVxdWl2YWxlbmNlOwog
ICAgIH0gdTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksOCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpCiAgICAgaWYg
KCFtX2hvbGRlci0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBkYXRhTG9nTG4o
IlN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQiKTsKKwogICAgIGlmICghbV9rZXkgfHwg
IW1fa2V5LmlzV2F0Y2hhYmxlKFByb3BlcnR5Q29uZGl0aW9uOjpFbnN1cmVXYXRjaGFiaWxpdHkp
KSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBpbXBsaWNpdGx5IGNhdXNlIG15IG93biBkZW1pc2U6
IHN0dWIgcmVzZXQgcmVtb3ZlcyBhbGwgd2F0Y2hwb2ludHMuCiAgICAgICAgIC8vIFRoYXQgd29y
a3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0
J3MgbGlzdCwgYW5kCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDEwIEBAIHZvaWQgQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50QWRhcHRv
cjoKIHsKICAgICBWTSYgdm0gPSBjb2RlQmxvY2stPnZtKCk7CiAgICAgc3dpdGNoIChrZXkua2lu
ZCgpKSB7CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRXF1aXZhbGVuY2U6Cisg
ICAgICAgIC8vIE9PUFM6IG5vcm1hbCBzdHJ1Y3R1cmUgd29ya3MgaGVyZSwgYnV0IGFsc28sIHRo
aXMgc2hvdWxkbid0IGhhcHBlbiBpbiBwcmFjdGljZT8KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlv
bjo6RXF1aXZhbGVuY2U6CiAgICAgICAgIGNvbW1vbi5hZGFwdGl2ZUluZmVycmVkUHJvcGVydHlW
YWx1ZVdhdGNocG9pbnRzLmFkZChrZXksIGNvZGVCbG9jayktPmluc3RhbGwodm0pOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNp
b24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw5IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25kaXRpb25zRm9y
UHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgVHJpdmlhbENG
dW5jdGlvblB0cihzbG90LmN1c3RvbUdldHRlcigpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiQ3VzdG9tIGdldDogIiwgU3RyaW5nKHByb3BlcnR5TmFtZS5p
bXBsKCkpLCAiIERvbnREZWxldGU6ICIsIHN0YXRpY19jYXN0PGJvb2w+KHNsb3QuYXR0cmlidXRl
cygpICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNW
YWxpZCgpKQpAQCAtNTQ5LDkgKzU1MSwxMCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGVBY2Nlc3NDaGFp
biA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVBy
b3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29k
ZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksIFRyaXZpYWxDRnVuY3Rpb25QdHIoYml0d2lz
ZV9jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzbG90LmN1c3RvbVNldHRlcigp
LnJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Q0Z1bmN0aW9uUHRyVGFnPigpKSkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0xuKCJDdXN0b20gcHV0OiAiLCBTdHJpbmcoaWRlbnQuaW1wbCgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI1MDA1NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjIyMiwxNSArMjIyMiw5IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blN0YXRpY1By
b3BlcnR5U2xvdCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWF1dG8gSlNPYmplY3Q6OmZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0
IC0+IE9wdGlvbmFsPFByb3BlcnR5SGFzaEVudHJ5PgorT3B0aW9uYWw8U3RydWN0dXJlOjpQcm9w
ZXJ0eUhhc2hFbnRyeT4gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBDbGFzc0lu
Zm8qIGluZm8gPSBjbGFzc0luZm8odm0pOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3Mp
IHsKLSAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9IGluZm8tPnN0
YXRpY1Byb3BIYXNoVGFibGUpIHsKLSAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1
ZSogZW50cnkgPSBwcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBQcm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUsIGVudHJ5IH07
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4g
c3RydWN0dXJlKHZtKS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSk7CiB9CiAK
IGJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1
ZSwgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDMsNiArOTAzLDgg
QEAgcHVibGljOgogICAgIGJvb2wgbWF5QmVQcm90b3R5cGUoKSBjb25zdDsKICAgICB2b2lkIGRp
ZEJlY29tZVByb3RvdHlwZSgpOwogCisgICAgT3B0aW9uYWw8U3RydWN0dXJlOjpQcm9wZXJ0eUhh
c2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiwgUHJvcGVydHlOYW1lKSBjb25zdDsK
KwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByb3RlY3RlZDoKQEAgLTEwMzIsNyArMTAz
NCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byB1
bmRlY2lkZWQsIGludDMyLCBkb3VibGUsIGFuZCBjb250aWd1b3VzLgogICAgIHVuc2lnbmVkIGNv
dW50RWxlbWVudHMoKTsKLSAgICAgICAgCisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CkBAIC0x
MDYwLDExICsxMDYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9w
ZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eVNsb3QmLCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCB1bnNpZ25l
ZCwgU3RydWN0dXJlKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blN0YXRp
Y1Byb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3Ry
dWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsK
LSAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOwotICAgIH07Ci0gICAgT3B0aW9u
YWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYsIFByb3BlcnR5
TmFtZSkgY29uc3Q7CiAgICAgICAgIAogICAgIGJvb2wgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxl
bmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hv
dWxkVGhyb3cpOwogICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRo
QXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2
aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzOCw0ICsxMjM4LDE1IEBAIGJvb2wgU3RydWN0dXJl
OjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2sKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0byBT
dHJ1Y3R1cmU6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KSBjb25zdCAtPiBPcHRpb25hbDxQcm9wZXJ0eUhhc2hFbnRyeT4KK3sKKyAgICBmb3IgKGNvbnN0
IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50
Q2xhc3MpIHsKKyAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9IGlu
Zm8tPnN0YXRpY1Byb3BIYXNoVGFibGUpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFi
bGVWYWx1ZSogZW50cnkgPSBwcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUsIGVu
dHJ5IH07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgY2xhc3Mg
VW5pcXVlZFN0cmluZ0ltcGw7CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVmZXJHQzsKK3N0
cnVjdCBIYXNoVGFibGU7CitzdHJ1Y3QgSGFzaFRhYmxlVmFsdWU7CiBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFByb3BlcnR5TmFt
ZUFycmF5RGF0YTsKQEAgLTYxNSw2ICs2MTcsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHBy
b3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9CiAKICAgICBzdGF0
aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25z
dCBTdHJ1Y3R1cmUqIGIpOworCisgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKKyAgICAg
ICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUq
IHZhbHVlOworICAgIH07CisgICAgT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379297</attachid>
            <date>2019-09-20 17:56:11 -0700</date>
            <delta_ts>2019-09-23 18:26:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>31337</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTIgKzU4LDQxIEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2QKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitjbGFzcyBUcml2aWFsQ0Z1bmN0aW9u
UHRyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQdHIgPSB2b2lkKCopKCk7CisKKyAgICBUcml2aWFs
Q0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OworICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIoc3RkOjpu
dWxscHRyX3QpIDogbV9wdHIobnVsbHB0cikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgY29uc3RleHByIFRyaXZpYWxD
RnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgmcHRyKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1f
cHRyKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyPigmcHRyKSkKKyAgICB7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBUcml2aWFsQ0Z1bmN0aW9uUHRyKFJldHVyblR5cGUoKnB0cikoQXJndW1lbnRzLi4uKSkKKyAg
ICAgICAgOiBtX3B0cihyZWludGVycHJldF9jYXN0PFB0cj4ocHRyKSkKKyAgICB7CisgICAgICAg
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKG1fcHRyKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgUHRy
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgdm9pZCogYWRkcmVzcygpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcHRyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyaXZpYWxDRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcml2
aWFsQ0Z1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gb3RoZXIubV9w
dHI7IH0KKworcHJpdmF0ZToKKyAgICBQdHIgbV9wdHI7Cit9OworCiAvLyBDRnVuY3Rpb25QdHIg
Y2FuIG9ubHkgYmUgdXNlZCB0byBob2xkIEMvQysrIGZ1bmN0aW9ucy4KIGNsYXNzIENGdW5jdGlv
blB0ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHRyID0gdm9pZCgqKSgpOwogCi0gICAgQ0Z1bmN0
aW9uUHRyKCkgeyB9CisgICAgQ0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OwogICAgIENGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1MCw2ICs2NTAsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5l
CiAKICAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7CiAKKyAgICAvL2RhdGFMb2dMbigiQ29u
ZGl0aW9uIHNldDogIiwgbV9jb25kaXRpb25TZXQpOwogICAgIGZvciAoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3BvbHlQcm90b0FjY2Vzc0NoYWluKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIx
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
ICAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZh
bHVlKTsKICAgICB9CisKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY3VzdG9t
RXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21G
dW5jdGlvbikKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25k
aXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRXF1aXZhbGVuY2Uodm0sIG93bmVyLCB1
aWQsIGN1c3RvbUZ1bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAg
CiAgICAgc3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGhhc1Byb3RvdHlwZVdpdGhvdXRC
YXJyaWVyKEpTT2JqZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2MiwxMCBAQCB1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldDo6bnVtCiAKIGJvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09u
ZVNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG51bWJlck9mQ29uZGl0
aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMSkgIT0gKG51bWJl
ck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgPT0g
MSk7CisgICAgdW5zaWduZWQgdG90YWwgPSBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpCisgICAgICAgICsgbnVtYmVyT2ZDb25kaXRpb25zV2l0
aEtpbmQoUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQorICAgICAgICArIG51bWJlck9m
Q29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZSk7
CisgICAgcmV0dXJuIHRvdGFsID09IDE7CiB9CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0CkBAIC03
MSw3ICs3NCw4IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q28KICAg
ICB1bnNpZ25lZCBudW1Gb3VuZCA9IDA7CiAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYgY29uZGl0aW9uIDogKnRoaXMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5k
KCkgPT0gUHJvcGVydHlDb25kaXRpb246OlByZXNlbmNlCi0gICAgICAgICAgICB8fCBjb25kaXRp
b24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAgICAgICAg
ICAgfHwgY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UK
KyAgICAgICAgICAgIHx8IGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkN1
c3RvbUVxdWl2YWxlbmNlKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb247CiAgICAg
ICAgICAgICBudW1Gb3VuZCsrOwogICAgICAgICB9CkBAIC0xODcsNyArMTkxLDcgQEAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25k
aXRpb24gZ2VuZXJhdGVDb25kaXRpb24oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09i
amVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6
S2luZCBjb25kaXRpb25LaW5kKQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3Qq
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQg
Y29uZGl0aW9uS2luZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21GdW5jdGlvbiA9IG51bGxw
dHIpCiB7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7
CiAgICAgaWYgKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0SW50ZXJuYWw6OnZlcmJvc2UpCkBA
IC0yMjgsNiArMjMyLDE4IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0
aW8KICAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNl
KHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQor
ICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUVxdWl2YWxlbmNlOiB7CisgICAgICAg
IGF1dG8gZW50cnkgPSBvYmplY3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgdWlkKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnkpOworICAgICAgICBpZiAoIShlbnRyeS0+dmFsdWUt
PmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUp
KSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oIlVuZWN4ZWNwdGVkIGF0dHJpYnV0ZXM6ICIsIGVu
dHJ5LT52YWx1ZS0+YXR0cmlidXRlcygpKTsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKFRyaXZpYWxDRnVuY3Rpb25QdHIoZW50cnktPnZhbHVlLT5wcm9wZXJ0eUdldHRlcigp
KSA9PSBjdXN0b21GdW5jdGlvbiB8fCBUcml2aWFsQ0Z1bmN0aW9uUHRyKGVudHJ5LT52YWx1ZS0+
cHJvcGVydHlQdXR0ZXIoKSkgPT0gY3VzdG9tRnVuY3Rpb24pOworCisgICAgICAgIHJlc3VsdCA9
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpjdXN0b21FcXVpdmFsZW5jZSh2bSwgb3duZXIsIG9i
amVjdCwgdWlkLCBjdXN0b21GdW5jdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBk
ZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBy
ZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKQEAgLTM3OCwxNyArMzk0LDQxIEBAIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKIAogT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0
b20oCiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKLSAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25Q
dHIgZnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKICAgICAgICAg
dm0sIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBl
LAogICAgICAgICBbJl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlv
bnMsIEpTT2JqZWN0KiBvYmplY3QpIC0+IGJvb2wgewotICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBwcm90b3R5cGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNl
bmNlKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgLy9pZiAob2JqZWN0
ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgIC8vICAgIHJldHVybiB0cnVlOworCisgICAgICAg
ICAgICBhdXRvIGtpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsKKyAgICAgICAgICAg
IFRyaXZpYWxDRnVuY3Rpb25QdHIgY3VzdG9tRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICAg
ICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzID0gMDsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdo
ZW4gd2UgcmVpZnkgY3VzdG9tIGFjY2Vzc29ycywgd2Ugd3JhcCB0aGVtIGluIGEgSlNGdW5jdGlv
biB0aGF0IHdlIHNob3ZlCisgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBhIEdldHRlclNl
dHRlci4gU28sIG9uY2Ugd2UndmUgcmVpZmllZCBhIGN1c3RvbSBhY2Nlc3Nvciwgd2Ugd2lsbAor
ICAgICAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgc2VlIGl0IGFzIGEgImN1c3RvbSIgYWNj
ZXNzb3IvdmFsdWUuIEhlbmNlLCBpZiBvdXIgcHJvcGVydHkgYWNjZXNzIGFjdHVhbGx5CisgICAg
ICAgICAgICAgICAgICAgIC8vIG5vdGljZXMgYSBjdXN0b20sIGl0IG11c3QgYmUgYSBDdXN0b21H
ZXR0ZXJTZXR0ZXJUeXBlIGNlbGwgb3Igc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAgIC8v
IGluIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUuIEN1c3RvbSB2YWx1ZXMgZ2V0IHJlaWZpZWQg
aW50byBDdXN0b21HZXR0ZXJTZXR0ZXJzLgorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBD
dXN0b21HZXR0ZXJTZXR0ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJH
ZW5lcmF0aW5nIEVxdWl2YWxlbmNlIGZvciBjdXN0b20iKTsKKyAgICAgICAgICAgICAgICAgICAg
a2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkdlbmVyYXRpbmcgQ3VzdG9t
RXF1aXZhbGVuY2UiKTsKKyAgICAgICAgICAgICAgICAgICAga2luZCA9IFByb3BlcnR5Q29uZGl0
aW9uOjpDdXN0b21FcXVpdmFsZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tRnVuY3Rp
b24gPSBmdW5jdGlvbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPSBnZW5lcmF0ZUNvbmRpdGlvbih2
bSwgb3duZXIsIG9iamVjdCwgdWlkLCBraW5kLCBmdW5jdGlvbik7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQ2FuJ3QgZ2VuZXJhdGUgY3Vz
dG9tISIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNvbmRpdGlvbnMuYXBwZW5kKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkocmV2aXNpb24g
MjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCw3ICsxNjgsNyBAQCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCk7CiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQ
cm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICBWTSYsIEpTQ2VsbCogb3duZXIsIEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKLSAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBU
cml2aWFsQ0Z1bmN0aW9uUHRyIGZ1bmN0aW9uKTsKIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKICAgICBWTSYsIEpTQ2VsbCogb3du
ZXIsIEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSogaGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3Rv
dHlwZSwgYm9vbCBzaG91bGRIaXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCShyZXZpc2lvbiAyNTAwNTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw5IEBAIHZvaWQgUHJvcGVydHlDb25kaXRpb246OmR1
bXBJbkNvbnRleHQoUHIKICAgICBjYXNlIEVxdWl2YWxlbmNlOgogICAgICAgICBvdXQucHJpbnQo
bV9oZWFkZXIudHlwZSgpLCAiIG9mICIsIG1faGVhZGVyLnBvaW50ZXIoKSwgIiB3aXRoICIsIGlu
Q29udGV4dChyZXF1aXJlZFZhbHVlKCksIGNvbnRleHQpKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CisgICAgICAgIG91dC5wcmludChtX2hlYWRlci50eXBl
KCksICIgb2YgIiwgbV9oZWFkZXIucG9pbnRlcigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgSGFzUHJvdG90eXBlOgogICAgICAgICBvdXQucHJpbnQobV9oZWFkZXIudHlwZSgpLCAiIHdp
dGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU1ZhbHVlKHByb3RvdHlwZSgpKSwgY29udGV4dCkp
OwogICAgICAgICByZXR1cm47CkBAIC02OSw2ICs3Miw4IEBAIHZvaWQgUHJvcGVydHlDb25kaXRp
b246OmR1bXAoUHJpbnRTdHJlYW0KIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAogICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBKU09iamVjdCogYmFzZSkgY29uc3QKIHsKKyAgICBkYXRhTG9nTG4oImlzU3RpbGxWYWxp
ZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50OiAiLCAqdGhpcyk7CisKICAgICBpZiAo
UHJvcGVydHlDb25kaXRpb25JbnRlcm5hbDo6dmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKAog
ICAgICAgICAgICAgIkRldGVybWluaW5nIHZhbGlkaXR5IG9mICIsICp0aGlzLCAiIHdpdGggc3Ry
dWN0dXJlICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSksICIgYW5kIGJhc2UgIiwKQEAgLTg2LDcg
KzkxLDkgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdQogICAgIGNh
c2UgQWJzZW5jZToKICAgICBjYXNlIEFic2VuY2VPZlNldEVmZmVjdDoKICAgICBjYXNlIEVxdWl2
YWxlbmNlOgorICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigiUHJvcCBhY2Nlc3NlcyBubyBsb25nZXIgY2FjaGVhYmxlOiAiLCAqdGhpcyk7CiAgICAg
ICAgICAgICBpZiAoUHJvcGVydHlDb25kaXRpb25JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgcHJvcGVydHkgYWNjZXNzZXMgYXJlIG5v
dCBjYWNoZWFibGUuXG4iKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTI0OCw3ICsy
NTUsMjEgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdQogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IH0KKyAgICB9IAorICAg
IGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgZGF0YUxvZ0xuKCJDdXN0b21FcXVp
dmFsZW5jZSBjaGVjazogIiwgKnRoaXMpOworICAgICAgICBpZiAoc3RydWN0dXJlLT5zdGF0aWNQ
cm9wZXJ0aWVzUmVpZmllZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oInN0YXRpYyBwcm9w
ZXJ0aWVzIHdlcmUgcmVpZmllZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGF1dG8gZW50cnkgPSBzdHJ1Y3R1cmUtPmZpbmRQcm9wZXJ0eUhhc2hFbnRy
eSh1aWQoKSk7CisgICAgICAgIGlmICghZW50cnkpCisgICAgICAgICAgICBkYXRhTG9nTG4oIk5v
IG1vcmUgc3RhdGljIGVudHJ5ISIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkYXRhTG9n
TG4oImVudHJ5IGV4aXN0cyEiKTsKKyAgICAgICAgcmV0dXJuICEhZW50cnk7CisgICAgfQorICAg
IH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBm
YWxzZTsKQEAgLTI2Myw2ICsyODQsNyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0
eVJlcXVpcmVzCiAgICAgY2FzZSBQcmVzZW5jZToKICAgICBjYXNlIEFic2VuY2U6CiAgICAgY2Fz
ZSBFcXVpdmFsZW5jZToKKyAgICBjYXNlIEN1c3RvbUVxdWl2YWxlbmNlOgogICAgICAgICByZXR1
cm4gc3RydWN0dXJlLT5uZWVkSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCk7CiAgICAgY2FzZSBB
YnNlbmNlT2ZTZXRFZmZlY3Q6CiAgICAgY2FzZSBIYXNQcm90b3R5cGU6CkBAIC0yODgsNiArMzEw
LDcgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkKFN0cgogICAgICAgICBi
cmVhazsKICAgICBjYXNlIFByZXNlbmNlOgogICAgIGNhc2UgRXF1aXZhbGVuY2U6CisgICAgY2Fz
ZSBDdXN0b21FcXVpdmFsZW5jZToKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5n
ZXRPd25Qcm9wZXJ0eVNsb3RJc0ltcHVyZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBicmVhazsKQEAgLTMwMSw4ICszMjQsMTAgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNTdGlsbFZhbGlkKFN0cgogYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVX
aGVuVmFsaWQoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFdhdGNoYWJpbGl0eUVmZm9ydCBl
ZmZvcnQpIGNvbnN0CiB7Ci0gICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7CisgICAgICAgIGRhdGFMb2dMbigiVHJh
bnNpdGlvbiB3YXRjaHBvaW50IGZpcmVkIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAgICAgCiAgICAgc3dpdGNoIChtX2hlYWRlci50eXBlKCkpIHsKICAgICBjYXNlIEVxdWl2YWxl
bmNlOiB7CkBAIC0zMjksNiArMzU0LDE5IEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlV2hlblYKICAgICAgICAgCiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2Ug
Q3VzdG9tRXF1aXZhbGVuY2U6IHsKKyAgICAgICAgLy8gV2UganVzdCB1c2Ugc3RydWN0dXJlIHRy
YW5zaXRpb24gd2F0Y2hwb2ludCBmb3IgdGhpcy4gQSBzdHJ1Y3R1cmUgUyBzdGFydHMKKyAgICAg
ICAgLy8gb2ZmIHdpdGggYSBwcm9wZXJ0eSBQIGluIHRoZSBzdGF0aWMgcHJvcGVydHkgaGFzaCB0
YWJsZS4gSWYgUyB0cmFuc2l0aW9ucyB0bworICAgICAgICAvLyBTJywgZWl0aGVyIFAgcmVtYWlu
cyBpbiB0aGUgc3RhdGljIHByb3BlcnR5IHRhYmxlIG9yIG5vdC4gSWYgbm90LCB0aGVuIHdlCisg
ICAgICAgIC8vIGFyZSBubyBsb25nZXIgdmFsaWQuIFNvIHRoZSBhYm92ZSBjaGVjayBvZiB0cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZAorICAgICAgICAvLyBpcyBzdWZm
aWNpZW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBtYWtlIHRoaXMgc21hcnRl
ciBpbiB0aGUgZnV0dXJlLCBzaW5jZSB3ZSBzb21ldGltZXMgcmVpZnkgc3RhdGljIHByb3BlcnRp
ZXMuCisgICAgICAgIC8vIFdlIGNvdWxkIG1ha2UgdGhpcyBhZGFwdCB0byBsb29raW5nIGF0IHRo
ZSBvYmplY3QncyBzdG9yYWdlIGZvciBzdWNoIHJlaWZpZWQgY3VzdG9tCisgICAgICAgIC8vIGZ1
bmN0aW9ucywgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgorICAgICAgICBicmVhazsK
KyAgICB9CiAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMzQ3LDgg
KzM4NSwxMyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZUFzc3VtCiBib29s
IFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZSgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCBlZmZvcnQpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUsIGJhc2UpCisgICAgZGF0YUxvZ0xuKCJp
cyB3YXRjaGFibGU/Iik7CisKKyAgICBib29sIHJlc3VsdCA9IGlzU3RpbGxWYWxpZChzdHJ1Y3R1
cmUsIGJhc2UpCiAgICAgICAgICYmIGlzV2F0Y2hhYmxlV2hlblZhbGlkKHN0cnVjdHVyZSwgZWZm
b3J0KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgZGF0YUxvZ0xuKCJOb3Qgd2F0Y2hhYmxl
ISIpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIGJvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
U3RpbGxMaXZlKFZNJiB2bSkgY29uc3QKQEAgLTQxNyw2ICs0NjAsOSBAQCB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpFcXVpdmFsZW5jZToKICAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVp
dmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21FcXVpdmFsZW5jZSIpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpIYXNQcm90b3R5cGU6
CiAgICAgICAgIG91dC5wcmludCgiSGFzUHJvdG90eXBlIik7CiAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRp
dGlvbi5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIEFic2VuY2UsCiAgICAgICAgIEFic2VuY2VPZlNldEVmZmVjdCwKICAg
ICAgICAgRXF1aXZhbGVuY2UsIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxs
IGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0
aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBz
dHJ1Y3R1cmUuCisgICAgICAgIEN1c3RvbUVxdWl2YWxlbmNlLCAvLyBDdXN0b20gdmFsdWUgb3Ig
YWNjZXNzb3IuCiAgICAgICAgIEhhc1Byb3RvdHlwZQogICAgIH07CiAKQEAgLTEyMiw2ICsxMjMs
MTcgQEAgcHVibGljOgogICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwog
ICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKICAg
ICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gY3VzdG9tRXF1aXZhbGVuY2UoCisg
ICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlh
bENGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShvd25l
cik7CisKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9oZWFkZXIgPSBIZWFkZXIodWlkLCBDdXN0b21FcXVpdmFsZW5jZSk7CisgICAgICAgIHJlc3Vs
dC51LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0aW9uID0gZnVuY3Rpb247CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBoYXNQ
cm90b3R5cGVXaXRob3V0QmFycmllcihKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5
Myw2ICsyMDUsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAgICAgICAg
ICAgICByZXN1bHQgXj0gRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFs
dWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6
CisgICAgICAgICAgICByZXN1bHQgXj0gV1RGOjpQdHJIYXNoPHZvaWQqPjo6aGFzaChiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHUuY3VzdG9tRXF1aXZhbGVuY2UuZnVuY3Rpb24pKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjEz
LDYgKzIyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB1LnByb3RvdHlwZS5wcm90
b3R5cGUgPT0gb3RoZXIudS5wcm90b3R5cGUucHJvdG90eXBlOwogICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgogICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3RoZXIu
dS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21FcXVpdmFsZW5jZToKKyAg
ICAgICAgICAgIHJldHVybiB1LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0aW9uID09IG90aGVyLnUu
Y3VzdG9tRXF1aXZhbGVuY2UuZnVuY3Rpb247CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzIyLDYgKzMz
OSw5IEBAIHByaXZhdGU6CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZTsKICAgICAgICAgfSBlcXVpdmFsZW5jZTsKKyAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIgZnVuY3Rpb247CisgICAgICAgIH0gY3VzdG9t
RXF1aXZhbGVuY2U7CiAgICAgfSB1OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50LmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSwxMCBAQCB2b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ6OmZpCiAgICAgaWYgKCFtX2hvbGRlci0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAK
KyAgICBkYXRhTG9nTG4oImluc2lkZSBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IGZp
cmVJbnRlcm5hbCIpOworCiAgICAgaWYgKCFtX2tleSB8fCAhbV9rZXkuaXNXYXRjaGFibGUoUHJv
cGVydHlDb25kaXRpb246OkVuc3VyZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgZGF0YUxvZ0xu
KCJpbnNpZGUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBjbGVhcmluZyBzdHViIGJl
Y2F1c2Ugbm8gbG9uZ2VyIHdhdGNoYWJsZSEiKTsKICAgICAgICAgLy8gVGhpcyB3aWxsIGltcGxp
Y2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCByZW1vdmVzIGFsbCB3YXRjaHBv
aW50cy4KICAgICAgICAgLy8gVGhhdCB3b3JrcywgYmVjYXVzZSBkZWxldGluZyBhIHdhdGNocG9p
bnQgcmVtb3ZlcyBpdCBmcm9tIHRoZSBzZXQncyBsaXN0LCBhbmQKICAgICAgICAgLy8gdGhlIHNl
dCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNldCBj
aGFuZ2luZy4KQEAgLTU0LDYgKzU3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50OjpmaQogICAgICAgICBtX2tleS5vYmplY3QoKS0+c3RydWN0dXJlKHZtKS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBtX2tleS5vZmZzZXQoKSk7CiAgICAg
fQogCisgICAgZGF0YUxvZ0xuKCJpbnNpZGUgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCwgZ29vZCB0byBnbywgd2F0Y2hpbmcgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9uISIpOwogICAg
IG1fa2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUodm0pLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludCh0
aGlzKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OCw2ICs2OCwxMCBAQCB2b2lkIEFkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludEFkYXB0b3I6
CiB7CiAgICAgVk0mIHZtID0gY29kZUJsb2NrLT52bSgpOwogICAgIHN3aXRjaCAoa2V5LmtpbmQo
KSkgeworICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUVxdWl2YWxlbmNlOgorICAg
ICAgICAvLyBPT1BTOiBub3JtYWwgc3RydWN0dXJlIHdvcmtzIGhlcmUsIGJ1dCBhbHNvLCB0aGlz
IHNob3VsZG4ndCBoYXBwZW4gaW4gcHJhY3RpY2U/CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJvcGVydHlDb25kaXRpb246
OkVxdWl2YWxlbmNlOgogICAgICAgICBjb21tb24uYWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFs
dWVXYXRjaHBvaW50cy5hZGQoa2V5LCBjb2RlQmxvY2spLT5pbnN0YWxsKHZtKTsKICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyMSw3ICszMjEsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCksIFRyaXZpYWxDRnVu
Y3Rpb25QdHIoc2xvdC5jdXN0b21HZXR0ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChjb25kaXRpb25TZXQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nTG4oIkN1c3RvbSBnZXQ6ICIsIFN0cmluZyhwcm9wZXJ0eU5hbWUuaW1w
bCgpKSwgIiBEb250RGVsZXRlOiAiLCBzdGF0aWNfY2FzdDxib29sPihzbG90LmF0dHJpYnV0ZXMo
KSAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFs
aWQoKSkKQEAgLTM2MCwxMCArMzYyLDE0IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgc3RydWN0dXJlLCBj
b25kaXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCBX
VEZNb3ZlKHByb3RvdHlwZUFjY2Vzc0NoYWluKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ2FzZTo6QWNjZXNzVHlwZSB0eXBlOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZUdldHRlcigpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gQWNjZXNzQ2FzZTo6R2V0dGVyOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChzbG90LmF0dHJpYnV0ZXMoKSAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nl
c3NvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiR2VuZXJhdGluZyBnZXR0
ZXI6ICIsIFN0cmluZyhwcm9wZXJ0eU5hbWUuaW1wbCgpKSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2xvdC5hdHRyaWJ1dGVzKCkgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21BY2Nlc3NvckdldHRlcjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2dMbigiR2VuZXJhdGluZyBjdXN0b20gYWNjZXNzb3IgZ2V0dGVyOiAi
LCBTdHJpbmcocHJvcGVydHlOYW1lLmltcGwoKSkpOworICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBB
Y2Nlc3NDYXNlOjpDdXN0b21WYWx1ZUdldHRlcjsKIApAQCAtNTQ5LDkgKzU1NSwxMCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksIFRy
aXZpYWxDRnVuY3Rpb25QdHIoYml0d2lzZV9jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVG
dW5jPihzbG90LmN1c3RvbVNldHRlcigpLnJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Q0Z1bmN0
aW9uUHRyVGFnPigpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBP
bkNhY2hlOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJDdXN0b20gcHV0OiAi
LCBTdHJpbmcoaWRlbnQuaW1wbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5m
by5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDEyICsxODgsMTcgQEAgc3RydWN0IE1l
dGhvZFRhYmxlIHsKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQogCiBzdHJ1
Y3QgQ2xhc3NJbmZvIHsKKyAgICB1c2luZyBDaGVja1N1YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRy
ID0gUmVmPFNuaXBwZXQ+ICgqKSh2b2lkKTsKKwogICAgIC8vIEEgc3RyaW5nIGRlbm90aW5nIHRo
ZSBjbGFzcyBuYW1lLiBFeGFtcGxlOiAiV2luZG93Ii4KICAgICBjb25zdCBjaGFyKiBjbGFzc05h
bWU7Ci0KICAgICAvLyBQb2ludGVyIHRvIHRoZSBjbGFzcyBpbmZvcm1hdGlvbiBvZiB0aGUgYmFz
ZSBjbGFzcy4KICAgICAvLyBudWxscHRyaWYgdGhlcmUgaXMgbm9uZS4KICAgICBjb25zdCBDbGFz
c0luZm8qIHBhcmVudENsYXNzOworICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hU
YWJsZTsKKyAgICBDaGVja1N1YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRyIGNoZWNrU3ViQ2xhc3NT
bmlwcGV0OworICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRhYmxlOworICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGVkQXJyYXlTdG9yYWdlVHlwZTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQ
YXJlbnRDbGFzcygpCiAgICAgewpAQCAtMjEyLDE1ICsyMTcsNiBAQCBzdHJ1Y3QgQ2xhc3NJbmZv
IHsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVBy
b3BlcnRpZXMoKSBjb25zdDsKLQotICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hU
YWJsZTsKLQotICAgIHVzaW5nIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgPSBSZWY8
U25pcHBldD4gKCopKHZvaWQpOwotICAgIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIg
Y2hlY2tTdWJDbGFzc1NuaXBwZXQ7Ci0KLSAgICBNZXRob2RUYWJsZSBtZXRob2RUYWJsZTsKLQot
ICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlTdG9yYWdlVHlwZTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIyLDE1ICsyMjIyLDkgQEAgYm9vbCBK
U09iamVjdDo6Z2V0T3duU3RhdGljUHJvcGVydHlTbG90KAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotYXV0byBKU09iamVjdDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkgY29uc3QgLT4gT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+CitP
cHRpb25hbDxTdHJ1Y3R1cmU6OlByb3BlcnR5SGFzaEVudHJ5PiBKU09iamVjdDo6ZmluZFByb3Bl
cnR5SGFzaEVudHJ5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsK
LSAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbyh2bSk7IGluZm87IGlu
Zm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgewotICAgICAgICBpZiAoY29uc3QgSGFzaFRhYmxlKiBw
cm9wSGFzaFRhYmxlID0gaW5mby0+c3RhdGljUHJvcEhhc2hUYWJsZSkgewotICAgICAgICAgICAg
aWYgKGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHByb3BIYXNoVGFibGUtPmVudHJ5KHBy
b3BlcnR5TmFtZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFzaEVudHJ5IHsg
cHJvcEhhc2hUYWJsZSwgZW50cnkgfTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIHJldHVybiBzdHJ1Y3R1cmUodm0pLT5maW5kUHJvcGVydHlIYXNoRW50
cnkocHJvcGVydHlOYW1lKTsKIH0KIAogYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI1MDA1
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTkwMyw2ICs5MDMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXlCZVByb3RvdHlw
ZSgpIGNvbnN0OwogICAgIHZvaWQgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKKyAgICBPcHRpb25h
bDxTdHJ1Y3R1cmU6OlByb3BlcnR5SGFzaEVudHJ5PiBmaW5kUHJvcGVydHlIYXNoRW50cnkoVk0m
LCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJv
dGVjdGVkOgpAQCAtMTAzMiw3ICsxMDM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICAv
LyBUaGlzIGlzIHJlbGV2YW50IHRvIHVuZGVjaWRlZCwgaW50MzIsIGRvdWJsZSwgYW5kIGNvbnRp
Z3VvdXMuCiAgICAgdW5zaWduZWQgY291bnRFbGVtZW50cygpOwotICAgICAgICAKKwogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBj
bGFzcyBWTUluc3BlY3RvcjsKQEAgLTEwNjAsMTEgKzEwNjIsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgZmlsbEN1c3RvbUdldHRlclByb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5U2xvdCYsIEN1c3Rv
bUdldHRlclNldHRlciosIHVuc2lnbmVkLCBTdHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgZ2V0T3duU3RhdGljUHJvcGVydHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKLSAgICBzdHJ1Y3QgUHJvcGVydHlIYXNoRW50cnkgewotICAgICAgICBj
b25zdCBIYXNoVGFibGUqIHRhYmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFs
dWU7Ci0gICAgfTsKLSAgICBPcHRpb25hbDxQcm9wZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5
SGFzaEVudHJ5KFZNJiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAgICAgCiAgICAgYm9vbCBw
dXRCeUluZGV4QmV5b25kVmVjdG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZSwgYm9vbCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBwdXREaXJlY3RJbmRl
eEJleW9uZFZlY3Rvckxlbmd0aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRl
eE1vZGUsIEFycmF5U3RvcmFnZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM4LDQgKzEy
MzgsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWljawogICAgIHJl
dHVybiB0cnVlOwogfQogCithdXRvIFN0cnVjdHVyZTo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0IC0+IE9wdGlvbmFsPFByb3BlcnR5SGFzaEVu
dHJ5PgoreworICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2xhc3NJbmZvKCk7IGlu
Zm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoY29uc3QgSGFzaFRh
YmxlKiBwcm9wSGFzaFRhYmxlID0gaW5mby0+c3RhdGljUHJvcEhhc2hUYWJsZSkgeworICAgICAg
ICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHByb3BIYXNoVGFibGUtPmVu
dHJ5KHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFzaEVu
dHJ5IHsgcHJvcEhhc2hUYWJsZSwgZW50cnkgfTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNiArNTIsOCBAQCBjbGFzcyBVbmlxdWVkU3RyaW5nSW1wbDsKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBEZWZlckdDOworc3RydWN0IEhhc2hUYWJsZTsKK3N0cnVjdCBIYXNoVGFibGVW
YWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFy
cmF5OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwpAQCAtNjE1LDYgKzYxNywxMiBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eUhhc2g7IH0KIAogICAgIHN0YXRpYyBib29sIHNob3VsZENvbnZlcnRUb1BvbHlQcm90byhj
b25zdCBTdHJ1Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVyZSogYik7CisKKyAgICBzdHJ1Y3QgUHJv
cGVydHlIYXNoRW50cnkgeworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlOworICAgICAg
ICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7CisgICAgfTsKKyAgICBPcHRpb25hbDxQcm9w
ZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7
CiAgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
ODYsNiArNTg2LDY3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGludD4gbV92ZWN0b3I7CiB9Owog
CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNz
b3JUYWJsZUluZGV4WzJdID0geworICAgIHsgMCwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorfTsK
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmpl
Y3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXNPYmplY3QpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5n
ZXREaXJlY3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVz
dEZpZWxkIikpKSk7Cit9CisKK3N0YXRpYyBib29sIHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0
RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RG
aWVsZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsK
KyAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nvckdl
dHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IEhhc2hUYWJsZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlID0KKyAgICB7IDEsIDEsIHRy
dWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3Rv
bUFjY2Vzc29yVGFibGVJbmRleCB9OworCitjbGFzcyBTdGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKK3B1YmxpYzoKKyAgICBTdGF0aWNDdXN0b21BY2Nlc3NvcihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhdGljQ3VzdG9tQWNjZXNzb3Iq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgU3RhdGljQ3VzdG9tQWNjZXNz
b3IqIGdldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0YXRpY0N1c3RvbUFjY2Vz
c29yPih2bS5oZWFwKSkgU3RhdGljQ3VzdG9tQWNjZXNzb3Iodm0sIHN0cnVjdHVyZSk7CisgICAg
ICAgIGdldHRlci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZ2V0dGVyOwor
ICAgIH0KK307CisKIGNsYXNzIERPTUpJVE5vZGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CiAgICAgRE9NSklUTm9kZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpA
QCAtNzI5LDYgKzc5MCw3IEBAIHZvaWQgRE9NSklUR2V0dGVyOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0KICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CiB9CiAK
KwogY2xhc3MgRE9NSklUR2V0dGVyQ29tcGxleCA6IHB1YmxpYyBET01KSVROb2RlIHsKIHB1Ymxp
YzoKICAgICBET01KSVRHZXR0ZXJDb21wbGV4KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC0xMTk5LDYgKzEyNjEsOCBAQCBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmpl
Y3Q6OnNfCiBjb25zdCBDbGFzc0luZm8gRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6c19pbmZv
ID0geyAiRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCkg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsg
IkpTVGVzdEN1c3RvbUdldHRlclNldHRlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKSB9OwogCitj
b25zdCBDbGFzc0luZm8gU3RhdGljQ3VzdG9tQWNjZXNzb3I6OnNfaW5mbyA9IHsgIlN0YXRpY0N1
c3RvbUFjY2Vzc29yIiwgJkJhc2U6OnNfaW5mbywgJnN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RhdGljQ3VzdG9tQWNjZXNzb3IpIH07CisK
IEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewogICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CkBAIC0yMDE1LDYgKzIwNzksMTYgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogfQogI2VuZGlmCiAKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNj
ZXNzb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsK
KyAgICBhdXRvKiByZXN1bHQgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlKHZtLCBzdHJ1
Y3R1cmUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxl
Z2F0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKQEAgLTI1MzcsNiArMjYxMSw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBhZGRGdW5jdGlvbih2bSwg
ImNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIiLCBmdW5jdGlvbkNyZWF0ZVdhc21TdHJlYW1pbmdQ
YXJzZXIsIDApOwogI2VuZGlmCisgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVTdGF0aWNDdXN0
b21BY2Nlc3NvciIsIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IsIDApOwogICAg
IGFkZEZ1bmN0aW9uKHZtLCAiZ2V0UHJpdmF0ZVByb3BlcnR5IiwgZnVuY3Rpb25HZXRQcml2YXRl
UHJvcGVydHksIDIpOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdh
dGUiLCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlLCAyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379413</attachid>
            <date>2019-09-23 18:26:44 -0700</date>
            <delta_ts>2019-09-23 22:47:19 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>43649</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTIgKzU4LDQxIEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2QKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitjbGFzcyBUcml2aWFsQ0Z1bmN0aW9u
UHRyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQdHIgPSB2b2lkKCopKCk7CisKKyAgICBUcml2aWFs
Q0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OworICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIoc3RkOjpu
dWxscHRyX3QpIDogbV9wdHIobnVsbHB0cikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgY29uc3RleHByIFRyaXZpYWxD
RnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgmcHRyKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1f
cHRyKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyPigmcHRyKSkKKyAgICB7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBUcml2aWFsQ0Z1bmN0aW9uUHRyKFJldHVyblR5cGUoKnB0cikoQXJndW1lbnRzLi4uKSkKKyAg
ICAgICAgOiBtX3B0cihyZWludGVycHJldF9jYXN0PFB0cj4ocHRyKSkKKyAgICB7CisgICAgICAg
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKG1fcHRyKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgUHRy
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgdm9pZCogYWRkcmVzcygpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcHRyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyaXZpYWxDRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcml2
aWFsQ0Z1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gb3RoZXIubV9w
dHI7IH0KKworcHJpdmF0ZToKKyAgICBQdHIgbV9wdHI7Cit9OworCiAvLyBDRnVuY3Rpb25QdHIg
Y2FuIG9ubHkgYmUgdXNlZCB0byBob2xkIEMvQysrIGZ1bmN0aW9ucy4KIGNsYXNzIENGdW5jdGlv
blB0ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHRyID0gdm9pZCgqKSgpOwogCi0gICAgQ0Z1bmN0
aW9uUHRyKCkgeyB9CisgICAgQ0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OwogICAgIENGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDggQEAKICNpbmNsdWRlICJTdXBlclNhbXBsZXIuaCIKICNpbmNsdWRlICJUaHVu
a0dlbmVyYXRvcnMuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBu
YW1lc3BhY2UgSlNDIHsKIAogbmFtZXNwYWNlIEFjY2Vzc0Nhc2VJbnRlcm5hbCB7CkBAIC0yMjgs
NyArMjMwLDIwIEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwKIAog
Ym9vbCBBY2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fY29uZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCk7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYgY29uZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5j
b25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKSB7Cisg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQ6OkVuc3Vy
ZVdhdGNoYWJpbGl0eSkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkNvdWxkIG5vdCBz
dWNjZWVkOiAiLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFjb25kaXRpb24uc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkg
eworICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiQ291bGQgbm90IHN1Y2NlZWQ6ICIsICp0aGlz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQWNjZXNzQ2FzZTo6Y2FuUmVw
bGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKQEAgLTY1MywxNCArNjY4LDE1IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbik7CiAKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSh2
bSk7Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2ludChjb25kaXRpb24pKTsKKyAgICAgICAgaWYg
KGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQ6OkVuc3VyZVdhdGNoYWJpbGl0eSkp
IHsKKyAgICAgICAgICAgIHN0YXRlLmluc3RhbGxXYXRjaHBvaW50KGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSkpIHsKKyAgICAgICAgLy8gRm9yIG5vdywgd2Ugb25seSBhbGxvdyBlcXVpdmFsZW5j
ZSB3aGVuIGl0J3Mgd2F0Y2hhYmxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
Y29uZGl0aW9uKCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CisK
KyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiB3
aHkgdGhpcyBjYW5ub3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0IFBvbHltb3JwaGlj
QWNjZXNzIGNhbGxzCiAgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9ubHkg
YWZ0ZXIgaXQgaGFzIHZlcmlmaWVkIHRoYXQKICAgICAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OmNv
dWxkU3RpbGxTdWNjZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KQEAgLTY3MCw2ICs2ODYsNyBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVmZXJlbmNlIHRoYXQgaXNu
J3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIHN0YXRlLndl
YWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpKTsKIAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CkBAIC05OTIsNiArMTAwOSw4IEBA
IHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgJnZt
LnRvcENhbGxGcmFtZSk7CiAKKyAgICAgICAgICAgIGppdC5wcmludCgiY2FsbGluZyBjdXN0b20h
XG4iKTsKKwogICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IGppdC5jYWxsKE9wZXJhdGlvblB0
clRhZyk7CiAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKG9wZXJhdGlvbkNhbGws
IHRoaXMtPmFzPEdldHRlclNldHRlckFjY2Vzc0Nhc2U+KCkubV9jdXN0b21BY2Nlc3Nvcik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDE4ICs0NiwxMiBAQCB2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wKFByaW50CiAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwogfQogCi1ib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKLX0KLQogYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSBjb25zdAogewogICAgIGlmICghKnRoaXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9v
YmplY3QtPnN0cnVjdHVyZSgpLCBudWxscHRyKTsKIH0KIAogYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAyNTAw
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxNSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CiAgICAgICAgIHJldHVybiBlcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CiAgICAgfQorCisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGN1c3RvbUVxdWl2YWxlbmNlKAorICAgICAg
ICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25QdHIgY3VzdG9tRnVuY3Rpb24pCisgICAgeworICAg
ICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX29i
amVjdCA9IG9iamVjdDsKKyAgICAgICAgcmVzdWx0Lm1fY29uZGl0aW9uID0gUHJvcGVydHlDb25k
aXRpb246OmN1c3RvbUVxdWl2YWxlbmNlKHZtLCBvd25lciwgdWlkLCBjdXN0b21GdW5jdGlvbik7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFycmllcihKU09iamVjdCogb2Jq
ZWN0LCBKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw3ICsyMDIsNiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1z
IHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBWYWxpZGl0eQogICAgIC8v
IGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdC4KLSAgICBib29sIHN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0
cnVjdHVyZSopIGNvbnN0OwogICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1p
bmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm5z
IHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUg
dmFsaWRpdHkgZXZlbiBpZgpAQCAtMjI3LDcgKzIzNSw3IEBAIHB1YmxpYzoKICAgICAgICAgUHJv
cGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKIAogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCi0gICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIC8vIHdhdGNocG9p
bnQgb24gdGhlIHN0cnVjdHVyZSwgYW5kIGEgdmFsdWUgY2hhbmdlIHdhdGNocG9pbnQgaWYgd2Un
cmUgRXF1aXZhbGVuY2UuCiAgICAgYm9vbCBpc1dhdGNoYWJsZSgKICAgICAgICAgU3RydWN0dXJl
KiwKICAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uU2V0LmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjIsNyArNjIsMTAgQEAgdW5zaWduZWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bQog
CiBib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlv
bigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDEpICE9IChudW1iZXJPZkNvbmRpdGlvbnNXaXRo
S2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpID09IDEpOworICAgIHVuc2lnbmVk
IHRvdGFsID0gbnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OlBy
ZXNlbmNlKQorICAgICAgICArIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29u
ZGl0aW9uOjpFcXVpdmFsZW5jZSkKKyAgICAgICAgKyBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2lu
ZChQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRXF1aXZhbGVuY2UpOworICAgIHJldHVybiB0b3Rh
bCA9PSAxOwogfQogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldDo6c2xvdEJhc2VDb25kaXRpb24oKSBjb25zdApAQCAtNzEsNyArNzQsOCBAQCBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbiBPYmplY3RQcm9wZXJ0eUNvCiAgICAgdW5zaWduZWQgbnVtRm91
bmQgPSAwOwogICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biA6ICp0aGlzKSB7CiAgICAgICAgIGlmIChjb25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29u
ZGl0aW9uOjpQcmVzZW5jZQotICAgICAgICAgICAgfHwgY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpIHsKKyAgICAgICAgICAgIHx8IGNvbmRpdGlvbi5r
aW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlCisgICAgICAgICAgICB8fCBj
b25kaXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZSkg
ewogICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOwogICAgICAgICAgICAgbnVtRm91bmQr
KzsKICAgICAgICAgfQpAQCAtMTg3LDcgKzE5MSw3IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2
ZXJib3NlID0gZmFsc2U7CiB9CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29u
ZGl0aW9uKAotICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9uS2lu
ZCkKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTT2JqZWN0KiBvYmplY3QsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpLaW5kIGNvbmRpdGlvbktpbmQsIFRy
aXZpYWxDRnVuY3Rpb25QdHIgY3VzdG9tRnVuY3Rpb24gPSBudWxscHRyKQogewogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldEludGVybmFsOjp2ZXJib3NlKQpAQCAtMjI4LDYgKzIzMiwxNCBA
QCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvCiAgICAgICAgIHJlc3Vs
dCA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZSh2bSwgb3duZXIsIG9iamVj
dCwgdWlkLCB2YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb3BlcnR5
Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZTogeworICAgICAgICBhdXRvIGVudHJ5ID0gb2Jq
ZWN0LT5maW5kUHJvcGVydHlIYXNoRW50cnkodm0sIHVpZCk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGVudHJ5KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoVHJpdmlhbENGdW5jdGlvblB0cihl
bnRyeS0+dmFsdWUtPnByb3BlcnR5R2V0dGVyKCkpID09IGN1c3RvbUZ1bmN0aW9uIHx8IFRyaXZp
YWxDRnVuY3Rpb25QdHIoZW50cnktPnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpKSA9PSBjdXN0b21G
dW5jdGlvbik7CisKKyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmN1
c3RvbUVxdWl2YWxlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIGN1c3RvbUZ1bmN0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bigpOwpAQCAtMzc4LDIwICszOTAsNDUgQEAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2Vu
ZXJhdGVDb25kaQogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlv
bnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICBWTSYgdm0sIEpTQ2VsbCogb3du
ZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCog
cHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBmdW5jdGlvbikKIHsKLSAgICByZXR1cm4g
Z2VuZXJhdGVDb25kaXRpb25zKAorICAgIGF1dG8gcmVzdWx0ID0gZ2VuZXJhdGVDb25kaXRpb25z
KAogICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJl
LCBwcm90b3R5cGUsCiAgICAgICAgIFsmXSAoVmVjdG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
PiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBp
ZiAob2JqZWN0ID09IHByb3RvdHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9Ci0gICAgICAgICAgICAg
ICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25k
aXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgLy9pZiAob2JqZWN0ID09IHByb3RvdHlwZSkK
KyAgICAgICAgICAgIC8vICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBhdXRvIGtpbmQg
PSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsKKyAgICAgICAgICAgIFRyaXZpYWxDRnVuY3Rp
b25QdHIgY3VzdG9tRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICAgICAgaWYgKG9iamVjdCA9
PSBwcm90b3R5cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9i
amVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
ID0gMDsKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZE9m
ZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2UgcmVpZnkgY3Vz
dG9tIGFjY2Vzc29ycywgd2Ugd3JhcCB0aGVtIGluIGEgSlNGdW5jdGlvbiB0aGF0IHdlIHNob3Zl
CisgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBhIEdldHRlclNldHRlci4gU28sIG9uY2Ug
d2UndmUgcmVpZmllZCBhIGN1c3RvbSBhY2Nlc3Nvciwgd2Ugd2lsbAorICAgICAgICAgICAgICAg
ICAgICAvLyBubyBsb25nZXIgc2VlIGl0IGFzIGEgImN1c3RvbSIgYWNjZXNzb3IvdmFsdWUuIEhl
bmNlLCBpZiBvdXIgcHJvcGVydHkgYWNjZXNzIGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAg
IC8vIG5vdGljZXMgYSBjdXN0b20sIGl0IG11c3QgYmUgYSBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBl
IGNlbGwgb3Igc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBzdGF0aWMg
cHJvcGVydHkgdGFibGUuIEN1c3RvbSB2YWx1ZXMgZ2V0IHJlaWZpZWQgaW50byBDdXN0b21HZXR0
ZXJTZXR0ZXJzLgorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5n
ZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFs
dWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBDdXN0b21HZXR0ZXJTZXR0
ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJHZW5lcmF0aW5nIEVxdWl2
YWxlbmNlIGZvciBjdXN0b20iKTsKKyAgICAgICAgICAgICAgICAgICAga2luZCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpFcXVpdmFsZW5jZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oIkdlbmVyYXRpbmcgQ3VzdG9tRXF1aXZhbGVuY2UiKTsK
KyAgICAgICAgICAgICAgICAgICAga2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVp
dmFsZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgY3VzdG9tRnVuY3Rpb24gPSBmdW5jdGlvbjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiByZXN1bHQgPSBnZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVj
dCwgdWlkLCBraW5kLCBmdW5jdGlvbik7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0pOworICAgIGlmICgh
cmVzdWx0LmlzVmFsaWQoKSkKKyAgICAgICAgZGF0YUxvZ0xuKCJJbnZhbGlkIHJlc3VsdCBjb25k
aXRpb24gc2V0Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTY4LDcgKzE2OCw3IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkK
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAogICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBK
U09iamVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25QdHIgZnVuY3Rpb24pOwogCiBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9m
KAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBib29sIHNob3VsZEhpdCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAgdm9p
ZCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpkdW1wKFByaW50UwogICAgICAgICBvdXQucHJpbnQo
IjoiLCBtX2NvZGUpOwogfQogCi1XYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFk
ZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3Zv
aWQgQWNjZXNzR2VuZXJhdGlvblN0YXRlOjppbnN0YWxsV2F0Y2hwb2ludChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogewotICAgIHJldHVybiBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxs
V2F0Y2hwb2ludCgKICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJ
bmZvLCBjb25kaXRpb24pOwogfQogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBQb2x5bW9ycGhp
Y0FjY2Vzczo6Y29tbWl0KAogICAgIGZvciAoV2F0Y2hwb2ludFNldCogc2V0IDogYWNjZXNzQ2Fz
ZS5jb21taXQodm0sIGlkZW50KSkgewogICAgICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0K
ICAgICAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJl
bmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJs
b2NrLCAmc3R1YkluZm8sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpOworICAgICAgICAgICAg
ICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssICZzdHViSW5mbyk7CiAgICAgICAgIAogICAgICAg
ICBzZXQtPmFkZCh3YXRjaHBvaW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjUwMDU2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlv
blN0YXRlIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvPiB3YXRjaHBvaW50czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtS
ZWZlcmVuY2VzOwogCi0gICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKTsKKyAgICB2b2lk
IGluc3RhbGxXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CiAKICAg
ICB2b2lkIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgdm9pZCBzdWNjZWVkKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5j
cHAJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAgdm9p
ZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcgogICAgIGNhc2UgRXF1aXZhbGVu
Y2U6CiAgICAgICAgIG91dC5wcmludChtX2hlYWRlci50eXBlKCksICIgb2YgIiwgbV9oZWFkZXIu
cG9pbnRlcigpLCAiIHdpdGggIiwgaW5Db250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29udGV4dCkp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBDdXN0b21FcXVpdmFsZW5jZToKKyAgICAgICAg
b3V0LnByaW50KG1faGVhZGVyLnR5cGUoKSwgIiBvZiAiLCBtX2hlYWRlci5wb2ludGVyKCkpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBIYXNQcm90b3R5cGU6CiAgICAgICAgIG91dC5wcmlu
dChtX2hlYWRlci50eXBlKCksICIgd2l0aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUo
cHJvdG90eXBlKCkpLCBjb250ZXh0KSk7CiAgICAgICAgIHJldHVybjsKQEAgLTg2LDYgKzg5LDcg
QEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZhbGlkQXNzdQogICAgIGNhc2UgQWJz
ZW5jZToKICAgICBjYXNlIEFic2VuY2VPZlNldEVmZmVjdDoKICAgICBjYXNlIEVxdWl2YWxlbmNl
OgorICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgICAgIGlmIChQcm9wZXJ0
eUNvbmRpdGlvbkludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIklu
dmFsaWQgYmVjYXVzZSBwcm9wZXJ0eSBhY2Nlc3NlcyBhcmUgbm90IGNhY2hlYWJsZS5cbiIpOwpA
QCAtMjQ4LDcgKzI1MiwxNCBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRB
c3N1CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQor
ICAgIH0gCisgICAgY2FzZSBDdXN0b21FcXVpdmFsZW5jZTogeworICAgICAgICBpZiAoc3RydWN0
dXJlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBhdXRvIGVudHJ5ID0gc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnko
dWlkKCkpOworICAgICAgICByZXR1cm4gISFlbnRyeTsKKyAgICB9CisgICAgfQogICAgIAogICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYz
LDYgKzI3NCw3IEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXMKICAg
ICBjYXNlIFByZXNlbmNlOgogICAgIGNhc2UgQWJzZW5jZToKICAgICBjYXNlIEVxdWl2YWxlbmNl
OgorICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKICAgICBjYXNlIEFic2VuY2VPZlNldEVm
ZmVjdDoKICAgICBjYXNlIEhhc1Byb3RvdHlwZToKQEAgLTI4OCw2ICszMDAsNyBAQCBib29sIFBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RyCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUHJlc2VuY2U6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBjYXNlIEN1c3RvbUVxdWl2
YWxlbmNlOgogICAgICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5
U2xvdElzSW1wdXJlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFr
OwpAQCAtMzAxLDggKzMxNCw5IEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxp
ZChTdHIKIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0Y2hhYmxlV2hlblZhbGlkKAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBXYXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAog
ewotICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpCisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAog
ICAgIHN3aXRjaCAobV9oZWFkZXIudHlwZSgpKSB7CiAgICAgY2FzZSBFcXVpdmFsZW5jZTogewpA
QCAtMzI5LDYgKzM0MywxOSBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdo
ZW5WCiAgICAgICAgIAogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEN1c3RvbUVx
dWl2YWxlbmNlOiB7CisgICAgICAgIC8vIFdlIGp1c3QgdXNlIHN0cnVjdHVyZSB0cmFuc2l0aW9u
IHdhdGNocG9pbnQgZm9yIHRoaXMuIEEgc3RydWN0dXJlIFMgc3RhcnRzCisgICAgICAgIC8vIG9m
ZiB3aXRoIGEgcHJvcGVydHkgUCBpbiB0aGUgc3RhdGljIHByb3BlcnR5IGhhc2ggdGFibGUuIElm
IFMgdHJhbnNpdGlvbnMgdG8KKyAgICAgICAgLy8gUycsIGVpdGhlciBQIHJlbWFpbnMgaW4gdGhl
IHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBvciBub3QuIElmIG5vdCwgdGhlbiB3ZQorICAgICAgICAv
LyBhcmUgbm8gbG9uZ2VyIHZhbGlkLiBTbyB0aGUgYWJvdmUgY2hlY2sgb2YgdHJhbnNpdGlvbldh
dGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQKKyAgICAgICAgLy8gaXMgc3VmZmljaWVudC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gV2UgY291bGQgbWFrZSB0aGlzIHNtYXJ0ZXIgaW4gdGhl
IGZ1dHVyZSwgc2luY2Ugd2Ugc29tZXRpbWVzIHJlaWZ5IHN0YXRpYyBwcm9wZXJ0aWVzLgorICAg
ICAgICAvLyBXZSBjb3VsZCBtYWtlIHRoaXMgYWRhcHQgdG8gbG9va2luZyBhdCB0aGUgb2JqZWN0
J3Mgc3RvcmFnZSBmb3Igc3VjaCByZWlmaWVkIGN1c3RvbQorICAgICAgICAvLyBmdW5jdGlvbnMs
IGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgYnJlYWs7CisgICAgfQog
ICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQxNyw2ICs0NDQsOSBA
QCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKICAgICAgICAgb3V0LnByaW50KCJFcXVp
dmFsZW5jZSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0
aW9uOjpDdXN0b21FcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KCJDdXN0b21FcXVpdmFs
ZW5jZSIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9u
OjpIYXNQcm90b3R5cGU6CiAgICAgICAgIG91dC5wcmludCgiSGFzUHJvdG90eXBlIik7CiAgICAg
ICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNiArNDAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFic2VuY2UsCiAgICAgICAgIEFic2VuY2VP
ZlNldEVmZmVjdCwKICAgICAgICAgRXF1aXZhbGVuY2UsIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9p
bnQgb24gdGhpcyB3aWxsIGJlIGEgcGFpciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0
cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ugd2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9p
bnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUuCisgICAgICAgIEN1c3RvbUVxdWl2YWxlbmNlLCAvLyBD
dXN0b20gdmFsdWUgb3IgYWNjZXNzb3IuCiAgICAgICAgIEhhc1Byb3RvdHlwZQogICAgIH07CiAK
QEAgLTEyMiw2ICsxMjMsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJh
cnJpZXIob3duZXIpOwogICAgICAgICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1
aWQsIHZhbHVlKTsKICAgICB9CisKKyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gY3VzdG9t
RXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIFVO
VVNFRF9QQVJBTShvd25lcik7CisKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9oZWFkZXIgPSBIZWFkZXIodWlkLCBDdXN0b21FcXVpdmFsZW5jZSk7
CisgICAgICAgIHJlc3VsdC51LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0aW9uID0gZnVuY3Rpb247
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBQcm9wZXJ0
eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFycmllcihKU09iamVjdCogcHJvdG90eXBl
KQogICAgIHsKQEAgLTE5Myw2ICsyMDUsOSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRXF1aXZh
bGVuY2U6CiAgICAgICAgICAgICByZXN1bHQgXj0gRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUu
ZXF1aXZhbGVuY2UudmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vz
dG9tRXF1aXZhbGVuY2U6CisgICAgICAgICAgICByZXN1bHQgXj0gV1RGOjpQdHJIYXNoPHZvaWQq
Pjo6aGFzaChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHUuY3VzdG9tRXF1aXZhbGVuY2UuZnVuY3Rpb24p
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpAQCAtMjEzLDYgKzIyOCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB1
LnByb3RvdHlwZS5wcm90b3R5cGUgPT0gb3RoZXIudS5wcm90b3R5cGUucHJvdG90eXBlOwogICAg
ICAgICBjYXNlIEVxdWl2YWxlbmNlOgogICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2Uu
dmFsdWUgPT0gb3RoZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21F
cXVpdmFsZW5jZToKKyAgICAgICAgICAgIHJldHVybiB1LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0
aW9uID09IG90aGVyLnUuY3VzdG9tRXF1aXZhbGVuY2UuZnVuY3Rpb247CiAgICAgICAgIH0KICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMjc5LDEyICsyOTYsMTIgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBp
dCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcg
YSB0cmFuc2l0aW9uCiAgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3Nz
aWJseSBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KICAgICBib29sIGlzV2F0Y2hhYmxl
QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCi0gICAgICAgIFN0cnVjdHVyZSosIEpT
T2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdl
cykgY29uc3Q7CisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxp
dHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgaXQncyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBz
ZXR0aW5nIGEgdHJhbnNpdGlvbgogICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4K
ICAgICBib29sIGlzV2F0Y2hhYmxlKAotICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFz
ZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0Owor
ICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCosIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VO
b0NoYW5nZXMpIGNvbnN0OwogICAgIAogICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50KCkgY29uc3QKICAgICB7CkBAIC0zMjIsNiArMzM5LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZh
bHVlOwogICAgICAgICB9IGVxdWl2YWxlbmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgVHJpdmlhbENGdW5jdGlvblB0ciBmdW5jdGlvbjsKKyAgICAgICAgfSBjdXN0b21FcXVpdmFs
ZW5jZTsKICAgICB9IHU7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDEwICszMSwxMSBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHV0aWxp
dHk+CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ6OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwmKQordm9pZCBTdHJ1
Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVy
bmFsKFZNJiB2bSwgY29uc3QgRmlyZURldGFpbCYpCiB7CiAgICAgaWYgKCFtX2hvbGRlci0+aXNW
YWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC02MiwxNSArNjMsMjAgQEAgaW5saW5lIGJvb2wg
V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbgogICAgIHJldHVybiBtX2NvZGVCbG9jay0+aXNM
aXZlKCk7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiYga2V5KQorV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpOb2RlJiBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGtleSkKIHsKLSAgICByZXR1cm4gbV93YXRjaHBvaW50cy5hZGQoa2V5
LCAqdGhpcyk7CisgICAgaWYgKCFrZXkgfHwga2V5LmNvbmRpdGlvbigpLmtpbmQoKSAhPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpCisgICAgICAgIHJldHVybiAqbV93YXRjaHBvaW50
cy5hZGQoV1RGOjppbl9wbGFjZTxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMpOworICAgIEFTU0VSVChrZXkuY29uZGl0aW9uKCku
a2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CisgICAgcmV0dXJuICpt
X3dhdGNocG9pbnRzLmFkZChXVEY6OmluX3BsYWNlPEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CiB9CiAKLVN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQqIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVm
ZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKK3ZvaWQgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0Y2hwb2ludCgKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7CisgICAgQVNTRVJUKCEha2V5KTsKKwogICAg
IGlmICghaG9sZGVyUmVmKQogICAgICAgICBob2xkZXJSZWYgPSBtYWtlVW5pcXVlPFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4oY29kZUJsb2NrLCBzdHViSW5mbyk7CiAgICAgZWxzZSB7
CkBAIC03OCw3ICs4NCw0MCBAQCBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRj
aHBvCiAgICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOwog
ICAgIH0KICAgICAKLSAgICByZXR1cm4gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KGtleSk7Cisg
ICAgYXV0byYgd2F0Y2hwb2ludFZhcmlhbnQgPSBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5
KTsKKyAgICBpZiAoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2Up
IHsKKyAgICAgICAgYXV0byYgYWRhcHRpdmVXYXRjaHBvaW50ID0gV1RGOjpnZXQ8QWRhcHRpdmVW
YWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50KTsK
KyAgICAgICAgYWRhcHRpdmVXYXRjaHBvaW50Lmluc3RhbGwoY29kZUJsb2NrLT52bSgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCA9
ICZXVEY6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4od2F0Y2hwb2ludFZhcmlhbnQpOworICAgICAgICBrZXkub2JqZWN0KCktPnN0cnVjdHVy
ZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCk7CisgICAgfQorfQorCitXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQoreworICAgIGlmICgh
aG9sZGVyUmVmKQorICAgICAgICBob2xkZXJSZWYgPSBtYWtlVW5pcXVlPFdhdGNocG9pbnRzT25T
dHJ1Y3R1cmVTdHViSW5mbz4oY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fY29kZUJsb2NrID09IGNvZGVCbG9jayk7CisgICAgICAg
IEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gJldURjo6Z2V0PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50Pihob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoT2JqZWN0UHJvcGVydHlD
b25kaXRpb24oKSkpOworfQorCit2b2lkIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYpCit7CisgICAg
aWYgKCFtX2hvbGRlci0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGlz
IHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92ZXMg
YWxsIHdhdGNocG9pbnRzLgorICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1c2UgZGVsZXRpbmcgYSB3
YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwgYW5kCisgICAgLy8gdGhl
IHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhlIHNl
dCBjaGFuZ2luZy4KKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faG9sZGVyLT5jb2Rl
QmxvY2soKS0+bV9sb2NrKTsKKyAgICBtX2hvbGRlci0+c3R1YkluZm8oKS0+cmVzZXQobV9ob2xk
ZXItPmNvZGVCbG9jaygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgot
CiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZh
bHVlV2F0Y2hwb2ludEJhc2UuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5o
IgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTQw
LDEyICs0MCwxMiBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsK
IGNsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KTsKK2Ns
YXNzIFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50IGZp
bmFsIDogcHVibGljIFdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0cnVj
dHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KTsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IFdhdGNocG9pbnQoV2F0Y2hw
b2ludDo6VHlwZTo6U3RydWN0dXJlU3R1YkNsZWFyaW5nKQorICAgIFN0cnVjdHVyZVRyYW5zaXRp
b25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBrZXksIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQorICAg
ICAgICA6IFdhdGNocG9pbnQoV2F0Y2hwb2ludDo6VHlwZTo6U3RydWN0dXJlVHJhbnNpdGlvblN0
cnVjdHVyZVN0dWJDbGVhcmluZykKICAgICAgICAgLCBtX2hvbGRlcigmaG9sZGVyKQogICAgICAg
ICAsIG1fa2V5KGtleSkKICAgICB7CkBAIC01OSw2ICs1OSwyNyBAQCBwcml2YXRlOgogICAgIEpT
Q19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7CiB9Owog
CitjbGFzcyBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBmaW5h
bCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlIHsK
KyAgICB1c2luZyBCYXNlID0gQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
QmFzZTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKKyAg
ICB2b2lkIGhhbmRsZUZpcmUoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisKK3B1
YmxpYzoKKyAgICBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50c09uU3RydWN0dXJl
U3R1YkluZm8mIGhvbGRlcikKKyAgICAgICAgOiBCYXNlKGtleSkKKyAgICAgICAgLCBtX2hvbGRl
cigmaG9sZGVyKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmNvbmRpdGlvbigp
LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworICAgIH0KKworCitw
cml2YXRlOgorICAgIC8vIE93biBkZXN0cnVjdG9yIG1heSBub3QgYmUgY2FsbGVkLiBLZWVwIG1l
bWJlcnMgdHJpdmlhbGx5IGRlc3RydWN0aWJsZS4KKyAgICBKU0NfV0FUQ0hQT0lOVF9GSUVMRChQ
YWNrZWRQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiwgbV9ob2xkZXIpOworfTsK
KwogY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8pOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksMTEgKzkwLDE2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGFkZFdhdGNocG9p
bnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7CisgICAgdXNpbmcgTm9kZSA9
IFZhcmlhbnQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQsIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50PjsKKworICAg
IE5vZGUmIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7
CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIGVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgc3RhdGljIHZvaWQgZW5zdXJlUmVmZXJl
bmNlQW5kSW5zdGFsbFdhdGNocG9pbnQoCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCiAgICAgICAgIENvZGVCbG9jayos
IFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7
CisgICAgc3RhdGljIFdhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQo
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+
JiBob2xkZXJSZWYsCisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKik7CiAg
ICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9j
azsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1f
c3R1YkluZm87IH0KQEAgLTgzLDcgKzEwOSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ29k
ZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogbV9zdHViSW5mbzsK
LSAgICBCYWc8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4gbV93YXRjaHBvaW50czsK
KyAgICBCYWc8V1RGOjpWYXJpYW50PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50LCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludD4+IG1fd2F0Y2hwb2ludHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMjUw
MDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGNsYXNzIFdhdGNocG9pbnRTZXQ7CiAjaWYg
RU5BQkxFKEpJVCkKICNkZWZpbmUgSlNDX1dBVENIUE9JTlRfVFlQRVNfV0lUSE9VVF9ERkcobWFj
cm8pIFwKICAgICBKU0NfV0FUQ0hQT0lOVF9UWVBFU19XSVRIT1VUX0pJVChtYWNybykgXAotICAg
IG1hY3JvKFN0cnVjdHVyZVN0dWJDbGVhcmluZywgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCkKKyAgICBtYWNybyhTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5n
LCBTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCkKIAog
I2lmIEVOQUJMRShERkdfSklUKQogI2RlZmluZSBKU0NfV0FUQ0hQT0lOVF9UWVBFUyhtYWNybykg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAyNTAw
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hl
R2V0QnlJRAogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5
cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0s
IGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBUcml2aWFsQ0Z1bmN0aW9u
UHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQpAQCAt
NTQ5LDcgKzU0OSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZUFjY2Vzc0NoYWluID0gbnVsbHB0cjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0
b20oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5iYXNl
KCksIGlkZW50LmltcGwoKSwgVHJpdmlhbENGdW5jdGlvblB0cihiaXR3aXNlX2Nhc3Q8UHV0UHJv
cGVydHlTbG90OjpQdXRWYWx1ZUZ1bmM+KHNsb3QuY3VzdG9tU2V0dGVyKCkucmV0YWdnZWRFeGVj
dXRhYmxlQWRkcmVzczxDRnVuY3Rpb25QdHJUYWc+KCkpKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCShyZXZpc2lvbiAyNTAw
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg4LDEyICsxODgsMTcgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICBD
bGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQogCiBzdHJ1Y3QgQ2xhc3NJbmZvIHsKKyAg
ICB1c2luZyBDaGVja1N1YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRyID0gUmVmPFNuaXBwZXQ+ICgq
KSh2b2lkKTsKKwogICAgIC8vIEEgc3RyaW5nIGRlbm90aW5nIHRoZSBjbGFzcyBuYW1lLiBFeGFt
cGxlOiAiV2luZG93Ii4KICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWU7Ci0KICAgICAvLyBQb2lu
dGVyIHRvIHRoZSBjbGFzcyBpbmZvcm1hdGlvbiBvZiB0aGUgYmFzZSBjbGFzcy4KICAgICAvLyBu
dWxscHRyaWYgdGhlcmUgaXMgbm9uZS4KICAgICBjb25zdCBDbGFzc0luZm8qIHBhcmVudENsYXNz
OworICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hUYWJsZTsKKyAgICBDaGVja1N1
YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRyIGNoZWNrU3ViQ2xhc3NTbmlwcGV0OworICAgIE1ldGhv
ZFRhYmxlIG1ldGhvZFRhYmxlOworICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlTdG9yYWdl
VHlwZTsKIAogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXJlbnRDbGFzcygpCiAgICAg
ewpAQCAtMjEyLDE1ICsyMTcsNiBAQCBzdHJ1Y3QgQ2xhc3NJbmZvIHsKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIGJvb2wgaGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdDsK
LQotICAgIGNvbnN0IEhhc2hUYWJsZSogc3RhdGljUHJvcEhhc2hUYWJsZTsKLQotICAgIHVzaW5n
IENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgPSBSZWY8U25pcHBldD4gKCopKHZvaWQp
OwotICAgIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgY2hlY2tTdWJDbGFzc1NuaXBw
ZXQ7Ci0KLSAgICBNZXRob2RUYWJsZSBtZXRob2RUYWJsZTsKLQotICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGVkQXJyYXlTdG9yYWdlVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjUw
MDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjIyLDE1ICsyMjIyLDkgQEAgYm9vbCBKU09iamVjdDo6Z2V0T3duU3Rh
dGljUHJvcGVydHlTbG90KAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYXV0byBKU09iamVjdDo6
ZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkg
Y29uc3QgLT4gT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+CitPcHRpb25hbDxTdHJ1Y3R1cmU6
OlByb3BlcnR5SGFzaEVudHJ5PiBKU09iamVjdDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKLSAgICBmb3IgKGNvbnN0IENs
YXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbyh2bSk7IGluZm87IGluZm8gPSBpbmZvLT5wYXJlbnRD
bGFzcykgewotICAgICAgICBpZiAoY29uc3QgSGFzaFRhYmxlKiBwcm9wSGFzaFRhYmxlID0gaW5m
by0+c3RhdGljUHJvcEhhc2hUYWJsZSkgewotICAgICAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJs
ZVZhbHVlKiBlbnRyeSA9IHByb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFzaEVudHJ5IHsgcHJvcEhhc2hUYWJsZSwgZW50
cnkgfTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBzdHJ1Y3R1cmUodm0pLT5maW5kUHJvcGVydHlIYXNoRW50cnkocHJvcGVydHlOYW1lKTsK
IH0KIAogYm9vbCBKU09iamVjdDo6aGFzSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlLCBKU1ZhbHVlIGhhc0luc3RhbmNlVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwMyw2ICs5
MDMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBtYXlCZVByb3RvdHlwZSgpIGNvbnN0OwogICAgIHZv
aWQgZGlkQmVjb21lUHJvdG90eXBlKCk7CiAKKyAgICBPcHRpb25hbDxTdHJ1Y3R1cmU6OlByb3Bl
cnR5SGFzaEVudHJ5PiBmaW5kUHJvcGVydHlIYXNoRW50cnkoVk0mLCBQcm9wZXJ0eU5hbWUpIGNv
bnN0OworCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJvdGVjdGVkOgpAQCAtMTAzMiw3
ICsxMDM0LDcgQEAgcHJvdGVjdGVkOgogICAgICAgICAKICAgICAvLyBUaGlzIGlzIHJlbGV2YW50
IHRvIHVuZGVjaWRlZCwgaW50MzIsIGRvdWJsZSwgYW5kIGNvbnRpZ3VvdXMuCiAgICAgdW5zaWdu
ZWQgY291bnRFbGVtZW50cygpOwotICAgICAgICAKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGZyaWVuZCBjbGFzcyBWTUluc3BlY3RvcjsK
QEAgLTEwNjAsMTEgKzEwNjIsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbEN1c3RvbUdldHRl
clByb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5U2xvdCYsIEN1c3RvbUdldHRlclNldHRlciosIHVu
c2lnbmVkLCBTdHJ1Y3R1cmUqKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgZ2V0T3du
U3RhdGljUHJvcGVydHlTbG90KFZNJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAg
ICBzdHJ1Y3QgUHJvcGVydHlIYXNoRW50cnkgewotICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRh
YmxlOwotICAgICAgICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7Ci0gICAgfTsKLSAgICBP
cHRpb25hbDxQcm9wZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiwgUHJv
cGVydHlOYW1lKSBjb25zdDsKICAgICAgICAgCiAgICAgYm9vbCBwdXRCeUluZGV4QmV5b25kVmVj
dG9yTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgYm9v
bCBzaG91bGRUaHJvdyk7CiAgICAgYm9vbCBwdXREaXJlY3RJbmRleEJleW9uZFZlY3Rvckxlbmd0
aFdpdGhBcnJheVN0b3JhZ2UoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXREaXJlY3RJbmRleE1vZGUsIEFycmF5U3RvcmFn
ZSopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvcGVydHlD
aGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oCShy
ZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQ
cm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwx
NiArMjksMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFdhdGNo
cG9pbnQ+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50U2V0PgogY2xhc3MgT2JqZWN0UHJv
cGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZSB7CiBwdWJsaWM6CiAgICAgdXNpbmcgQmFz
ZSA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2U7Ci0gICAgT2Jq
ZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQoSlNDZWxsKiBvd25lciwgY29uc3Qg
T2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgV2F0Y2hwb2ludCYgd2F0Y2hwb2lu
dCkKKyAgICBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hwb2ludChKU0NlbGwqIG93
bmVyLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uLCBXYXRjaHBvaW50
U2V0JiB3YXRjaHBvaW50U2V0KQogICAgICAgICA6IEJhc2UoY29uZGl0aW9uKQogICAgICAgICAs
IG1fb3duZXIob3duZXIpCi0gICAgICAgICwgbV93YXRjaHBvaW50KHdhdGNocG9pbnQpCisgICAg
ICAgICwgbV93YXRjaHBvaW50U2V0KHdhdGNocG9pbnRTZXQpCiAgICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCh3YXRjaHBvaW50LnN0YXRlT25KU1RocmVhZCgpID09IElzV2F0Y2hlZCk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhdGNocG9pbnRTZXQuc3RhdGVPbkpTVGhyZWFkKCkgPT0g
SXNXYXRjaGVkKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC00OSwxMSArNDksMTEgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgaGFuZGxlRmlyZShWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwmKSBvdmVy
cmlkZQogICAgIHsKLSAgICAgICAgbV93YXRjaHBvaW50LmZpcmVBbGwodm0sIFN0cmluZ0ZpcmVE
ZXRhaWwoIk9iamVjdCBQcm9wZXJ0eSBpcyBjaGFuZ2VkLiIpKTsKKyAgICAgICAgbV93YXRjaHBv
aW50U2V0LmZpcmVBbGwodm0sIFN0cmluZ0ZpcmVEZXRhaWwoIk9iamVjdCBQcm9wZXJ0eSBpcyBj
aGFuZ2VkLiIpKTsKICAgICB9CiAKICAgICBKU0NlbGwqIG1fb3duZXI7Ci0gICAgV2F0Y2hwb2lu
dCYgbV93YXRjaHBvaW50OworICAgIFdhdGNocG9pbnRTZXQmIG1fd2F0Y2hwb2ludFNldDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM4LDQgKzEy
MzgsMTUgQEAgYm9vbCBTdHJ1Y3R1cmU6OmNhbkFjY2Vzc1Byb3BlcnRpZXNRdWljawogICAgIHJl
dHVybiB0cnVlOwogfQogCithdXRvIFN0cnVjdHVyZTo6ZmluZFByb3BlcnR5SGFzaEVudHJ5KFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0IC0+IE9wdGlvbmFsPFByb3BlcnR5SGFzaEVu
dHJ5PgoreworICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2xhc3NJbmZvKCk7IGlu
Zm87IGluZm8gPSBpbmZvLT5wYXJlbnRDbGFzcykgeworICAgICAgICBpZiAoY29uc3QgSGFzaFRh
YmxlKiBwcm9wSGFzaFRhYmxlID0gaW5mby0+c3RhdGljUHJvcEhhc2hUYWJsZSkgeworICAgICAg
ICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZVZhbHVlKiBlbnRyeSA9IHByb3BIYXNoVGFibGUtPmVu
dHJ5KHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnR5SGFzaEVu
dHJ5IHsgcHJvcEhhc2hUYWJsZSwgZW50cnkgfTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTIsNiArNTIsOCBAQCBjbGFzcyBVbmlxdWVkU3RyaW5nSW1wbDsKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBEZWZlckdDOworc3RydWN0IEhhc2hUYWJsZTsKK3N0cnVjdCBIYXNoVGFibGVW
YWx1ZTsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFy
cmF5OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOwpAQCAtNjE1LDYgKzYxNywxMiBAQCBw
dWJsaWM6CiAgICAgdW5zaWduZWQgcHJvcGVydHlIYXNoKCkgY29uc3QgeyByZXR1cm4gbV9wcm9w
ZXJ0eUhhc2g7IH0KIAogICAgIHN0YXRpYyBib29sIHNob3VsZENvbnZlcnRUb1BvbHlQcm90byhj
b25zdCBTdHJ1Y3R1cmUqIGEsIGNvbnN0IFN0cnVjdHVyZSogYik7CisKKyAgICBzdHJ1Y3QgUHJv
cGVydHlIYXNoRW50cnkgeworICAgICAgICBjb25zdCBIYXNoVGFibGUqIHRhYmxlOworICAgICAg
ICBjb25zdCBIYXNoVGFibGVWYWx1ZSogdmFsdWU7CisgICAgfTsKKyAgICBPcHRpb25hbDxQcm9w
ZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFByb3BlcnR5TmFtZSkgY29uc3Q7
CiAgICAgCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
ODYsNiArNTg2LDY3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGludD4gbV92ZWN0b3I7CiB9Owog
CitzdGF0aWMgY29uc3Qgc3RydWN0IENvbXBhY3RIYXNoSW5kZXggc3RhdGljQ3VzdG9tQWNjZXNz
b3JUYWJsZUluZGV4WzJdID0geworICAgIHsgMCwgLTEgfSwKKyAgICB7IC0xLCAtMSB9LAorfTsK
Kworc3RhdGljIEVuY29kZWRKU1ZhbHVlIHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcihFeGVjU3Rh
dGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKQoreworICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNPYmpl
Y3QqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOworICAgIFJFTEVBU0VfQVNTRVJU
KHRoaXNPYmplY3QpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0LT5n
ZXREaXJlY3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVz
dEZpZWxkIikpKSk7Cit9CisKK3N0YXRpYyBib29sIHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcihF
eGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
dmFsdWUpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5h
bWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CisgICAg
UkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisKKyAgICByZXR1cm4gdGhpc09iamVjdC0+cHV0
RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgInRlc3RG
aWVsZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sxXSA9IHsK
KyAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0
eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3Nvckdl
dHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVu
Yz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3Ry
dWN0IEhhc2hUYWJsZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlID0KKyAgICB7IDEsIDEsIHRy
dWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3Rv
bUFjY2Vzc29yVGFibGVJbmRleCB9OworCitjbGFzcyBTdGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVj
dDsKK3B1YmxpYzoKKyAgICBTdGF0aWNDdXN0b21BY2Nlc3NvcihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgfQorCisgICAgREVDTEFSRV9J
TkZPOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNl
OjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGU7CisKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgU3RhdGljQ3VzdG9tQWNjZXNzb3Iq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgU3RhdGljQ3VzdG9tQWNjZXNz
b3IqIGdldHRlciA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0YXRpY0N1c3RvbUFjY2Vz
c29yPih2bS5oZWFwKSkgU3RhdGljQ3VzdG9tQWNjZXNzb3Iodm0sIHN0cnVjdHVyZSk7CisgICAg
ICAgIGdldHRlci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZ2V0dGVyOwor
ICAgIH0KK307CisKIGNsYXNzIERPTUpJVE5vZGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7
CiBwdWJsaWM6CiAgICAgRE9NSklUTm9kZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpA
QCAtNzI5LDYgKzc5MCw3IEBAIHZvaWQgRE9NSklUR2V0dGVyOjpmaW5pc2hDcmVhdGlvbihWTSYg
dm0KICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CiB9CiAK
KwogY2xhc3MgRE9NSklUR2V0dGVyQ29tcGxleCA6IHB1YmxpYyBET01KSVROb2RlIHsKIHB1Ymxp
YzoKICAgICBET01KSVRHZXR0ZXJDb21wbGV4KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC0xMTk5LDYgKzEyNjEsOCBAQCBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmpl
Y3Q6OnNfCiBjb25zdCBDbGFzc0luZm8gRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6c19pbmZv
ID0geyAiRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCkg
fTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsg
IkpTVGVzdEN1c3RvbUdldHRlclNldHRlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxw
dHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKSB9OwogCitj
b25zdCBDbGFzc0luZm8gU3RhdGljQ3VzdG9tQWNjZXNzb3I6OnNfaW5mbyA9IHsgIlN0YXRpY0N1
c3RvbUFjY2Vzc29yIiwgJkJhc2U6OnNfaW5mbywgJnN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RhdGljQ3VzdG9tQWNjZXNzb3IpIH07CisK
IEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewogICAgIERvbGxh
clZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CkBAIC0yMDE1LDYgKzIwNzksMTYgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogfQogI2VuZGlmCiAKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNj
ZXNzb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0
U2NvcGU7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsK
KyAgICBhdXRvKiByZXN1bHQgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlKHZtLCBzdHJ1
Y3R1cmUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxl
Z2F0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRT
Y29wZTsKQEAgLTI1MzcsNiArMjYxMSw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBhZGRGdW5jdGlvbih2bSwg
ImNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIiLCBmdW5jdGlvbkNyZWF0ZVdhc21TdHJlYW1pbmdQ
YXJzZXIsIDApOwogI2VuZGlmCisgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVTdGF0aWNDdXN0
b21BY2Nlc3NvciIsIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IsIDApOwogICAg
IGFkZEZ1bmN0aW9uKHZtLCAiZ2V0UHJpdmF0ZVByb3BlcnR5IiwgZnVuY3Rpb25HZXRQcml2YXRl
UHJvcGVydHksIDIpOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdh
dGUiLCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlLCAyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379431</attachid>
            <date>2019-09-23 22:47:19 -0700</date>
            <delta_ts>2019-09-25 16:35:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>44317</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsMTIgKzU4LDQxIEBAIHRlbXBsYXRlPFB0clRhZz4gY2xhc3MgTWFjcm9Bc3NlbWJsZXJD
b2QKIAogZW51bSBPcGNvZGVJRCA6IHVuc2lnbmVkOwogCitjbGFzcyBUcml2aWFsQ0Z1bmN0aW9u
UHRyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBQdHIgPSB2b2lkKCopKCk7CisKKyAgICBUcml2aWFs
Q0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OworICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIoc3RkOjpu
dWxscHRyX3QpIDogbV9wdHIobnVsbHB0cikgeyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgY29uc3RleHByIFRyaXZpYWxD
RnVuY3Rpb25QdHIoUmV0dXJuVHlwZSgmcHRyKShBcmd1bWVudHMuLi4pKQorICAgICAgICA6IG1f
cHRyKHJlaW50ZXJwcmV0X2Nhc3Q8UHRyPigmcHRyKSkKKyAgICB7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFJldHVyblR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBUcml2aWFsQ0Z1bmN0aW9uUHRyKFJldHVyblR5cGUoKnB0cikoQXJndW1lbnRzLi4uKSkKKyAg
ICAgICAgOiBtX3B0cihyZWludGVycHJldF9jYXN0PFB0cj4ocHRyKSkKKyAgICB7CisgICAgICAg
IGFzc2VydElzQ0Z1bmN0aW9uUHRyKG1fcHRyKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgUHRy
IGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CisgICAgdm9pZCogYWRkcmVzcygpIGNvbnN0
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fcHRyKTsgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRyaXZpYWxDRnVuY3Rpb25QdHImIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX3B0ciA9PSBvdGhlci5tX3B0cjsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUcml2
aWFsQ0Z1bmN0aW9uUHRyJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9wdHIgIT0gb3RoZXIubV9w
dHI7IH0KKworcHJpdmF0ZToKKyAgICBQdHIgbV9wdHI7Cit9OworCiAvLyBDRnVuY3Rpb25QdHIg
Y2FuIG9ubHkgYmUgdXNlZCB0byBob2xkIEMvQysrIGZ1bmN0aW9ucy4KIGNsYXNzIENGdW5jdGlv
blB0ciB7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHRyID0gdm9pZCgqKSgpOwogCi0gICAgQ0Z1bmN0
aW9uUHRyKCkgeyB9CisgICAgQ0Z1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OwogICAgIENGdW5jdGlv
blB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSZXR1cm5U
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyOCw3ICsyMjgsMTYgQEAgYm9vbCBBY2Nlc3NDYXNlOjpkb2VzQ2FsbHMoVmVjdG9yPEpTQ2Vs
bAogCiBib29sIEFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlkaXR5QXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKKyAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgeworICAgICAgICBpZiAoY29uZGl0
aW9uLmNvbmRpdGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2Up
IHsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydDo6
RW5zdXJlV2F0Y2hhYmlsaXR5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVz
VmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogYm9vbCBBY2Nlc3NDYXNlOjpjYW5SZXBsYWNlKGNvbnN0IEFjY2Vzc0Nhc2UmIG90aGVyKSBj
b25zdApAQCAtNjUzLDE0ICs2NjIsMTUgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZUltcGwo
QWNjZXNzR2VuZQogICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BvbHlQ
cm90b0FjY2Vzc0NoYWluKTsKIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRp
dGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKHZtKTsKLQotICAgICAgICBpZiAoY29uZGl0aW9uLmlz
V2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAg
ICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50
KGNvbmRpdGlvbikpOworICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVm
Zm9ydDo6RW5zdXJlV2F0Y2hhYmlsaXR5KSkgeworICAgICAgICAgICAgc3RhdGUuaW5zdGFsbFdh
dGNocG9pbnQoY29uZGl0aW9uKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKSkgeworICAgICAgICAvLyBGb3Igbm93
LCB3ZSBvbmx5IGFsbG93IGVxdWl2YWxlbmNlIHdoZW4gaXQncyB3YXRjaGFibGUuCisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlvbi5jb25kaXRpb24oKS5raW5kKCkgIT0gUHJvcGVydHlD
b25kaXRpb246OkVxdWl2YWxlbmNlKTsKKworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1
cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAg
ICAgICAgICAgICAvLyBUaGUgcmVhc29uIHdoeSB0aGlzIGNhbm5vdCBoYXBwZW4gaXMgdGhhdCB3
ZSByZXF1aXJlIHRoYXQgUG9seW1vcnBoaWNBY2Nlc3MgY2FsbHMKICAgICAgICAgICAgIC8vIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlKCkgb25seSBhZnRlciBpdCBoYXMgdmVyaWZpZWQgdGhhdAogICAg
ICAgICAgICAgLy8gQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSByZXR1cm5lZCB0cnVl
LgpAQCAtNjcwLDYgKzY4MCw3IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vz
c0dlbmUKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBjb2RlIHRoYXQgaGFz
IGEgd2VhayByZWZlcmVuY2UgdGhhdCBpc24ndCBvdGhlcndpc2UgbGlzdGVkIGFueXdoZXJlLgor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0
dXJlKHZtKTsKICAgICAgICAgc3RhdGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmll
cjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSkpOwogCiAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNo
R1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDYsMTggKzQ2LDEyIEBAIHZvaWQgT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OmR1bXAoUHJpbnQKICAgICBkdW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CiB9CiAK
LWJvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFz
c3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdAotewotICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwotfQotCiBib29sIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpIGNvbnN0CiB7CiAgICAgaWYgKCEqdGhpcykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAotICAgIHJldHVybiBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJlKCkpOworICAgIHJl
dHVybiBtX2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChtX29iamVjdC0+c3RydWN0dXJlKCksIG51bGxwdHIpOwogfQogCiBib29sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlz
aW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNiArMTIxLDE1IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKICAgICAgICAgcmV0
dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKICAgICB9
CisKKyAgICBzdGF0aWMgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gY3VzdG9tRXF1aXZhbGVuY2Uo
CisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21GdW5jdGlvbikKKyAg
ICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRXF1aXZhbGVuY2Uodm0sIG93bmVyLCB1aWQsIGN1c3RvbUZ1
bmN0aW9uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGlj
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGhhc1Byb3RvdHlwZVdpdGhvdXRCYXJyaWVyKEpTT2Jq
ZWN0KiBvYmplY3QsIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewpAQCAtMTkzLDcgKzIwMiw2
IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZSBjbGFpbXMgdGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZhbGlkaXR5
CiAgICAgLy8gZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0LgotICAg
IGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoU3RydWN0dXJlKikgY29uc3Q7CiAgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRp
dHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRv
IGVuc3VyZSB2YWxpZGl0eSBldmVuIGlmCkBAIC0yMjcsNyArMjM1LDcgQEAgcHVibGljOgogICAg
ICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25k
aXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0
J3Mgc3RpbGwgdmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBh
IHRyYW5zaXRpb24KLSAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgLy8g
d2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLCBhbmQgYSB2YWx1ZSBjaGFuZ2Ugd2F0Y2hwb2lu
dCBpZiB3ZSdyZSBFcXVpdmFsZW5jZS4KICAgICBib29sIGlzV2F0Y2hhYmxlKAogICAgICAgICBT
dHJ1Y3R1cmUqLAogICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0
ID0gUHJvcGVydHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw3ICs2MiwxMCBAQCB1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dDo6bnVtCiAKIGJvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNl
Q29uZGl0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG51bWJlck9mQ29uZGl0aW9uc1dpdGhL
aW5kKFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMSkgIT0gKG51bWJlck9mQ29uZGl0
aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgPT0gMSk7CisgICAg
dW5zaWduZWQgdG90YWwgPSBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UpCisgICAgICAgICsgbnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJv
cGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQorICAgICAgICArIG51bWJlck9mQ29uZGl0aW9u
c1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZSk7CisgICAgcmV0
dXJuIHRvdGFsID09IDE7CiB9CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0CkBAIC03MSw3ICs3NCw4
IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q28KICAgICB1bnNpZ25l
ZCBudW1Gb3VuZCA9IDA7CiAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYg
Y29uZGl0aW9uIDogKnRoaXMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJv
cGVydHlDb25kaXRpb246OlByZXNlbmNlCi0gICAgICAgICAgICB8fCBjb25kaXRpb24ua2luZCgp
ID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAgICAgICAgICAgfHwgY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UKKyAgICAgICAg
ICAgIHx8IGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUVxdWl2
YWxlbmNlKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBjb25kaXRpb247CiAgICAgICAgICAgICBu
dW1Gb3VuZCsrOwogICAgICAgICB9CkBAIC0xODcsNyArMTkxLDcgQEAgc3RhdGljIGNvbnN0ZXhw
ciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb24gZ2Vu
ZXJhdGVDb25kaXRpb24oCi0gICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2Jq
ZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBQcm9wZXJ0eUNvbmRpdGlvbjo6S2luZCBjb25k
aXRpb25LaW5kKQorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgUHJvcGVydHlDb25kaXRpb246OktpbmQgY29uZGl0aW9u
S2luZCwgVHJpdmlhbENGdW5jdGlvblB0ciBjdXN0b21GdW5jdGlvbiA9IG51bGxwdHIpCiB7CiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSh2bSk7CiAgICAgaWYg
KE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0SW50ZXJuYWw6OnZlcmJvc2UpCkBAIC0yMjgsNiAr
MjMyLDE2IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGdlbmVyYXRlQ29uZGl0aW8KICAgICAg
ICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmVxdWl2YWxlbmNlKHZtLCBvd25l
ciwgb2JqZWN0LCB1aWQsIHZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGNhc2Ug
UHJvcGVydHlDb25kaXRpb246OkN1c3RvbUVxdWl2YWxlbmNlOiB7CisgICAgICAgIGF1dG8gZW50
cnkgPSBvYmplY3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgdWlkKTsKKyAgICAgICAgaWYg
KCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOwor
ICAgICAgICAvLyBPT1BTCisgICAgICAgIC8vUkVMRUFTRV9BU1NFUlQoVHJpdmlhbENGdW5jdGlv
blB0cihlbnRyeS0+dmFsdWUtPnByb3BlcnR5R2V0dGVyKCkpID09IGN1c3RvbUZ1bmN0aW9uIHx8
IFRyaXZpYWxDRnVuY3Rpb25QdHIoZW50cnktPnZhbHVlLT5wcm9wZXJ0eVB1dHRlcigpKSA9PSBj
dXN0b21GdW5jdGlvbik7CisKKyAgICAgICAgcmVzdWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRp
b246OmN1c3RvbUVxdWl2YWxlbmNlKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIGN1c3RvbUZ1bmN0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbigpOwpAQCAtMzc4LDIwICszOTIsNTQgQEAgT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQgZ2VuZXJhdGVDb25kaQogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICBWTSYgdm0sIEpTQ2Vs
bCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09i
amVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlvblB0ciBmdW5jdGlvbiwgdW5zaWduZWQg
YXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIGF1dG8g
cmVzdWx0ID0gZ2VuZXJhdGVDb25kaXRpb25zKAogICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCiAgICAgICAgIFsmXSAoVmVj
dG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVj
dCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAg
Ly9pZiAob2JqZWN0ID09IHByb3RvdHlwZSkKKyAgICAgICAgICAgIC8vICAgIHJldHVybiB0cnVl
OworCisgICAgICAgICAgICBhdXRvIGtpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6QWJzZW5jZTsK
KyAgICAgICAgICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIgY3VzdG9tRnVuY3Rpb24gPSBudWxscHRy
OworICAgICAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpIHsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgdWlkKTsK
KyAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdoZW4gd2UgcmVpZnkgY3VzdG9tIGFjY2Vzc29ycywgd2Ugd3JhcCB0aGVt
IGluIGEgSlNGdW5jdGlvbiB0aGF0IHdlIHNob3ZlCisgICAgICAgICAgICAgICAgICAgIC8vIGlu
c2lkZSBhIEdldHRlclNldHRlci4gU28sIG9uY2Ugd2UndmUgcmVpZmllZCBhIGN1c3RvbSBhY2Nl
c3Nvciwgd2Ugd2lsbAorICAgICAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgc2VlIGl0IGFz
IGEgImN1c3RvbSIgYWNjZXNzb3IvdmFsdWUuIEhlbmNlLCBpZiBvdXIgcHJvcGVydHkgYWNjZXNz
IGFjdHVhbGx5CisgICAgICAgICAgICAgICAgICAgIC8vIG5vdGljZXMgYSBjdXN0b20sIGl0IG11
c3QgYmUgYSBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBlIGNlbGwgb3Igc29tZXRoaW5nCisgICAgICAg
ICAgICAgICAgICAgIC8vIGluIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUuIEN1c3RvbSB2YWx1
ZXMgZ2V0IHJlaWZpZWQgaW50byBDdXN0b21HZXR0ZXJTZXR0ZXJzLgorICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxs
KCktPnR5cGUoKSA9PSBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy9kYXRhTG9nTG4oIkdlbmVyYXRpbmcgRXF1aXZhbGVuY2UgZm9yIGN1c3RvbSIpOworICAg
ICAgICAgICAgICAgICAgICBraW5kID0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50
cnkodWlkKSkgeworICAgICAgICAgICAgICAgICAgICAvL2RhdGFMb2dMbigiR2VuZXJhdGluZyBD
dXN0b21FcXVpdmFsZW5jZSIpOworICAgICAgICAgICAgICAgICAgICBraW5kID0gUHJvcGVydHlD
b25kaXRpb246OkN1c3RvbUVxdWl2YWxlbmNlOworICAgICAgICAgICAgICAgICAgICBjdXN0b21G
dW5jdGlvbiA9IGZ1bmN0aW9uOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgY2FuJ3QgY2hhbmdlLCBzbyB3ZSBjYW4gYmxpbmRseSBjYWNoZSBpdC4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB3ZSBtYXRlcmlhbGl6ZWQgYSBjdXN0b20g
b3V0IG9mIHRoaW4gYWlyIGFuZCBpdCdzIG5vdCBEb250RGVsZXRlIChpLmUsIGl0IGNhbiBiZQor
ICAgICAgICAgICAgICAgICAgICAvLyByZWRlZmluZWQpLiBUaGlzIGlzIGN1cmlvdXMuIFdlIGRv
bid0IGFjdHVhbGx5IG5lZWQgdG8gY3Jhc2ggaGVyZS4gV2UgY291bGQgYmxpbmRseSBjYWNoZQor
ICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24uIE9yIHdlIGNvdWxkIGJsaW5kbHkg
bm90IGNhY2hlIGl0LiBIb3dldmVyLCB3ZSBkb24ndCBhY3R1YWxseSBkbyB0aGlzIGluIFdlYktp
dAorICAgICAgICAgICAgICAgICAgICAvLyByaWdodCBub3csIHNvIGl0J3MgcmVhc29uYWJsZSB0
byBkZWNpZGUgd2hhdCB0byBkbyBsYXRlciAob3IgdG8gd2FybiBwZW9wbGUgb2YgZm9yZ2V0dGlu
ZyBEb25lRGVsZXRlLikKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJVTlJFQUNIQUJM
RSEhISEhISEiKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiByZXN1bHQgPSBn
ZW5lcmF0ZUNvbmRpdGlvbih2bSwgb3duZXIsIG9iamVjdCwgdWlkLCBraW5kLCBmdW5jdGlvbik7
CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0pOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9ySW5zdGFuY2VPZigKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdl
bmVyYXRlQ29uZGkKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3Vz
dG9tKAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFk
U3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIFRyaXZpYWxDRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAogICAgIFZNJiwgSlNDZWxsKiBvd25l
ciwgRXhlY1N0YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90
eXBlLCBib29sIHNob3VsZEhpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDI1MDA1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAgdm9pZCBBY2Nlc3NHZW5lcmF0aW9uUmVzdWx0
OjpkdW1wKFByaW50UwogICAgICAgICBvdXQucHJpbnQoIjoiLCBtX2NvZGUpOwogfQogCi1XYXRj
aHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3ZvaWQgQWNjZXNzR2VuZXJhdGlvblN0YXRl
OjppbnN0YWxsV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0
aW9uKQogewotICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3Vy
ZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0Y2hwb2ludCgKICAgICAgICAgd2F0
Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBjb25kaXRpb24pOwogfQogCkBA
IC0zNzMsNyArMzczLDcgQEAgdm9pZCBQb2x5bW9ycGhpY0FjY2Vzczo6Y29tbWl0KAogICAgIGZv
ciAoV2F0Y2hwb2ludFNldCogc2V0IDogYWNjZXNzQ2FzZS5jb21taXQodm0sIGlkZW50KSkgewog
ICAgICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0KICAgICAgICAgICAgIFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKLSAg
ICAgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCAmc3R1YkluZm8sIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCkpOworICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxv
Y2ssICZzdHViSW5mbyk7CiAgICAgICAgIAogICAgICAgICBzZXQtPmFkZCh3YXRjaHBvaW50KTsK
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9s
eW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3
ICsyMTIsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRlIHsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3YXRjaHBvaW50czsKICAgICBW
ZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVuY2VzOwogCi0gICAgV2F0Y2hw
b2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgPSBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpKTsKKyAgICB2b2lkIGluc3RhbGxXYXRjaHBvaW50KGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CiAKICAgICB2b2lkIHJlc3RvcmVTY3JhdGNoKCk7
CiAgICAgdm9pZCBzdWNjZWVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDI1MDA1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAgdm9pZCBQcm9wZXJ0eUNvbmRpdGlvbjo6ZHVt
cEluQ29udGV4dChQcgogICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAgICAgICAgIG91dC5wcmludCht
X2hlYWRlci50eXBlKCksICIgb2YgIiwgbV9oZWFkZXIucG9pbnRlcigpLCAiIHdpdGggIiwgaW5D
b250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29udGV4dCkpOwogICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDdXN0b21FcXVpdmFsZW5jZToKKyAgICAgICAgb3V0LnByaW50KG1faGVhZGVyLnR5cGUo
KSwgIiBvZiAiLCBtX2hlYWRlci5wb2ludGVyKCkpOworICAgICAgICByZXR1cm47CiAgICAgY2Fz
ZSBIYXNQcm90b3R5cGU6CiAgICAgICAgIG91dC5wcmludChtX2hlYWRlci50eXBlKCksICIgd2l0
aCBwcm90b3R5cGUgIiwgaW5Db250ZXh0KEpTVmFsdWUocHJvdG90eXBlKCkpLCBjb250ZXh0KSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTg2LDYgKzg5LDcgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlv
bjo6aXNTdGlsbFZhbGlkQXNzdQogICAgIGNhc2UgQWJzZW5jZToKICAgICBjYXNlIEFic2VuY2VP
ZlNldEVmZmVjdDoKICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgIGNhc2UgQ3VzdG9tRXF1aXZh
bGVuY2U6CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVh
YmxlKCkpIHsKICAgICAgICAgICAgIGlmIChQcm9wZXJ0eUNvbmRpdGlvbkludGVybmFsOjp2ZXJi
b3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkludmFsaWQgYmVjYXVzZSBwcm9wZXJ0eSBh
Y2Nlc3NlcyBhcmUgbm90IGNhY2hlYWJsZS5cbiIpOwpAQCAtMjQ4LDcgKzI1MiwxNCBAQCBib29s
IFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gfQorICAgIH0gCisgICAgY2FzZSBDdXN0b21F
cXVpdmFsZW5jZTogeworICAgICAgICBpZiAoc3RydWN0dXJlLT5zdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIGVudHJ5ID0g
c3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkodWlkKCkpOworICAgICAgICByZXR1cm4g
ISFlbnRyeTsKKyAgICB9CisgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDYgKzI3NCw3IEBAIGJvb2wgUHJvcGVy
dHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXMKICAgICBjYXNlIFByZXNlbmNlOgogICAgIGNh
c2UgQWJzZW5jZToKICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgIGNhc2UgQ3VzdG9tRXF1aXZh
bGVuY2U6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKTsKICAgICBjYXNlIEFic2VuY2VPZlNldEVmZmVjdDoKICAgICBjYXNlIEhhc1Byb3Rv
dHlwZToKQEAgLTI4OCw2ICszMDAsNyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxs
VmFsaWQoU3RyCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUHJlc2VuY2U6CiAgICAgY2FzZSBF
cXVpdmFsZW5jZToKKyAgICBjYXNlIEN1c3RvbUVxdWl2YWxlbmNlOgogICAgICAgICBpZiAoc3Ry
dWN0dXJlLT50eXBlSW5mbygpLmdldE93blByb3BlcnR5U2xvdElzSW1wdXJlKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwpAQCAtMzAxLDggKzMxNCw5IEBAIGJv
b2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZChTdHIKIGJvb2wgUHJvcGVydHlDb25k
aXRpb246OmlzV2F0Y2hhYmxlV2hlblZhbGlkKAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlLCBX
YXRjaGFiaWxpdHlFZmZvcnQgZWZmb3J0KSBjb25zdAogewotICAgIGlmIChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgaWYgKHN0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgewogICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAogICAgIHN3aXRjaCAobV9oZWFkZXIudHlw
ZSgpKSB7CiAgICAgY2FzZSBFcXVpdmFsZW5jZTogewpAQCAtMzI5LDYgKzM0MywxOSBAQCBib29s
IFByb3BlcnR5Q29uZGl0aW9uOjppc1dhdGNoYWJsZVdoZW5WCiAgICAgICAgIAogICAgICAgICBi
cmVhazsKICAgICB9CisKKyAgICBjYXNlIEN1c3RvbUVxdWl2YWxlbmNlOiB7CisgICAgICAgIC8v
IFdlIGp1c3QgdXNlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgZm9yIHRoaXMuIEEg
c3RydWN0dXJlIFMgc3RhcnRzCisgICAgICAgIC8vIG9mZiB3aXRoIGEgcHJvcGVydHkgUCBpbiB0
aGUgc3RhdGljIHByb3BlcnR5IGhhc2ggdGFibGUuIElmIFMgdHJhbnNpdGlvbnMgdG8KKyAgICAg
ICAgLy8gUycsIGVpdGhlciBQIHJlbWFpbnMgaW4gdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBv
ciBub3QuIElmIG5vdCwgdGhlbiB3ZQorICAgICAgICAvLyBhcmUgbm8gbG9uZ2VyIHZhbGlkLiBT
byB0aGUgYWJvdmUgY2hlY2sgb2YgdHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxp
ZGF0ZWQKKyAgICAgICAgLy8gaXMgc3VmZmljaWVudC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8g
V2UgY291bGQgbWFrZSB0aGlzIHNtYXJ0ZXIgaW4gdGhlIGZ1dHVyZSwgc2luY2Ugd2Ugc29tZXRp
bWVzIHJlaWZ5IHN0YXRpYyBwcm9wZXJ0aWVzLgorICAgICAgICAvLyBXZSBjb3VsZCBtYWtlIHRo
aXMgYWRhcHQgdG8gbG9va2luZyBhdCB0aGUgb2JqZWN0J3Mgc3RvcmFnZSBmb3Igc3VjaCByZWlm
aWVkIGN1c3RvbQorICAgICAgICAvLyBmdW5jdGlvbnMsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJp
Z2h0IG5vdy4KKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKQEAgLTQxNyw2ICs0NDQsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgSlNDCiAgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpFcXVp
dmFsZW5jZToKICAgICAgICAgb3V0LnByaW50KCJFcXVpdmFsZW5jZSIpOwogICAgICAgICByZXR1
cm47CisgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21FcXVpdmFsZW5jZToK
KyAgICAgICAgb3V0LnByaW50KCJDdXN0b21FcXVpdmFsZW5jZSIpOworICAgICAgICByZXR1cm47
CiAgICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpIYXNQcm90b3R5cGU6CiAgICAgICAg
IG91dC5wcmludCgiSGFzUHJvdG90eXBlIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oCShy
ZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVy
dHlDb25kaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIEFic2VuY2UsCiAgICAgICAgIEFic2VuY2VPZlNldEVmZmVjdCwKICAgICAgICAgRXF1
aXZhbGVuY2UsIC8vIEFuIGFkYXB0aXZlIHdhdGNocG9pbnQgb24gdGhpcyB3aWxsIGJlIGEgcGFp
ciBvZiB3YXRjaHBvaW50cywgYW5kIHdoZW4gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9ucywgd2Ug
d2lsbCBzZXQgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgb24gdGhlIG5ldyBzdHJ1Y3R1cmUu
CisgICAgICAgIEN1c3RvbUVxdWl2YWxlbmNlLCAvLyBDdXN0b20gdmFsdWUgb3IgYWNjZXNzb3Iu
CiAgICAgICAgIEhhc1Byb3RvdHlwZQogICAgIH07CiAKQEAgLTEyMiw2ICsxMjMsMTcgQEAgcHVi
bGljOgogICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwogICAgICAgICBy
ZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKICAgICB9CisKKyAg
ICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gY3VzdG9tRXF1aXZhbGVuY2UoCisgICAgICAgIFZN
JiwgSlNDZWxsKiBvd25lciwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgVHJpdmlhbENGdW5jdGlv
blB0ciBmdW5jdGlvbikKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShvd25lcik7CisKKyAg
ICAgICAgUHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAgICByZXN1bHQubV9oZWFkZXIg
PSBIZWFkZXIodWlkLCBDdXN0b21FcXVpdmFsZW5jZSk7CisgICAgICAgIHJlc3VsdC51LmN1c3Rv
bUVxdWl2YWxlbmNlLmZ1bmN0aW9uID0gZnVuY3Rpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQogICAgIAogICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVX
aXRob3V0QmFycmllcihKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw2ICsyMDUs
OSBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAgICAgICAgICAgICByZXN1
bHQgXj0gRW5jb2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFsdWUpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3VzdG9tRXF1aXZhbGVuY2U6CisgICAgICAg
ICAgICByZXN1bHQgXj0gV1RGOjpQdHJIYXNoPHZvaWQqPjo6aGFzaChiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHUuY3VzdG9tRXF1aXZhbGVuY2UuZnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjEzLDYgKzIyOCw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB1LnByb3RvdHlwZS5wcm90b3R5cGUgPT0g
b3RoZXIudS5wcm90b3R5cGUucHJvdG90eXBlOwogICAgICAgICBjYXNlIEVxdWl2YWxlbmNlOgog
ICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3RoZXIudS5lcXVpdmFs
ZW5jZS52YWx1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21FcXVpdmFsZW5jZToKKyAgICAgICAgICAg
IHJldHVybiB1LmN1c3RvbUVxdWl2YWxlbmNlLmZ1bmN0aW9uID09IG90aGVyLnUuY3VzdG9tRXF1
aXZhbGVuY2UuZnVuY3Rpb247CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc5LDEyICsyOTYsMTIgQEAg
cHVibGljOgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBj
b3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9uCiAgICAgLy8gd2F0
Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1cmUgcHJvcGVydHkg
d2F0Y2hwb2ludC4KICAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdh
dGNocG9pbnQoCi0gICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwg
V2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgICAgIFN0cnVj
dHVyZSosIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2Vz
KSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBzdGlsbCB2YWxpZCBh
bmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJhbnNpdGlvbgogICAg
IC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBib29sIGlzV2F0Y2hhYmxlKAot
ICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIsIFdhdGNoYWJpbGl0
eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgICAgICBTdHJ1Y3R1cmUqLCBKU09i
amVjdCosIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OwogICAgIAog
ICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkg
Y29uc3QKICAgICB7CkBAIC0zMjIsNiArMzM5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgc3RydWN0
IHsKICAgICAgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOwogICAgICAgICB9IGVxdWl2YWxl
bmNlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgVHJpdmlhbENGdW5jdGlvblB0ciBm
dW5jdGlvbjsKKyAgICAgICAgfSBjdXN0b21FcXVpdmFsZW5jZTsKICAgICB9IHU7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyNTAwNTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUlu
dGVybmFsKFZNJiB2bSwgY29uc3QgRmlyZURldGFpbCYpCit2b2lkIFN0cnVjdHVyZVRyYW5zaXRp
b25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBj
b25zdCBGaXJlRGV0YWlsJikKIHsKICAgICBpZiAoIW1faG9sZGVyLT5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTYyLDE1ICs2Miw0MSBAQCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluCiAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pc0xpdmUoKTsKIH0KIAot
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkp
CitXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86Ok5vZGUmIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
biYga2V5KQogewotICAgIHJldHVybiBtX3dhdGNocG9pbnRzLmFkZChrZXksICp0aGlzKTsKKyAg
ICBpZiAoIWtleSB8fCBrZXkuY29uZGl0aW9uKCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9u
OjpFcXVpdmFsZW5jZSkKKyAgICAgICAgcmV0dXJuICptX3dhdGNocG9pbnRzLmFkZChXVEY6Omlu
X3BsYWNlPFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
Piwga2V5LCAqdGhpcyk7CisgICAgQVNTRVJUKGtleS5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJv
cGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKKyAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMu
YWRkKFdURjo6aW5fcGxhY2U8QWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ+LCBrZXksICp0aGlzKTsKIH0KIAotU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRX
YXRjaHBvaW50KAordm9pZCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJl
ZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50KAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2Nr
LAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSkKIHsKKyAgICBBU1NFUlQoISFrZXkpOworCisgICAgaWYgKCFob2xkZXJS
ZWYpCisgICAgICAgIGhvbGRlclJlZiA9IG1ha2VVbmlxdWU8V2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvPihjb2RlQmxvY2ssIHN0dWJJbmZvKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKGhvbGRlclJlZi0+bV9jb2RlQmxvY2sgPT0gY29kZUJsb2NrKTsKKyAgICAgICAgQVNTRVJU
KGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CisgICAgfQorICAgIAorICAgIGF1
dG8mIHdhdGNocG9pbnRWYXJpYW50ID0gaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KGtleSk7Cisg
ICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKSB7Cisg
ICAgICAgIGF1dG8mIGFkYXB0aXZlV2F0Y2hwb2ludCA9IFdURjo6Z2V0PEFkYXB0aXZlVmFsdWVT
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Pih3YXRjaHBvaW50VmFyaWFudCk7CisgICAg
ICAgIGFkYXB0aXZlV2F0Y2hwb2ludC5pbnN0YWxsKGNvZGVCbG9jay0+dm0oKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYXV0byogc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQgPSAmV1RG
OjpnZXQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+
KHdhdGNocG9pbnRWYXJpYW50KTsKKyAgICAgICAga2V5Lm9iamVjdCgpLT5zdHJ1Y3R1cmUoKS0+
YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQpOwor
ICAgIH0KK30KKworV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjpl
bnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJs
b2NrLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKICAgICBpZiAoIWhvbGRl
clJlZikKICAgICAgICAgaG9sZGVyUmVmID0gbWFrZVVuaXF1ZTxXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8+KGNvZGVCbG9jaywgc3R1YkluZm8pOwogICAgIGVsc2UgewpAQCAtNzgsNyAr
MTA0LDIxIEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAg
ICAgQVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAg
IAotICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKKyAgICByZXR1cm4g
JldURjo6Z2V0PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50Pihob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSkp
OworfQorCit2b2lkIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYpCit7CisgICAgaWYgKCFtX2hvbGRl
ci0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkYXRhTG9nTG4oImNsZWFyaW5n
IEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Iik7CisKKyAgICAv
LyBUaGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJl
bW92ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1c2UgZGVsZXRp
bmcgYSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwgYW5kCisgICAg
Ly8gdGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3Qg
dGhlIHNldCBjaGFuZ2luZy4KKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faG9sZGVy
LT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICBtX2hvbGRlci0+c3R1YkluZm8oKS0+cmVzZXQo
bV9ob2xkZXItPmNvZGVCbG9jaygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgotCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkFkYXB0aXZlSW5mZXJyZWRQcm9w
ZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
QEAgLTQwLDEyICs0MCwxMiBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTdHJ1Y3R1cmVTdHVi
SW5mbzsKIGNsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsK
LSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
KTsKK2NsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50IGZpbmFsIDogcHVibGljIFdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFdhdGNo
cG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IFdhdGNocG9pbnQo
V2F0Y2hwb2ludDo6VHlwZTo6U3RydWN0dXJlU3R1YkNsZWFyaW5nKQorICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXksIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVy
KQorICAgICAgICA6IFdhdGNocG9pbnQoV2F0Y2hwb2ludDo6VHlwZTo6U3RydWN0dXJlVHJhbnNp
dGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZykKICAgICAgICAgLCBtX2hvbGRlcigmaG9sZGVyKQog
ICAgICAgICAsIG1fa2V5KGtleSkKICAgICB7CkBAIC01OSw2ICs1OSwyNiBAQCBwcml2YXRlOgog
ICAgIEpTQ19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7
CiB9OwogCitjbGFzcyBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRC
YXNlIHsKKyAgICB1c2luZyBCYXNlID0gQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50QmFzZTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBZGFwdGl2ZVZhbHVlU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKKyAgICB2b2lkIGhhbmRsZUZpcmUoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7
CisKK3B1YmxpYzoKKyAgICBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm8mIGhvbGRlcikKKyAgICAgICAgOiBCYXNlKGtleSkKKyAgICAgICAgLCBt
X2hvbGRlcigmaG9sZGVyKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmNvbmRp
dGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworICAgIH0K
KworCitwcml2YXRlOgorICAgIFBhY2tlZFB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8+IG1faG9sZGVyOworfTsKKwogY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm8pOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksMTEgKzg5LDE2IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7
CisgICAgdXNpbmcgTm9kZSA9IFZhcmlhbnQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQsIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50PjsKKworICAgIE5vZGUmIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSk7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgc3RhdGlj
IHZvaWQgZW5zdXJlUmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQoCiAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCiAg
ICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGtleSk7CisgICAgc3RhdGljIFdhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5j
ZUFuZEFkZFdhdGNocG9pbnQoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCisgICAgICAgIENvZGVCbG9jayosIFN0cnVj
dHVyZVN0dWJJbmZvKik7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7
IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygp
IGNvbnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KQEAgLTgzLDcgKzEwOCw3IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyogbV9zdHViSW5mbzsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dD4gbV93YXRjaHBvaW50czsKKyAgICBCYWc8V1RGOjpWYXJpYW50PFN0cnVjdHVyZVRyYW5zaXRp
b25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4+IG1fd2F0Y2hwb2ludHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGNsYXNzIFdh
dGNocG9pbnRTZXQ7CiAjaWYgRU5BQkxFKEpJVCkKICNkZWZpbmUgSlNDX1dBVENIUE9JTlRfVFlQ
RVNfV0lUSE9VVF9ERkcobWFjcm8pIFwKICAgICBKU0NfV0FUQ0hQT0lOVF9UWVBFU19XSVRIT1VU
X0pJVChtYWNybykgXAotICAgIG1hY3JvKFN0cnVjdHVyZVN0dWJDbGVhcmluZywgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCkKKyAgICBtYWNybyhTdHJ1Y3R1cmVUcmFuc2l0aW9uU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludCkKIAogI2lmIEVOQUJMRShERkdfSklUKQogI2RlZmluZSBKU0NfV0FUQ0hQ
T0lOVF9UWVBFUyhtYWNybykgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsNyArMzIxLDcgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPSBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LnNsb3RC
YXNlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZS5pbXBs
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgp
LCBUcml2aWFsQ0Z1bmN0aW9uUHRyKHNsb3QuY3VzdG9tR2V0dGVyKCkpLCBzbG90LmF0dHJpYnV0
ZXMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKQEAgLTU0OSw3ICs1NDksOCBAQCBzdGF0
aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm90b3R5cGVBY2Nlc3NDaGFpbiA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRl
Q29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFz
ZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyaXZpYWxDRnVuY3Rpb25QdHIoYml0d2lz
ZV9jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPihzbG90LmN1c3RvbVNldHRlcigp
LnJldGFnZ2VkRXhlY3V0YWJsZUFkZHJlc3M8Q0Z1bmN0aW9uUHRyVGFnPigpKSksIDApOwogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAg
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9DbGFzc0luZm8u
aAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMiArMTg4LDE3IEBAIHN0cnVjdCBNZXRo
b2RUYWJsZSB7CiAgICAgQ2xhc3NOYW1lOjpUeXBlZEFycmF5U3RvcmFnZVR5cGUKIAogc3RydWN0
IENsYXNzSW5mbyB7CisgICAgdXNpbmcgQ2hlY2tTdWJDbGFzc1NuaXBwZXRGdW5jdGlvblB0ciA9
IFJlZjxTbmlwcGV0PiAoKikodm9pZCk7CisKICAgICAvLyBBIHN0cmluZyBkZW5vdGluZyB0aGUg
Y2xhc3MgbmFtZS4gRXhhbXBsZTogIldpbmRvdyIuCiAgICAgY29uc3QgY2hhciogY2xhc3NOYW1l
OwotCiAgICAgLy8gUG9pbnRlciB0byB0aGUgY2xhc3MgaW5mb3JtYXRpb24gb2YgdGhlIGJhc2Ug
Y2xhc3MuCiAgICAgLy8gbnVsbHB0cmlmIHRoZXJlIGlzIG5vbmUuCiAgICAgY29uc3QgQ2xhc3NJ
bmZvKiBwYXJlbnRDbGFzczsKKyAgICBjb25zdCBIYXNoVGFibGUqIHN0YXRpY1Byb3BIYXNoVGFi
bGU7CisgICAgQ2hlY2tTdWJDbGFzc1NuaXBwZXRGdW5jdGlvblB0ciBjaGVja1N1YkNsYXNzU25p
cHBldDsKKyAgICBNZXRob2RUYWJsZSBtZXRob2RUYWJsZTsKKyAgICBUeXBlZEFycmF5VHlwZSB0
eXBlZEFycmF5U3RvcmFnZVR5cGU7CiAKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUGFy
ZW50Q2xhc3MoKQogICAgIHsKQEAgLTIxMiwxNSArMjE3LDYgQEAgc3RydWN0IENsYXNzSW5mbyB7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9w
ZXJ0aWVzKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBIYXNoVGFibGUqIHN0YXRpY1Byb3BIYXNoVGFi
bGU7Ci0KLSAgICB1c2luZyBDaGVja1N1YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRyID0gUmVmPFNu
aXBwZXQ+ICgqKSh2b2lkKTsKLSAgICBDaGVja1N1YkNsYXNzU25pcHBldEZ1bmN0aW9uUHRyIGNo
ZWNrU3ViQ2xhc3NTbmlwcGV0OwotCi0gICAgTWV0aG9kVGFibGUgbWV0aG9kVGFibGU7Ci0KLSAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlZEFycmF5U3RvcmFnZVR5cGU7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyMiwxNSArMjIyMiw5IEBAIGJvb2wgSlNP
YmplY3Q6OmdldE93blN0YXRpY1Byb3BlcnR5U2xvdCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWF1dG8gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpIGNvbnN0IC0+IE9wdGlvbmFsPFByb3BlcnR5SGFzaEVudHJ5PgorT3B0
aW9uYWw8U3RydWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0
eUhhc2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0g
ICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFzc0luZm8odm0pOyBpbmZvOyBpbmZv
ID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZSogcHJv
cEhhc2hUYWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFibGUpIHsKLSAgICAgICAgICAgIGlm
IChjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBwcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9w
ZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhc2hFbnRyeSB7IHBy
b3BIYXNoVGFibGUsIGVudHJ5IH07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gc3RydWN0dXJlKHZtKS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5
KHByb3BlcnR5TmFtZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNTAwNTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MDMsNiArOTAzLDggQEAgcHVibGljOgogICAgIGJvb2wgbWF5QmVQcm90b3R5cGUo
KSBjb25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3RvdHlwZSgpOwogCisgICAgT3B0aW9uYWw8
U3RydWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiwg
UHJvcGVydHlOYW1lKSBjb25zdDsKKwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByb3Rl
Y3RlZDoKQEAgLTEwMzIsNyArMTAzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgLy8g
VGhpcyBpcyByZWxldmFudCB0byB1bmRlY2lkZWQsIGludDMyLCBkb3VibGUsIGFuZCBjb250aWd1
b3VzLgogICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHMoKTsKLSAgICAgICAgCisKIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xh
c3MgVk1JbnNwZWN0b3I7CkBAIC0xMDYwLDExICsxMDYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eVNsb3QmLCBDdXN0b21H
ZXR0ZXJTZXR0ZXIqLCB1bnNpZ25lZCwgU3RydWN0dXJlKik7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7Ci0gICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKLSAgICAgICAgY29u
c3QgSGFzaFRhYmxlKiB0YWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVl
OwotICAgIH07Ci0gICAgT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9wZXJ0eUhh
c2hFbnRyeShWTSYsIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIAogICAgIGJvb2wgcHV0
QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhC
ZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhN
b2RlLCBBcnJheVN0b3JhZ2UqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10ZW1wbGF0
ZTx0eXBlbmFtZSBXYXRjaHBvaW50PgordGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldD4K
IGNsYXNzIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50IGZpbmFsIDogcHVi
bGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewogcHVibGlj
OgogICAgIHVzaW5nIEJhc2UgPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9p
bnRCYXNlOwotICAgIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50KEpTQ2Vs
bCogb3duZXIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIFdhdGNo
cG9pbnQmIHdhdGNocG9pbnQpCisgICAgT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNo
cG9pbnQoSlNDZWxsKiBvd25lciwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiwgV2F0Y2hwb2ludFNldCYgd2F0Y2hwb2ludFNldCkKICAgICAgICAgOiBCYXNlKGNvbmRp
dGlvbikKICAgICAgICAgLCBtX293bmVyKG93bmVyKQotICAgICAgICAsIG1fd2F0Y2hwb2ludCh3
YXRjaHBvaW50KQorICAgICAgICAsIG1fd2F0Y2hwb2ludFNldCh3YXRjaHBvaW50U2V0KQogICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQod2F0Y2hwb2ludC5zdGF0ZU9uSlNUaHJlYWQoKSA9
PSBJc1dhdGNoZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh3YXRjaHBvaW50U2V0LnN0YXRl
T25KU1RocmVhZCgpID09IElzV2F0Y2hlZCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNDksMTEg
KzQ5LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZUZpcmUoVk0mIHZtLCBjb25zdCBG
aXJlRGV0YWlsJikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fd2F0Y2hwb2ludC5maXJlQWxs
KHZtLCBTdHJpbmdGaXJlRGV0YWlsKCJPYmplY3QgUHJvcGVydHkgaXMgY2hhbmdlZC4iKSk7Cisg
ICAgICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBTdHJpbmdGaXJlRGV0YWlsKCJPYmpl
Y3QgUHJvcGVydHkgaXMgY2hhbmdlZC4iKSk7CiAgICAgfQogCiAgICAgSlNDZWxsKiBtX293bmVy
OwotICAgIFdhdGNocG9pbnQmIG1fd2F0Y2hwb2ludDsKKyAgICBXYXRjaHBvaW50U2V0JiBtX3dh
dGNocG9pbnRTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzOCw0ICsxMjM4LDE1IEBAIGJvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0
aWVzUXVpY2sKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0byBTdHJ1Y3R1cmU6OmZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdCAtPiBPcHRpb25h
bDxQcm9wZXJ0eUhhc2hFbnRyeT4KK3sKKyAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9
IGNsYXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAg
aWYgKGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNo
VGFibGUpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBw
cm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVy
biBQcm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUsIGVudHJ5IH07CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgY2xhc3MgVW5pcXVlZFN0cmluZ0ltcGw7
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVmZXJHQzsKK3N0cnVjdCBIYXNoVGFibGU7Citz
dHJ1Y3QgSGFzaFRhYmxlVmFsdWU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFz
cyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKQEAgLTYx
NSw2ICs2MTcsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9CiAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRDb252
ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUqIGIpOwor
CisgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxl
KiB0YWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOworICAgIH07Cisg
ICAgT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI1
MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTg2LDYgKzU4Niw3OSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxpbnQ+
IG1fdmVjdG9yOwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0
YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFsyXSA9IHsKKyAgICB7IDAsIC0xIH0sCisgICAg
eyAtMSwgLTEgfSwKK307CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0ZXN0U3RhdGljQWNjZXNz
b3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3Bl
cnR5TmFtZSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5
bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9
IHRoaXNPYmplY3QtPmdldERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21T
dHJpbmcodm0sICJ0ZXN0RmllbGQiKSkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30K
Kworc3RhdGljIGJvb2wgdGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0
Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0
aGlzT2JqZWN0KTsKKworICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIFByb3Bl
cnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZpZWxkIikpLCBKU1ZhbHVl
OjpkZWNvZGUodmFsdWUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1
ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFdID0geworICAgeyAidGVzdFN0YXRp
Y0FjY2Vzc29yIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFByb3BlcnR5QXR0cmlidXRlOjpDdXN0
b21BY2Nlc3NvciksIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0
eVNsb3Q6OkdldFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFB1dFByb3BlcnR5U2xvdDo6UHV0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNj
ZXNzb3JQdXR0ZXIpIH0gfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgSGFzaFRhYmxlIHN0
YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUgPQorICAgIHsgMSwgMSwgdHJ1ZSwgbnVsbHB0ciwgc3Rh
dGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlcywgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZUlu
ZGV4IH07CisKK2NsYXNzIFN0YXRpY0N1c3RvbUFjY2Vzc29yIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgeworICAgIHVzaW5nIEJhc2UgPSBKU05vbkZpbmFsT2JqZWN0OworcHVibGljOgorICAg
IFN0YXRpY0N1c3RvbUFjY2Vzc29yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRT
Y29wZSBhc3NlcnRTY29wZTsKKyAgICB9CisKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxh
Z3MgfCBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
OworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIFN0YXRp
Y0N1c3RvbUFjY2Vzc29yKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAg
ICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgICAgIFN0
YXRpY0N1c3RvbUFjY2Vzc29yKiBnZXR0ZXIgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxT
dGF0aWNDdXN0b21BY2Nlc3Nvcj4odm0uaGVhcCkpIFN0YXRpY0N1c3RvbUFjY2Vzc29yKHZtLCBz
dHJ1Y3R1cmUpOworICAgICAgICBnZXR0ZXItPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
cmV0dXJuIGdldHRlcjsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNPYmplY3QqIHRoaXNPYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQorICAgIHsKKyAgICAgICAgaWYgKFN0cmlu
Zyhwcm9wZXJ0eU5hbWUudWlkKCkpID09ICJ0aGluQWlyQ3VzdG9tR2V0dGVyIikgeworICAgICAg
ICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IsIHRl
c3RTdGF0aWNBY2Nlc3NvckdldHRlcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gSlNOb25GaW5hbE9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgfQorfTsKKwogY2xh
c3MgRE9NSklUTm9kZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKICAgICBE
T01KSVROb2RlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC03MjksNiArODAyLDcg
QEAgdm9pZCBET01KSVRHZXR0ZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogICAgIHB1dERpcmVj
dEN1c3RvbUFjY2Vzc29yKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiY3VzdG9tR2V0
dGVyIiksIGN1c3RvbUdldHRlclNldHRlciwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwg
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKTsKIH0KIAorCiBjbGFzcyBET01KSVRH
ZXR0ZXJDb21wbGV4IDogcHVibGljIERPTUpJVE5vZGUgewogcHVibGljOgogICAgIERPTUpJVEdl
dHRlckNvbXBsZXgoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTExOTksNiArMTI3
Myw4IEBAIGNvbnN0IENsYXNzSW5mbyBET01KSVRGdW5jdGlvbk9iamVjdDo6c18KIGNvbnN0IENs
YXNzSW5mbyBET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0OjpzX2luZm8gPSB7ICJET01KSVRDaGVj
a1N1YkNsYXNzT2JqZWN0IiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShET01KSVRDaGVja1N1YkNsYXNzT2JqZWN0KSB9OwogY29uc3QgQ2xhc3NJ
bmZvIEpTVGVzdEN1c3RvbUdldHRlclNldHRlcjo6c19pbmZvID0geyAiSlNUZXN0Q3VzdG9tR2V0
dGVyU2V0dGVyIiwgJkJhc2U6OnNfaW5mbywgbnVsbHB0ciwgbnVsbHB0ciwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIpIH07CiAKK2NvbnN0IENsYXNzSW5mbyBT
dGF0aWNDdXN0b21BY2Nlc3Nvcjo6c19pbmZvID0geyAiU3RhdGljQ3VzdG9tQWNjZXNzb3IiLCAm
QmFzZTo6c19pbmZvLCAmc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSwgbnVsbHB0ciwgQ1JFQVRF
X01FVEhPRF9UQUJMRShTdGF0aWNDdXN0b21BY2Nlc3NvcikgfTsKKwogRWxlbWVudEhhbmRsZU93
bmVyKiBFbGVtZW50OjpoYW5kbGVPd25lcigpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKQEAgLTIwMTUsNiArMjA5MSwxNiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jCiB9CiAjZW5kaWYKIAorc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25DcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcihFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IFN0YXRpY0N1c3RvbUFjY2Vzc29yOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSwganNOdWxsKCkpOworICAgIGF1dG8qIHJlc3Vs
dCA9IFN0YXRpY0N1c3RvbUFjY2Vzc29yOjpjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwpAQCAtMjUzNyw2
ICsyNjIzLDcgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAjaWYg
RU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlV2FzbVN0cmVh
bWluZ1BhcnNlciIsIGZ1bmN0aW9uQ3JlYXRlV2FzbVN0cmVhbWluZ1BhcnNlciwgMCk7CiAjZW5k
aWYKKyAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yIiwgZnVu
Y3Rpb25DcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvciwgMCk7CiAgICAgYWRkRnVuY3Rpb24odm0s
ICJnZXRQcml2YXRlUHJvcGVydHkiLCBmdW5jdGlvbkdldFByaXZhdGVQcm9wZXJ0eSwgMik7CiAg
ICAgYWRkRnVuY3Rpb24odm0sICJzZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSIsIGZ1bmN0aW9uU2V0
SW1wdXJlR2V0dGVyRGVsZWdhdGUsIDIpOwogCg==
</data>
<flag name="commit-queue"
          id="395151"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379589</attachid>
            <date>2019-09-25 16:35:38 -0700</date>
            <delta_ts>2019-09-25 16:40:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>56880</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTAzNjUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDUwIEBACisyMDE5LTA5LTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoaW5nIGlzIHdyb25nIGZvciBjdXN0b20gYWNjZXNz
b3JzIGFuZCBjdXN0b20gdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDE5OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwODUwMzI2Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci1tYXRlcmlhbGl6ZWQuanM6IEFkZGVkLgorICAgICAg
ICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3Q0LmdldCBjb25zdCk6CisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci10aGluLWFpci5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAodGVzdDUuZ2V0IGNvbnN0KToKKyAgICAgICAgKHRlc3Q1LmdldCBw
cm90byk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci5qczogQWRk
ZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDMuZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKHRlc3QxLmdldE11bHRpbGluZSk6CisgICAgICAgICh0ZXN0MSk6
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2N1c3RvbS12YWx1ZS5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZ2V0TXVsdGlsaW5lKToKKyAgICAgICAgKHRl
c3QxKToKKyAgICAgICAgKiBzdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0xLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0My5nZXQgY29uc3QpOgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTIuanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKHRlc3Q0LmdldCBjb25zdCk6CisgICAgICAgICogc3RyZXNzL2N1
c3RvbS1hY2Nlc3Nvci1kZWxldGUtMy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAg
ICAgICAodGVzdDUuZ2V0IGNvbnN0KToKKyAgICAgICAgKHRlc3Q1LmdldCBwcm90byk6CisgICAg
ICAgICogc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMS5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZ2V0TXVsdGlsaW5lKToKKyAgICAgICAg
KHRlc3QxKToKKyAgICAgICAgKiBzdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0y
LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QyLmZvbyk6CisgICAgICAgICh0ZXN0Mik6CisgICAg
ICAgICogc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMy5qczogQWRkZWQuCisg
ICAgICAgICh0ZXN0Ni5mb28pOgorICAgICAgICAodGVzdDYpOgorCiAyMDE5LTA5LTI0ICBBbGV4
ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2XSBDb21l
IHVwIHdpdGggYSB0ZXN0IGZvciBQcm94eS5bW0dldE93blByb3BlcnR5XV0gdGhhdCB0ZXN0cyB0
aGUgaXNFeHRlbnNpYmxlIGVycm9yIHdoZW4gdGhlICByZXN1bHQgb2YgdGhlIHRyYXAgaXMgdW5k
ZWZpbmVkCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNzb3ItbWF0
ZXJpYWxpemVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3Rv
bS1hY2Nlc3Nvci1tYXRlcmlhbGl6ZWQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLW1hdGVyaWFsaXplZC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIyIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICBmdW5j
dGlvbiBnZXQobykgeworICAgICAgICByZXR1cm4gby50ZXN0U3RhdGljQWNjZXNzb3I7CisgICAg
fQorICAgIG5vSW5saW5lKGdldCk7CisKKyAgICBjb25zdCBwcm90byA9ICR2bS5jcmVhdGVTdGF0
aWNDdXN0b21BY2Nlc3NvcigpOworICAgIGNvbnN0IG8gPSB7X19wcm90b19fOiBwcm90b307Cisg
ICAgY29uc3QgZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sICJ0ZXN0
U3RhdGljQWNjZXNzb3IiKTsKKyAgICBhc3NlcnQoISFkLmdldCk7CisgICAgby50ZXN0RmllbGQg
PSAxMzM3OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZ2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cit9Cit0ZXN0NCgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLXRoaW4tYWlyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci10aGluLWFpci5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNz
b3ItdGhpbi1haXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorZnVuY3Rpb24g
YXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKwor
ZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgZnVuY3Rpb24gZ2V0KG8pIHsKKyAgICAgICAgcmV0dXJu
IG8udGhpbkFpckN1c3RvbUdldHRlcjsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0KTsKKworICAg
IGNvbnN0IHByb3RvID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgY29u
c3QgbyA9IHtfX3Byb3RvX186IHByb3RvfTsKKyAgICBvLnRlc3RGaWVsZCA9IDEzMzc7CisKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQo
bykgPT09IDEzMzcpOworICAgIH0KKyAgICBwcm90by54eXogPSA0MjsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQobykgPT09IDEzMzcp
OworICAgIH0KK30KK3Rlc3Q1KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0
b20tYWNjZXNzb3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3Vz
dG9tLWFjY2Vzc29yLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2N1c3RvbS1hY2Nlc3Nvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOwor
fQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBnZXQobykgeworICAgICAgICBy
ZXR1cm4gby50ZXN0U3RhdGljQWNjZXNzb3I7CisgICAgfQorICAgIG5vSW5saW5lKGdldCk7CisK
KyAgICBjb25zdCBwcm90byA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpOworICAg
IGNvbnN0IG8gPSB7X19wcm90b19fOiBwcm90b307CisgICAgby50ZXN0RmllbGQgPSAxMzM3Owor
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7ICsraSkgeworICAgICAgICBhc3NlcnQo
Z2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cit9Cit0ZXN0MygpOwpJbmRleDogSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcjsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZ2V0TXVs
dGlsaW5lKG8pIHsKKyAgICAgICAgcmV0dXJuIG8ubXVsdGlsaW5lOworICAgIH0KKyAgICBub0lu
bGluZShnZXRNdWx0aWxpbmUpOworCisgICAgUmVnRXhwLmZvbyA9IDQyOworCisgICAgY29uc3Qg
byA9IHt9OworICAgIG8uX19wcm90b19fID0gUmVnRXhwOworICAgIFJlZ0V4cC5tdWx0aWxpbmUg
PSBmYWxzZTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwMDsgKytpKSB7CisgICAg
ICAgIGFzc2VydChnZXRNdWx0aWxpbmUobykgPT09IGZhbHNlKTsKKyAgICB9CisgICAgZGVsZXRl
IFJlZ0V4cC5mb287CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyArK2kpIHsKKyAg
ICAgICAgYXNzZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KK30KK3Rlc3Qx
KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS12YWx1ZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAg
ICBmdW5jdGlvbiBnZXRNdWx0aWxpbmUobykgeworICAgICAgICByZXR1cm4gby5tdWx0aWxpbmU7
CisgICAgfQorICAgIG5vSW5saW5lKGdldE11bHRpbGluZSk7CisKKyAgICBjb25zdCBvID0ge307
CisgICAgby5fX3Byb3RvX18gPSBSZWdFeHA7CisgICAgUmVnRXhwLm11bHRpbGluZSA9IGZhbHNl
OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNz
ZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KK30KKwordGVzdDEoKTsKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTEuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0xLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgewor
ICAgIGZ1bmN0aW9uIGdldChvKSB7CisgICAgICAgIHJldHVybiBvLnRlc3RTdGF0aWNBY2Nlc3Nv
cjsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0KTsKKworICAgIGNvbnN0IHByb3RvID0gJHZtLmNy
ZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgY29uc3QgbyA9IHtfX3Byb3RvX186IHBy
b3RvfTsKKyAgICBvLnRlc3RGaWVsZCA9IDEzMzc7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDUwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQobykgPT09IDEzMzcpOworICAgIH0KKwor
ICAgIHByb3RvLnh5eiA9IDQyOworCisgICAgYXNzZXJ0KGRlbGV0ZSBwcm90by50ZXN0U3RhdGlj
QWNjZXNzb3IpOworICAgIGFzc2VydChnZXQobykgPT09IHVuZGVmaW5lZCk7Cit9Cit0ZXN0Mygp
OwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMi5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworZnVuY3Rpb24gdGVzdDQo
KSB7CisgICAgZnVuY3Rpb24gZ2V0KG8pIHsKKyAgICAgICAgcmV0dXJuIG8udGVzdFN0YXRpY0Fj
Y2Vzc29yOworICAgIH0KKyAgICBub0lubGluZShnZXQpOworCisgICAgY29uc3QgcHJvdG8gPSAk
dm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAgICBjb25zdCBvID0ge19fcHJvdG9f
XzogcHJvdG99OworICAgIGNvbnN0IGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHByb3RvLCAidGVzdFN0YXRpY0FjY2Vzc29yIik7CisgICAgYXNzZXJ0KCEhZC5nZXQpOworICAg
IG8udGVzdEZpZWxkID0gMTMzNzsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kp
IHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorCisgICAgcHJvdG8u
eHl6ID0gNDI7CisKKyAgICBhc3NlcnQoZGVsZXRlIHByb3RvLnRlc3RTdGF0aWNBY2Nlc3Nvcik7
CisgICAgYXNzZXJ0KGdldChvKSA9PT0gdW5kZWZpbmVkKTsKK30KK3Rlc3Q0KCk7CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0zLmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI0IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBm
dW5jdGlvbiBnZXQobykgeworICAgICAgICByZXR1cm4gby50aGluQWlyQ3VzdG9tR2V0dGVyOwor
ICAgIH0KKyAgICBub0lubGluZShnZXQpOworCisgICAgY29uc3QgcHJvdG8gPSAkdm0uY3JlYXRl
U3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAgICBjb25zdCBvID0ge19fcHJvdG9fXzogcHJvdG99
OworICAgIG8udGVzdEZpZWxkID0gMTMzNzsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorICAgIHBy
b3RvLnh5eiA9IDQyOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kpIHsKKyAgICAg
ICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorfQordGVzdDUoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTEuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0
eS0xLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGFzc2VydChi
KSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9u
IHRlc3QxKCkgeworICAgIGZ1bmN0aW9uIGdldE11bHRpbGluZShvKSB7CisgICAgICAgIHJldHVy
biBvLm11bHRpbGluZTsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0TXVsdGlsaW5lKTsKKworICAg
IGNvbnN0IG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IFJlZ0V4cDsKKyAgICBSZWdFeHAubXVs
dGlsaW5lID0gZmFsc2U7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydChnZXRNdWx0aWxpbmUobykgPT09IGZhbHNlKTsKKyAgICB9CisgICAgZGVs
ZXRlIFJlZ0V4cC5pbnB1dDsKKyAgICBkZWxldGUgUmVnRXhwLm11bHRpbGluZTsKKyAgICBhc3Nl
cnQoZ2V0TXVsdGlsaW5lKG8pID09PSB1bmRlZmluZWQpOworfQordGVzdDEoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTIuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0
eS0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9uIHRlc3QyKCkg
eworICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgY29uc3QgbyA9IHt9OworICAgICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgbGV0IHggPSBvLm11bHRp
bGluZTsKKyAgICAgICAgICAgIG8uX19wcm90b19fID0gUmVnRXhwOworICAgICAgICB9CisgICAg
ICAgIGRlbGV0ZSBSZWdFeHAuaW5wdXQ7CisgICAgfQorCisgICAgZm9vKCk7CisgICAgZm9vKCk7
Cit9Cit0ZXN0MigpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1w
cm9wZXJ0eS0zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1k
ZWxldGUtcHJvcGVydHktMy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0
b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NCBAQAorZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICBj
b25zdCBvID0ge307CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAg
ICAgICAgICBvLmxhc3RNYXRjaDsKKyAgICAgICAgICAgIG8uX19wcm90b19fID0gUmVnRXhwOwor
ICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBSZWdFeHAuaW5wdXQ7CisgICAgfQorCisgICAgZm9v
KCk7CisgICAgZm9vKCk7Cit9Cit0ZXN0NigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTAwNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTktMDktMjUgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIGNhY2hpbmcgaXMgd3JvbmcgZm9y
IGN1c3RvbSBhY2Nlc3NvcnMgYW5kIGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk5NAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTA4NTAzMjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgd2FzIGFuIG92ZXJzaWdodCBpbiBvdXIgaW5saW5lIGNhY2hpbmcgY29kZSBm
b3IgY3VzdG9tIGFjY2Vzc29ycyBhbmQKKyAgICAgICAgY3VzdG9tIHZhbHVlcy4gV2UgdXNlZCB0
byBhc3N1bWUgdGhhdCBpZiBhbiBvYmplY3QgTyBoYWQgYSBjdXN0b20gZnVuY3Rpb24gZm9yCisg
ICAgICAgIHByb3BlcnR5IFAsIHRoZW4gTyB3aWxsIGZvcmV2ZXIgcmVzcG9uZCB0byB0aGUgc2Ft
ZSBjdXN0b20gZnVuY3Rpb24gZm9yCisgICAgICAgIHByb3BlcnR5IFAuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFzc3VtcHRpb24gd2FzIHZlcnkgd3JvbmcuIFRoZXNlIGN1c3RvbSBhY2Nlc3Nv
cnMvdmFsdWVzIG1pZ2h0IGJlCisgICAgICAgIHByb3BlcnRpZXMgaW4gSlMgd2hpY2ggYXJlIGNv
bmZpZ3VyYWJsZSwgc28gdGhleSBjYW4gYmUgcmV3cml0dGVuIHRvIGJlCisgICAgICAgIG90aGVy
IHByb3BlcnRpZXMuIE91ciBpbmxpbmUgY2FjaGluZyBjb2RlIHdvdWxkIGJlIHdyb25nIGluIHRo
ZSBzY2VuYXJpb3MKKyAgICAgICAgd2hlcmUgdGhlc2UgcHJvcGVydHkgZGVzY3JpcHRvcnMgZ290
IHJlZGVmaW5lZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhh
dCB3ZSBub3cgcHJvcGVybHkgd2F0Y2hwb2ludCBmb3IgY3VzdG9tIGZ1bmN0aW9ucworICAgICAg
ICBiZWluZyBjaGFuZ2VkLiBJZiB0aGUgY3VzdG9tIGFjY2Vzc29yIGhhcyBiZWVuIG1hdGVyaWFs
aXplZCwgd2UgcGxhY2UgYW4KKyAgICAgICAgRXF1aXZhbGVuY2Ugd2F0Y2hwb2ludCBvbiB0aGUg
Y3VzdG9tIGFjY2Vzc29yLiBUaGlzIHBhdGNoIGFsc28gdGVhY2hlcworICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyBob3cgdG8gd2F0Y2hwb2ludCBvbiBwcm9wZXJ0eSB2YWx1ZSBlcXVpdmFsZW5j
ZS4gQmVmb3JlLAorICAgICAgICB3ZSBqdXN0IHdhdGNocG9pbnRlZCBvbiBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28gYWRkcyBhIG5ldyBw
cm9wZXJ0eSBjb25kaXRpb24ga2luZCBmb3Igd2hlbiB0aGUgY3VzdG9tIGZ1bmN0aW9uCisgICAg
ICAgIGV4aXN0cyBpbnNpZGUgdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZS4gVGhpcyBjYXNlIGlz
IHJlYWxseSBlYXN5IHRvIHRlc3QgZm9yCisgICAgICAgIGJlY2F1c2Ugd2UganVzdCBuZWVkIHRv
IHNlZSBpZiB0aGUgc3RydWN0dXJlIHN0aWxsIGhhcyBzdGF0aWMgcHJvcGVydGllcyBhbmQKKyAg
ICAgICAgdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBoYXMgdGhlIGVudHJ5IGZvciBhIHBhcnRp
Y3VsYXIgcHJvcGVydHkuIFRoaXMKKyAgICAgICAgcHJvcGVydHkgY29uZGl0aW9uIGtpbmQganVz
dCBuZWVkcyB0byB3YXRjaCBmb3Igc3RydWN0dXJlIHRyYW5zaXRpb25zIGJlY2F1c2UKKyAgICAg
ICAgYW4gZW50cnkgaW4gdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBjYW4ndCBiZSBtdXRhdGVk
LgorCisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCBjb25z
dCk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVu
Y2UpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNl
Q29uZGl0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OnNsb3RCYXNlQ29uZGl0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20pOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seVBy
b3RvQWNjZXNzQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6aW5zdGFsbFdhdGNocG9pbnQpOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6Y29tbWl0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjphZGRXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFs
aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVX
aGVuVmFsaWQgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9u
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVu
Y2VBbmRJbnN0YWxsV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpoYW5k
bGVGaXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgor
ICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5IGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kUHJvcGVydHlIYXNoRW50cnkgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5j
cHA6CisgICAgICAgIChKU0M6OnRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcik6CisgICAgICAgIChK
U0M6OnRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcik6CisgICAgICAgIChKU0M6OlN0YXRpY0N1c3Rv
bUFjY2Vzc29yOjpTdGF0aWNDdXN0b21BY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlN0YXRpY0N1
c3RvbUFjY2Vzc29yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdGF0aWNDdXN0
b21BY2Nlc3Nvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RhdGljQ3VzdG9tQWNjZXNzb3I6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlU3RhdGlj
Q3VzdG9tQWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlv
bik6CisKIDIwMTktMDktMTggIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgVE9DVE9VIGJ1ZyBpbiBoYXZpbmdBQmFkVGltZSByZWxhdGVkIGFzc2VydGlvbiBpbiBE
RkdTcGVjdWxhdGl2ZUpJVApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BY2Nlc3NDYXNlLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgsNyArMjI4
LDE2IEBAIGJvb2wgQWNjZXNzQ2FzZTo6ZG9lc0NhbGxzKFZlY3RvcjxKU0NlbGwKIAogYm9vbCBB
Y2Nlc3NDYXNlOjpjb3VsZFN0aWxsU3VjY2VlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0LnN0cnVjdHVyZXNFbnN1cmVWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlX
YXRjaHBvaW50KCk7CisgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogbV9jb25kaXRpb25TZXQpIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbi5jb25kaXRp
b24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKSB7CisgICAgICAg
ICAgICBpZiAoIWNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQ6OkVuc3VyZVdhdGNo
YWJpbGl0eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQWNj
ZXNzQ2FzZTo6Y2FuUmVwbGFjZShjb25zdCBBY2Nlc3NDYXNlJiBvdGhlcikgY29uc3QKQEAgLTY0
OCwxOSArNjU3LDE4IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUK
ICAgICBHUFJSZWcgdGhpc0dQUiA9IHN0YXRlLnRoaXNHUFIgIT0gSW52YWxpZEdQUlJlZyA/IHN0
YXRlLnRoaXNHUFIgOiBiYXNlR1BSOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc3RhdGUuc2Ny
YXRjaEdQUjsKIAotICAgIEFTU0VSVChtX2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFs
aWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKTsKLQogICAgIGZvciAoY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX3BvbHlQcm90b0FjY2Vzc0NoYWluKTsKIAotICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJl
KHZtKTsKLQotICAgICAgICBpZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQoKSkgewotICAgICAgICAgICAgc3RydWN0dXJlLT5hZGRUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdGF0ZS5hZGRXYXRjaHBvaW50KGNvbmRpdGlvbikpOworICAgICAgICBp
ZiAoY29uZGl0aW9uLmlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
UHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydDo6RW5zdXJlV2F0Y2hhYmlsaXR5
KSkgeworICAgICAgICAgICAgc3RhdGUuaW5zdGFsbFdhdGNocG9pbnQoY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjb25kaXRpb24u
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
c3RydWN0dXJlKSkgeworICAgICAgICAvLyBGb3Igbm93LCB3ZSBvbmx5IGFsbG93IGVxdWl2YWxl
bmNlIHdoZW4gaXQncyB3YXRjaGFibGUuCisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbmRpdGlv
bi5jb25kaXRpb24oKS5raW5kKCkgIT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
KworICAgICAgICBpZiAoIWNvbmRpdGlvbi5zdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpKSB7CiAgICAgICAgICAgICAvLyBUaGUgcmVhc29u
IHdoeSB0aGlzIGNhbm5vdCBoYXBwZW4gaXMgdGhhdCB3ZSByZXF1aXJlIHRoYXQgUG9seW1vcnBo
aWNBY2Nlc3MgY2FsbHMKICAgICAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKCkgb25s
eSBhZnRlciBpdCBoYXMgdmVyaWZpZWQgdGhhdAogICAgICAgICAgICAgLy8gQWNjZXNzQ2FzZTo6
Y291bGRTdGlsbFN1Y2NlZWQoKSByZXR1cm5lZCB0cnVlLgpAQCAtNjcwLDYgKzY3OCw3IEBAIHZv
aWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKEFjY2Vzc0dlbmUKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIFdlIHdpbGwgZW1pdCBjb2RlIHRoYXQgaGFzIGEgd2VhayByZWZlcmVuY2UgdGhhdCBp
c24ndCBvdGhlcndpc2UgbGlzdGVkIGFueXdoZXJlLgorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGNvbmRpdGlvbi5vYmplY3QoKS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgc3RhdGUu
d2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSkpOwogCiAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0
aW9uLmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTgg
KzQ2LDEyIEBAIHZvaWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmR1bXAoUHJpbnQKICAgICBk
dW1wSW5Db250ZXh0KG91dCwgbnVsbHB0cik7CiB9CiAKLWJvb2wgT2JqZWN0UHJvcGVydHlDb25k
aXRpb246OnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRj
aHBvaW50KAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAotewotICAgIHJldHVybiBt
X2NvbmRpdGlvbi5pc1N0aWxsVmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChz
dHJ1Y3R1cmUpOwotfQotCiBib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVF
bnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0CiB7
CiAgICAgaWYgKCEqdGhpcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIHJldHVy
biBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2lu
dChtX29iamVjdC0+c3RydWN0dXJlKCkpOworICAgIHJldHVybiBtX2NvbmRpdGlvbi5pc1N0aWxs
VmFsaWRBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChtX29iamVjdC0+c3RydWN0dXJl
KCksIG51bGxwdHIpOwogfQogCiBib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0
eVJlcXVpcmVzSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKSBj
b25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5
Q29uZGl0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjEsNiArMTIxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKG93bmVyKTsKICAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJh
cnJpZXIob2JqZWN0LCB1aWQsIHZhbHVlKTsKICAgICB9CisKKyAgICBzdGF0aWMgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gY3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSgKKyAgICAgICAgVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBKU09iamVjdCogb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQorICAgIHsKKyAgICAgICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9vYmplY3QgPSBvYmplY3Q7CisgICAgICAgIHJlc3VsdC5tX2NvbmRpdGlvbiA9
IFByb3BlcnR5Q29uZGl0aW9uOjpjdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlKHVpZCk7CisgICAg
ICAgIGlmIChvd25lcikKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgc3RhdGljIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uIGhhc1Byb3RvdHlwZVdpdGhvdXRCYXJyaWVyKEpTT2JqZWN0KiBvYmpl
Y3QsIEpTT2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewpAQCAtMTkzLDcgKzIwNCw2IEBAIHB1Ymxp
YzoKICAgICAKICAgICAvLyBDaGVja3MgaWYgdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBjbGFpbXMg
dGhhdCB0aGUgcHJvcGVydHkgd29uJ3QgYmUgaW50ZXJjZXB0ZWQuIFZhbGlkaXR5CiAgICAgLy8g
ZG9lcyBub3QgcmVxdWlyZSB3YXRjaHBvaW50cyBvbiB0aGUgb2JqZWN0LgotICAgIGJvb2wgc3Ry
dWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoU3Ry
dWN0dXJlKikgY29uc3Q7CiAgICAgYm9vbCBzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWlu
Z0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpIGNvbnN0OwogICAgIAogICAgIC8vIFJldHVybnMg
dHJ1ZSBpZiB3ZSBuZWVkIGFuIGltcHVyZSBwcm9wZXJ0eSB3YXRjaHBvaW50IHRvIGVuc3VyZSB2
YWxpZGl0eSBldmVuIGlmCkBAIC0yMjcsNyArMjM3LDcgQEAgcHVibGljOgogICAgICAgICBQcm9w
ZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVydHlDb25kaXRpb246Ok1h
a2VOb0NoYW5nZXMpIGNvbnN0OwogCiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwg
dmFsaWQgYW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRp
b24KLSAgICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAgLy8gd2F0Y2hwb2lu
dCBvbiB0aGUgc3RydWN0dXJlLCBhbmQgYSB2YWx1ZSBjaGFuZ2Ugd2F0Y2hwb2ludCBpZiB3ZSdy
ZSBFcXVpdmFsZW5jZS4KICAgICBib29sIGlzV2F0Y2hhYmxlKAogICAgICAgICBTdHJ1Y3R1cmUq
LAogICAgICAgICBQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0ID0gUHJvcGVy
dHlDb25kaXRpb246Ok1ha2VOb0NoYW5nZXMpIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Miw3ICs2MiwxMCBAQCB1bnNpZ25lZCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldDo6bnVtCiAK
IGJvb2wgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNlQ29uZGl0aW9u
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3Bl
cnR5Q29uZGl0aW9uOjpQcmVzZW5jZSkgPT0gMSkgIT0gKG51bWJlck9mQ29uZGl0aW9uc1dpdGhL
aW5kKFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgPT0gMSk7CisgICAgdW5zaWduZWQg
dG90YWwgPSBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJl
c2VuY2UpCisgICAgICAgICsgbnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25k
aXRpb246OkVxdWl2YWxlbmNlKQorICAgICAgICArIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5k
KFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlKTsKKyAgICByZXR1
cm4gdG90YWwgPT0gMTsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKQEAgLTcxLDcgKzc0LDgg
QEAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDbwogICAgIHVuc2lnbmVk
IG51bUZvdW5kID0gMDsKICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBj
b25kaXRpb24gOiAqdGhpcykgewogICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9w
ZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UKLSAgICAgICAgICAgIHx8IGNvbmRpdGlvbi5raW5kKCkg
PT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKSB7CisgICAgICAgICAgICB8fCBjb25k
aXRpb24ua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZQorICAgICAgICAg
ICAgfHwgY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rp
b25FcXVpdmFsZW5jZSkgewogICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOwogICAgICAg
ICAgICAgbnVtRm91bmQrKzsKICAgICAgICAgfQpAQCAtMjI4LDYgKzIzMiwxMyBAQCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvCiAgICAgICAgIHJlc3VsdCA9IE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uOjplcXVpdmFsZW5jZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkLCB2
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9u
OjpDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOiB7CisgICAgICAgIGF1dG8gZW50cnkgPSBvYmpl
Y3QtPmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSh2bSwgdWlkKTsKKyAgICAgICAgaWYgKCFlbnRyeSkK
KyAgICAgICAgICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICBy
ZXN1bHQgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5j
ZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOwpAQCAtMzc4LDIwICszODksNDYgQEAgT2Jq
ZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaQogCiBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3Rv
bSgKICAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRl
cykKIHsKLSAgICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAorICAgIGF1dG8gcmVzdWx0ID0g
Z2VuZXJhdGVDb25kaXRpb25zKAogICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCiAgICAgICAgIFsmXSAoVmVjdG9yPE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVjdCkgLT4gYm9v
bCB7Ci0gICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3Vs
dCA9Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBvYmplY3Qs
IHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAgYXV0byBraW5k
ID0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgICAgICBpZiAob2JqZWN0ID09
IHByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gb2Jq
ZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCB1aWQpOworICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3ZSByZWlmeSBj
dXN0b20gYWNjZXNzb3JzLCB3ZSB3cmFwIHRoZW0gaW4gYSBKU0Z1bmN0aW9uIHRoYXQgd2Ugc2hv
dmUKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIGEgR2V0dGVyU2V0dGVyLiBTbywgb25j
ZSB3ZSd2ZSByZWlmaWVkIGEgY3VzdG9tIGFjY2Vzc29yLCB3ZSB3aWxsCisgICAgICAgICAgICAg
ICAgICAgIC8vIG5vIGxvbmdlciBzZWUgaXQgYXMgYSAiY3VzdG9tIiBhY2Nlc3Nvci92YWx1ZS4g
SGVuY2UsIGlmIG91ciBwcm9wZXJ0eSBhY2Nlc3MgYWN0dWFsbHkKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbm90aWNlcyBhIGN1c3RvbSwgaXQgbXVzdCBiZSBhIEN1c3RvbUdldHRlclNldHRlclR5
cGUgY2VsbCBvciBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIHN0YXRp
YyBwcm9wZXJ0eSB0YWJsZS4gQ3VzdG9tIHZhbHVlcyBnZXQgcmVpZmllZCBpbnRvIEN1c3RvbUdl
dHRlclNldHRlcnMuCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvYmplY3Qt
PmdldERpcmVjdChvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHZh
bHVlLCB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEN1c3RvbUdl
dHRlclNldHRlclR5cGUpOworICAgICAgICAgICAgICAgICAgICBraW5kID0gUHJvcGVydHlDb25k
aXRpb246OkVxdWl2YWxlbmNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJl
LT5maW5kUHJvcGVydHlIYXNoRW50cnkodWlkKSkKKyAgICAgICAgICAgICAgICAgICAga2luZCA9
IFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0
ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbid0IGNoYW5nZSwgc28gd2UgY2Fu
IGJsaW5kbHkgY2FjaGUgaXQuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMg
d2UgbWF0ZXJpYWxpemVkIGEgY3VzdG9tIG91dCBvZiB0aGluIGFpciBhbmQgaXQncyBub3QgRG9u
dERlbGV0ZSAoaS5lLCBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gcmVkZWZpbmVk
KS4gVGhpcyBpcyBjdXJpb3VzLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGNyYXNoIGhlcmUu
IFdlIGNvdWxkIGJsaW5kbHkgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGZ1bmN0
aW9uLiBPciB3ZSBjb3VsZCBibGluZGx5IG5vdCBjYWNoZSBpdC4gSG93ZXZlciwgd2UgZG9uJ3Qg
YWN0dWFsbHkgZG8gdGhpcyBpbiBXZWJLaXQKKyAgICAgICAgICAgICAgICAgICAgLy8gcmlnaHQg
bm93LCBzbyBpdCdzIHJlYXNvbmFibGUgdG8gZGVjaWRlIHdoYXQgdG8gZG8gbGF0ZXIgKG9yIHRv
IHdhcm4gcGVvcGxlIG9mIGZvcmdldHRpbmcgRG9uZURlbGV0ZS4pCisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0gZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVyLCBv
YmplY3QsIHVpZCwga2luZCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVuZChyZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0pOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25z
Rm9ySW5zdGFuY2VPZigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAyNTAw
NTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDcgKzE2OCw3IEBAIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KTsKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3Rv
dHlwZVByb3BlcnR5SGl0Q3VzdG9tKAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMpOwogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0ZUNv
bmRpdGlvbnNGb3JJbnN0YW5jZU9mKAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0YXRl
KiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBib29sIHNo
b3VsZEhpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3Rv
QWNjZXNzQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDEyICs1MSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9BY2Nl
c3NDaGFpbj4gUG8KICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbk51bWJlciA9IDA7IHRydWU7
ICsraXRlcmF0aW9uTnVtYmVyKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3Vy
cmVudC0+c3RydWN0dXJlKHZtKTsKIAotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlB
Y2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogICAgICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQpAQCAtNjUsNiArNTksMTIgQEAgc3RkOjp1
bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBQbwogICAgICAgICAgICAgc3RydWN0dXJl
LT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNPYmplY3QoY3VycmVudCkpOwogICAg
ICAgICB9CiAKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNo
ZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgICAg
IC8vIFRvIHNhdmUgbWVtb3J5LCB3ZSBkb24ndCBpbmNsdWRlIHRoZSBiYXNlIGluIHRoZSBjaGFp
bi4gV2UgbGV0CiAgICAgICAgIC8vIEFjY2Vzc0Nhc2UgcHJvdmlkZSB0aGUgYmFzZSB0byB1cyBh
cyBuZWVkZWQuCiAgICAgICAgIGlmIChpdGVyYXRpb25OdW1iZXIpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJl
dmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9y
cGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAgdm9pZCBBY2Nl
c3NHZW5lcmF0aW9uUmVzdWx0OjpkdW1wKFByaW50UwogICAgICAgICBvdXQucHJpbnQoIjoiLCBt
X2NvZGUpOwogfQogCi1XYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3ZvaWQgQWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjppbnN0YWxsV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogewotICAgIHJldHVybiBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgV2F0Y2hw
b2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0Y2hw
b2ludCgKICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLCBj
b25kaXRpb24pOwogfQogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBQb2x5bW9ycGhpY0FjY2Vz
czo6Y29tbWl0KAogICAgIGZvciAoV2F0Y2hwb2ludFNldCogc2V0IDogYWNjZXNzQ2FzZS5jb21t
aXQodm0sIGlkZW50KSkgewogICAgICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0KICAgICAg
ICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5k
QWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2NrLCAm
c3R1YkluZm8sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpOworICAgICAgICAgICAgICAgIHdh
dGNocG9pbnRzLCBjb2RlQmxvY2ssICZzdHViSW5mbyk7CiAgICAgICAgIAogICAgICAgICBzZXQt
PmFkZCh3YXRjaHBvaW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjUwMDU2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0YXRl
IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiB3
YXRjaHBvaW50czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZlcmVu
Y2VzOwogCi0gICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKTsKKyAgICB2b2lkIGluc3Rh
bGxXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CiAKICAgICB2b2lk
IHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgdm9pZCBzdWNjZWVkKCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJl
dmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAgdm9pZCBQcm9w
ZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcgogICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAg
ICAgICAgIG91dC5wcmludChtX2hlYWRlci50eXBlKCksICIgb2YgIiwgbV9oZWFkZXIucG9pbnRl
cigpLCAiIHdpdGggIiwgaW5Db250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29udGV4dCkpOwogICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgorICAgICAg
ICBvdXQucHJpbnQobV9oZWFkZXIudHlwZSgpLCAiIG9mICIsIG1faGVhZGVyLnBvaW50ZXIoKSk7
CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhhc1Byb3RvdHlwZToKICAgICAgICAgb3V0LnBy
aW50KG1faGVhZGVyLnR5cGUoKSwgIiB3aXRoIHByb3RvdHlwZSAiLCBpbkNvbnRleHQoSlNWYWx1
ZShwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODYsNiArODks
NyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1CiAgICAgY2FzZSBB
YnNlbmNlOgogICAgIGNhc2UgQWJzZW5jZU9mU2V0RWZmZWN0OgogICAgIGNhc2UgRXF1aXZhbGVu
Y2U6CisgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgogICAgICAgICBpZiAoIXN0
cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CiAgICAgICAgICAgICBp
ZiAoUHJvcGVydHlDb25kaXRpb25JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgcHJvcGVydHkgYWNjZXNzZXMgYXJlIG5vdCBjYWNoZWFi
bGUuXG4iKTsKQEAgLTI0OCw3ICsyNTIsMTMgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNT
dGlsbFZhbGlkQXNzdQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9IH0KKyAgICB9IAorICAgIGNhc2UgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZTogewor
ICAgICAgICBpZiAoc3RydWN0dXJlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gISFzdHJ1Y3R1cmUtPmZpbmRQcm9w
ZXJ0eUhhc2hFbnRyeSh1aWQoKSk7CisgICAgfQorICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2Myw2ICsyNzMsNyBA
QCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzCiAgICAgY2FzZSBQcmVz
ZW5jZToKICAgICBjYXNlIEFic2VuY2U6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBjYXNl
IEN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUtPm5l
ZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKICAgICBjYXNlIEFic2VuY2VPZlNldEVmZmVj
dDoKICAgICBjYXNlIEhhc1Byb3RvdHlwZToKQEAgLTI4OCw2ICsyOTksNyBAQCBib29sIFByb3Bl
cnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RyCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
UHJlc2VuY2U6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBjYXNlIEN1c3RvbUZ1bmN0aW9u
RXF1aXZhbGVuY2U6CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3duUHJv
cGVydHlTbG90SXNJbXB1cmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
YnJlYWs7CkBAIC0zMjksNiArMzQxLDIxIEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzV2F0
Y2hhYmxlV2hlblYKICAgICAgICAgCiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2Ug
Q3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZTogeworICAgICAgICAvLyBXZSBqdXN0IHVzZSB0aGUg
c3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBmb3IgdGhpcy4gQSBzdHJ1Y3R1cmUgUyBz
dGFydHMKKyAgICAgICAgLy8gb2ZmIHdpdGggYSBwcm9wZXJ0eSBQIGluIHRoZSBzdGF0aWMgcHJv
cGVydHkgaGFzaCB0YWJsZS4gSWYgUyB0cmFuc2l0aW9ucyB0bworICAgICAgICAvLyBTJywgZWl0
aGVyIFAgcmVtYWlucyBpbiB0aGUgc3RhdGljIHByb3BlcnR5IHRhYmxlIG9yIG5vdC4gSWYgbm90
LCB0aGVuIHdlCisgICAgICAgIC8vIGFyZSBubyBsb25nZXIgdmFsaWQuIFNvIHRoZSBhYm92ZSBj
aGVjayBvZiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZAorICAgICAg
ICAvLyBpcyBzdWZmaWNpZW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBtYWtl
IHRoaXMgc21hcnRlciBpbiB0aGUgZnV0dXJlLCBzaW5jZSB3ZSBzb21ldGltZXMgcmVpZnkgc3Rh
dGljIHByb3BlcnRpZXMuCisgICAgICAgIC8vIFdlIGNvdWxkIG1ha2UgdGhpcyBhZGFwdCB0byBs
b29raW5nIGF0IHRoZSBvYmplY3QncyBzdG9yYWdlIGZvciBzdWNoIHJlaWZpZWQgY3VzdG9tCisg
ICAgICAgIC8vIGZ1bmN0aW9ucywgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LiBXZSBq
dXN0IGFsbG93IHRoaXMgcHJvcGVydHkgY29uZGl0aW9uIHRvCisgICAgICAgIC8vIGludmFsaWRh
dGUgYW5kIGNyZWF0ZSBhbiBFcXVpdmFsZW5jZSB3YXRjaHBvaW50IGZvciB0aGUgbWF0ZXJpYWxp
emVkIHByb3BlcnR5IHNvbWV0aW1lCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBA
IC00MTcsNiArNDQ0LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
QwogICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CiAgICAgICAg
IG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZToKKyAgICAgICAg
b3V0LnByaW50KCJDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVybjsK
ICAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246Okhhc1Byb3RvdHlwZToKICAgICAgICAg
b3V0LnByaW50KCJIYXNQcm90b3R5cGUiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJKHJl
dmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0
eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQWJzZW5jZSwKICAgICAgICAgQWJzZW5jZU9mU2V0RWZmZWN0LAogICAgICAgICBFcXVp
dmFsZW5jZSwgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlzIHdpbGwgYmUgYSBwYWly
IG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb25zLCB3ZSB3
aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUgbmV3IHN0cnVjdHVyZS4K
KyAgICAgICAgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSwgLy8gQ3VzdG9tIHZhbHVlIG9yIGFj
Y2Vzc29yLgogICAgICAgICBIYXNQcm90b3R5cGUKICAgICB9OwogCkBAIC0xMjIsNiArMTIzLDEz
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsKICAg
ICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CiAgICAg
fQorCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVu
Y2UoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVyID0gSGVhZGVyKHVpZCwgQ3VzdG9t
RnVuY3Rpb25FcXVpdmFsZW5jZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAg
IAogICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFycmll
cihKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw2ICsyMDEsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAgICAgICAgICAgICByZXN1bHQgXj0gRW5jb2Rl
ZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFsdWUpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZToKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMjEz
LDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB1LnByb3RvdHlwZS5wcm90
b3R5cGUgPT0gb3RoZXIudS5wcm90b3R5cGUucHJvdG90eXBlOwogICAgICAgICBjYXNlIEVxdWl2
YWxlbmNlOgogICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3RoZXIu
dS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxl
bmNlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc5LDEy
ICsyOTEsMTIgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZh
bGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9u
CiAgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBpbXB1
cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KICAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQoCi0gICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNl
ID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7Cisg
ICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBN
YWtlTm9DaGFuZ2VzKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQncyBz
dGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEgdHJh
bnNpdGlvbgogICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBib29sIGlz
V2F0Y2hhYmxlKAotICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxwdHIs
IFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgICAgICBTdHJ1
Y3R1cmUqLCBKU09iamVjdCosIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNv
bnN0OwogICAgIAogICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2bSwgY29uc3QgRmlyZURldGFp
bCYpCit2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBv
aW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikKIHsKICAgICBpZiAo
IW1faG9sZGVyLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYyLDEyICs2MiwxNSBA
QCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluCiAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5pc0xpdmUoKTsKIH0KIAotU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCitXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1Yklu
Zm86Ok5vZGUmIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2ludChj
b25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewotICAgIHJldHVybiBtX3dhdGNo
cG9pbnRzLmFkZChrZXksICp0aGlzKTsKKyAgICBpZiAoIWtleSB8fCBrZXkuY29uZGl0aW9uKCku
a2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkKKyAgICAgICAgcmV0dXJu
ICptX3dhdGNocG9pbnRzLmFkZChXVEY6OmluX3BsYWNlPFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CisgICAgQVNTRVJUKGtl
eS5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsK
KyAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8QWRhcHRpdmVWYWx1
ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKIH0KIAotU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAordm9pZCBXYXRjaHBvaW50c09u
U3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50KAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xk
ZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2NrLAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKQEAgLTc4LDcgKzgx
LDQxIEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAgICAg
QVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAgIAot
ICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKKyAgICBBU1NFUlQoISFr
ZXkpOworICAgIGF1dG8mIHdhdGNocG9pbnRWYXJpYW50ID0gaG9sZGVyUmVmLT5hZGRXYXRjaHBv
aW50KGtleSk7CisgICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2
YWxlbmNlKSB7CisgICAgICAgIGF1dG8mIGFkYXB0aXZlV2F0Y2hwb2ludCA9IFdURjo6Z2V0PEFk
YXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Pih3YXRjaHBvaW50VmFy
aWFudCk7CisgICAgICAgIGFkYXB0aXZlV2F0Y2hwb2ludC5pbnN0YWxsKGNvZGVCbG9jay0+dm0o
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQgPSAmV1RGOjpnZXQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50KTsKKyAgICAgICAga2V5Lm9iamVjdCgpLT5z
dHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQpOworICAgIH0KK30KKworV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVy
ZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENvZGVC
bG9jayogY29kZUJsb2NrLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sKKyAg
ICBpZiAoIWhvbGRlclJlZikKKyAgICAgICAgaG9sZGVyUmVmID0gbWFrZVVuaXF1ZTxXYXRjaHBv
aW50c09uU3RydWN0dXJlU3R1YkluZm8+KGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQoaG9sZGVyUmVmLT5tX2NvZGVCbG9jayA9PSBjb2RlQmxvY2spOwor
ICAgICAgICBBU1NFUlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuICZXVEY6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uKCkpKTsKK30KKwordm9pZCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYsIGNvbnN0IEZpcmVEZXRhaWwmKQor
eworICAgIGlmICghbV9ob2xkZXItPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNldCBy
ZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRlbGV0
aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAorICAg
IC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2FpbnN0
IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2hvbGRl
ci0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgbV9ob2xkZXItPnN0dWJJbmZvKCktPnJlc2V0
KG1faG9sZGVyLT5jb2RlQmxvY2soKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgotI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKLQogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJBZGFwdGl2ZUluZmVycmVkUHJv
cGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgU3RydWN0dXJlU3R1
YkluZm87CiBjbGFzcyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm87CiAKLWNsYXNzIFN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2ludCB7
Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dCk7CitjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAgOiBXYXRjaHBvaW50
KFdhdGNocG9pbnQ6OlR5cGU6OlN0cnVjdHVyZVN0dWJDbGVhcmluZykKKyAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRl
cikKKyAgICAgICAgOiBXYXRjaHBvaW50KFdhdGNocG9pbnQ6OlR5cGU6OlN0cnVjdHVyZVRyYW5z
aXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmcpCiAgICAgICAgICwgbV9ob2xkZXIoJmhvbGRlcikK
ICAgICAgICAgLCBtX2tleShrZXkpCiAgICAgewpAQCAtNTksNiArNTksMjYgQEAgcHJpdmF0ZToK
ICAgICBKU0NfV0FUQ0hQT0lOVF9GSUVMRChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgbV9rZXkp
OwogfTsKIAorY2xhc3MgQWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
QmFzZSB7CisgICAgdXNpbmcgQmFzZSA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludEJhc2U7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVWYWx1ZVN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCisgICAgdm9pZCBoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRl
OworCitwdWJsaWM6CisgICAgQWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgV2F0Y2hwb2ludHNPblN0
cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCisgICAgICAgIDogQmFzZShrZXkpCisgICAgICAgICwg
bV9ob2xkZXIoJmhvbGRlcikKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleS5jb25k
aXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKKyAgICB9
CisKKworcHJpdmF0ZToKKyAgICBQYWNrZWRQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvPiBtX2hvbGRlcjsKK307CisKIGNsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
byB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJ
bmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDExICs4OSwxNiBAQCBw
dWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkp
OworICAgIHVzaW5nIE5vZGUgPSBWYXJpYW50PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVT
dHViQ2xlYXJpbmdXYXRjaHBvaW50LCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludD47CisKKyAgICBOb2RlJiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgIHN0YXRp
YyB2b2lkIGVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50KAogICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLAog
ICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIGNvbnN0IE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uJiBrZXkpOworICAgIHN0YXRpYyBXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVu
Y2VBbmRBZGRXYXRjaHBvaW50KAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLAorICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1
Y3R1cmVTdHViSW5mbyopOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8o
KSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkBAIC04Myw3ICsxMDgsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgU3RydWN0dXJlU3R1
YkluZm8qIG1fc3R1YkluZm87Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQ+IG1fd2F0Y2hwb2ludHM7CisgICAgQmFnPFdURjo6VmFyaWFudDxTdHJ1Y3R1cmVUcmFuc2l0
aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCwgQWRhcHRpdmVWYWx1ZVN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+PiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBjbGFzcyBX
YXRjaHBvaW50U2V0OwogI2lmIEVOQUJMRShKSVQpCiAjZGVmaW5lIEpTQ19XQVRDSFBPSU5UX1RZ
UEVTX1dJVEhPVVRfREZHKG1hY3JvKSBcCiAgICAgSlNDX1dBVENIUE9JTlRfVFlQRVNfV0lUSE9V
VF9KSVQobWFjcm8pIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVTdHViQ2xlYXJpbmcsIFN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpCisgICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlvblN0
cnVjdHVyZVN0dWJDbGVhcmluZywgU3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgSlNDX1dBVENI
UE9JTlRfVFlQRVMobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBJbmxpbmVD
YWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVD
b25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90
QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1w
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwo
KSwgc2xvdC5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCkBAIC01NDks
NyArNTQ5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3Ry
dWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwg
aWRlbnQuaW1wbCgpLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9u
U2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVw
T25DYWNoZTsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTIg
KzE4OCwxNyBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJh
eVN0b3JhZ2VUeXBlCiAKIHN0cnVjdCBDbGFzc0luZm8geworICAgIHVzaW5nIENoZWNrU3ViQ2xh
c3NTbmlwcGV0RnVuY3Rpb25QdHIgPSBSZWY8U25pcHBldD4gKCopKHZvaWQpOworCiAgICAgLy8g
QSBzdHJpbmcgZGVub3RpbmcgdGhlIGNsYXNzIG5hbWUuIEV4YW1wbGU6ICJXaW5kb3ciLgogICAg
IGNvbnN0IGNoYXIqIGNsYXNzTmFtZTsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGNsYXNzIGlu
Zm9ybWF0aW9uIG9mIHRoZSBiYXNlIGNsYXNzLgogICAgIC8vIG51bGxwdHJpZiB0aGVyZSBpcyBu
b25lLgogICAgIGNvbnN0IENsYXNzSW5mbyogcGFyZW50Q2xhc3M7CisgICAgY29uc3QgSGFzaFRh
YmxlKiBzdGF0aWNQcm9wSGFzaFRhYmxlOworICAgIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rp
b25QdHIgY2hlY2tTdWJDbGFzc1NuaXBwZXQ7CisgICAgTWV0aG9kVGFibGUgbWV0aG9kVGFibGU7
CisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VUeXBlOwogCiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlBhcmVudENsYXNzKCkKICAgICB7CkBAIC0yMTIsMTUgKzIxNyw2
IEBAIHN0cnVjdCBDbGFzc0luZm8gewogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNTdGF0
aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcygpIGNvbnN0OwotCi0gICAgY29uc3QgSGFzaFRh
YmxlKiBzdGF0aWNQcm9wSGFzaFRhYmxlOwotCi0gICAgdXNpbmcgQ2hlY2tTdWJDbGFzc1NuaXBw
ZXRGdW5jdGlvblB0ciA9IFJlZjxTbmlwcGV0PiAoKikodm9pZCk7Ci0gICAgQ2hlY2tTdWJDbGFz
c1NuaXBwZXRGdW5jdGlvblB0ciBjaGVja1N1YkNsYXNzU25pcHBldDsKLQotICAgIE1ldGhvZFRh
YmxlIG1ldGhvZFRhYmxlOwotCi0gICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VU
eXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMjIs
MTUgKzIyMjIsOSBAQCBib29sIEpTT2JqZWN0OjpnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3QoCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1hdXRvIEpTT2JqZWN0OjpmaW5kUHJvcGVydHlIYXNoRW50
cnkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdCAtPiBPcHRpb25hbDxQ
cm9wZXJ0eUhhc2hFbnRyeT4KK09wdGlvbmFsPFN0cnVjdHVyZTo6UHJvcGVydHlIYXNoRW50cnk+
IEpTT2JqZWN0OjpmaW5kUHJvcGVydHlIYXNoRW50cnkoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKSBjb25zdAogewotICAgIGZvciAoY29uc3QgQ2xhc3NJbmZvKiBpbmZvID0gY2xh
c3NJbmZvKHZtKTsgaW5mbzsgaW5mbyA9IGluZm8tPnBhcmVudENsYXNzKSB7Ci0gICAgICAgIGlm
IChjb25zdCBIYXNoVGFibGUqIHByb3BIYXNoVGFibGUgPSBpbmZvLT5zdGF0aWNQcm9wSGFzaFRh
YmxlKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgSGFzaFRhYmxlVmFsdWUqIGVudHJ5ID0gcHJv
cEhhc2hUYWJsZS0+ZW50cnkocHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
UHJvcGVydHlIYXNoRW50cnkgeyBwcm9wSGFzaFRhYmxlLCBlbnRyeSB9OwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHN0cnVjdHVyZSh2bSkt
PmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShwcm9wZXJ0eU5hbWUpOwogfQogCiBib29sIEpTT2JqZWN0
OjpoYXNJbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEpTVmFsdWUgaGFz
SW5zdGFuY2VWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMjUwMDU2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtOTAzLDYgKzkwMyw4IEBAIHB1YmxpYzoKICAg
ICBib29sIG1heUJlUHJvdG90eXBlKCkgY29uc3Q7CiAgICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5
cGUoKTsKIAorICAgIE9wdGlvbmFsPFN0cnVjdHVyZTo6UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeShWTSYsIFByb3BlcnR5TmFtZSkgY29uc3Q7CisKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCiBwcm90ZWN0ZWQ6CkBAIC0xMDMyLDcgKzEwMzQsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgICAgIAogICAgIC8vIFRoaXMgaXMgcmVsZXZhbnQgdG8gdW5kZWNpZGVkLCBpbnQz
MiwgZG91YmxlLCBhbmQgY29udGlndW91cy4KICAgICB1bnNpZ25lZCBjb3VudEVsZW1lbnRzKCk7
Ci0gICAgICAgIAorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CiAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOwpAQCAtMTA2MCwxMSArMTA2Miw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsQ3VzdG9tR2V0dGVyUHJvcGVydHlTbG90KFZNJiwg
UHJvcGVydHlTbG90JiwgQ3VzdG9tR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQsIFN0cnVjdHVyZSop
OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBnZXRPd25TdGF0aWNQcm9wZXJ0eVNsb3Qo
Vk0mLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwotICAgIHN0cnVjdCBQcm9wZXJ0eUhh
c2hFbnRyeSB7Ci0gICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGU7Ci0gICAgICAgIGNvbnN0
IEhhc2hUYWJsZVZhbHVlKiB2YWx1ZTsKLSAgICB9OwotICAgIE9wdGlvbmFsPFByb3BlcnR5SGFz
aEVudHJ5PiBmaW5kUHJvcGVydHlIYXNoRW50cnkoVk0mLCBQcm9wZXJ0eU5hbWUpIGNvbnN0Owog
ICAgICAgICAKICAgICBib29sIHB1dEJ5SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGgoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRocm93KTsKICAg
ICBib29sIHB1dERpcmVjdEluZGV4QmV5b25kVmVjdG9yTGVuZ3RoV2l0aEFycmF5U3RvcmFnZShF
eGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIFB1dERpcmVjdEluZGV4TW9kZSwgQXJyYXlTdG9yYWdlKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZlV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVj
dFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmgJKHJldmlzaW9uIDI1MDA1NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRp
dmVXYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDE2ICsyOSwxNiBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludD4KK3RlbXBsYXRlPHR5
cGVuYW1lIFdhdGNocG9pbnRTZXQ+CiBjbGFzcyBPYmplY3RQcm9wZXJ0eUNoYW5nZUFkYXB0aXZl
V2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnRCYXNlIHsKIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gQWRhcHRpdmVJbmZlcnJl
ZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50QmFzZTsKLSAgICBPYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludChKU0NlbGwqIG93bmVyLCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbiYgY29uZGl0aW9uLCBXYXRjaHBvaW50JiB3YXRjaHBvaW50KQorICAgIE9iamVjdFByb3Bl
cnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50KEpTQ2VsbCogb3duZXIsIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIFdhdGNocG9pbnRTZXQmIHdhdGNocG9pbnRTZXQp
CiAgICAgICAgIDogQmFzZShjb25kaXRpb24pCiAgICAgICAgICwgbV9vd25lcihvd25lcikKLSAg
ICAgICAgLCBtX3dhdGNocG9pbnQod2F0Y2hwb2ludCkKKyAgICAgICAgLCBtX3dhdGNocG9pbnRT
ZXQod2F0Y2hwb2ludFNldCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhdGNocG9p
bnQuc3RhdGVPbkpTVGhyZWFkKCkgPT0gSXNXYXRjaGVkKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQod2F0Y2hwb2ludFNldC5zdGF0ZU9uSlNUaHJlYWQoKSA9PSBJc1dhdGNoZWQpOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTQ5LDExICs0OSwxMSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBoYW5k
bGVGaXJlKFZNJiB2bSwgY29uc3QgRmlyZURldGFpbCYpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBtX3dhdGNocG9pbnQuZmlyZUFsbCh2bSwgU3RyaW5nRmlyZURldGFpbCgiT2JqZWN0IFByb3Bl
cnR5IGlzIGNoYW5nZWQuIikpOworICAgICAgICBtX3dhdGNocG9pbnRTZXQuZmlyZUFsbCh2bSwg
U3RyaW5nRmlyZURldGFpbCgiT2JqZWN0IFByb3BlcnR5IGlzIGNoYW5nZWQuIikpOwogICAgIH0K
IAogICAgIEpTQ2VsbCogbV9vd25lcjsKLSAgICBXYXRjaHBvaW50JiBtX3dhdGNocG9pbnQ7Cisg
ICAgV2F0Y2hwb2ludFNldCYgbV93YXRjaHBvaW50U2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzgsNCArMTIzOCwxNSBAQCBib29sIFN0cnVj
dHVyZTo6Y2FuQWNjZXNzUHJvcGVydGllc1F1aWNrCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2F1
dG8gU3RydWN0dXJlOjpmaW5kUHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSkgY29uc3QgLT4gT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+Cit7CisgICAgZm9yIChj
b25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFzc0luZm8oKTsgaW5mbzsgaW5mbyA9IGluZm8tPnBh
cmVudENsYXNzKSB7CisgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGUqIHByb3BIYXNoVGFibGUg
PSBpbmZvLT5zdGF0aWNQcm9wSGFzaFRhYmxlKSB7CisgICAgICAgICAgICBpZiAoY29uc3QgSGFz
aFRhYmxlVmFsdWUqIGVudHJ5ID0gcHJvcEhhc2hUYWJsZS0+ZW50cnkocHJvcGVydHlOYW1lKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHJvcGVydHlIYXNoRW50cnkgeyBwcm9wSGFzaFRhYmxl
LCBlbnRyeSB9OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI1MDA1NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw4IEBAIGNs
YXNzIFVuaXF1ZWRTdHJpbmdJbXBsOwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIERlZmVyR0M7
CitzdHJ1Y3QgSGFzaFRhYmxlOworc3RydWN0IEhhc2hUYWJsZVZhbHVlOwogY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBjbGFzcyBQcm9wZXJ0
eU5hbWVBcnJheURhdGE7CkBAIC02MTUsNiArNjE3LDEyIEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBwcm9wZXJ0eUhhc2goKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5SGFzaDsgfQogCiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkQ29udmVydFRvUG9seVByb3RvKGNvbnN0IFN0cnVjdHVyZSogYSwg
Y29uc3QgU3RydWN0dXJlKiBiKTsKKworICAgIHN0cnVjdCBQcm9wZXJ0eUhhc2hFbnRyeSB7Cisg
ICAgICAgIGNvbnN0IEhhc2hUYWJsZSogdGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZVZh
bHVlKiB2YWx1ZTsKKyAgICB9OworICAgIE9wdGlvbmFsPFByb3BlcnR5SGFzaEVudHJ5PiBmaW5k
UHJvcGVydHlIYXNoRW50cnkoUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICAKICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9s
bGFyVk0uY3BwCShyZXZpc2lvbiAyNTAwNTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvSlNEb2xsYXJWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4Niw2ICs1ODYsNzkgQEAgcHJp
dmF0ZToKICAgICBWZWN0b3I8aW50PiBtX3ZlY3RvcjsKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1
Y3QgQ29tcGFjdEhhc2hJbmRleCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXhbMl0gPSB7
CisgICAgeyAwLCAtMSB9LAorICAgIHsgLTEsIC0xIH0sCit9OworCitzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgdGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEpTT2Jq
ZWN0KiB0aGlzT2JqZWN0ID0ganNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpk
ZWNvZGUodGhpc1ZhbHVlKSk7CisgICAgUkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisKKyAg
ICBpZiAoSlNWYWx1ZSByZXN1bHQgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3Qodm0sIFByb3BlcnR5
TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZpZWxkIikpKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK3N0YXRpYyBib29sIHRlc3RTdGF0aWNBY2Nlc3NvclB1
dHRlcihFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgdmFsdWUpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
anNEeW5hbWljQ2FzdDxKU09iamVjdCo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7
CisgICAgUkVMRUFTRV9BU1NFUlQodGhpc09iamVjdCk7CisKKyAgICByZXR1cm4gdGhpc09iamVj
dC0+cHV0RGlyZWN0KHZtLCBQcm9wZXJ0eU5hbWUoSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
InRlc3RGaWVsZCIpKSwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7Cit9CisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgSGFzaFRhYmxlVmFsdWUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZVZhbHVlc1sx
XSA9IHsKKyAgICB7ICJ0ZXN0U3RhdGljQWNjZXNzb3IiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
UHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKSwgTm9JbnRyaW5zaWMsIHsgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPih0ZXN0U3RhdGljQWNj
ZXNzb3JHZXR0ZXIpLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHV0UHJvcGVydHlTbG90OjpQdXRW
YWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcikgfSB9LAorfTsKKworc3RhdGljIGNv
bnN0IHN0cnVjdCBIYXNoVGFibGUgc3RhdGljQ3VzdG9tQWNjZXNzb3JUYWJsZSA9CisgICAgeyAx
LCAxLCB0cnVlLCBudWxscHRyLCBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzLCBzdGF0
aWNDdXN0b21BY2Nlc3NvclRhYmxlSW5kZXggfTsKKworY2xhc3MgU3RhdGljQ3VzdG9tQWNjZXNz
b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgdXNpbmcgQmFzZSA9IEpTTm9uRmlu
YWxPYmplY3Q7CitwdWJsaWM6CisgICAgU3RhdGljQ3VzdG9tQWNjZXNzb3IoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgewor
ICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIH0KKworICAgIERF
Q0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBPdmVy
cmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Q7CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU3RhdGljQ3VzdG9tQWNjZXNzb3IqIGNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKKyAgICAgICAgU3RhdGljQ3VzdG9tQWNjZXNzb3IqIGdldHRlciA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPFN0YXRpY0N1c3RvbUFjY2Vzc29yPih2bS5oZWFwKSkgU3Rh
dGljQ3VzdG9tQWNjZXNzb3Iodm0sIHN0cnVjdHVyZSk7CisgICAgICAgIGdldHRlci0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gZ2V0dGVyOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogdGhpc09iamVjdCwgRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCisg
ICAgeworICAgICAgICBpZiAoU3RyaW5nKHByb3BlcnR5TmFtZS51aWQoKSkgPT0gInRoaW5BaXJD
dXN0b21HZXR0ZXIiKSB7CisgICAgICAgICAgICBzbG90LnNldENhY2hlYWJsZUN1c3RvbSh0aGlz
T2JqZWN0LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpDdXN0b21BY2Nlc3NvciwgdGVzdFN0YXRpY0FjY2Vzc29yR2V0dGVyKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU05vbkZpbmFsT2Jq
ZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKKyAgICB9Cit9OworCiBjbGFzcyBET01KSVROb2RlIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogcHVibGljOgogICAgIERPTUpJVE5vZGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKQEAgLTcyOSw2ICs4MDIsNyBAQCB2b2lkIERPTUpJVEdldHRlcjo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtCiAgICAgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3Iodm0sIElkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJjdXN0b21HZXR0ZXIiKSwgY3VzdG9tR2V0dGVyU2V0dGVyLCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ip
OwogfQogCisKIGNsYXNzIERPTUpJVEdldHRlckNvbXBsZXggOiBwdWJsaWMgRE9NSklUTm9kZSB7
CiBwdWJsaWM6CiAgICAgRE9NSklUR2V0dGVyQ29tcGxleChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQpAQCAtMTE5OSw2ICsxMjczLDggQEAgY29uc3QgQ2xhc3NJbmZvIERPTUpJVEZ1bmN0
aW9uT2JqZWN0OjpzXwogY29uc3QgQ2xhc3NJbmZvIERPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3Q6
OnNfaW5mbyA9IHsgIkRPTUpJVENoZWNrU3ViQ2xhc3NPYmplY3QiLCAmQmFzZTo6c19pbmZvLCBu
dWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKERPTUpJVENoZWNrU3ViQ2xhc3NP
YmplY3QpIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyOjpzX2lu
Zm8gPSB7ICJKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXIiLCAmQmFzZTo6c19pbmZvLCBudWxscHRy
LCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTVGVzdEN1c3RvbUdldHRlclNldHRlcikg
fTsKIAorY29uc3QgQ2xhc3NJbmZvIFN0YXRpY0N1c3RvbUFjY2Vzc29yOjpzX2luZm8gPSB7ICJT
dGF0aWNDdXN0b21BY2Nlc3NvciIsICZCYXNlOjpzX2luZm8sICZzdGF0aWNDdXN0b21BY2Nlc3Nv
clRhYmxlLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFN0YXRpY0N1c3RvbUFjY2Vzc29y
KSB9OworCiBFbGVtZW50SGFuZGxlT3duZXIqIEVsZW1lbnQ6OmhhbmRsZU93bmVyKCkKIHsKICAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOwpAQCAtMjAxNSw2ICsyMDkxLDE2IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmMKIH0KICNlbmRpZgogCitz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkNyZWF0ZVN0YXRpY0N1
c3RvbUFjY2Vzc29yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgSlNMb2NrSG9sZGVy
IGxvY2sodm0pOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RhdGljQ3VzdG9tQWNjZXNz
b3I6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBqc051
bGwoKSk7CisgICAgYXV0byogcmVzdWx0ID0gU3RhdGljQ3VzdG9tQWNjZXNzb3I6OmNyZWF0ZSh2
bSwgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uU2V0SW1wdXJlR2V0
dGVyRGVsZWdhdGUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CkBAIC0yNTM3LDYgKzI2MjMsNyBAQCB2b2lkIEpTRG9sbGFyVk06OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgYWRkRnVuY3Rp
b24odm0sICJjcmVhdGVXYXNtU3RyZWFtaW5nUGFyc2VyIiwgZnVuY3Rpb25DcmVhdGVXYXNtU3Ry
ZWFtaW5nUGFyc2VyLCAwKTsKICNlbmRpZgorICAgIGFkZEZ1bmN0aW9uKHZtLCAiY3JlYXRlU3Rh
dGljQ3VzdG9tQWNjZXNzb3IiLCBmdW5jdGlvbkNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yLCAw
KTsKICAgICBhZGRGdW5jdGlvbih2bSwgImdldFByaXZhdGVQcm9wZXJ0eSIsIGZ1bmN0aW9uR2V0
UHJpdmF0ZVByb3BlcnR5LCAyKTsKICAgICBhZGRGdW5jdGlvbih2bSwgInNldEltcHVyZUdldHRl
ckRlbGVnYXRlIiwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZSwgMik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379590</attachid>
            <date>2019-09-25 16:40:00 -0700</date>
            <delta_ts>2019-09-30 17:03:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>56708</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTAzNjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDUwIEBACisyMDE5LTA5LTI1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoaW5nIGlzIHdyb25nIGZvciBjdXN0b20gYWNjZXNz
b3JzIGFuZCBjdXN0b20gdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDE5OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwODUwMzI2Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci1tYXRlcmlhbGl6ZWQuanM6IEFkZGVkLgorICAgICAg
ICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3Q0LmdldCBjb25zdCk6CisgICAgICAgICogbWljcm9i
ZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci10aGluLWFpci5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAodGVzdDUuZ2V0IGNvbnN0KToKKyAgICAgICAgKHRlc3Q1LmdldCBw
cm90byk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci5qczogQWRk
ZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDMuZ2V0IGNvbnN0KToKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKHRlc3QxLmdldE11bHRpbGluZSk6CisgICAgICAgICh0ZXN0MSk6
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2N1c3RvbS12YWx1ZS5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZ2V0TXVsdGlsaW5lKToKKyAgICAgICAgKHRl
c3QxKToKKyAgICAgICAgKiBzdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0xLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0My5nZXQgY29uc3QpOgorICAgICAg
ICAqIHN0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTIuanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKHRlc3Q0LmdldCBjb25zdCk6CisgICAgICAgICogc3RyZXNzL2N1
c3RvbS1hY2Nlc3Nvci1kZWxldGUtMy5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAg
ICAgICAodGVzdDUuZ2V0IGNvbnN0KToKKyAgICAgICAgKHRlc3Q1LmdldCBwcm90byk6CisgICAg
ICAgICogc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMS5qczogQWRkZWQuCisg
ICAgICAgIChhc3NlcnQpOgorICAgICAgICAodGVzdDEuZ2V0TXVsdGlsaW5lKToKKyAgICAgICAg
KHRlc3QxKToKKyAgICAgICAgKiBzdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0y
LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QyLmZvbyk6CisgICAgICAgICh0ZXN0Mik6CisgICAg
ICAgICogc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMy5qczogQWRkZWQuCisg
ICAgICAgICh0ZXN0Ni5mb28pOgorICAgICAgICAodGVzdDYpOgorCiAyMDE5LTA5LTI0ICBBbGV4
ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBbRVM2XSBDb21l
IHVwIHdpdGggYSB0ZXN0IGZvciBQcm94eS5bW0dldE93blByb3BlcnR5XV0gdGhhdCB0ZXN0cyB0
aGUgaXNFeHRlbnNpYmxlIGVycm9yIHdoZW4gdGhlICByZXN1bHQgb2YgdGhlIHRyYXAgaXMgdW5k
ZWZpbmVkCkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNzb3ItbWF0
ZXJpYWxpemVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3Rv
bS1hY2Nlc3Nvci1tYXRlcmlhbGl6ZWQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLW1hdGVyaWFsaXplZC5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIyIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICBmdW5j
dGlvbiBnZXQobykgeworICAgICAgICByZXR1cm4gby50ZXN0U3RhdGljQWNjZXNzb3I7CisgICAg
fQorICAgIG5vSW5saW5lKGdldCk7CisKKyAgICBjb25zdCBwcm90byA9ICR2bS5jcmVhdGVTdGF0
aWNDdXN0b21BY2Nlc3NvcigpOworICAgIGNvbnN0IG8gPSB7X19wcm90b19fOiBwcm90b307Cisg
ICAgY29uc3QgZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sICJ0ZXN0
U3RhdGljQWNjZXNzb3IiKTsKKyAgICBhc3NlcnQoISFkLmdldCk7CisgICAgby50ZXN0RmllbGQg
PSAxMzM3OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZ2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cit9Cit0ZXN0NCgpOwpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLXRoaW4tYWlyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nvci10aGluLWFpci5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNz
b3ItdGhpbi1haXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNCBAQAorZnVuY3Rpb24g
YXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKwor
ZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgZnVuY3Rpb24gZ2V0KG8pIHsKKyAgICAgICAgcmV0dXJu
IG8udGhpbkFpckN1c3RvbUdldHRlcjsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0KTsKKworICAg
IGNvbnN0IHByb3RvID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgY29u
c3QgbyA9IHtfX3Byb3RvX186IHByb3RvfTsKKyAgICBvLnRlc3RGaWVsZCA9IDEzMzc7CisKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQo
bykgPT09IDEzMzcpOworICAgIH0KKyAgICBwcm90by54eXogPSA0MjsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQobykgPT09IDEzMzcp
OworICAgIH0KK30KK3Rlc3Q1KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0
b20tYWNjZXNzb3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3Vz
dG9tLWFjY2Vzc29yLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2N1c3RvbS1hY2Nlc3Nvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOwor
fQorCitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBmdW5jdGlvbiBnZXQobykgeworICAgICAgICBy
ZXR1cm4gby50ZXN0U3RhdGljQWNjZXNzb3I7CisgICAgfQorICAgIG5vSW5saW5lKGdldCk7CisK
KyAgICBjb25zdCBwcm90byA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpOworICAg
IGNvbnN0IG8gPSB7X19wcm90b19fOiBwcm90b307CisgICAgby50ZXN0RmllbGQgPSAxMzM3Owor
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDA7ICsraSkgeworICAgICAgICBhc3NlcnQo
Z2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cit9Cit0ZXN0MygpOwpJbmRleDogSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcjsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZ2V0TXVs
dGlsaW5lKG8pIHsKKyAgICAgICAgcmV0dXJuIG8ubXVsdGlsaW5lOworICAgIH0KKyAgICBub0lu
bGluZShnZXRNdWx0aWxpbmUpOworCisgICAgUmVnRXhwLmZvbyA9IDQyOworCisgICAgY29uc3Qg
byA9IHt9OworICAgIG8uX19wcm90b19fID0gUmVnRXhwOworICAgIFJlZ0V4cC5tdWx0aWxpbmUg
PSBmYWxzZTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwMDsgKytpKSB7CisgICAg
ICAgIGFzc2VydChnZXRNdWx0aWxpbmUobykgPT09IGZhbHNlKTsKKyAgICB9CisgICAgZGVsZXRl
IFJlZ0V4cC5mb287CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyArK2kpIHsKKyAg
ICAgICAgYXNzZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KK30KK3Rlc3Qx
KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLmpzCShub25leGlz
dGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS12YWx1ZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICgh
YikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAg
ICBmdW5jdGlvbiBnZXRNdWx0aWxpbmUobykgeworICAgICAgICByZXR1cm4gby5tdWx0aWxpbmU7
CisgICAgfQorICAgIG5vSW5saW5lKGdldE11bHRpbGluZSk7CisKKyAgICBjb25zdCBvID0ge307
CisgICAgby5fX3Byb3RvX18gPSBSZWdFeHA7CisgICAgUmVnRXhwLm11bHRpbGluZSA9IGZhbHNl
OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNz
ZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KK30KKwordGVzdDEoKTsKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTEuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0xLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgewor
ICAgIGZ1bmN0aW9uIGdldChvKSB7CisgICAgICAgIHJldHVybiBvLnRlc3RTdGF0aWNBY2Nlc3Nv
cjsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0KTsKKworICAgIGNvbnN0IHByb3RvID0gJHZtLmNy
ZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgY29uc3QgbyA9IHtfX3Byb3RvX186IHBy
b3RvfTsKKyAgICBvLnRlc3RGaWVsZCA9IDEzMzc7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IDUwMDsgKytpKSB7CisgICAgICAgIGFzc2VydChnZXQobykgPT09IDEzMzcpOworICAgIH0KKwor
ICAgIHByb3RvLnh5eiA9IDQyOworCisgICAgYXNzZXJ0KGRlbGV0ZSBwcm90by50ZXN0U3RhdGlj
QWNjZXNzb3IpOworICAgIGFzc2VydChnZXQobykgPT09IHVuZGVmaW5lZCk7Cit9Cit0ZXN0Mygp
OwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMi5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworZnVuY3Rpb24gdGVzdDQo
KSB7CisgICAgZnVuY3Rpb24gZ2V0KG8pIHsKKyAgICAgICAgcmV0dXJuIG8udGVzdFN0YXRpY0Fj
Y2Vzc29yOworICAgIH0KKyAgICBub0lubGluZShnZXQpOworCisgICAgY29uc3QgcHJvdG8gPSAk
dm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAgICBjb25zdCBvID0ge19fcHJvdG9f
XzogcHJvdG99OworICAgIGNvbnN0IGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y
KHByb3RvLCAidGVzdFN0YXRpY0FjY2Vzc29yIik7CisgICAgYXNzZXJ0KCEhZC5nZXQpOworICAg
IG8udGVzdEZpZWxkID0gMTMzNzsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kp
IHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorCisgICAgcHJvdG8u
eHl6ID0gNDI7CisKKyAgICBhc3NlcnQoZGVsZXRlIHByb3RvLnRlc3RTdGF0aWNBY2Nlc3Nvcik7
CisgICAgYXNzZXJ0KGdldChvKSA9PT0gdW5kZWZpbmVkKTsKK30KK3Rlc3Q0KCk7CkluZGV4OiBK
U1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0zLmpzCShub25leGlzdGVudCkK
KysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI0IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBm
dW5jdGlvbiBnZXQobykgeworICAgICAgICByZXR1cm4gby50aGluQWlyQ3VzdG9tR2V0dGVyOwor
ICAgIH0KKyAgICBub0lubGluZShnZXQpOworCisgICAgY29uc3QgcHJvdG8gPSAkdm0uY3JlYXRl
U3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAgICBjb25zdCBvID0ge19fcHJvdG9fXzogcHJvdG99
OworICAgIG8udGVzdEZpZWxkID0gMTMzNzsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAw
OyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorICAgIHBy
b3RvLnh5eiA9IDQyOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kpIHsKKyAgICAg
ICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorfQordGVzdDUoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTEuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0
eS0xLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGFzc2VydChi
KSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9u
IHRlc3QxKCkgeworICAgIGZ1bmN0aW9uIGdldE11bHRpbGluZShvKSB7CisgICAgICAgIHJldHVy
biBvLm11bHRpbGluZTsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0TXVsdGlsaW5lKTsKKworICAg
IGNvbnN0IG8gPSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IFJlZ0V4cDsKKyAgICBSZWdFeHAubXVs
dGlsaW5lID0gZmFsc2U7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydChnZXRNdWx0aWxpbmUobykgPT09IGZhbHNlKTsKKyAgICB9CisgICAgZGVs
ZXRlIFJlZ0V4cC5pbnB1dDsKKyAgICBkZWxldGUgUmVnRXhwLm11bHRpbGluZTsKKyAgICBhc3Nl
cnQoZ2V0TXVsdGlsaW5lKG8pID09PSB1bmRlZmluZWQpOworfQordGVzdDEoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTIuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0
eS0yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9uIHRlc3QyKCkg
eworICAgIGZ1bmN0aW9uIGZvbygpIHsKKyAgICAgICAgY29uc3QgbyA9IHt9OworICAgICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgbGV0IHggPSBvLm11bHRp
bGluZTsKKyAgICAgICAgICAgIG8uX19wcm90b19fID0gUmVnRXhwOworICAgICAgICB9CisgICAg
ICAgIGRlbGV0ZSBSZWdFeHAuaW5wdXQ7CisgICAgfQorCisgICAgZm9vKCk7CisgICAgZm9vKCk7
Cit9Cit0ZXN0MigpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1w
cm9wZXJ0eS0zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1k
ZWxldGUtcHJvcGVydHktMy5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0
b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NCBAQAorZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICBj
b25zdCBvID0ge307CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAg
ICAgICAgICBvLmxhc3RNYXRjaDsKKyAgICAgICAgICAgIG8uX19wcm90b19fID0gUmVnRXhwOwor
ICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBSZWdFeHAuaW5wdXQ7CisgICAgfQorCisgICAgZm9v
KCk7CisgICAgZm9vKCk7Cit9Cit0ZXN0NigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTAzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTQgQEAKKzIwMTktMDktMjUgIFNhYW0gQmFyYXRpICA8
c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW5saW5lIGNhY2hpbmcgaXMgd3JvbmcgZm9y
IGN1c3RvbSBhY2Nlc3NvcnMgYW5kIGN1c3RvbSB2YWx1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk5NAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTA4NTAzMjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlcmUgd2FzIGFuIG92ZXJzaWdodCBpbiBvdXIgaW5saW5lIGNhY2hpbmcgY29kZSBm
b3IgY3VzdG9tIGFjY2Vzc29ycyBhbmQKKyAgICAgICAgY3VzdG9tIHZhbHVlcy4gV2UgdXNlZCB0
byBhc3N1bWUgdGhhdCBpZiBhbiBvYmplY3QgTyBoYWQgYSBjdXN0b20gZnVuY3Rpb24gZm9yCisg
ICAgICAgIHByb3BlcnR5IFAsIHRoZW4gTyB3aWxsIGZvcmV2ZXIgcmVzcG9uZCB0byB0aGUgc2Ft
ZSBjdXN0b20gZnVuY3Rpb24gZm9yCisgICAgICAgIHByb3BlcnR5IFAuCisgICAgICAgIAorICAg
ICAgICBUaGlzIGFzc3VtcHRpb24gd2FzIHZlcnkgd3JvbmcuIFRoZXNlIGN1c3RvbSBhY2Nlc3Nv
cnMvdmFsdWVzIG1pZ2h0IGJlCisgICAgICAgIHByb3BlcnRpZXMgaW4gSlMgd2hpY2ggYXJlIGNv
bmZpZ3VyYWJsZSwgc28gdGhleSBjYW4gYmUgcmV3cml0dGVuIHRvIGJlCisgICAgICAgIG90aGVy
IHByb3BlcnRpZXMuIE91ciBpbmxpbmUgY2FjaGluZyBjb2RlIHdvdWxkIGJlIHdyb25nIGluIHRo
ZSBzY2VuYXJpb3MKKyAgICAgICAgd2hlcmUgdGhlc2UgcHJvcGVydHkgZGVzY3JpcHRvcnMgZ290
IHJlZGVmaW5lZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgaXQgc28gdGhh
dCB3ZSBub3cgcHJvcGVybHkgd2F0Y2hwb2ludCBmb3IgY3VzdG9tIGZ1bmN0aW9ucworICAgICAg
ICBiZWluZyBjaGFuZ2VkLiBJZiB0aGUgY3VzdG9tIGFjY2Vzc29yIGhhcyBiZWVuIG1hdGVyaWFs
aXplZCwgd2UgcGxhY2UgYW4KKyAgICAgICAgRXF1aXZhbGVuY2Ugd2F0Y2hwb2ludCBvbiB0aGUg
Y3VzdG9tIGFjY2Vzc29yLiBUaGlzIHBhdGNoIGFsc28gdGVhY2hlcworICAgICAgICBTdHJ1Y3R1
cmVTdHViSW5mbyBob3cgdG8gd2F0Y2hwb2ludCBvbiBwcm9wZXJ0eSB2YWx1ZSBlcXVpdmFsZW5j
ZS4gQmVmb3JlLAorICAgICAgICB3ZSBqdXN0IHdhdGNocG9pbnRlZCBvbiBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsc28gYWRkcyBhIG5ldyBw
cm9wZXJ0eSBjb25kaXRpb24ga2luZCBmb3Igd2hlbiB0aGUgY3VzdG9tIGZ1bmN0aW9uCisgICAg
ICAgIGV4aXN0cyBpbnNpZGUgdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZS4gVGhpcyBjYXNlIGlz
IHJlYWxseSBlYXN5IHRvIHRlc3QgZm9yCisgICAgICAgIGJlY2F1c2Ugd2UganVzdCBuZWVkIHRv
IHNlZSBpZiB0aGUgc3RydWN0dXJlIHN0aWxsIGhhcyBzdGF0aWMgcHJvcGVydGllcyBhbmQKKyAg
ICAgICAgdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBoYXMgdGhlIGVudHJ5IGZvciBhIHBhcnRp
Y3VsYXIgcHJvcGVydHkuIFRoaXMKKyAgICAgICAgcHJvcGVydHkgY29uZGl0aW9uIGtpbmQganVz
dCBuZWVkcyB0byB3YXRjaCBmb3Igc3RydWN0dXJlIHRyYW5zaXRpb25zIGJlY2F1c2UKKyAgICAg
ICAgYW4gZW50cnkgaW4gdGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZSBjYW4ndCBiZSBtdXRhdGVk
LgorCisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAgIChKU0M6OkFj
Y2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1
Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludCBjb25z
dCk6CisgICAgICAgICogYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaDoKKyAgICAg
ICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb246OmN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVu
Y2UpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcDoK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Omhhc09uZVNsb3RCYXNl
Q29uZGl0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6T2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQ6OnNsb3RCYXNlQ29uZGl0aW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20pOgorICAgICAgICAqIGJ5dGVjb2Rl
L09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0Lmg6CisgICAgICAgICogYnl0ZWNvZGUvUG9seVBy
b3RvQWNjZXNzQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpQb2x5UHJvdG9BY2Nlc3NDaGFpbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHA6CisgICAg
ICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6aW5zdGFsbFdhdGNocG9pbnQpOgorICAg
ICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6Y29tbWl0KToKKyAgICAgICAgKEpTQzo6QWNj
ZXNzR2VuZXJhdGlvblN0YXRlOjphZGRXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBi
eXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Byb3BlcnR5
Q29uZGl0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OmR1bXBJbkNv
bnRleHQgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNTdGlsbFZh
bGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQgY29uc3QpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCBjb25zdCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFs
aWQgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFibGVX
aGVuVmFsaWQgY29uc3QpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNv
bmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSk6CisgICAgICAgIChKU0M6OlByb3Bl
cnR5Q29uZGl0aW9uOjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9u
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVu
Y2VBbmRJbnN0YWxsV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCk6CisgICAgICAg
IChKU0M6OkFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50OjpoYW5k
bGVGaXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6
ZmlyZUludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50Lmg6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgor
ICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlE
KToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBydW50aW1lL0Ns
YXNzSW5mby5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZmluZFByb3BlcnR5SGFzaEVudHJ5IGNvbnN0KToKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgICogcnVudGltZS9PYmplY3RQcm9wZXJ0eUNoYW5nZUFk
YXB0aXZlV2F0Y2hwb2ludC5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpmaW5kUHJvcGVydHlIYXNoRW50cnkgY29uc3QpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5j
cHA6CisgICAgICAgIChKU0M6OnRlc3RTdGF0aWNBY2Nlc3NvckdldHRlcik6CisgICAgICAgIChK
U0M6OnRlc3RTdGF0aWNBY2Nlc3NvclB1dHRlcik6CisgICAgICAgIChKU0M6OlN0YXRpY0N1c3Rv
bUFjY2Vzc29yOjpTdGF0aWNDdXN0b21BY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OlN0YXRpY0N1
c3RvbUFjY2Vzc29yOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdGF0aWNDdXN0
b21BY2Nlc3Nvcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6U3RhdGljQ3VzdG9tQWNjZXNzb3I6
OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uQ3JlYXRlU3RhdGlj
Q3VzdG9tQWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlv
bik6CisKIDIwMTktMDktMjUgIEd1aWxsYXVtZSBFbW9udCAgPGd1aWplbW9udEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIHRlc3RhcGk6IHNsb3cgZGV2aWNlcyBuZWVkIG1vcmUgdGltZSBiZWZvcmUg
d2F0Y2hkb2cgZmlyZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nl
c3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEwLDcgKzMxMCwx
NiBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWZWN0b3I8SlNDZWxsCiAKIGJvb2wgQWNj
ZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2NvbmRp
dGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0
Y2hwb2ludCgpOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRp
dGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmIChjb25kaXRpb24uY29uZGl0aW9u
KCkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAgICAgICAg
ICAgaWYgKCFjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludChQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0OjpFbnN1cmVXYXRjaGFi
aWxpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3Vt
aW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEFjY2Vz
c0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CkBAIC03MDks
MTkgKzcxOCwxOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAg
ICAgR1BSUmVnIHRoaXNHUFIgPSBzdGF0ZS50aGlzR1BSICE9IEludmFsaWRHUFJSZWcgPyBzdGF0
ZS50aGlzR1BSIDogYmFzZUdQUjsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRlLnNjcmF0
Y2hHUFI7CiAKLSAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3VyZVZhbGlk
aXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7Ci0KICAgICBmb3IgKGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNldCkgewog
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbik7CiAKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSh2
bSk7Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJv
cGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJhbnNpdGlv
bldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2ludChjb25kaXRpb24pKTsKKyAgICAgICAgaWYg
KGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFBy
b3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQ6OkVuc3VyZVdhdGNoYWJpbGl0eSkp
IHsKKyAgICAgICAgICAgIHN0YXRlLmluc3RhbGxXYXRjaHBvaW50KGNvbmRpdGlvbik7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghY29uZGl0aW9uLnN0
cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KHN0
cnVjdHVyZSkpIHsKKyAgICAgICAgLy8gRm9yIG5vdywgd2Ugb25seSBhbGxvdyBlcXVpdmFsZW5j
ZSB3aGVuIGl0J3Mgd2F0Y2hhYmxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25kaXRpb24u
Y29uZGl0aW9uKCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSk7CisK
KyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiB3
aHkgdGhpcyBjYW5ub3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0IFBvbHltb3JwaGlj
QWNjZXNzIGNhbGxzCiAgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgpIG9ubHkg
YWZ0ZXIgaXQgaGFzIHZlcmlmaWVkIHRoYXQKICAgICAgICAgICAgIC8vIEFjY2Vzc0Nhc2U6OmNv
dWxkU3RpbGxTdWNjZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KQEAgLTczMSw2ICs3MzksNyBAQCB2b2lk
IEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVmZXJlbmNlIHRoYXQgaXNu
J3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIHN0YXRlLndl
YWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgY29kZUJsb2NrLCBz
dHJ1Y3R1cmUpKTsKIAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0
NiwxMiBAQCB2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpkdW1wKFByaW50CiAgICAgZHVt
cEluQ29udGV4dChvdXQsIG51bGxwdHIpOwogfQogCi1ib29sIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3BlcnR5V2F0Y2hw
b2ludCgKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoc3Ry
dWN0dXJlKTsKLX0KLQogYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5z
dXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdAogewog
ICAgIGlmICghKnRoaXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4g
c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQo
bV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZh
bGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgp
LCBudWxscHRyKTsKIH0KIAogYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6dmFsaWRpdHlS
ZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29u
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAyNTAzNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTIxLDYgKzEyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lcik7CiAgICAgICAgIHJldHVybiBlcXVpdmFsZW5jZVdpdGhvdXRCYXJy
aWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CiAgICAgfQorCisgICAgc3RhdGljIE9iamVjdFByb3Bl
cnR5Q29uZGl0aW9uIGN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2UoCisgICAgICAgIFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
KyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1bHQubV9jb25kaXRpb24gPSBQ
cm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSh1aWQpOworICAgICAg
ICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIHN0YXRpYyBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFycmllcihKU09iamVjdCogb2JqZWN0
LCBKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw3ICsyMDQsNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgY2xhaW1zIHRo
YXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBWYWxpZGl0eQogICAgIC8vIGRv
ZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVjdC4KLSAgICBib29sIHN0cnVj
dHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KFN0cnVj
dHVyZSopIGNvbnN0OwogICAgIGJvb2wgc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludCB0byBlbnN1cmUgdmFs
aWRpdHkgZXZlbiBpZgpAQCAtMjI3LDcgKzIzNyw3IEBAIHB1YmxpYzoKICAgICAgICAgUHJvcGVy
dHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtl
Tm9DaGFuZ2VzKSBjb25zdDsKIAogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxsIHZh
bGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0aW9u
Ci0gICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgorICAgIC8vIHdhdGNocG9pbnQg
b24gdGhlIHN0cnVjdHVyZSwgYW5kIGEgdmFsdWUgY2hhbmdlIHdhdGNocG9pbnQgaWYgd2UncmUg
RXF1aXZhbGVuY2UuCiAgICAgYm9vbCBpc1dhdGNoYWJsZSgKICAgICAgICAgU3RydWN0dXJlKiwK
ICAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3BlcnR5
Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9u
U2V0LmNwcAkocmV2aXNpb24gMjUwMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
NyArNjIsMTAgQEAgdW5zaWduZWQgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQ6Om51bQogCiBi
b29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIChudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0
eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDEpICE9IChudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2lu
ZChQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpID09IDEpOworICAgIHVuc2lnbmVkIHRv
dGFsID0gbnVtYmVyT2ZDb25kaXRpb25zV2l0aEtpbmQoUHJvcGVydHlDb25kaXRpb246OlByZXNl
bmNlKQorICAgICAgICArIG51bWJlck9mQ29uZGl0aW9uc1dpdGhLaW5kKFByb3BlcnR5Q29uZGl0
aW9uOjpFcXVpdmFsZW5jZSkKKyAgICAgICAgKyBudW1iZXJPZkNvbmRpdGlvbnNXaXRoS2luZChQ
cm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSk7CisgICAgcmV0dXJu
IHRvdGFsID09IDE7CiB9CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbigpIGNvbnN0CkBAIC03MSw3ICs3NCw4IEBA
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIE9iamVjdFByb3BlcnR5Q28KICAgICB1bnNpZ25lZCBu
dW1Gb3VuZCA9IDA7CiAgICAgZm9yIChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29u
ZGl0aW9uIDogKnRoaXMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVy
dHlDb25kaXRpb246OlByZXNlbmNlCi0gICAgICAgICAgICB8fCBjb25kaXRpb24ua2luZCgpID09
IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAgICAgICAgICAgfHwgY29uZGl0
aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UKKyAgICAgICAgICAg
IHx8IGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUZ1bmN0aW9u
RXF1aXZhbGVuY2UpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGNvbmRpdGlvbjsKICAgICAgICAg
ICAgIG51bUZvdW5kKys7CiAgICAgICAgIH0KQEAgLTIyOCw2ICsyMzIsMTMgQEAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24gZ2VuZXJhdGVDb25kaXRpbwogICAgICAgICByZXN1bHQgPSBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZXF1aXZhbGVuY2Uodm0sIG93bmVyLCBvYmplY3QsIHVpZCwgdmFs
dWUpOwogICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6
Q3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZTogeworICAgICAgICBhdXRvIGVudHJ5ID0gb2JqZWN0
LT5maW5kUHJvcGVydHlIYXNoRW50cnkodm0sIHVpZCk7CisgICAgICAgIGlmICghZW50cnkpCisg
ICAgICAgICAgICByZXR1cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKKyAgICAgICAgcmVz
dWx0ID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb246OmN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2Uo
dm0sIG93bmVyLCBvYmplY3QsIHVpZCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZh
dWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1
cm4gT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKTsKQEAgLTM3OCwxNSArMzg5LDM5IEBAIE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKIAogT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20o
CiAgICAgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSog
aGVhZFN0cnVjdHVyZSwgSlNPYmplY3QqIHByb3RvdHlwZSwKLSAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQorICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CiB7CiAgICAgcmV0dXJuIGdlbmVyYXRlQ29uZGl0aW9ucygKICAgICAgICAgdm0sIGV4ZWMtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSwgaGVhZFN0cnVjdHVyZSwgcHJvdG90eXBlLAogICAgICAgICBb
Jl0gKFZlY3RvcjxPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbj4mIGNvbmRpdGlvbnMsIEpTT2JqZWN0
KiBvYmplY3QpIC0+IGJvb2wgewotICAgICAgICAgICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uKHZt
LCBvd25lciwgb2JqZWN0LCB1aWQsIFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlKTsKKyAgICAg
ICAgICAgIGF1dG8ga2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpBYnNlbmNlOworICAgICAgICAg
ICAgaWYgKG9iamVjdCA9PSBwcm90b3R5cGUpIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG9iamVjdC0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgdWlkKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdoZW4gd2UgcmVpZnkgY3VzdG9tIGFjY2Vzc29ycywgd2Ugd3JhcCB0aGVtIGluIGEgSlNGdW5j
dGlvbiB0aGF0IHdlIHNob3ZlCisgICAgICAgICAgICAgICAgICAgIC8vIGluc2lkZSBhIEdldHRl
clNldHRlci4gU28sIG9uY2Ugd2UndmUgcmVpZmllZCBhIGN1c3RvbSBhY2Nlc3Nvciwgd2Ugd2ls
bAorICAgICAgICAgICAgICAgICAgICAvLyBubyBsb25nZXIgc2VlIGl0IGFzIGEgImN1c3RvbSIg
YWNjZXNzb3IvdmFsdWUuIEhlbmNlLCBpZiBvdXIgcHJvcGVydHkgYWNjZXNzIGFjdHVhbGx5Cisg
ICAgICAgICAgICAgICAgICAgIC8vIG5vdGljZXMgYSBjdXN0b20sIGl0IG11c3QgYmUgYSBDdXN0
b21HZXR0ZXJTZXR0ZXJUeXBlIGNlbGwgb3Igc29tZXRoaW5nCisgICAgICAgICAgICAgICAgICAg
IC8vIGluIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUuIEN1c3RvbSB2YWx1ZXMgZ2V0IHJlaWZp
ZWQgaW50byBDdXN0b21HZXR0ZXJTZXR0ZXJzLgorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxsKCktPnR5
cGUoKSA9PSBDdXN0b21HZXR0ZXJTZXR0ZXJUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAga2lu
ZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKHN0cnVjdHVyZS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHVpZCkpCisgICAgICAgICAg
ICAgICAgICAgIGtpbmQgPSBQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rpb25FcXVpdmFs
ZW5jZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnREZWxldGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4ndCBj
aGFuZ2UsIHNvIHdlIGNhbiBibGluZGx5IGNhY2hlIGl0LgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIG1lYW5zIHdlIG1hdGVyaWFsaXplZCBhIGN1c3RvbSBvdXQgb2YgdGhpbiBhaXIg
YW5kIGl0J3Mgbm90IERvbnREZWxldGUgKGkuZSwgaXQgY2FuIGJlCisgICAgICAgICAgICAgICAg
ICAgIC8vIHJlZGVmaW5lZCkuIFRoaXMgaXMgY3VyaW91cy4gV2UgZG9uJ3QgYWN0dWFsbHkgbmVl
ZCB0byBjcmFzaCBoZXJlLiBXZSBjb3VsZCBibGluZGx5IGNhY2hlCisgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSBmdW5jdGlvbi4gT3Igd2UgY291bGQgYmxpbmRseSBub3QgY2FjaGUgaXQuIEhv
d2V2ZXIsIHdlIGRvbid0IGFjdHVhbGx5IGRvIHRoaXMgaW4gV2ViS2l0CisgICAgICAgICAgICAg
ICAgICAgIC8vIHJpZ2h0IG5vdywgc28gaXQncyByZWFzb25hYmxlIHRvIGRlY2lkZSB3aGF0IHRv
IGRvIGxhdGVyIChvciB0byB3YXJuIHBlb3BsZSBvZiBmb3JnZXR0aW5nIERvbmVEZWxldGUuKQor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIHJlc3VsdCA9IGdlbmVyYXRlQ29uZGl0
aW9uKHZtLCBvd25lciwgb2JqZWN0LCB1aWQsIGtpbmQpOwogICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgY29uZGl0aW9u
cy5hcHBlbmQocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9P
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oCShyZXZpc2lvbiAy
NTAzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGkKICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclBy
b3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JJbnN0YW5jZU9mKAogICAgIFZNJiwgSlNDZWxsKiBvd25lciwgRXhlY1N0
YXRlKiwgU3RydWN0dXJlKiBoZWFkU3RydWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLCBib29s
IHNob3VsZEhpdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVBy
b3RvQWNjZXNzQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDEyICs1MSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxQb2x5UHJvdG9B
Y2Nlc3NDaGFpbj4gUG8KICAgICBmb3IgKHVuc2lnbmVkIGl0ZXJhdGlvbk51bWJlciA9IDA7IHRy
dWU7ICsraXRlcmF0aW9uTnVtYmVyKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y3VycmVudC0+c3RydWN0dXJlKHZtKTsKIAotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm94eSgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KICAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+aGFzQmVlbkZsYXR0ZW5lZEJlZm9yZSgpKQpAQCAtNjUsNiArNTksMTIgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0NoYWluPiBQbwogICAgICAgICAgICAgc3RydWN0
dXJlLT5mbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSh2bSwgYXNPYmplY3QoY3VycmVudCkpOwog
ICAgICAgICB9CiAKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPnByb3BlcnR5QWNjZXNzZXNBcmVD
YWNoZWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzUHJveHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAg
ICAgIC8vIFRvIHNhdmUgbWVtb3J5LCB3ZSBkb24ndCBpbmNsdWRlIHRoZSBiYXNlIGluIHRoZSBj
aGFpbi4gV2UgbGV0CiAgICAgICAgIC8vIEFjY2Vzc0Nhc2UgcHJvdmlkZSB0aGUgYmFzZSB0byB1
cyBhcyBuZWVkZWQuCiAgICAgICAgIGlmIChpdGVyYXRpb25OdW1iZXIpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJ
KHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5
bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDkgKzU1LDkgQEAgdm9pZCBB
Y2Nlc3NHZW5lcmF0aW9uUmVzdWx0OjpkdW1wKFByaW50UwogICAgICAgICBvdXQucHJpbnQoIjoi
LCBtX2NvZGUpOwogfQogCi1XYXRjaHBvaW50KiBBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6OmFkZFdh
dGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlvbikKK3ZvaWQg
QWNjZXNzR2VuZXJhdGlvblN0YXRlOjppbnN0YWxsV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQogewotICAgIHJldHVybiBXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgV2F0
Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRJbnN0YWxsV2F0
Y2hwb2ludCgKICAgICAgICAgd2F0Y2hwb2ludHMsIGppdC0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LCBjb25kaXRpb24pOwogfQogCkBAIC0zNzMsNyArMzczLDcgQEAgdm9pZCBQb2x5bW9ycGhpY0Fj
Y2Vzczo6Y29tbWl0KAogICAgIGZvciAoV2F0Y2hwb2ludFNldCogc2V0IDogYWNjZXNzQ2FzZS5j
b21taXQodm0sIGlkZW50KSkgewogICAgICAgICBXYXRjaHBvaW50KiB3YXRjaHBvaW50ID0KICAg
ICAgICAgICAgIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNl
QW5kQWRkV2F0Y2hwb2ludCgKLSAgICAgICAgICAgICAgICB3YXRjaHBvaW50cywgY29kZUJsb2Nr
LCAmc3R1YkluZm8sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpOworICAgICAgICAgICAgICAg
IHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssICZzdHViSW5mbyk7CiAgICAgICAgIAogICAgICAgICBz
ZXQtPmFkZCh3YXRjaHBvaW50KTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkocmV2aXNpb24gMjUwMzY4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBzdHJ1Y3QgQWNjZXNzR2VuZXJhdGlvblN0
YXRlIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZv
PiB3YXRjaHBvaW50czsKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEpTQ2VsbD4+IHdlYWtSZWZl
cmVuY2VzOwogCi0gICAgV2F0Y2hwb2ludCogYWRkV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvbiYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpKTsKKyAgICB2b2lkIGlu
c3RhbGxXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJik7CiAKICAgICB2
b2lkIHJlc3RvcmVTY3JhdGNoKCk7CiAgICAgdm9pZCBzdWNjZWVkKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAJ
KHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYgKzU0LDkgQEAgdm9pZCBQ
cm9wZXJ0eUNvbmRpdGlvbjo6ZHVtcEluQ29udGV4dChQcgogICAgIGNhc2UgRXF1aXZhbGVuY2U6
CiAgICAgICAgIG91dC5wcmludChtX2hlYWRlci50eXBlKCksICIgb2YgIiwgbV9oZWFkZXIucG9p
bnRlcigpLCAiIHdpdGggIiwgaW5Db250ZXh0KHJlcXVpcmVkVmFsdWUoKSwgY29udGV4dCkpOwog
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgorICAg
ICAgICBvdXQucHJpbnQobV9oZWFkZXIudHlwZSgpLCAiIG9mICIsIG1faGVhZGVyLnBvaW50ZXIo
KSk7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEhhc1Byb3RvdHlwZToKICAgICAgICAgb3V0
LnByaW50KG1faGVhZGVyLnR5cGUoKSwgIiB3aXRoIHByb3RvdHlwZSAiLCBpbkNvbnRleHQoSlNW
YWx1ZShwcm90b3R5cGUoKSksIGNvbnRleHQpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODYsNiAr
ODksNyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWRBc3N1CiAgICAgY2Fz
ZSBBYnNlbmNlOgogICAgIGNhc2UgQWJzZW5jZU9mU2V0RWZmZWN0OgogICAgIGNhc2UgRXF1aXZh
bGVuY2U6CisgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgogICAgICAgICBpZiAo
IXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7CiAgICAgICAgICAg
ICBpZiAoUHJvcGVydHlDb25kaXRpb25JbnRlcm5hbDo6dmVyYm9zZSkKICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJJbnZhbGlkIGJlY2F1c2UgcHJvcGVydHkgYWNjZXNzZXMgYXJlIG5vdCBjYWNo
ZWFibGUuXG4iKTsKQEAgLTI0OCw3ICsyNTIsMTMgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6
aXNTdGlsbFZhbGlkQXNzdQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9IH0KKyAgICB9IAorICAgIGNhc2UgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZTog
eworICAgICAgICBpZiAoc3RydWN0dXJlLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gISFzdHJ1Y3R1cmUtPmZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeSh1aWQoKSk7CisgICAgfQorICAgIH0KICAgICAKICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2Myw2ICsyNzMs
NyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjp2YWxpZGl0eVJlcXVpcmVzCiAgICAgY2FzZSBQ
cmVzZW5jZToKICAgICBjYXNlIEFic2VuY2U6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBj
YXNlIEN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6CiAgICAgICAgIHJldHVybiBzdHJ1Y3R1cmUt
Pm5lZWRJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKTsKICAgICBjYXNlIEFic2VuY2VPZlNldEVm
ZmVjdDoKICAgICBjYXNlIEhhc1Byb3RvdHlwZToKQEAgLTI4OCw2ICsyOTksNyBAQCBib29sIFBy
b3BlcnR5Q29uZGl0aW9uOjppc1N0aWxsVmFsaWQoU3RyCiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgUHJlc2VuY2U6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToKKyAgICBjYXNlIEN1c3RvbUZ1bmN0
aW9uRXF1aXZhbGVuY2U6CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuZ2V0T3du
UHJvcGVydHlTbG90SXNJbXB1cmUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgYnJlYWs7CkBAIC0zMjksNiArMzQxLDIxIEBAIGJvb2wgUHJvcGVydHlDb25kaXRpb246Omlz
V2F0Y2hhYmxlV2hlblYKICAgICAgICAgCiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNh
c2UgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZTogeworICAgICAgICAvLyBXZSBqdXN0IHVzZSB0
aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCBmb3IgdGhpcy4gQSBzdHJ1Y3R1cmUg
UyBzdGFydHMKKyAgICAgICAgLy8gb2ZmIHdpdGggYSBwcm9wZXJ0eSBQIGluIHRoZSBzdGF0aWMg
cHJvcGVydHkgaGFzaCB0YWJsZS4gSWYgUyB0cmFuc2l0aW9ucyB0bworICAgICAgICAvLyBTJywg
ZWl0aGVyIFAgcmVtYWlucyBpbiB0aGUgc3RhdGljIHByb3BlcnR5IHRhYmxlIG9yIG5vdC4gSWYg
bm90LCB0aGVuIHdlCisgICAgICAgIC8vIGFyZSBubyBsb25nZXIgdmFsaWQuIFNvIHRoZSBhYm92
ZSBjaGVjayBvZiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZAorICAg
ICAgICAvLyBpcyBzdWZmaWNpZW50LgorICAgICAgICAvLworICAgICAgICAvLyBXZSBjb3VsZCBt
YWtlIHRoaXMgc21hcnRlciBpbiB0aGUgZnV0dXJlLCBzaW5jZSB3ZSBzb21ldGltZXMgcmVpZnkg
c3RhdGljIHByb3BlcnRpZXMuCisgICAgICAgIC8vIFdlIGNvdWxkIG1ha2UgdGhpcyBhZGFwdCB0
byBsb29raW5nIGF0IHRoZSBvYmplY3QncyBzdG9yYWdlIGZvciBzdWNoIHJlaWZpZWQgY3VzdG9t
CisgICAgICAgIC8vIGZ1bmN0aW9ucywgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LiBX
ZSBqdXN0IGFsbG93IHRoaXMgcHJvcGVydHkgY29uZGl0aW9uIHRvCisgICAgICAgIC8vIGludmFs
aWRhdGUgYW5kIGNyZWF0ZSBhbiBFcXVpdmFsZW5jZSB3YXRjaHBvaW50IGZvciB0aGUgbWF0ZXJp
YWxpemVkIHByb3BlcnR5IHNvbWV0aW1lCisgICAgICAgIC8vIGluIHRoZSBmdXR1cmUuCisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CkBAIC00MDMsNiArNDMwLDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEpTQwogICAgIGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CiAgICAg
ICAgIG91dC5wcmludCgiRXF1aXZhbGVuY2UiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZToKKyAgICAg
ICAgb3V0LnByaW50KCJDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlIik7CisgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEpTQzo6UHJvcGVydHlDb25kaXRpb246Okhhc1Byb3RvdHlwZToKICAgICAg
ICAgb3V0LnByaW50KCJIYXNQcm90b3R5cGUiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmgJ
KHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9w
ZXJ0eUNvbmRpdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQWJzZW5jZSwKICAgICAgICAgQWJzZW5jZU9mU2V0RWZmZWN0LAogICAgICAgICBF
cXVpdmFsZW5jZSwgLy8gQW4gYWRhcHRpdmUgd2F0Y2hwb2ludCBvbiB0aGlzIHdpbGwgYmUgYSBw
YWlyIG9mIHdhdGNocG9pbnRzLCBhbmQgd2hlbiB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb25zLCB3
ZSB3aWxsIHNldCB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBvbiB0aGUgbmV3IHN0cnVjdHVy
ZS4KKyAgICAgICAgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSwgLy8gQ3VzdG9tIHZhbHVlIG9y
IGFjY2Vzc29yLgogICAgICAgICBIYXNQcm90b3R5cGUKICAgICB9OwogCkBAIC0xMjIsNiArMTIz
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyKTsK
ICAgICAgICAgcmV0dXJuIGVxdWl2YWxlbmNlV2l0aG91dEJhcnJpZXIodWlkLCB2YWx1ZSk7CiAg
ICAgfQorCisgICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGN1c3RvbUZ1bmN0aW9uRXF1aXZh
bGVuY2UoVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIFByb3BlcnR5Q29u
ZGl0aW9uIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1faGVhZGVyID0gSGVhZGVyKHVpZCwgQ3Vz
dG9tRnVuY3Rpb25FcXVpdmFsZW5jZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
ICAgIAogICAgIHN0YXRpYyBQcm9wZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFy
cmllcihKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw2ICsyMDEsOCBAQCBwdWJs
aWM6CiAgICAgICAgIGNhc2UgRXF1aXZhbGVuY2U6CiAgICAgICAgICAgICByZXN1bHQgXj0gRW5j
b2RlZEpTVmFsdWVIYXNoOjpoYXNoKHUuZXF1aXZhbGVuY2UudmFsdWUpOwogICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZToKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
MjEzLDYgKzIyMyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiB1LnByb3RvdHlwZS5w
cm90b3R5cGUgPT0gb3RoZXIudS5wcm90b3R5cGUucHJvdG90eXBlOwogICAgICAgICBjYXNlIEVx
dWl2YWxlbmNlOgogICAgICAgICAgICAgcmV0dXJuIHUuZXF1aXZhbGVuY2UudmFsdWUgPT0gb3Ro
ZXIudS5lcXVpdmFsZW5jZS52YWx1ZTsKKyAgICAgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2
YWxlbmNlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjc5
LDEyICsyOTEsMTIgQEAgcHVibGljOgogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCiAgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlIGFuZCBwb3NzaWJseSBhbiBp
bXB1cmUgcHJvcGVydHkgd2F0Y2hwb2ludC4KICAgICBib29sIGlzV2F0Y2hhYmxlQXNzdW1pbmdJ
bXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoCi0gICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBi
YXNlID0gbnVsbHB0ciwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7
CisgICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlLCBXYXRjaGFiaWxpdHlFZmZvcnQg
PSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaXQn
cyBzdGlsbCB2YWxpZCBhbmQgd2UgY291bGQgZW5mb3JjZSB2YWxpZGl0eSBieSBzZXR0aW5nIGEg
dHJhbnNpdGlvbgogICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZS4KICAgICBib29s
IGlzV2F0Y2hhYmxlKAotICAgICAgICBTdHJ1Y3R1cmUqLCBKU09iamVjdCogYmFzZSA9IG51bGxw
dHIsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMpIGNvbnN0OworICAgICAgICBT
dHJ1Y3R1cmUqLCBKU09iamVjdCosIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VOb0NoYW5nZXMp
IGNvbnN0OwogICAgIAogICAgIGJvb2wgd2F0Y2hpbmdSZXF1aXJlc1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuY3BwCShyZXZpc2lvbiAyNTAzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKFZNJiB2bSwgY29uc3QgRmlyZURl
dGFpbCYpCit2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikKIHsKICAgICBp
ZiAoIW1faG9sZGVyLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTYyLDEyICs2Miwx
NSBAQCBpbmxpbmUgYm9vbCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluCiAgICAgcmV0dXJu
IG1fY29kZUJsb2NrLT5pc0xpdmUoKTsKIH0KIAotU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCitXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86Ok5vZGUmIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRkV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewotICAgIHJldHVybiBtX3dh
dGNocG9pbnRzLmFkZChrZXksICp0aGlzKTsKKyAgICBpZiAoIWtleSB8fCBrZXkuY29uZGl0aW9u
KCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkKKyAgICAgICAgcmV0
dXJuICptX3dhdGNocG9pbnRzLmFkZChXVEY6OmluX3BsYWNlPFN0cnVjdHVyZVRyYW5zaXRpb25T
dHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Piwga2V5LCAqdGhpcyk7CisgICAgQVNTRVJU
KGtleS5jb25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNl
KTsKKyAgICByZXR1cm4gKm1fd2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8QWRhcHRpdmVW
YWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKIH0KIAot
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAordm9pZCBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50
KAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBo
b2xkZXJSZWYsIENvZGVCbG9jayogY29kZUJsb2NrLAogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSkKIHsKQEAgLTc4LDcg
KzgxLDQxIEBAIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQqIFdhdGNocG8KICAgICAg
ICAgQVNTRVJUKGhvbGRlclJlZi0+bV9zdHViSW5mbyA9PSBzdHViSW5mbyk7CiAgICAgfQogICAg
IAotICAgIHJldHVybiBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoa2V5KTsKKyAgICBBU1NFUlQo
ISFrZXkpOworICAgIGF1dG8mIHdhdGNocG9pbnRWYXJpYW50ID0gaG9sZGVyUmVmLT5hZGRXYXRj
aHBvaW50KGtleSk7CisgICAgaWYgKGtleS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVx
dWl2YWxlbmNlKSB7CisgICAgICAgIGF1dG8mIGFkYXB0aXZlV2F0Y2hwb2ludCA9IFdURjo6Z2V0
PEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50Pih3YXRjaHBvaW50
VmFyaWFudCk7CisgICAgICAgIGFkYXB0aXZlV2F0Y2hwb2ludC5pbnN0YWxsKGNvZGVCbG9jay0+
dm0oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXV0byogc3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQgPSAmV1RGOjpnZXQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50KTsKKyAgICAgICAga2V5Lm9iamVjdCgp
LT5zdHJ1Y3R1cmUoKS0+YWRkVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQpOworICAgIH0KK30KKworV2F0Y2hwb2ludCogV2F0Y2hwb2ludHNPblN0cnVj
dHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsIENv
ZGVCbG9jayogY29kZUJsb2NrLAorICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKK3sK
KyAgICBpZiAoIWhvbGRlclJlZikKKyAgICAgICAgaG9sZGVyUmVmID0gbWFrZVVuaXF1ZTxXYXRj
aHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+KGNvZGVCbG9jaywgc3R1YkluZm8pOworICAgIGVs
c2UgeworICAgICAgICBBU1NFUlQoaG9sZGVyUmVmLT5tX2NvZGVCbG9jayA9PSBjb2RlQmxvY2sp
OworICAgICAgICBBU1NFUlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuICZXVEY6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4oaG9sZGVyUmVmLT5hZGRXYXRjaHBvaW50KE9iamVj
dFByb3BlcnR5Q29uZGl0aW9uKCkpKTsKK30KKwordm9pZCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludDo6aGFuZGxlRmlyZShWTSYsIGNvbnN0IEZpcmVEZXRhaWwm
KQoreworICAgIGlmICghbV9ob2xkZXItPmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gVGhpcyB3aWxsIGltcGxpY2l0bHkgY2F1c2UgbXkgb3duIGRlbWlzZTogc3R1YiByZXNl
dCByZW1vdmVzIGFsbCB3YXRjaHBvaW50cy4KKyAgICAvLyBUaGF0IHdvcmtzLCBiZWNhdXNlIGRl
bGV0aW5nIGEgd2F0Y2hwb2ludCByZW1vdmVzIGl0IGZyb20gdGhlIHNldCdzIGxpc3QsIGFuZAor
ICAgIC8vIHRoZSBzZXQncyBsaXN0IHRyYXZlcnNhbCBmb3IgZmlyaW5nIGlzIHJvYnVzdCBhZ2Fp
bnN0IHRoZSBzZXQgY2hhbmdpbmcuCisgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2hv
bGRlci0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgbV9ob2xkZXItPnN0dWJJbmZvKCktPnJl
c2V0KG1faG9sZGVyLT5jb2RlQmxvY2soKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAyNTAzNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oIgotI2luY2x1ZGUgIldhdGNo
cG9pbnQuaCIKLQogI2lmIEVOQUJMRShKSVQpCiAKKyNpbmNsdWRlICJBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgiCisjaW5jbHVkZSAiT2JqZWN0UHJvcGVydHlD
b25kaXRpb24uaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0JhZy5o
PgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CkBAIC00MCwxMiArNDAsMTIgQEAgY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgU3RydWN0dXJl
U3R1YkluZm87CiBjbGFzcyBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm87CiAKLWNsYXNz
IFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQgZmluYWwgOiBwdWJsaWMgV2F0Y2hwb2lu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hw
b2ludCk7CitjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlU3R1
YkNsZWFyaW5nV2F0Y2hwb2ludChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhvbGRlcikKLSAgICAgICAgOiBXYXRjaHBv
aW50KFdhdGNocG9pbnQ6OlR5cGU6OlN0cnVjdHVyZVN0dWJDbGVhcmluZykKKyAgICBTdHJ1Y3R1
cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludChjb25zdCBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8mIGhv
bGRlcikKKyAgICAgICAgOiBXYXRjaHBvaW50KFdhdGNocG9pbnQ6OlR5cGU6OlN0cnVjdHVyZVRy
YW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmcpCiAgICAgICAgICwgbV9ob2xkZXIoJmhvbGRl
cikKICAgICAgICAgLCBtX2tleShrZXkpCiAgICAgewpAQCAtNTksNiArNTksMjYgQEAgcHJpdmF0
ZToKICAgICBKU0NfV0FUQ0hQT0lOVF9GSUVMRChPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiwgbV9r
ZXkpOwogfTsKIAorY2xhc3MgQWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQgZmluYWwgOiBwdWJsaWMgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZSB7CisgICAgdXNpbmcgQmFzZSA9IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVl
V2F0Y2hwb2ludEJhc2U7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVWYWx1ZVN0
cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCisgICAgdm9pZCBoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYpIG92ZXJy
aWRlOworCitwdWJsaWM6CisgICAgQWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSwgV2F0Y2hwb2ludHNP
blN0cnVjdHVyZVN0dWJJbmZvJiBob2xkZXIpCisgICAgICAgIDogQmFzZShrZXkpCisgICAgICAg
ICwgbV9ob2xkZXIoJmhvbGRlcikKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtleS5j
b25kaXRpb24oKS5raW5kKCkgPT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKTsKKyAg
ICB9CisKKworcHJpdmF0ZToKKyAgICBQYWNrZWRQdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvPiBtX2hvbGRlcjsKK307CisKIGNsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0
dWJJbmZvKTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY5LDExICs4OSwxNiBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdX
YXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBr
ZXkpOworICAgIHVzaW5nIE5vZGUgPSBWYXJpYW50PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LCBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFy
aW5nV2F0Y2hwb2ludD47CisKKyAgICBOb2RlJiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50KiBlbnN1cmVSZWZlcmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgIHN0
YXRpYyB2b2lkIGVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50KAogICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVm
LAogICAgICAgICBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIGNvbnN0IE9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uJiBrZXkpOworICAgIHN0YXRpYyBXYXRjaHBvaW50KiBlbnN1cmVSZWZl
cmVuY2VBbmRBZGRXYXRjaHBvaW50KAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2lu
dHNPblN0cnVjdHVyZVN0dWJJbmZvPiYgaG9sZGVyUmVmLAorICAgICAgICBDb2RlQmxvY2sqLCBT
dHJ1Y3R1cmVTdHViSW5mbyopOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8oKSBjb25zdCB7IHJldHVybiBtX3N0dWJJbmZvOyB9CkBAIC04Myw3ICsxMDgsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CiAgICAgU3RydWN0dXJl
U3R1YkluZm8qIG1fc3R1YkluZm87Ci0gICAgQmFnPFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNo
cG9pbnQ+IG1fd2F0Y2hwb2ludHM7CisgICAgQmFnPFdURjo6VmFyaWFudDxTdHJ1Y3R1cmVUcmFu
c2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCwgQWRhcHRpdmVWYWx1ZVN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+PiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hw
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmgJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBjbGFz
cyBXYXRjaHBvaW50U2V0OwogI2lmIEVOQUJMRShKSVQpCiAjZGVmaW5lIEpTQ19XQVRDSFBPSU5U
X1RZUEVTX1dJVEhPVVRfREZHKG1hY3JvKSBcCiAgICAgSlNDX1dBVENIUE9JTlRfVFlQRVNfV0lU
SE9VVF9KSVQobWFjcm8pIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVTdHViQ2xlYXJpbmcsIFN0cnVj
dHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQpCisgICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlv
blN0cnVjdHVyZVN0dWJDbGVhcmluZywgU3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgSlNDX1dB
VENIUE9JTlRfVFlQRVMobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAkocmV2aXNpb24gMjUwMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBJbmxp
bmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJh
dGVDb25kaXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5z
bG90QmFzZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUu
aW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmlt
cGwoKSwgc2xvdC5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCkBAIC01
NDksNyArNTQ5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAog
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwog
ICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3Rv
bSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywg
c3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgaWRlbnQuaW1wbCgpLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0
aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ2xhc3NJbmZvLmgJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODks
MTIgKzE4OSwxNyBAQCBzdHJ1Y3QgTWV0aG9kVGFibGUgewogICAgIHNpemVvZihDbGFzc05hbWUp
CiAKIHN0cnVjdCBDbGFzc0luZm8geworICAgIHVzaW5nIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVu
Y3Rpb25QdHIgPSBSZWY8U25pcHBldD4gKCopKHZvaWQpOworCiAgICAgLy8gQSBzdHJpbmcgZGVu
b3RpbmcgdGhlIGNsYXNzIG5hbWUuIEV4YW1wbGU6ICJXaW5kb3ciLgogICAgIGNvbnN0IGNoYXIq
IGNsYXNzTmFtZTsKLQogICAgIC8vIFBvaW50ZXIgdG8gdGhlIGNsYXNzIGluZm9ybWF0aW9uIG9m
IHRoZSBiYXNlIGNsYXNzLgogICAgIC8vIG51bGxwdHJpZiB0aGVyZSBpcyBub25lLgogICAgIGNv
bnN0IENsYXNzSW5mbyogcGFyZW50Q2xhc3M7CisgICAgY29uc3QgSGFzaFRhYmxlKiBzdGF0aWNQ
cm9wSGFzaFRhYmxlOworICAgIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgY2hlY2tT
dWJDbGFzc1NuaXBwZXQ7CisgICAgTWV0aG9kVGFibGUgbWV0aG9kVGFibGU7CisgICAgVHlwZWRB
cnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VUeXBlOwogCiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlBhcmVudENsYXNzKCkKICAgICB7CkBAIC0yMTMsMTUgKzIxOCw2IEBAIHN0cnVjdCBD
bGFzc0luZm8gewogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBoYXNTdGF0aWNTZXR0ZXJPclJl
YWRvbmx5UHJvcGVydGllcygpIGNvbnN0OwotCi0gICAgY29uc3QgSGFzaFRhYmxlKiBzdGF0aWNQ
cm9wSGFzaFRhYmxlOwotCi0gICAgdXNpbmcgQ2hlY2tTdWJDbGFzc1NuaXBwZXRGdW5jdGlvblB0
ciA9IFJlZjxTbmlwcGV0PiAoKikodm9pZCk7Ci0gICAgQ2hlY2tTdWJDbGFzc1NuaXBwZXRGdW5j
dGlvblB0ciBjaGVja1N1YkNsYXNzU25pcHBldDsKLQotICAgIE1ldGhvZFRhYmxlIG1ldGhvZFRh
YmxlOwotCi0gICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJheVN0b3JhZ2VUeXBlOwogICAgIHVu
c2lnbmVkIHN0YXRpY0NsYXNzU2l6ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyMiwx
NSArMjIyMiw5IEBAIGJvb2wgSlNPYmplY3Q6OmdldE93blN0YXRpY1Byb3BlcnR5U2xvdCgKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWF1dG8gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRy
eShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0IC0+IE9wdGlvbmFsPFBy
b3BlcnR5SGFzaEVudHJ5PgorT3B0aW9uYWw8U3RydWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4g
SlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAgZm9yIChjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFz
c0luZm8odm0pOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgaWYg
KGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFi
bGUpIHsKLSAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBwcm9w
SGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBQ
cm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUsIGVudHJ5IH07Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3RydWN0dXJlKHZtKS0+
ZmluZFByb3BlcnR5SGFzaEVudHJ5KHByb3BlcnR5TmFtZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6
Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBoYXNJ
bnN0YW5jZVZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5oCShyZXZpc2lvbiAyNTAzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDMsNiArOTAzLDggQEAgcHVibGljOgogICAg
IGJvb2wgbWF5QmVQcm90b3R5cGUoKSBjb25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3RvdHlw
ZSgpOwogCisgICAgT3B0aW9uYWw8U3RydWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4gZmluZFBy
b3BlcnR5SGFzaEVudHJ5KFZNJiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKwogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKIHByb3RlY3RlZDoKQEAgLTEwMzIsNyArMTAzNCw3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgCiAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byB1bmRlY2lkZWQsIGludDMy
LCBkb3VibGUsIGFuZCBjb250aWd1b3VzLgogICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHMoKTsK
LSAgICAgICAgCisKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CkBAIC0xMDYwLDExICsxMDYyLDYg
QEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoVk0mLCBQ
cm9wZXJ0eVNsb3QmLCBDdXN0b21HZXR0ZXJTZXR0ZXIqLCB1bnNpZ25lZCwgU3RydWN0dXJlKik7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdChW
TSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7Ci0gICAgc3RydWN0IFByb3BlcnR5SGFz
aEVudHJ5IHsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsKLSAgICAgICAgY29uc3Qg
SGFzaFRhYmxlVmFsdWUqIHZhbHVlOwotICAgIH07Ci0gICAgT3B0aW9uYWw8UHJvcGVydHlIYXNo
RW50cnk+IGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYsIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgICAgIAogICAgIGJvb2wgcHV0QnlJbmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAg
IGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlvbmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4
ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgUHV0RGlyZWN0SW5kZXhNb2RlLCBBcnJheVN0b3JhZ2UqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBv
aW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaAkocmV2aXNpb24gMjUwMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2
ZVdhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTYgKzI5LDE2IEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi10ZW1wbGF0ZTx0eXBlbmFtZSBXYXRjaHBvaW50PgordGVtcGxhdGU8dHlw
ZW5hbWUgV2F0Y2hwb2ludFNldD4KIGNsYXNzIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVX
YXRjaHBvaW50IGZpbmFsIDogcHVibGljIEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludEJhc2UgewogcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBBZGFwdGl2ZUluZmVycmVk
UHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlOwotICAgIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRh
cHRpdmVXYXRjaHBvaW50KEpTQ2VsbCogb3duZXIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uJiBjb25kaXRpb24sIFdhdGNocG9pbnQmIHdhdGNocG9pbnQpCisgICAgT2JqZWN0UHJvcGVy
dHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQoSlNDZWxsKiBvd25lciwgY29uc3QgT2JqZWN0UHJv
cGVydHlDb25kaXRpb24mIGNvbmRpdGlvbiwgV2F0Y2hwb2ludFNldCYgd2F0Y2hwb2ludFNldCkK
ICAgICAgICAgOiBCYXNlKGNvbmRpdGlvbikKICAgICAgICAgLCBtX293bmVyKG93bmVyKQotICAg
ICAgICAsIG1fd2F0Y2hwb2ludCh3YXRjaHBvaW50KQorICAgICAgICAsIG1fd2F0Y2hwb2ludFNl
dCh3YXRjaHBvaW50U2V0KQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQod2F0Y2hwb2lu
dC5zdGF0ZU9uSlNUaHJlYWQoKSA9PSBJc1dhdGNoZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh3YXRjaHBvaW50U2V0LnN0YXRlT25KU1RocmVhZCgpID09IElzV2F0Y2hlZCk7CiAgICAgfQog
CiBwcml2YXRlOgpAQCAtNDksMTEgKzQ5LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRs
ZUZpcmUoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IG1fd2F0Y2hwb2ludC5maXJlQWxsKHZtLCBTdHJpbmdGaXJlRGV0YWlsKCJPYmplY3QgUHJvcGVy
dHkgaXMgY2hhbmdlZC4iKSk7CisgICAgICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBT
dHJpbmdGaXJlRGV0YWlsKCJPYmplY3QgUHJvcGVydHkgaXMgY2hhbmdlZC4iKSk7CiAgICAgfQog
CiAgICAgSlNDZWxsKiBtX293bmVyOwotICAgIFdhdGNocG9pbnQmIG1fd2F0Y2hwb2ludDsKKyAg
ICBXYXRjaHBvaW50U2V0JiBtX3dhdGNocG9pbnRTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMjUwMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzOCw0ICsxMjM4LDE1IEBAIGJvb2wgU3RydWN0
dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVzUXVpY2sKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0
byBTdHJ1Y3R1cmU6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lKSBjb25zdCAtPiBPcHRpb25hbDxQcm9wZXJ0eUhhc2hFbnRyeT4KK3sKKyAgICBmb3IgKGNv
bnN0IENsYXNzSW5mbyogaW5mbyA9IGNsYXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFy
ZW50Q2xhc3MpIHsKKyAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9
IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFibGUpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBIYXNo
VGFibGVWYWx1ZSogZW50cnkgPSBwcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUs
IGVudHJ5IH07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjUwMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDggQEAgY2xh
c3MgVW5pcXVlZFN0cmluZ0ltcGw7CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgRGVmZXJHQzsK
K3N0cnVjdCBIYXNoVGFibGU7CitzdHJ1Y3QgSGFzaFRhYmxlVmFsdWU7CiBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsKIGNsYXNzIFByb3BlcnR5
TmFtZUFycmF5RGF0YTsKQEAgLTYxNSw2ICs2MTcsMTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlIYXNoOyB9CiAKICAgICBz
dGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBj
b25zdCBTdHJ1Y3R1cmUqIGIpOworCisgICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKKyAg
ICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFs
dWUqIHZhbHVlOworICAgIH07CisgICAgT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIAogICAgIERFQ0xBUkVf
RVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5jcHAJKHJldmlzaW9uIDI1MDM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg2LDYgKzU4Niw3OSBAQCBwcml2
YXRlOgogICAgIFZlY3RvcjxpbnQ+IG1fdmVjdG9yOwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVj
dCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleFsyXSA9IHsK
KyAgICB7IDAsIC0xIH0sCisgICAgeyAtMSwgLTEgfSwKK307CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSB0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3Bl
IGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRl
Y29kZSh0aGlzVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAg
IGlmIChKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmplY3QtPmdldERpcmVjdCh2bSwgUHJvcGVydHlO
YW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJ0ZXN0RmllbGQiKSkpKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGljIGJvb2wgdGVzdFN0YXRpY0FjY2Vzc29yUHV0
dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBq
c0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAgIHJldHVybiB0aGlzT2JqZWN0
LT5wdXREaXJlY3Qodm0sIFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
dGVzdEZpZWxkIikpLCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFd
ID0geworICAgIHsgInRlc3RTdGF0aWNBY2Nlc3NvciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQ
cm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nl
c3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZh
bHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKSB9IH0sCit9OworCitzdGF0aWMgY29u
c3Qgc3RydWN0IEhhc2hUYWJsZSBzdGF0aWNDdXN0b21BY2Nlc3NvclRhYmxlID0KKyAgICB7IDEs
IDEsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVWYWx1ZXMsIHN0YXRp
Y0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9OworCitjbGFzcyBTdGF0aWNDdXN0b21BY2Nlc3Nv
ciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5h
bE9iamVjdDsKK3B1YmxpYzoKKyAgICBTdGF0aWNDdXN0b21BY2Nlc3NvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgfQorCisgICAgREVD
TEFSRV9JTkZPOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJy
aWRlc0dldE93blByb3BlcnR5U2xvdDsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJv
dG90eXBlKQorICAgIHsKKyAgICAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBTdGF0aWNDdXN0b21BY2Nlc3NvciogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOworICAgICAgICBTdGF0aWNDdXN0b21BY2Nlc3NvciogZ2V0dGVyID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8U3RhdGljQ3VzdG9tQWNjZXNzb3I+KHZtLmhlYXApKSBTdGF0
aWNDdXN0b21BY2Nlc3Nvcih2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgZ2V0dGVyLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBnZXR0ZXI7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKKyAg
ICB7CisgICAgICAgIGlmIChTdHJpbmcocHJvcGVydHlOYW1lLnVpZCgpKSA9PSAidGhpbkFpckN1
c3RvbUdldHRlciIpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNP
YmplY3QsIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1
dGU6OkN1c3RvbUFjY2Vzc29yLCB0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIEpTTm9uRmluYWxPYmpl
Y3Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworICAgIH0KK307CisKIGNsYXNzIERPTUpJVE5vZGUgOiBwdWJsaWMgSlNOb25GaW5hbE9i
amVjdCB7CiBwdWJsaWM6CiAgICAgRE9NSklUTm9kZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNzI5LDYgKzgwMiw3IEBAIHZvaWQgRE9NSklUR2V0dGVyOjpmaW5pc2hDcmVhdGlv
bihWTSYgdm0KICAgICBwdXREaXJlY3RDdXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImN1c3RvbUdldHRlciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7
CiB9CiAKKwogY2xhc3MgRE9NSklUR2V0dGVyQ29tcGxleCA6IHB1YmxpYyBET01KSVROb2RlIHsK
IHB1YmxpYzoKICAgICBET01KSVRHZXR0ZXJDb21wbGV4KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCkBAIC0xMTk5LDYgKzEyNzMsOCBAQCBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rp
b25PYmplY3Q6OnNfCiBjb25zdCBDbGFzc0luZm8gRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6
c19pbmZvID0geyAiRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51
bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoRE9NSklUQ2hlY2tTdWJDbGFzc09i
amVjdCkgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5m
byA9IHsgIkpTVGVzdEN1c3RvbUdldHRlclNldHRlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIs
IG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKSB9
OwogCitjb25zdCBDbGFzc0luZm8gU3RhdGljQ3VzdG9tQWNjZXNzb3I6OnNfaW5mbyA9IHsgIlN0
YXRpY0N1c3RvbUFjY2Vzc29yIiwgJkJhc2U6OnNfaW5mbywgJnN0YXRpY0N1c3RvbUFjY2Vzc29y
VGFibGUsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFCTEUoU3RhdGljQ3VzdG9tQWNjZXNzb3Ip
IH07CisKIEVsZW1lbnRIYW5kbGVPd25lciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewogICAg
IERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CkBAIC0yMDE1LDYgKzIwOTEsMTYgQEAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuYwogfQogI2VuZGlmCiAKK3N0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3Vz
dG9tQWNjZXNzb3IoRXhlY1N0YXRlKiBleGVjKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUg
YXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIg
bG9jayh2bSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdGF0aWNDdXN0b21BY2Nlc3Nv
cjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVs
bCgpKTsKKyAgICBhdXRvKiByZXN1bHQgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwog
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0
ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBh
c3NlcnRTY29wZTsKQEAgLTI1MzcsNiArMjYyMyw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICBhZGRGdW5jdGlv
bih2bSwgImNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIiLCBmdW5jdGlvbkNyZWF0ZVdhc21TdHJl
YW1pbmdQYXJzZXIsIDApOwogI2VuZGlmCisgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVTdGF0
aWNDdXN0b21BY2Nlc3NvciIsIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IsIDAp
OwogICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2V0UHJpdmF0ZVByb3BlcnR5IiwgZnVuY3Rpb25HZXRQ
cml2YXRlUHJvcGVydHksIDIpOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVy
RGVsZWdhdGUiLCBmdW5jdGlvblNldEltcHVyZUdldHRlckRlbGVnYXRlLCAyKTsKIAo=
</data>
<flag name="review"
          id="395318"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379862</attachid>
            <date>2019-09-30 17:03:43 -0700</date>
            <delta_ts>2019-09-30 17:50:53 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>61354</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTA1MzMpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDUwIEBACisyMDE5LTA5LTMwICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIElubGluZSBjYWNoaW5nIGlzIHdyb25nIGZvciBjdXN0b20gYWNjZXNz
b3JzIGFuZCBjdXN0b20gdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDE5OTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzUwODUwMzI2Pgor
CisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBtaWNyb2Jl
bmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLW1hdGVyaWFsaXplZC5qczogQWRkZWQuCisgICAgICAg
IChhc3NlcnQpOgorICAgICAgICAodGVzdDQuZ2V0IGNvbnN0KToKKyAgICAgICAgKiBtaWNyb2Jl
bmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLXRoaW4tYWlyLmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgICh0ZXN0NS5nZXQgY29uc3QpOgorICAgICAgICAodGVzdDUuZ2V0IHBy
b3RvKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLmpzOiBBZGRl
ZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0My5nZXQgY29uc3QpOgorICAgICAg
ICAqIG1pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUtMi5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAodGVzdDEuZ2V0TXVsdGlsaW5lKToKKyAgICAgICAgKHRlc3QxKToK
KyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MS5nZXRNdWx0aWxpbmUpOgorICAgICAgICAodGVz
dDEpOgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTEuanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3QzLmdldCBjb25zdCk6CisgICAgICAg
ICogc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMi5qczogQWRkZWQuCisgICAgICAgIChh
c3NlcnQpOgorICAgICAgICAodGVzdDQuZ2V0IGNvbnN0KToKKyAgICAgICAgKiBzdHJlc3MvY3Vz
dG9tLWFjY2Vzc29yLWRlbGV0ZS0zLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAg
ICAgICh0ZXN0NS5nZXQgY29uc3QpOgorICAgICAgICAodGVzdDUuZ2V0IHByb3RvKToKKyAgICAg
ICAgKiBzdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0xLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MS5nZXRNdWx0aWxpbmUpOgorICAgICAgICAo
dGVzdDEpOgorICAgICAgICAqIHN0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXByb3BlcnR5LTIu
anM6IEFkZGVkLgorICAgICAgICAodGVzdDIuZm9vKToKKyAgICAgICAgKHRlc3QyKToKKyAgICAg
ICAgKiBzdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0zLmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRlc3Q2LmZvbyk6CisgICAgICAgICh0ZXN0Nik6CisKIDIwMTktMDktMjcgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBLZWVwIEpTU3Ry
aW5nOjp2YWx1ZShFeGVjU3RhdGUqKSdzIHJlc3VsdCBhcyBTdHJpbmcgaW5zdGVhZCBvZiBgY29u
c3QgU3RyaW5nJmAKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1hY2Nlc3Nv
ci1tYXRlcmlhbGl6ZWQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Y3VzdG9tLWFjY2Vzc29yLW1hdGVyaWFsaXplZC5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNzb3ItbWF0ZXJpYWxpemVkLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFi
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAg
IGZ1bmN0aW9uIGdldChvKSB7CisgICAgICAgIHJldHVybiBvLnRlc3RTdGF0aWNBY2Nlc3NvcjsK
KyAgICB9CisgICAgbm9JbmxpbmUoZ2V0KTsKKworICAgIGNvbnN0IHByb3RvID0gJHZtLmNyZWF0
ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7CisgICAgY29uc3QgbyA9IHtfX3Byb3RvX186IHByb3Rv
fTsKKyAgICBjb25zdCBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywg
InRlc3RTdGF0aWNBY2Nlc3NvciIpOworICAgIGFzc2VydCghIWQuZ2V0KTsKKyAgICBvLnRlc3RG
aWVsZCA9IDEzMzc7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7Cisg
ICAgICAgIGFzc2VydChnZXQobykgPT09IDEzMzcpOworICAgIH0KK30KK3Rlc3Q0KCk7CkluZGV4
OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tYWNjZXNzb3ItdGhpbi1haXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLWFjY2Vzc29yLXRoaW4t
YWlyLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS1h
Y2Nlc3Nvci10aGluLWFpci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0IEBACitmdW5j
dGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOwor
fQorCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBmdW5jdGlvbiBnZXQobykgeworICAgICAgICBy
ZXR1cm4gby50aGluQWlyQ3VzdG9tR2V0dGVyOworICAgIH0KKyAgICBub0lubGluZShnZXQpOwor
CisgICAgY29uc3QgcHJvdG8gPSAkdm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAg
ICBjb25zdCBvID0ge19fcHJvdG9fXzogcHJvdG99OworICAgIG8udGVzdEZpZWxkID0gMTMzNzsK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0
KGdldChvKSA9PT0gMTMzNyk7CisgICAgfQorICAgIHByb3RvLnh5eiA9IDQyOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgNTAwMDAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0g
MTMzNyk7CisgICAgfQorfQordGVzdDUoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2N1c3RvbS1hY2Nlc3Nvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9jdXN0b20tYWNjZXNzb3IuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvY3VzdG9tLWFjY2Vzc29yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAK
K2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3I7Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGZ1bmN0aW9uIGdldChvKSB7CisgICAg
ICAgIHJldHVybiBvLnRlc3RTdGF0aWNBY2Nlc3NvcjsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0
KTsKKworICAgIGNvbnN0IHByb3RvID0gJHZtLmNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKCk7
CisgICAgY29uc3QgbyA9IHtfX3Byb3RvX186IHByb3RvfTsKKyAgICBvLnRlc3RGaWVsZCA9IDEz
Mzc7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDsgKytpKSB7CisgICAgICAgIGFz
c2VydChnZXQobykgPT09IDEzMzcpOworICAgIH0KK30KK3Rlc3QzKCk7CkluZGV4OiBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUtMi5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUtMi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUtMi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI2IEBACitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBmdW5jdGlvbiBn
ZXRNdWx0aWxpbmUobykgeworICAgICAgICByZXR1cm4gby5tdWx0aWxpbmU7CisgICAgfQorICAg
IG5vSW5saW5lKGdldE11bHRpbGluZSk7CisKKyAgICBSZWdFeHAuZm9vID0gNDI7CisKKyAgICBj
b25zdCBvID0ge307CisgICAgby5fX3Byb3RvX18gPSBSZWdFeHA7CisgICAgUmVnRXhwLm11bHRp
bGluZSA9IGZhbHNlOworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyArK2kpIHsK
KyAgICAgICAgYXNzZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KKyAgICBk
ZWxldGUgUmVnRXhwLmZvbzsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDA7ICsraSkg
eworICAgICAgICBhc3NlcnQoZ2V0TXVsdGlsaW5lKG8pID09PSBmYWxzZSk7CisgICAgfQorfQor
dGVzdDEoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2N1c3RvbS12YWx1ZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9jdXN0b20tdmFsdWUuanMJKG5v
bmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvY3VzdG9tLXZhbHVlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjEgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAg
aWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKCkg
eworICAgIGZ1bmN0aW9uIGdldE11bHRpbGluZShvKSB7CisgICAgICAgIHJldHVybiBvLm11bHRp
bGluZTsKKyAgICB9CisgICAgbm9JbmxpbmUoZ2V0TXVsdGlsaW5lKTsKKworICAgIGNvbnN0IG8g
PSB7fTsKKyAgICBvLl9fcHJvdG9fXyA9IFJlZ0V4cDsKKyAgICBSZWdFeHAubXVsdGlsaW5lID0g
ZmFsc2U7CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDA7ICsraSkgeworICAgICAg
ICBhc3NlcnQoZ2V0TXVsdGlsaW5lKG8pID09PSBmYWxzZSk7CisgICAgfQorfQorCit0ZXN0MSgp
OwpJbmRleDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0xLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMS5qcwkobm9u
ZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTEuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAg
ICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworZnVuY3Rpb24gdGVzdDMo
KSB7CisgICAgZnVuY3Rpb24gZ2V0KG8pIHsKKyAgICAgICAgcmV0dXJuIG8udGVzdFN0YXRpY0Fj
Y2Vzc29yOworICAgIH0KKyAgICBub0lubGluZShnZXQpOworCisgICAgY29uc3QgcHJvdG8gPSAk
dm0uY3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoKTsKKyAgICBjb25zdCBvID0ge19fcHJvdG9f
XzogcHJvdG99OworICAgIG8udGVzdEZpZWxkID0gMTMzNzsKKworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgNTAwOyArK2kpIHsKKyAgICAgICAgYXNzZXJ0KGdldChvKSA9PT0gMTMzNyk7CisgICAg
fQorCisgICAgcHJvdG8ueHl6ID0gNDI7CisKKyAgICBhc3NlcnQoZGVsZXRlIHByb3RvLnRlc3RT
dGF0aWNBY2Nlc3Nvcik7CisgICAgYXNzZXJ0KGdldChvKSA9PT0gdW5kZWZpbmVkKTsKK30KK3Rl
c3QzKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0yLmpz
CShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUt
Mi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBhc3NlcnQoYikg
eworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiB0
ZXN0NCgpIHsKKyAgICBmdW5jdGlvbiBnZXQobykgeworICAgICAgICByZXR1cm4gby50ZXN0U3Rh
dGljQWNjZXNzb3I7CisgICAgfQorICAgIG5vSW5saW5lKGdldCk7CisKKyAgICBjb25zdCBwcm90
byA9ICR2bS5jcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpOworICAgIGNvbnN0IG8gPSB7X19w
cm90b19fOiBwcm90b307CisgICAgY29uc3QgZCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IocHJvdG8sICJ0ZXN0U3RhdGljQWNjZXNzb3IiKTsKKyAgICBhc3NlcnQoISFkLmdldCk7
CisgICAgby50ZXN0RmllbGQgPSAxMzM3OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7
ICsraSkgeworICAgICAgICBhc3NlcnQoZ2V0KG8pID09PSAxMzM3KTsKKyAgICB9CisKKyAgICBw
cm90by54eXogPSA0MjsKKworICAgIGFzc2VydChkZWxldGUgcHJvdG8udGVzdFN0YXRpY0FjY2Vz
c29yKTsKKyAgICBhc3NlcnQoZ2V0KG8pID09PSB1bmRlZmluZWQpOworfQordGVzdDQoKTsKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL2N1c3RvbS1hY2Nlc3Nvci1kZWxldGUtMy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tYWNjZXNzb3ItZGVsZXRlLTMuanMJKG5vbmV4aXN0
ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvY3VzdG9tLWFjY2Vzc29yLWRlbGV0ZS0zLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQgQEAKK2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYg
KCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0aW9uIHRlc3Q1KCkgewor
ICAgIGZ1bmN0aW9uIGdldChvKSB7CisgICAgICAgIHJldHVybiBvLnRoaW5BaXJDdXN0b21HZXR0
ZXI7CisgICAgfQorICAgIG5vSW5saW5lKGdldCk7CisKKyAgICBjb25zdCBwcm90byA9ICR2bS5j
cmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvcigpOworICAgIGNvbnN0IG8gPSB7X19wcm90b19fOiBw
cm90b307CisgICAgby50ZXN0RmllbGQgPSAxMzM3OworCisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7ICsraSkgeworICAgICAgICBhc3NlcnQoZ2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cisg
ICAgcHJvdG8ueHl6ID0gNDI7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDA7ICsraSkgewor
ICAgICAgICBhc3NlcnQoZ2V0KG8pID09PSAxMzM3KTsKKyAgICB9Cit9Cit0ZXN0NSgpOwpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0xLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMS5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXBy
b3BlcnR5LTEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gYXNz
ZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworZnVu
Y3Rpb24gdGVzdDEoKSB7CisgICAgZnVuY3Rpb24gZ2V0TXVsdGlsaW5lKG8pIHsKKyAgICAgICAg
cmV0dXJuIG8ubXVsdGlsaW5lOworICAgIH0KKyAgICBub0lubGluZShnZXRNdWx0aWxpbmUpOwor
CisgICAgY29uc3QgbyA9IHt9OworICAgIG8uX19wcm90b19fID0gUmVnRXhwOworICAgIFJlZ0V4
cC5tdWx0aWxpbmUgPSBmYWxzZTsKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyArK2kp
IHsKKyAgICAgICAgYXNzZXJ0KGdldE11bHRpbGluZShvKSA9PT0gZmFsc2UpOworICAgIH0KKyAg
ICBkZWxldGUgUmVnRXhwLmlucHV0OworICAgIGRlbGV0ZSBSZWdFeHAubXVsdGlsaW5lOworICAg
IGFzc2VydChnZXRNdWx0aWxpbmUobykgPT09IHVuZGVmaW5lZCk7Cit9Cit0ZXN0MSgpOwpJbmRl
eDogSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZhbHVlLWRlbGV0ZS1wcm9wZXJ0eS0yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMi5q
cwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVsZXRlLXBy
b3BlcnR5LTIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gdGVz
dDIoKSB7CisgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICBjb25zdCBvID0ge307CisgICAg
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICBsZXQgeCA9IG8u
bXVsdGlsaW5lOworICAgICAgICAgICAgby5fX3Byb3RvX18gPSBSZWdFeHA7CisgICAgICAgIH0K
KyAgICAgICAgZGVsZXRlIFJlZ0V4cC5pbnB1dDsKKyAgICB9CisKKyAgICBmb28oKTsKKyAgICBm
b28oKTsKK30KK3Rlc3QyKCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9jdXN0b20tdmFsdWUtZGVs
ZXRlLXByb3BlcnR5LTMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvY3VzdG9tLXZh
bHVlLWRlbGV0ZS1wcm9wZXJ0eS0zLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNz
L2N1c3RvbS12YWx1ZS1kZWxldGUtcHJvcGVydHktMy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0IEBACitmdW5jdGlvbiB0ZXN0NigpIHsKKyAgICBmdW5jdGlvbiBmb28oKSB7CisgICAg
ICAgIGNvbnN0IG8gPSB7fTsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4OyBpKyspIHsK
KyAgICAgICAgICAgIG8ubGFzdE1hdGNoOworICAgICAgICAgICAgby5fX3Byb3RvX18gPSBSZWdF
eHA7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIFJlZ0V4cC5pbnB1dDsKKyAgICB9CisKKyAg
ICBmb28oKTsKKyAgICBmb28oKTsKK30KK3Rlc3Q2KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw5OCBAQAorMjAxOS0wOS0zMCAgU2FhbSBCYXJh
dGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBJbmxpbmUgY2FjaGluZyBpcyB3cm9u
ZyBmb3IgY3VzdG9tIGFjY2Vzc29ycyBhbmQgY3VzdG9tIHZhbHVlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAxOTk0CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81MDg1MDMyNj4KKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgor
CisgICAgICAgIFRoZXJlIHdhcyBhbiBvdmVyc2lnaHQgaW4gb3VyIGlubGluZSBjYWNoaW5nIGNv
ZGUgZm9yIGN1c3RvbSBhY2Nlc3NvcnMgYW5kCisgICAgICAgIGN1c3RvbSB2YWx1ZXMuIFdlIHVz
ZWQgdG8gYXNzdW1lIHRoYXQgaWYgYW4gb2JqZWN0IE8gaGFkIGEgY3VzdG9tIGZ1bmN0aW9uIGZv
cgorICAgICAgICBwcm9wZXJ0eSBQLCB0aGVuIE8gd2lsbCBmb3JldmVyIHJlc3BvbmQgdG8gdGhl
IHNhbWUgY3VzdG9tIGZ1bmN0aW9uIGZvcgorICAgICAgICBwcm9wZXJ0eSBQLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBhc3N1bXB0aW9uIHdhcyB2ZXJ5IHdyb25nLiBUaGVzZSBjdXN0b20gYWNj
ZXNzb3JzL3ZhbHVlcyBtaWdodCBiZQorICAgICAgICBwcm9wZXJ0aWVzIGluIEpTIHdoaWNoIGFy
ZSBjb25maWd1cmFibGUsIHNvIHRoZXkgY2FuIGJlIHJld3JpdHRlbiB0byBiZQorICAgICAgICBv
dGhlciBwcm9wZXJ0aWVzLiBPdXIgaW5saW5lIGNhY2hpbmcgY29kZSB3b3VsZCBiZSB3cm9uZyBp
biB0aGUgc2NlbmFyaW9zCisgICAgICAgIHdoZXJlIHRoZXNlIHByb3BlcnR5IGRlc2NyaXB0b3Jz
IGdvdCByZWRlZmluZWQuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIGl0IHNv
IHRoYXQgd2Ugbm93IHByb3Blcmx5IHdhdGNocG9pbnQgZm9yIGN1c3RvbSBmdW5jdGlvbnMKKyAg
ICAgICAgYmVpbmcgY2hhbmdlZC4gSWYgdGhlIGN1c3RvbSBhY2Nlc3NvciBoYXMgYmVlbiBtYXRl
cmlhbGl6ZWQsIHdlIHBsYWNlIGFuCisgICAgICAgIEVxdWl2YWxlbmNlIHdhdGNocG9pbnQgb24g
dGhlIGN1c3RvbSBhY2Nlc3Nvci4gVGhpcyBwYXRjaCBhbHNvIHRlYWNoZXMKKyAgICAgICAgU3Ry
dWN0dXJlU3R1YkluZm8gaG93IHRvIHdhdGNocG9pbnQgb24gcHJvcGVydHkgdmFsdWUgZXF1aXZh
bGVuY2UuIEJlZm9yZSwKKyAgICAgICAgd2UganVzdCB3YXRjaHBvaW50ZWQgb24gc3RydWN0dXJl
IHRyYW5zaXRpb25zLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGFkZHMgYSBu
ZXcgcHJvcGVydHkgY29uZGl0aW9uIGtpbmQgZm9yIHdoZW4gdGhlIGN1c3RvbSBmdW5jdGlvbgor
ICAgICAgICBleGlzdHMgaW5zaWRlIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUuIFRoaXMgY2Fz
ZSBpcyByZWFsbHkgZWFzeSB0byB0ZXN0IGZvcgorICAgICAgICBiZWNhdXNlIHdlIGp1c3QgbmVl
ZCB0byBzZWUgaWYgdGhlIHN0cnVjdHVyZSBzdGlsbCBoYXMgc3RhdGljIHByb3BlcnRpZXMgYW5k
CisgICAgICAgIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUgaGFzIHRoZSBlbnRyeSBmb3IgYSBw
YXJ0aWN1bGFyIHByb3BlcnR5LiBUaGlzCisgICAgICAgIHByb3BlcnR5IGNvbmRpdGlvbiBraW5k
IGp1c3QgbmVlZHMgdG8gd2F0Y2ggZm9yIHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBiZWNhdXNlCisg
ICAgICAgIGFuIGVudHJ5IGluIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUgY2FuJ3QgYmUgbXV0
YXRlZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgbmV1dHJhbCBvbiB0aGUgbWlj
cm9iZW5jaG1hcmtzIEkndmUgYWRkZWQuCisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6QWNjZXNzQ2FzZSk6CisgICAgICAgIChK
U0M6OkFjY2Vzc0Nhc2U6OmNvdWxkU3RpbGxTdWNjZWVkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
QWNjZXNzQ2FzZTo6Z2VuZXJhdGVJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9BZGFwdGl2ZUlu
ZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmg6CisgICAgICAgICogYnl0ZWNvZGUv
T2JqZWN0UHJvcGVydHlDb25kaXRpb24uY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQcm9wZXJ0
eUNvbmRpdGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0
eVdhdGNocG9pbnQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29u
ZGl0aW9uLmg6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpjdXN0b21G
dW5jdGlvbkVxdWl2YWxlbmNlKToKKyAgICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNv
bmRpdGlvblNldC5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
OjpoYXNPbmVTbG90QmFzZUNvbmRpdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6Ok9iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0OjpzbG90QmFzZUNvbmRpdGlvbiBjb25zdCk6CisgICAgICAgIChK
U0M6OmdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0Q3VzdG9tKToKKyAg
ICAgICAgKiBieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oOgorICAgICAgICAq
IGJ5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6UG9seVBy
b3RvQWNjZXNzQ2hhaW46OmNyZWF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3NHZW5lcmF0aW9uU3RhdGU6Omluc3RhbGxX
YXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6UG9seW1vcnBoaWNBY2Nlc3M6OmNvbW1pdCk6Cisg
ICAgICAgIChKU0M6OkFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2ludCk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaDoKKyAgICAgICAgKiBi
eXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHA6CisgICAgICAgIChKU0M6OlByb3BlcnR5Q29u
ZGl0aW9uOjpkdW1wSW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25k
aXRpb246OmlzU3RpbGxWYWxpZEFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXNJbXB1
cmVQcm9wZXJ0eVdhdGNocG9pbnQgY29uc3QpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRp
dGlvbjo6aXNTdGlsbFZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlDb25kaXRp
b246OmlzV2F0Y2hhYmxlV2hlblZhbGlkIGNvbnN0KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRl
cm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaDoKKyAgICAgICAg
KEpTQzo6UHJvcGVydHlDb25kaXRpb246OmN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2UpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6aGFzaCBjb25zdCk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5Q29uZGl0aW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6YWRk
V2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5m
bzo6ZW5zdXJlUmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQpOgorICAgICAgICAoSlNDOjpX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNo
cG9pbnQpOgorICAgICAgICAoSlNDOjpBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5n
V2F0Y2hwb2ludDo6aGFuZGxlRmlyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQ6OmZpcmVJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oOgorICAgICAgICAqIGJ5dGVjb2Rl
L1dhdGNocG9pbnQuaDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6
OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAg
ICAgICogcnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeSBjb25zdCk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAgICAqIHJ1bnRpbWUvT2JqZWN0
UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaDoKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZmluZFByb3BlcnR5SGFzaEVu
dHJ5IGNvbnN0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHRv
b2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjp0ZXN0U3RhdGljQWNjZXNzb3JHZXR0
ZXIpOgorICAgICAgICAoSlNDOjp0ZXN0U3RhdGljQWNjZXNzb3JQdXR0ZXIpOgorICAgICAgICAo
SlNDOjpTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6U3RhdGljQ3VzdG9tQWNjZXNzb3IpOgorICAgICAg
ICAoSlNDOjpTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6U3RhdGljQ3VzdG9tQWNjZXNzb3I6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlN0YXRp
Y0N1c3RvbUFjY2Vzc29yOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpmdW5j
dGlvbkNyZWF0ZVN0YXRpY0N1c3RvbUFjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJW
TTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDE5LTA5LTI4ICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJv
ICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBGaXggbm9uLXVuaWZp
ZWQgYnVpbGQgaXNzdWUgY2F1c2VkIGJ5IHIyNTA0NDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNiArNjEsNyBAQCBBY2Nlc3NDYXNlOjpBY2Nlc3NDYXNlKFZNJiB2bSwgSlNDZWxs
KiBvCiB7CiAgICAgbV9zdHJ1Y3R1cmUuc2V0TWF5QmVOdWxsKHZtLCBvd25lciwgc3RydWN0dXJl
KTsKICAgICBtX2NvbmRpdGlvblNldCA9IGNvbmRpdGlvblNldDsKKyAgICBSRUxFQVNFX0FTU0VS
VChtX2NvbmRpdGlvblNldC5pc1ZhbGlkKCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gQWNjZXNzQ2FzZTo6Y3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgQWNjZXNzVHlw
ZSB0eXBlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0LCBzdGQ6OnVuaXF1ZV9w
dHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IHByb3RvdHlwZUFjY2Vzc0NoYWluKQpAQCAtMzEwLDcg
KzMxMSwxNiBAQCBib29sIEFjY2Vzc0Nhc2U6OmRvZXNDYWxscyhWZWN0b3I8SlNDZWxsCiAKIGJv
b2wgQWNjZXNzQ2FzZTo6Y291bGRTdGlsbFN1Y2NlZWQoKSBjb25zdAogewotICAgIHJldHVybiBt
X2NvbmRpdGlvblNldC5zdHJ1Y3R1cmVzRW5zdXJlVmFsaWRpdHlBc3N1bWluZ0ltcHVyZVByb3Bl
cnR5V2F0Y2hwb2ludCgpOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24m
IGNvbmRpdGlvbiA6IG1fY29uZGl0aW9uU2V0KSB7CisgICAgICAgIGlmIChjb25kaXRpb24uY29u
ZGl0aW9uKCkua2luZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZSkgeworICAg
ICAgICAgICAgaWYgKCFjb25kaXRpb24uaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVByb3BlcnR5
V2F0Y2hwb2ludChQcm9wZXJ0eUNvbmRpdGlvbjo6V2F0Y2hhYmlsaXR5RWZmb3J0OjpFbnN1cmVX
YXRjaGFiaWxpdHkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghY29uZGl0aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0
eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBvaW50KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiBib29s
IEFjY2Vzc0Nhc2U6OmNhblJlcGxhY2UoY29uc3QgQWNjZXNzQ2FzZSYgb3RoZXIpIGNvbnN0CkBA
IC03MDksMTkgKzcxOSwxOCBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NH
ZW5lCiAgICAgR1BSUmVnIHRoaXNHUFIgPSBzdGF0ZS50aGlzR1BSICE9IEludmFsaWRHUFJSZWcg
PyBzdGF0ZS50aGlzR1BSIDogYmFzZUdQUjsKICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHN0YXRl
LnNjcmF0Y2hHUFI7CiAKLSAgICBBU1NFUlQobV9jb25kaXRpb25TZXQuc3RydWN0dXJlc0Vuc3Vy
ZVZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSk7Ci0KICAgICBmb3Ig
KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvblNl
dCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9wb2x5UHJvdG9BY2Nlc3NDaGFpbik7CiAK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVj
dHVyZSh2bSk7Ci0KLSAgICAgICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1w
dXJlUHJvcGVydHlXYXRjaHBvaW50KCkpIHsKLSAgICAgICAgICAgIHN0cnVjdHVyZS0+YWRkVHJh
bnNpdGlvbldhdGNocG9pbnQoc3RhdGUuYWRkV2F0Y2hwb2ludChjb25kaXRpb24pKTsKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbi5pc1dhdGNoYWJsZUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KFByb3BlcnR5Q29uZGl0aW9uOjpXYXRjaGFiaWxpdHlFZmZvcnQ6OkVuc3VyZVdhdGNoYWJp
bGl0eSkpIHsKKyAgICAgICAgICAgIHN0YXRlLmluc3RhbGxXYXRjaHBvaW50KGNvbmRpdGlvbik7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghY29uZGl0
aW9uLnN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVydHlXYXRjaHBv
aW50KHN0cnVjdHVyZSkpIHsKKyAgICAgICAgLy8gRm9yIG5vdywgd2Ugb25seSBhbGxvdyBlcXVp
dmFsZW5jZSB3aGVuIGl0J3Mgd2F0Y2hhYmxlLgorICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25k
aXRpb24uY29uZGl0aW9uKCkua2luZCgpICE9IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5j
ZSk7CisKKyAgICAgICAgaWYgKCFjb25kaXRpb24uc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNz
dW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSkgewogICAgICAgICAgICAgLy8gVGhlIHJl
YXNvbiB3aHkgdGhpcyBjYW5ub3QgaGFwcGVuIGlzIHRoYXQgd2UgcmVxdWlyZSB0aGF0IFBvbHlt
b3JwaGljQWNjZXNzIGNhbGxzCiAgICAgICAgICAgICAvLyBBY2Nlc3NDYXNlOjpnZW5lcmF0ZSgp
IG9ubHkgYWZ0ZXIgaXQgaGFzIHZlcmlmaWVkIHRoYXQKICAgICAgICAgICAgIC8vIEFjY2Vzc0Nh
c2U6OmNvdWxkU3RpbGxTdWNjZWVkKCkgcmV0dXJuZWQgdHJ1ZS4KQEAgLTczMSw2ICs3NDAsNyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlSW1wbChBY2Nlc3NHZW5lCiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdlYWsgcmVmZXJlbmNlIHRo
YXQgaXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjb25kaXRpb24ub2JqZWN0KCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIHN0
YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUpKTsKIAogICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY29uZGl0aW9uLm9iamVjdCgpKSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgJKHJldmlzaW9u
IDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BZGFwdGl2ZUluZmVy
cmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKKy8vIEZJWE1FOiBUaGlzIGlzbid0IGFjdHVh
bGx5IGEgV2F0Y2hwb2ludC4gV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBuYW1lIHdoaWNoIGJl
dHRlciByZWZsZWN0cyB0aGF0OgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMjM4MQogY2xhc3MgQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50QmFzZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25kaXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDE4ICs0NiwxMiBAQCB2b2lkIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uOjpk
dW1wKFByaW50CiAgICAgZHVtcEluQ29udGV4dChvdXQsIG51bGxwdHIpOwogfQogCi1ib29sIE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uOjpzdHJ1Y3R1cmVFbnN1cmVzVmFsaWRpdHlBc3N1bWluZ0lt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9w
ZXJ0eVdhdGNocG9pbnQoc3RydWN0dXJlKTsKLX0KLQogYm9vbCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvbjo6c3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNo
cG9pbnQoKSBjb25zdAogewogICAgIGlmICghKnRoaXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICByZXR1cm4gc3RydWN0dXJlRW5zdXJlc1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQ
cm9wZXJ0eVdhdGNocG9pbnQobV9vYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICByZXR1cm4gbV9j
b25kaXRpb24uaXNTdGlsbFZhbGlkQXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQobV9v
YmplY3QtPnN0cnVjdHVyZSgpLCBudWxscHRyKTsKIH0KIAogYm9vbCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbjo6dmFsaWRpdHlSZXF1aXJlc0ltcHVyZVByb3BlcnR5V2F0Y2hwb2ludChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvbi5oCShyZXZpc2lvbiAyNTA1
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0UHJvcGVydHlDb25k
aXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDYgKzEyMSwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lcik7CiAgICAgICAgIHJldHVybiBlcXVp
dmFsZW5jZVdpdGhvdXRCYXJyaWVyKG9iamVjdCwgdWlkLCB2YWx1ZSk7CiAgICAgfQorCisgICAg
c3RhdGljIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uIGN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2Uo
CisgICAgICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIG9iamVjdCwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCkKKyAgICB7CisgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9u
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fb2JqZWN0ID0gb2JqZWN0OworICAgICAgICByZXN1
bHQubV9jb25kaXRpb24gPSBQcm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFs
ZW5jZSh1aWQpOworICAgICAgICBpZiAob3duZXIpCisgICAgICAgICAgICB2bS5oZWFwLndyaXRl
QmFycmllcihvd25lcik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAg
IHN0YXRpYyBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiBoYXNQcm90b3R5cGVXaXRob3V0QmFycmll
cihKU09iamVjdCogb2JqZWN0LCBKU09iamVjdCogcHJvdG90eXBlKQogICAgIHsKQEAgLTE5Myw3
ICsyMDQsNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gQ2hlY2tzIGlmIHRoZSBvYmplY3QncyBz
dHJ1Y3R1cmUgY2xhaW1zIHRoYXQgdGhlIHByb3BlcnR5IHdvbid0IGJlIGludGVyY2VwdGVkLiBW
YWxpZGl0eQogICAgIC8vIGRvZXMgbm90IHJlcXVpcmUgd2F0Y2hwb2ludHMgb24gdGhlIG9iamVj
dC4KLSAgICBib29sIHN0cnVjdHVyZUVuc3VyZXNWYWxpZGl0eUFzc3VtaW5nSW1wdXJlUHJvcGVy
dHlXYXRjaHBvaW50KFN0cnVjdHVyZSopIGNvbnN0OwogICAgIGJvb2wgc3RydWN0dXJlRW5zdXJl
c1ZhbGlkaXR5QXNzdW1pbmdJbXB1cmVQcm9wZXJ0eVdhdGNocG9pbnQoKSBjb25zdDsKICAgICAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCBhbiBpbXB1cmUgcHJvcGVydHkgd2F0Y2hw
b2ludCB0byBlbnN1cmUgdmFsaWRpdHkgZXZlbiBpZgpAQCAtMjI3LDcgKzIzNyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0eUVmZm9ydCA9IFByb3Bl
cnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKIAogICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCBpdCdzIHN0aWxsIHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNl
dHRpbmcgYSB0cmFuc2l0aW9uCi0gICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgor
ICAgIC8vIHdhdGNocG9pbnQgb24gdGhlIHN0cnVjdHVyZSwgYW5kIGEgdmFsdWUgY2hhbmdlIHdh
dGNocG9pbnQgaWYgd2UncmUgRXF1aXZhbGVuY2UuCiAgICAgYm9vbCBpc1dhdGNoYWJsZSgKICAg
ICAgICAgU3RydWN0dXJlKiwKICAgICAgICAgUHJvcGVydHlDb25kaXRpb246OldhdGNoYWJpbGl0
eUVmZm9ydCA9IFByb3BlcnR5Q29uZGl0aW9uOjpNYWtlTm9DaGFuZ2VzKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkocmV2aXNpb24gMjUwNTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsMjIgQEAgdW5zaWduZWQgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQ6Om51bQogCiBib29sIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0OjpoYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChudW1iZXJPZkNvbmRpdGlv
bnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6UHJlc2VuY2UpID09IDEpICE9IChudW1iZXJP
ZkNvbmRpdGlvbnNXaXRoS2luZChQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpID09IDEp
OworICAgIGJvb2wgc2F3QmFzZSA9IGZhbHNlOworICAgIGZvciAoY29uc3QgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24mIGNvbmRpdGlvbiA6ICp0aGlzKSB7CisgICAgICAgIHN3aXRjaCAoY29uZGl0
aW9uLmtpbmQoKSkgeworICAgICAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpQcmVzZW5jZToK
KyAgICAgICAgY2FzZSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2U6CisgICAgICAgIGNh
c2UgUHJvcGVydHlDb25kaXRpb246OkN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6CisgICAgICAg
ICAgICBpZiAoc2F3QmFzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBzYXdCYXNlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gc2F3
QmFzZTsKIH0KIAogT2JqZWN0UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDb25kaXRp
b25TZXQ6OnNsb3RCYXNlQ29uZGl0aW9uKCkgY29uc3QKQEAgLTcxLDcgKzg2LDggQEAgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24gT2JqZWN0UHJvcGVydHlDbwogICAgIHVuc2lnbmVkIG51bUZvdW5k
ID0gMDsKICAgICBmb3IgKGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24g
OiAqdGhpcykgewogICAgICAgICBpZiAoY29uZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRp
dGlvbjo6UHJlc2VuY2UKLSAgICAgICAgICAgIHx8IGNvbmRpdGlvbi5raW5kKCkgPT0gUHJvcGVy
dHlDb25kaXRpb246OkVxdWl2YWxlbmNlKSB7CisgICAgICAgICAgICB8fCBjb25kaXRpb24ua2lu
ZCgpID09IFByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZQorICAgICAgICAgICAgfHwgY29u
ZGl0aW9uLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6Q3VzdG9tRnVuY3Rpb25FcXVpdmFs
ZW5jZSkgewogICAgICAgICAgICAgcmVzdWx0ID0gY29uZGl0aW9uOwogICAgICAgICAgICAgbnVt
Rm91bmQrKzsKICAgICAgICAgfQpAQCAtMjI4LDYgKzI0NCwxMyBAQCBPYmplY3RQcm9wZXJ0eUNv
bmRpdGlvbiBnZW5lcmF0ZUNvbmRpdGlvCiAgICAgICAgIHJlc3VsdCA9IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uOjplcXVpdmFsZW5jZSh2bSwgb3duZXIsIG9iamVjdCwgdWlkLCB2YWx1ZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21G
dW5jdGlvbkVxdWl2YWxlbmNlOiB7CisgICAgICAgIGF1dG8gZW50cnkgPSBvYmplY3QtPmZpbmRQ
cm9wZXJ0eUhhc2hFbnRyeSh2bSwgdWlkKTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAg
ICAgIHJldHVybiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbigpOworICAgICAgICByZXN1bHQgPSBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvbjo6Y3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZSh2bSwgb3du
ZXIsIG9iamVjdCwgdWlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBPYmpl
Y3RQcm9wZXJ0eUNvbmRpdGlvbigpOwpAQCAtMzc4LDE1ICs0MDEsMzkgQEAgT2JqZWN0UHJvcGVy
dHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaQogCiBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKICAgICBW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBoZWFkU3Ry
dWN0dXJlLCBKU09iamVjdCogcHJvdG90eXBlLAotICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAg
ICByZXR1cm4gZ2VuZXJhdGVDb25kaXRpb25zKAogICAgICAgICB2bSwgZXhlYy0+bGV4aWNhbEds
b2JhbE9iamVjdCgpLCBoZWFkU3RydWN0dXJlLCBwcm90b3R5cGUsCiAgICAgICAgIFsmXSAoVmVj
dG9yPE9iamVjdFByb3BlcnR5Q29uZGl0aW9uPiYgY29uZGl0aW9ucywgSlNPYmplY3QqIG9iamVj
dCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBpZiAob2JqZWN0ID09IHByb3RvdHlwZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIE9iamVjdFByb3BlcnR5Q29uZGl0
aW9uIHJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdGVDb25kaXRpb24odm0sIG93bmVy
LCBvYmplY3QsIHVpZCwgUHJvcGVydHlDb25kaXRpb246OkFic2VuY2UpOworICAgICAgICAgICAg
YXV0byBraW5kID0gUHJvcGVydHlDb25kaXRpb246OkFic2VuY2U7CisgICAgICAgICAgICBpZiAo
b2JqZWN0ID09IHByb3RvdHlwZSkgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCB1aWQpOworICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB3
ZSByZWlmeSBjdXN0b20gYWNjZXNzb3JzLCB3ZSB3cmFwIHRoZW0gaW4gYSBKU0Z1bmN0aW9uIHRo
YXQgd2Ugc2hvdmUKKyAgICAgICAgICAgICAgICAgICAgLy8gaW5zaWRlIGEgR2V0dGVyU2V0dGVy
LiBTbywgb25jZSB3ZSd2ZSByZWlmaWVkIGEgY3VzdG9tIGFjY2Vzc29yLCB3ZSB3aWxsCisgICAg
ICAgICAgICAgICAgICAgIC8vIG5vIGxvbmdlciBzZWUgaXQgYXMgYSAiY3VzdG9tIiBhY2Nlc3Nv
ci92YWx1ZS4gSGVuY2UsIGlmIG91ciBwcm9wZXJ0eSBhY2Nlc3MgYWN0dWFsbHkKKyAgICAgICAg
ICAgICAgICAgICAgLy8gbm90aWNlcyBhIGN1c3RvbSwgaXQgbXVzdCBiZSBhIEN1c3RvbUdldHRl
clNldHRlclR5cGUgY2VsbCBvciBzb21ldGhpbmcKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4g
dGhlIHN0YXRpYyBwcm9wZXJ0eSB0YWJsZS4gQ3VzdG9tIHZhbHVlcyBnZXQgcmVpZmllZCBpbnRv
IEN1c3RvbUdldHRlclNldHRlcnMuCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKHZhbHVlLCB2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09
IEN1c3RvbUdldHRlclNldHRlclR5cGUpOworICAgICAgICAgICAgICAgICAgICBraW5kID0gUHJv
cGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
c3RydWN0dXJlLT5maW5kUHJvcGVydHlIYXNoRW50cnkodWlkKSkKKyAgICAgICAgICAgICAgICAg
ICAga2luZCA9IFByb3BlcnR5Q29uZGl0aW9uOjpDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOwor
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udERlbGV0ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbid0IGNoYW5nZSwg
c28gd2UgY2FuIGJsaW5kbHkgY2FjaGUgaXQuCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgbWVhbnMgd2UgbWF0ZXJpYWxpemVkIGEgY3VzdG9tIG91dCBvZiB0aGluIGFpciBhbmQgaXQn
cyBub3QgRG9udERlbGV0ZSAoaS5lLCBpdCBjYW4gYmUKKyAgICAgICAgICAgICAgICAgICAgLy8g
cmVkZWZpbmVkKS4gVGhpcyBpcyBjdXJpb3VzLiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGNy
YXNoIGhlcmUuIFdlIGNvdWxkIGJsaW5kbHkgY2FjaGUKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhlIGZ1bmN0aW9uLiBPciB3ZSBjb3VsZCBibGluZGx5IG5vdCBjYWNoZSBpdC4gSG93ZXZlciwg
d2UgZG9uJ3QgYWN0dWFsbHkgZG8gdGhpcyBpbiBXZWJLaXQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gcmlnaHQgbm93LCBzbyBpdCdzIHJlYXNvbmFibGUgdG8gZGVjaWRlIHdoYXQgdG8gZG8gbGF0
ZXIgKG9yIHRvIHdhcm4gcGVvcGxlIG9mIGZvcmdldHRpbmcgRG9uZURlbGV0ZS4pCisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgT2JqZWN0UHJvcGVydHlDb25kaXRpb24gcmVzdWx0ID0gZ2VuZXJhdGVDb25kaXRpb24odm0s
IG93bmVyLCBvYmplY3QsIHVpZCwga2luZCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjb25kaXRpb25zLmFwcGVu
ZChyZXN1bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdFBy
b3BlcnR5Q29uZGl0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0LmgJKHJldmlzaW9uIDI1MDUzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RQcm9wZXJ0eUNvbmRpdGlv
blNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsNyArMTc2LDcgQEAgT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaQogICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwog
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgZ2VuZXJhdGVDb25kaXRpb25zRm9yUHJvdG90eXBl
UHJvcGVydHlIaXRDdXN0b20oCiAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsCi0gICAgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAKIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IGdlbmVyYXRlQ29uZGl0
aW9uc0Zvckluc3RhbmNlT2YoCiAgICAgVk0mLCBKU0NlbGwqIG93bmVyLCBFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmUqIGhlYWRTdHJ1Y3R1cmUsIEpTT2JqZWN0KiBwcm90b3R5cGUsIGJvb2wgc2hvdWxk
SGl0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nl
c3NDaGFpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcAkocmV2aXNpb24gMjUwNTMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTIgKzUxLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBvbHlQcm90b0FjY2Vzc0No
YWluPiBQbwogICAgIGZvciAodW5zaWduZWQgaXRlcmF0aW9uTnVtYmVyID0gMDsgdHJ1ZTsgKytp
dGVyYXRpb25OdW1iZXIpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50
LT5zdHJ1Y3R1cmUodm0pOwogCi0gICAgICAgIGlmICghc3RydWN0dXJlLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICBpZiAoc3RydWN0dXJlLT5pc1Byb3h5KCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewogICAgICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT5oYXNCZWVuRmxhdHRlbmVkQmVmb3JlKCkpCkBAIC02NSw2ICs1OSwxMiBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UG9seVByb3RvQWNjZXNzQ2hhaW4+IFBvCiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmZs
YXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKHZtLCBhc09iamVjdChjdXJyZW50KSk7CiAgICAgICAg
IH0KIAorICAgICAgICBpZiAoIXN0cnVjdHVyZS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+aXNQcm94eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgLy8g
VG8gc2F2ZSBtZW1vcnksIHdlIGRvbid0IGluY2x1ZGUgdGhlIGJhc2UgaW4gdGhlIGNoYWluLiBX
ZSBsZXQKICAgICAgICAgLy8gQWNjZXNzQ2FzZSBwcm92aWRlIHRoZSBiYXNlIHRvIHVzIGFzIG5l
ZWRlZC4KICAgICAgICAgaWYgKGl0ZXJhdGlvbk51bWJlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcAkocmV2aXNp
b24gMjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHltb3JwaGlj
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsOSArNTUsOSBAQCB2b2lkIEFjY2Vzc0dl
bmVyYXRpb25SZXN1bHQ6OmR1bXAoUHJpbnRTCiAgICAgICAgIG91dC5wcmludCgiOiIsIG1fY29k
ZSk7CiB9CiAKLVdhdGNocG9pbnQqIEFjY2Vzc0dlbmVyYXRpb25TdGF0ZTo6YWRkV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYgY29uZGl0aW9uKQordm9pZCBBY2Nlc3NH
ZW5lcmF0aW9uU3RhdGU6Omluc3RhbGxXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiBjb25kaXRpb24pCiB7Ci0gICAgcmV0dXJuIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVT
dHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kQWRkV2F0Y2hwb2ludCgKKyAgICBXYXRjaHBvaW50
c09uU3RydWN0dXJlU3R1YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEluc3RhbGxXYXRjaHBvaW50
KAogICAgICAgICB3YXRjaHBvaW50cywgaml0LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIGNvbmRp
dGlvbik7CiB9CiAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIFBvbHltb3JwaGljQWNjZXNzOjpj
b21taXQoCiAgICAgZm9yIChXYXRjaHBvaW50U2V0KiBzZXQgOiBhY2Nlc3NDYXNlLmNvbW1pdCh2
bSwgaWRlbnQpKSB7CiAgICAgICAgIFdhdGNocG9pbnQqIHdhdGNocG9pbnQgPQogICAgICAgICAg
ICAgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjplbnN1cmVSZWZlcmVuY2VBbmRBZGRX
YXRjaHBvaW50KAotICAgICAgICAgICAgICAgIHdhdGNocG9pbnRzLCBjb2RlQmxvY2ssICZzdHVi
SW5mbywgT2JqZWN0UHJvcGVydHlDb25kaXRpb24oKSk7CisgICAgICAgICAgICAgICAgd2F0Y2hw
b2ludHMsIGNvZGVCbG9jaywgJnN0dWJJbmZvKTsKICAgICAgICAgCiAgICAgICAgIHNldC0+YWRk
KHdhdGNocG9pbnQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5oCShyZXZpc2lvbiAyNTA1MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIHN0cnVjdCBBY2Nlc3NHZW5lcmF0aW9uU3RhdGUgewog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+IHdhdGNo
cG9pbnRzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxsPj4gd2Vha1JlZmVyZW5jZXM7
CiAKLSAgICBXYXRjaHBvaW50KiBhZGRXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uJiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uKCkpOworICAgIHZvaWQgaW5zdGFsbFdh
dGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mKTsKIAogICAgIHZvaWQgcmVz
dG9yZVNjcmF0Y2goKTsKICAgICB2b2lkIHN1Y2NlZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qcm9wZXJ0eUNvbmRpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29uZGl0aW9uLmNwcAkocmV2aXNp
b24gMjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOSBAQCB2b2lkIFByb3BlcnR5
Q29uZGl0aW9uOjpkdW1wSW5Db250ZXh0KFByCiAgICAgY2FzZSBFcXVpdmFsZW5jZToKICAgICAg
ICAgb3V0LnByaW50KG1faGVhZGVyLnR5cGUoKSwgIiBvZiAiLCBtX2hlYWRlci5wb2ludGVyKCks
ICIgd2l0aCAiLCBpbkNvbnRleHQocmVxdWlyZWRWYWx1ZSgpLCBjb250ZXh0KSk7CiAgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6CisgICAgICAgIG91
dC5wcmludChtX2hlYWRlci50eXBlKCksICIgb2YgIiwgbV9oZWFkZXIucG9pbnRlcigpKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgSGFzUHJvdG90eXBlOgogICAgICAgICBvdXQucHJpbnQo
bV9oZWFkZXIudHlwZSgpLCAiIHdpdGggcHJvdG90eXBlICIsIGluQ29udGV4dChKU1ZhbHVlKHBy
b3RvdHlwZSgpKSwgY29udGV4dCkpOwogICAgICAgICByZXR1cm47CkBAIC04Niw2ICs4OSw3IEBA
IGJvb2wgUHJvcGVydHlDb25kaXRpb246OmlzU3RpbGxWYWxpZEFzc3UKICAgICBjYXNlIEFic2Vu
Y2U6CiAgICAgY2FzZSBBYnNlbmNlT2ZTZXRFZmZlY3Q6CiAgICAgY2FzZSBFcXVpdmFsZW5jZToK
KyAgICBjYXNlIEN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6CiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgICAgIGlmIChQ
cm9wZXJ0eUNvbmRpdGlvbkludGVybmFsOjp2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludmFsaWQgYmVjYXVzZSBwcm9wZXJ0eSBhY2Nlc3NlcyBhcmUgbm90IGNhY2hlYWJsZS5c
biIpOwpAQCAtMjQ4LDcgKzI1MiwxMyBAQCBib29sIFByb3BlcnR5Q29uZGl0aW9uOjppc1N0aWxs
VmFsaWRBc3N1CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwotICAg
IH0gfQorICAgIH0gCisgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOiB7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAhIXN0cnVjdHVyZS0+ZmluZFByb3BlcnR5
SGFzaEVudHJ5KHVpZCgpKTsKKyAgICB9CisgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDYgKzI3Myw3IEBAIGJv
b2wgUHJvcGVydHlDb25kaXRpb246OnZhbGlkaXR5UmVxdWlyZXMKICAgICBjYXNlIFByZXNlbmNl
OgogICAgIGNhc2UgQWJzZW5jZToKICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgIGNhc2UgQ3Vz
dG9tRnVuY3Rpb25FcXVpdmFsZW5jZToKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bmVlZElt
cHVyZVByb3BlcnR5V2F0Y2hwb2ludCgpOwogICAgIGNhc2UgQWJzZW5jZU9mU2V0RWZmZWN0Ogog
ICAgIGNhc2UgSGFzUHJvdG90eXBlOgpAQCAtMjg4LDYgKzI5OSw3IEBAIGJvb2wgUHJvcGVydHlD
b25kaXRpb246OmlzU3RpbGxWYWxpZChTdHIKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQcmVz
ZW5jZToKICAgICBjYXNlIEVxdWl2YWxlbmNlOgorICAgIGNhc2UgQ3VzdG9tRnVuY3Rpb25FcXVp
dmFsZW5jZToKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5nZXRPd25Qcm9wZXJ0
eVNsb3RJc0ltcHVyZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVh
azsKQEAgLTMyOSw2ICszNDEsMjEgQEAgYm9vbCBQcm9wZXJ0eUNvbmRpdGlvbjo6aXNXYXRjaGFi
bGVXaGVuVgogICAgICAgICAKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBDdXN0
b21GdW5jdGlvbkVxdWl2YWxlbmNlOiB7CisgICAgICAgIC8vIFdlIGp1c3QgdXNlIHRoZSBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IGZvciB0aGlzLiBBIHN0cnVjdHVyZSBTIHN0YXJ0
cworICAgICAgICAvLyBvZmYgd2l0aCBhIHByb3BlcnR5IFAgaW4gdGhlIHN0YXRpYyBwcm9wZXJ0
eSBoYXNoIHRhYmxlLiBJZiBTIHRyYW5zaXRpb25zIHRvCisgICAgICAgIC8vIFMnLCBlaXRoZXIg
UCByZW1haW5zIGluIHRoZSBzdGF0aWMgcHJvcGVydHkgdGFibGUgb3Igbm90LiBJZiBub3QsIHRo
ZW4gd2UKKyAgICAgICAgLy8gYXJlIG5vIGxvbmdlciB2YWxpZC4gU28gdGhlIGFib3ZlIGNoZWNr
IG9mIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkCisgICAgICAgIC8v
IGlzIHN1ZmZpY2llbnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIGNvdWxkIG1ha2UgdGhp
cyBzbWFydGVyIGluIHRoZSBmdXR1cmUsIHNpbmNlIHdlIHNvbWV0aW1lcyByZWlmeSBzdGF0aWMg
cHJvcGVydGllcy4KKyAgICAgICAgLy8gV2UgY291bGQgbWFrZSB0aGlzIGFkYXB0IHRvIGxvb2tp
bmcgYXQgdGhlIG9iamVjdCdzIHN0b3JhZ2UgZm9yIHN1Y2ggcmVpZmllZCBjdXN0b20KKyAgICAg
ICAgLy8gZnVuY3Rpb25zLCBidXQgd2UgZG9uJ3QgZG8gdGhhdCByaWdodCBub3cuIFdlIGp1c3Qg
YWxsb3cgdGhpcyBwcm9wZXJ0eSBjb25kaXRpb24gdG8KKyAgICAgICAgLy8gaW52YWxpZGF0ZSBh
bmQgY3JlYXRlIGFuIEVxdWl2YWxlbmNlIHdhdGNocG9pbnQgZm9yIHRoZSBtYXRlcmlhbGl6ZWQg
cHJvcGVydHkgc29tZXRpbWUKKyAgICAgICAgLy8gaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgYnJl
YWs7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTQw
Myw2ICs0MzAsOSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDCiAg
ICAgY2FzZSBKU0M6OlByb3BlcnR5Q29uZGl0aW9uOjpFcXVpdmFsZW5jZToKICAgICAgICAgb3V0
LnByaW50KCJFcXVpdmFsZW5jZSIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlBy
b3BlcnR5Q29uZGl0aW9uOjpDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgorICAgICAgICBvdXQu
cHJpbnQoIkN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSlNDOjpQcm9wZXJ0eUNvbmRpdGlvbjo6SGFzUHJvdG90eXBlOgogICAgICAgICBvdXQu
cHJpbnQoIkhhc1Byb3RvdHlwZSIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvcGVydHlDb25kaXRpb24uaAkocmV2aXNp
b24gMjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb3BlcnR5Q29u
ZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgcHVibGljOgogICAgICAg
ICBBYnNlbmNlLAogICAgICAgICBBYnNlbmNlT2ZTZXRFZmZlY3QsCiAgICAgICAgIEVxdWl2YWxl
bmNlLCAvLyBBbiBhZGFwdGl2ZSB3YXRjaHBvaW50IG9uIHRoaXMgd2lsbCBiZSBhIHBhaXIgb2Yg
d2F0Y2hwb2ludHMsIGFuZCB3aGVuIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMsIHdlIHdpbGwg
c2V0IHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50IG9uIHRoZSBuZXcgc3RydWN0dXJlLgorICAg
ICAgICBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlLCAvLyBDdXN0b20gdmFsdWUgb3IgYWNjZXNz
b3IuCiAgICAgICAgIEhhc1Byb3RvdHlwZQogICAgIH07CiAKQEAgLTEyMiw2ICsxMjMsMTMgQEAg
cHVibGljOgogICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIpOwogICAgICAg
ICByZXR1cm4gZXF1aXZhbGVuY2VXaXRob3V0QmFycmllcih1aWQsIHZhbHVlKTsKICAgICB9CisK
KyAgICBzdGF0aWMgUHJvcGVydHlDb25kaXRpb24gY3VzdG9tRnVuY3Rpb25FcXVpdmFsZW5jZShV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgIHsKKyAgICAgICAgUHJvcGVydHlDb25kaXRpb24g
cmVzdWx0OworICAgICAgICByZXN1bHQubV9oZWFkZXIgPSBIZWFkZXIodWlkLCBDdXN0b21GdW5j
dGlvbkVxdWl2YWxlbmNlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAg
ICAgc3RhdGljIFByb3BlcnR5Q29uZGl0aW9uIGhhc1Byb3RvdHlwZVdpdGhvdXRCYXJyaWVyKEpT
T2JqZWN0KiBwcm90b3R5cGUpCiAgICAgewpAQCAtMTkzLDYgKzIwMSw4IEBAIHB1YmxpYzoKICAg
ICAgICAgY2FzZSBFcXVpdmFsZW5jZToKICAgICAgICAgICAgIHJlc3VsdCBePSBFbmNvZGVkSlNW
YWx1ZUhhc2g6Omhhc2godS5lcXVpdmFsZW5jZS52YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDdXN0b21GdW5jdGlvbkVxdWl2YWxlbmNlOgorICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMTMsNiAr
MjIzLDggQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIHUucHJvdG90eXBlLnByb3RvdHlw
ZSA9PSBvdGhlci51LnByb3RvdHlwZS5wcm90b3R5cGU7CiAgICAgICAgIGNhc2UgRXF1aXZhbGVu
Y2U6CiAgICAgICAgICAgICByZXR1cm4gdS5lcXVpdmFsZW5jZS52YWx1ZSA9PSBvdGhlci51LmVx
dWl2YWxlbmNlLnZhbHVlOworICAgICAgICBjYXNlIEN1c3RvbUZ1bmN0aW9uRXF1aXZhbGVuY2U6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzksMTIgKzI5
MSwxMiBAQCBwdWJsaWM6CiAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0J3Mgc3RpbGwgdmFsaWQg
YW5kIHdlIGNvdWxkIGVuZm9yY2UgdmFsaWRpdHkgYnkgc2V0dGluZyBhIHRyYW5zaXRpb24KICAg
ICAvLyB3YXRjaHBvaW50IG9uIHRoZSBzdHJ1Y3R1cmUgYW5kIHBvc3NpYmx5IGFuIGltcHVyZSBw
cm9wZXJ0eSB3YXRjaHBvaW50LgogICAgIGJvb2wgaXNXYXRjaGFibGVBc3N1bWluZ0ltcHVyZVBy
b3BlcnR5V2F0Y2hwb2ludCgKLSAgICAgICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UgPSBu
dWxscHRyLCBXYXRjaGFiaWxpdHlFZmZvcnQgPSBNYWtlTm9DaGFuZ2VzKSBjb25zdDsKKyAgICAg
ICAgU3RydWN0dXJlKiwgSlNPYmplY3QqIGJhc2UsIFdhdGNoYWJpbGl0eUVmZm9ydCA9IE1ha2VO
b0NoYW5nZXMpIGNvbnN0OwogICAgIAogICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCdzIHN0aWxs
IHZhbGlkIGFuZCB3ZSBjb3VsZCBlbmZvcmNlIHZhbGlkaXR5IGJ5IHNldHRpbmcgYSB0cmFuc2l0
aW9uCiAgICAgLy8gd2F0Y2hwb2ludCBvbiB0aGUgc3RydWN0dXJlLgogICAgIGJvb2wgaXNXYXRj
aGFibGUoCi0gICAgICAgIFN0cnVjdHVyZSosIEpTT2JqZWN0KiBiYXNlID0gbnVsbHB0ciwgV2F0
Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7CisgICAgICAgIFN0cnVjdHVy
ZSosIEpTT2JqZWN0KiwgV2F0Y2hhYmlsaXR5RWZmb3J0ID0gTWFrZU5vQ2hhbmdlcykgY29uc3Q7
CiAgICAgCiAgICAgYm9vbCB3YXRjaGluZ1JlcXVpcmVzU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5jcHAJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50OjpmaXJlSW50ZXJuYWwoVk0mIHZtLCBjb25zdCBGaXJlRGV0YWlsJikK
K3ZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ6
OmZpcmVJbnRlcm5hbChWTSYgdm0sIGNvbnN0IEZpcmVEZXRhaWwmKQogewogICAgIGlmICghbV9o
b2xkZXItPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjIsMTIgKzYyLDE1IEBAIGlu
bGluZSBib29sIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW4KICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmlzTGl2ZSgpOwogfQogCi1TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBX
YXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86OmFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb24mIGtleSkKK1dhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzo6
Tm9kZSYgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvOjphZGRXYXRjaHBvaW50KGNvbnN0
IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXkpCiB7Ci0gICAgcmV0dXJuIG1fd2F0Y2hwb2lu
dHMuYWRkKGtleSwgKnRoaXMpOworICAgIGlmICgha2V5IHx8IGtleS5jb25kaXRpb24oKS5raW5k
KCkgIT0gUHJvcGVydHlDb25kaXRpb246OkVxdWl2YWxlbmNlKQorICAgICAgICByZXR1cm4gKm1f
d2F0Y2hwb2ludHMuYWRkKFdURjo6aW5fcGxhY2U8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVy
ZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+LCBrZXksICp0aGlzKTsKKyAgICBBU1NFUlQoa2V5LmNv
bmRpdGlvbigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworICAg
IHJldHVybiAqbV93YXRjaHBvaW50cy5hZGQoV1RGOjppbl9wbGFjZTxBZGFwdGl2ZVZhbHVlU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4sIGtleSwgKnRoaXMpOwogfQogCi1TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm86
OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCit2b2lkIFdhdGNocG9pbnRzT25TdHJ1
Y3R1cmVTdHViSW5mbzo6ZW5zdXJlUmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQoCiAgICAg
c3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJl
ZiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5KQogewpAQCAtNzgsNyArODEsNDEg
QEAgU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCogV2F0Y2hwbwogICAgICAgICBBU1NF
UlQoaG9sZGVyUmVmLT5tX3N0dWJJbmZvID09IHN0dWJJbmZvKTsKICAgICB9CiAgICAgCi0gICAg
cmV0dXJuIGhvbGRlclJlZi0+YWRkV2F0Y2hwb2ludChrZXkpOworICAgIEFTU0VSVCghIWtleSk7
CisgICAgYXV0byYgd2F0Y2hwb2ludFZhcmlhbnQgPSBob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQo
a2V5KTsKKyAgICBpZiAoa2V5LmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVu
Y2UpIHsKKyAgICAgICAgYXV0byYgYWRhcHRpdmVXYXRjaHBvaW50ID0gV1RGOjpnZXQ8QWRhcHRp
dmVWYWx1ZVN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQ+KHdhdGNocG9pbnRWYXJpYW50
KTsKKyAgICAgICAgYWRhcHRpdmVXYXRjaHBvaW50Lmluc3RhbGwoY29kZUJsb2NrLT52bSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBhdXRvKiBzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCA9ICZXVEY6OmdldDxTdHJ1Y3R1cmVUcmFuc2l0aW9uU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0
Y2hwb2ludD4od2F0Y2hwb2ludFZhcmlhbnQpOworICAgICAgICBrZXkub2JqZWN0KCktPnN0cnVj
dHVyZSgpLT5hZGRUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCk7CisgICAgfQorfQorCitXYXRjaHBvaW50KiBXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1
YkluZm86OmVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbz4mIGhvbGRlclJlZiwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssCisgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQoreworICAgIGlm
ICghaG9sZGVyUmVmKQorICAgICAgICBob2xkZXJSZWYgPSBtYWtlVW5pcXVlPFdhdGNocG9pbnRz
T25TdHJ1Y3R1cmVTdHViSW5mbz4oY29kZUJsb2NrLCBzdHViSW5mbyk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChob2xkZXJSZWYtPm1fY29kZUJsb2NrID09IGNvZGVCbG9jayk7CisgICAg
ICAgIEFTU0VSVChob2xkZXJSZWYtPm1fc3R1YkluZm8gPT0gc3R1YkluZm8pOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gJldURjo6Z2V0PFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHVi
Q2xlYXJpbmdXYXRjaHBvaW50Pihob2xkZXJSZWYtPmFkZFdhdGNocG9pbnQoT2JqZWN0UHJvcGVy
dHlDb25kaXRpb24oKSkpOworfQorCit2b2lkIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xl
YXJpbmdXYXRjaHBvaW50OjpoYW5kbGVGaXJlKFZNJiwgY29uc3QgRmlyZURldGFpbCYpCit7Cisg
ICAgaWYgKCFtX2hvbGRlci0+aXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBU
aGlzIHdpbGwgaW1wbGljaXRseSBjYXVzZSBteSBvd24gZGVtaXNlOiBzdHViIHJlc2V0IHJlbW92
ZXMgYWxsIHdhdGNocG9pbnRzLgorICAgIC8vIFRoYXQgd29ya3MsIGJlY2F1c2UgZGVsZXRpbmcg
YSB3YXRjaHBvaW50IHJlbW92ZXMgaXQgZnJvbSB0aGUgc2V0J3MgbGlzdCwgYW5kCisgICAgLy8g
dGhlIHNldCdzIGxpc3QgdHJhdmVyc2FsIGZvciBmaXJpbmcgaXMgcm9idXN0IGFnYWluc3QgdGhl
IHNldCBjaGFuZ2luZy4KKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1faG9sZGVyLT5j
b2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICBtX2hvbGRlci0+c3R1YkluZm8oKS0+cmVzZXQobV9o
b2xkZXItPmNvZGVCbG9jaygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2lu
Y2x1ZGUgIk9iamVjdFByb3BlcnR5Q29uZGl0aW9uLmgiCi0jaW5jbHVkZSAiV2F0Y2hwb2ludC5o
IgotCiAjaWYgRU5BQkxFKEpJVCkKIAorI2luY2x1ZGUgIkFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0
eVZhbHVlV2F0Y2hwb2ludEJhc2UuaCIKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlv
bi5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvQmFnLmg+CiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAg
LTQwLDEyICs0MCwxMiBAQCBjbGFzcyBDb2RlQmxvY2s7CiBjbGFzcyBTdHJ1Y3R1cmVTdHViSW5m
bzsKIGNsYXNzIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbzsKIAotY2xhc3MgU3RydWN0
dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBmaW5hbCA6IHB1YmxpYyBXYXRjaHBvaW50IHsKLSAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KTsK
K2NsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
IGZpbmFsIDogcHVibGljIFdhdGNocG9pbnQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
cnVjdHVyZVRyYW5zaXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVTdHViQ2xlYXJp
bmdXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBrZXksIFdhdGNocG9p
bnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQotICAgICAgICA6IFdhdGNocG9pbnQoV2F0
Y2hwb2ludDo6VHlwZTo6U3RydWN0dXJlU3R1YkNsZWFyaW5nKQorICAgIFN0cnVjdHVyZVRyYW5z
aXRpb25TdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50KGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uJiBrZXksIFdhdGNocG9pbnRzT25TdHJ1Y3R1cmVTdHViSW5mbyYgaG9sZGVyKQor
ICAgICAgICA6IFdhdGNocG9pbnQoV2F0Y2hwb2ludDo6VHlwZTo6U3RydWN0dXJlVHJhbnNpdGlv
blN0cnVjdHVyZVN0dWJDbGVhcmluZykKICAgICAgICAgLCBtX2hvbGRlcigmaG9sZGVyKQogICAg
ICAgICAsIG1fa2V5KGtleSkKICAgICB7CkBAIC01OSw2ICs1OSwyNiBAQCBwcml2YXRlOgogICAg
IEpTQ19XQVRDSFBPSU5UX0ZJRUxEKE9iamVjdFByb3BlcnR5Q29uZGl0aW9uLCBtX2tleSk7CiB9
OwogCitjbGFzcyBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCBm
aW5hbCA6IHB1YmxpYyBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRCYXNl
IHsKKyAgICB1c2luZyBCYXNlID0gQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50QmFzZTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBZGFwdGl2ZVZhbHVlU3RydWN0dXJl
U3R1YkNsZWFyaW5nV2F0Y2hwb2ludCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisK
KyAgICB2b2lkIGhhbmRsZUZpcmUoVk0mLCBjb25zdCBGaXJlRGV0YWlsJikgb3ZlcnJpZGU7CisK
K3B1YmxpYzoKKyAgICBBZGFwdGl2ZVZhbHVlU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2lu
dChjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvbiYga2V5LCBXYXRjaHBvaW50c09uU3RydWN0
dXJlU3R1YkluZm8mIGhvbGRlcikKKyAgICAgICAgOiBCYXNlKGtleSkKKyAgICAgICAgLCBtX2hv
bGRlcigmaG9sZGVyKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2V5LmNvbmRpdGlv
bigpLmtpbmQoKSA9PSBQcm9wZXJ0eUNvbmRpdGlvbjo6RXF1aXZhbGVuY2UpOworICAgIH0KKwor
Citwcml2YXRlOgorICAgIFBhY2tlZFB0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+
IG1faG9sZGVyOworfTsKKwogY2xhc3MgV2F0Y2hwb2ludHNPblN0cnVjdHVyZVN0dWJJbmZvIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8p
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjksMTEgKzg5LDE2IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9p
bnQqIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGtleSk7Cisg
ICAgdXNpbmcgTm9kZSA9IFZhcmlhbnQ8U3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJD
bGVhcmluZ1dhdGNocG9pbnQsIEFkYXB0aXZlVmFsdWVTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRj
aHBvaW50PjsKKworICAgIE5vZGUmIGFkZFdhdGNocG9pbnQoY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSk7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFuZEFkZFdhdGNocG9pbnQoCisgICAgc3RhdGljIHZv
aWQgZW5zdXJlUmVmZXJlbmNlQW5kSW5zdGFsbFdhdGNocG9pbnQoCiAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxXYXRjaHBvaW50c09uU3RydWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCiAgICAg
ICAgIENvZGVCbG9jayosIFN0cnVjdHVyZVN0dWJJbmZvKiwgY29uc3QgT2JqZWN0UHJvcGVydHlD
b25kaXRpb24mIGtleSk7CisgICAgc3RhdGljIFdhdGNocG9pbnQqIGVuc3VyZVJlZmVyZW5jZUFu
ZEFkZFdhdGNocG9pbnQoCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50c09uU3Ry
dWN0dXJlU3R1YkluZm8+JiBob2xkZXJSZWYsCisgICAgICAgIENvZGVCbG9jayosIFN0cnVjdHVy
ZVN0dWJJbmZvKik7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jazsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbygpIGNv
bnN0IHsgcmV0dXJuIG1fc3R1YkluZm87IH0KQEAgLTgzLDcgKzEwOCw5IEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKICAgICBTdHJ1Y3R1cmVTdHViSW5m
byogbV9zdHViSW5mbzsKLSAgICBCYWc8U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludD4g
bV93YXRjaHBvaW50czsKKyAgICAvLyBGSVhNRTogdXNlIGxlc3MgbWVtb3J5IGZvciB0aGUgZW50
cmllcyBpbiB0aGlzIEJhZzoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjAyMzgwCisgICAgQmFnPFdURjo6VmFyaWFudDxTdHJ1Y3R1cmVUcmFuc2l0aW9u
U3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludCwgQWRhcHRpdmVWYWx1ZVN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQ+PiBtX3dhdGNocG9pbnRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50
LmgJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9X
YXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUsNyBAQCBjbGFzcyBXYXRj
aHBvaW50U2V0OwogI2lmIEVOQUJMRShKSVQpCiAjZGVmaW5lIEpTQ19XQVRDSFBPSU5UX1RZUEVT
X1dJVEhPVVRfREZHKG1hY3JvKSBcCiAgICAgSlNDX1dBVENIUE9JTlRfVFlQRVNfV0lUSE9VVF9K
SVQobWFjcm8pIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVTdHViQ2xlYXJpbmcsIFN0cnVjdHVyZVN0
dWJDbGVhcmluZ1dhdGNocG9pbnQpCisgICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlvblN0cnVj
dHVyZVN0dWJDbGVhcmluZywgU3RydWN0dXJlVHJhbnNpdGlvblN0cnVjdHVyZVN0dWJDbGVhcmlu
Z1dhdGNocG9pbnQpCiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgSlNDX1dBVENIUE9J
TlRfVFlQRVMobWFjcm8pIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAkocmV2aXNpb24gMjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBJbmxpbmVDYWNo
ZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0gZ2VuZXJhdGVDb25k
aXRpb25zRm9yUHJvdG90eXBlUHJvcGVydHlIaXRDdXN0b20oCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFz
ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwg
c2xvdC5hdHRyaWJ1dGVzKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCkBAIC01NDksNyAr
NTQ5LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvdG90eXBlQWNjZXNzQ2hhaW4gPSBudWxscHRyOwogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uU2V0ID0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0
dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRl
bnQuaW1wbCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAg
ICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ2xh
c3NJbmZvLmgJKHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NsYXNzSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksMTIgKzE4OSwxOCBAQCBzdHJ1
Y3QgTWV0aG9kVGFibGUgewogICAgIHNpemVvZihDbGFzc05hbWUpCiAKIHN0cnVjdCBDbGFzc0lu
Zm8geworICAgIHVzaW5nIENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgPSBSZWY8U25p
cHBldD4gKCopKHZvaWQpOworCiAgICAgLy8gQSBzdHJpbmcgZGVub3RpbmcgdGhlIGNsYXNzIG5h
bWUuIEV4YW1wbGU6ICJXaW5kb3ciLgogICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZTsKLQogICAg
IC8vIFBvaW50ZXIgdG8gdGhlIGNsYXNzIGluZm9ybWF0aW9uIG9mIHRoZSBiYXNlIGNsYXNzLgog
ICAgIC8vIG51bGxwdHJpZiB0aGVyZSBpcyBub25lLgogICAgIGNvbnN0IENsYXNzSW5mbyogcGFy
ZW50Q2xhc3M7CisgICAgY29uc3QgSGFzaFRhYmxlKiBzdGF0aWNQcm9wSGFzaFRhYmxlOworICAg
IENoZWNrU3ViQ2xhc3NTbmlwcGV0RnVuY3Rpb25QdHIgY2hlY2tTdWJDbGFzc1NuaXBwZXQ7Cisg
ICAgTWV0aG9kVGFibGUgbWV0aG9kVGFibGU7CisgICAgVHlwZWRBcnJheVR5cGUgdHlwZWRBcnJh
eVN0b3JhZ2VUeXBlOworICAgIHVuc2lnbmVkIHN0YXRpY0NsYXNzU2l6ZTsKIAogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXJlbnRDbGFzcygpCiAgICAgewpAQCAtMjEzLDE2ICsyMTks
NiBAQCBzdHJ1Y3QgQ2xhc3NJbmZvIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXMoKSBjb25zdDsKLQotICAgIGNvbnN0IEhhc2hU
YWJsZSogc3RhdGljUHJvcEhhc2hUYWJsZTsKLQotICAgIHVzaW5nIENoZWNrU3ViQ2xhc3NTbmlw
cGV0RnVuY3Rpb25QdHIgPSBSZWY8U25pcHBldD4gKCopKHZvaWQpOwotICAgIENoZWNrU3ViQ2xh
c3NTbmlwcGV0RnVuY3Rpb25QdHIgY2hlY2tTdWJDbGFzc1NuaXBwZXQ7Ci0KLSAgICBNZXRob2RU
YWJsZSBtZXRob2RUYWJsZTsKLQotICAgIFR5cGVkQXJyYXlUeXBlIHR5cGVkQXJyYXlTdG9yYWdl
VHlwZTsKLSAgICB1bnNpZ25lZCBzdGF0aWNDbGFzc1NpemU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJ
KHJldmlzaW9uIDI1MDUzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIyMiwxNSArMjIyMiw5IEBAIGJvb2wgSlNPYmpl
Y3Q6OmdldE93blN0YXRpY1Byb3BlcnR5U2xvdCgKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWF1
dG8gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhhc2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpIGNvbnN0IC0+IE9wdGlvbmFsPFByb3BlcnR5SGFzaEVudHJ5PgorT3B0aW9u
YWw8U3RydWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4gSlNPYmplY3Q6OmZpbmRQcm9wZXJ0eUhh
c2hFbnRyeShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7Ci0gICAg
Zm9yIChjb25zdCBDbGFzc0luZm8qIGluZm8gPSBjbGFzc0luZm8odm0pOyBpbmZvOyBpbmZvID0g
aW5mby0+cGFyZW50Q2xhc3MpIHsKLSAgICAgICAgaWYgKGNvbnN0IEhhc2hUYWJsZSogcHJvcEhh
c2hUYWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFibGUpIHsKLSAgICAgICAgICAgIGlmIChj
b25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBwcm9wSGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0
eU5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBQcm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BI
YXNoVGFibGUsIGVudHJ5IH07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICByZXR1cm4gc3RydWN0dXJlKHZtKS0+ZmluZFByb3BlcnR5SGFzaEVudHJ5KHBy
b3BlcnR5TmFtZSk7CiB9CiAKIGJvb2wgSlNPYmplY3Q6Omhhc0luc3RhbmNlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgSlNWYWx1ZSBoYXNJbnN0YW5jZVZhbHVlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAyNTA1MzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC05MDMsNiArOTAzLDggQEAgcHVibGljOgogICAgIGJvb2wgbWF5QmVQcm90b3R5cGUoKSBj
b25zdDsKICAgICB2b2lkIGRpZEJlY29tZVByb3RvdHlwZSgpOwogCisgICAgT3B0aW9uYWw8U3Ry
dWN0dXJlOjpQcm9wZXJ0eUhhc2hFbnRyeT4gZmluZFByb3BlcnR5SGFzaEVudHJ5KFZNJiwgUHJv
cGVydHlOYW1lKSBjb25zdDsKKwogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByb3RlY3Rl
ZDoKQEAgLTEwMzIsNyArMTAzNCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgCiAgICAgLy8gVGhp
cyBpcyByZWxldmFudCB0byB1bmRlY2lkZWQsIGludDMyLCBkb3VibGUsIGFuZCBjb250aWd1b3Vz
LgogICAgIHVuc2lnbmVkIGNvdW50RWxlbWVudHMoKTsKLSAgICAgICAgCisKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBmcmllbmQgY2xhc3Mg
Vk1JbnNwZWN0b3I7CkBAIC0xMDYwLDExICsxMDYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bGxDdXN0b21HZXR0ZXJQcm9wZXJ0eVNsb3QoVk0mLCBQcm9wZXJ0eVNsb3QmLCBDdXN0b21HZXR0
ZXJTZXR0ZXIqLCB1bnNpZ25lZCwgU3RydWN0dXJlKik7CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBib29sIGdldE93blN0YXRpY1Byb3BlcnR5U2xvdChWTSYsIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7Ci0gICAgc3RydWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKLSAgICAgICAgY29uc3Qg
SGFzaFRhYmxlKiB0YWJsZTsKLSAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOwot
ICAgIH07Ci0gICAgT3B0aW9uYWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9wZXJ0eUhhc2hF
bnRyeShWTSYsIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgICAgIAogICAgIGJvb2wgcHV0QnlJ
bmRleEJleW9uZFZlY3Rvckxlbmd0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOwogICAgIGJvb2wgcHV0RGlyZWN0SW5kZXhCZXlv
bmRWZWN0b3JMZW5ndGhXaXRoQXJyYXlTdG9yYWdlKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0RGlyZWN0SW5kZXhNb2Rl
LCBBcnJheVN0b3JhZ2UqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09i
amVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdh
dGNocG9pbnQuaAkocmV2aXNpb24gMjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9pbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTYgKzI5LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBXYXRjaHBvaW50PgordGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hwb2ludFNldD4KIGNs
YXNzIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50IGZpbmFsIDogcHVibGlj
IEFkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludEJhc2UgewogcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnRC
YXNlOwotICAgIE9iamVjdFByb3BlcnR5Q2hhbmdlQWRhcHRpdmVXYXRjaHBvaW50KEpTQ2VsbCog
b3duZXIsIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uJiBjb25kaXRpb24sIFdhdGNocG9p
bnQmIHdhdGNocG9pbnQpCisgICAgT2JqZWN0UHJvcGVydHlDaGFuZ2VBZGFwdGl2ZVdhdGNocG9p
bnQoSlNDZWxsKiBvd25lciwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb24mIGNvbmRpdGlv
biwgV2F0Y2hwb2ludFNldCYgd2F0Y2hwb2ludFNldCkKICAgICAgICAgOiBCYXNlKGNvbmRpdGlv
bikKICAgICAgICAgLCBtX293bmVyKG93bmVyKQotICAgICAgICAsIG1fd2F0Y2hwb2ludCh3YXRj
aHBvaW50KQorICAgICAgICAsIG1fd2F0Y2hwb2ludFNldCh3YXRjaHBvaW50U2V0KQogICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQod2F0Y2hwb2ludC5zdGF0ZU9uSlNUaHJlYWQoKSA9PSBJ
c1dhdGNoZWQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCh3YXRjaHBvaW50U2V0LnN0YXRlT25K
U1RocmVhZCgpID09IElzV2F0Y2hlZCk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNDksMTEgKzQ5
LDExIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGhhbmRsZUZpcmUoVk0mIHZtLCBjb25zdCBGaXJl
RGV0YWlsJikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIG1fd2F0Y2hwb2ludC5maXJlQWxsKHZt
LCBTdHJpbmdGaXJlRGV0YWlsKCJPYmplY3QgUHJvcGVydHkgaXMgY2hhbmdlZC4iKSk7CisgICAg
ICAgIG1fd2F0Y2hwb2ludFNldC5maXJlQWxsKHZtLCBTdHJpbmdGaXJlRGV0YWlsKCJPYmplY3Qg
UHJvcGVydHkgaXMgY2hhbmdlZC4iKSk7CiAgICAgfQogCiAgICAgSlNDZWxsKiBtX293bmVyOwot
ICAgIFdhdGNocG9pbnQmIG1fd2F0Y2hwb2ludDsKKyAgICBXYXRjaHBvaW50U2V0JiBtX3dhdGNo
cG9pbnRTZXQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMjUwNTMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTIzOCw0ICsxMjM4LDE1IEBAIGJvb2wgU3RydWN0dXJlOjpjYW5BY2Nlc3NQcm9wZXJ0aWVz
UXVpY2sKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYXV0byBTdHJ1Y3R1cmU6OmZpbmRQcm9wZXJ0
eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdCAtPiBPcHRpb25hbDxQ
cm9wZXJ0eUhhc2hFbnRyeT4KK3sKKyAgICBmb3IgKGNvbnN0IENsYXNzSW5mbyogaW5mbyA9IGNs
YXNzSW5mbygpOyBpbmZvOyBpbmZvID0gaW5mby0+cGFyZW50Q2xhc3MpIHsKKyAgICAgICAgaWYg
KGNvbnN0IEhhc2hUYWJsZSogcHJvcEhhc2hUYWJsZSA9IGluZm8tPnN0YXRpY1Byb3BIYXNoVGFi
bGUpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBIYXNoVGFibGVWYWx1ZSogZW50cnkgPSBwcm9w
SGFzaFRhYmxlLT5lbnRyeShwcm9wZXJ0eU5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
cm9wZXJ0eUhhc2hFbnRyeSB7IHByb3BIYXNoVGFibGUsIGVudHJ5IH07CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MjUwNTMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDggQEAgY2xhc3MgU3RydWN0dXJlU2hhcGU7CiBjbGFz
cyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwogc3RydWN0IER1bXBDb250ZXh0Oworc3Ry
dWN0IEhhc2hUYWJsZTsKK3N0cnVjdCBIYXNoVGFibGVWYWx1ZTsKIAogLy8gVGhlIG91dC1vZi1s
aW5lIHByb3BlcnR5IHN0b3JhZ2UgY2FwYWNpdHkgdG8gdXNlIHdoZW4gZmlyc3QgYWxsb2NhdGlu
ZyBvdXQtb2YtbGluZQogLy8gc3RvcmFnZS4gTm90ZSB0aGF0IGFsbCBvYmplY3RzIHN0YXJ0IG91
dCB3aXRob3V0IGhhdmluZyBhbnkgb3V0LW9mLWxpbmUgc3RvcmFnZTsKQEAgLTYxNSw2ICs2MTcs
MTIgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHByb3BlcnR5SGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvcGVydHlIYXNoOyB9CiAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRDb252ZXJ0VG9Qb2x5
UHJvdG8oY29uc3QgU3RydWN0dXJlKiBhLCBjb25zdCBTdHJ1Y3R1cmUqIGIpOworCisgICAgc3Ry
dWN0IFByb3BlcnR5SGFzaEVudHJ5IHsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiB0YWJsZTsK
KyAgICAgICAgY29uc3QgSGFzaFRhYmxlVmFsdWUqIHZhbHVlOworICAgIH07CisgICAgT3B0aW9u
YWw8UHJvcGVydHlIYXNoRW50cnk+IGZpbmRQcm9wZXJ0eUhhc2hFbnRyeShQcm9wZXJ0eU5hbWUp
IGNvbnN0OwogICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAJKHJldmlzaW9uIDI1MDUzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTg2LDYgKzU4Niw3OSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxpbnQ+IG1fdmVjdG9y
OwogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBDb21wYWN0SGFzaEluZGV4IHN0YXRpY0N1c3Rv
bUFjY2Vzc29yVGFibGVJbmRleFsyXSA9IHsKKyAgICB7IDAsIC0xIH0sCisgICAgeyAtMSwgLTEg
fSwKK307CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSB0ZXN0U3RhdGljQWNjZXNzb3JHZXR0ZXIo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUsIFByb3BlcnR5TmFtZSkK
K3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgCisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0
PEpTT2JqZWN0Kj4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCh0aGlzT2JqZWN0KTsKKworICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IHRoaXNPYmpl
Y3QtPmdldERpcmVjdCh2bSwgUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
ICJ0ZXN0RmllbGQiKSkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKworc3RhdGlj
IGJvb2wgdGVzdFN0YXRpY0FjY2Vzc29yUHV0dGVyKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgdGhpc1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0R5bmFtaWNDYXN0PEpTT2JqZWN0Kj4odm0sIEpT
VmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCh0aGlzT2JqZWN0
KTsKKworICAgIHJldHVybiB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIFByb3BlcnR5TmFtZShJ
ZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAidGVzdEZpZWxkIikpLCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBIYXNoVGFibGVWYWx1ZSBzdGF0aWND
dXN0b21BY2Nlc3NvclRhYmxlVmFsdWVzWzFdID0geworICAgIHsgInRlc3RTdGF0aWNBY2Nlc3Nv
ciIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNz
b3IpLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpH
ZXRWYWx1ZUZ1bmM+KHRlc3RTdGF0aWNBY2Nlc3NvckdldHRlciksIChpbnRwdHJfdClzdGF0aWNf
Y2FzdDxQdXRQcm9wZXJ0eVNsb3Q6OlB1dFZhbHVlRnVuYz4odGVzdFN0YXRpY0FjY2Vzc29yUHV0
dGVyKSB9IH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IEhhc2hUYWJsZSBzdGF0aWNDdXN0
b21BY2Nlc3NvclRhYmxlID0KKyAgICB7IDEsIDEsIHRydWUsIG51bGxwdHIsIHN0YXRpY0N1c3Rv
bUFjY2Vzc29yVGFibGVWYWx1ZXMsIHN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGVJbmRleCB9Owor
CitjbGFzcyBTdGF0aWNDdXN0b21BY2Nlc3NvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsK
KyAgICB1c2luZyBCYXNlID0gSlNOb25GaW5hbE9iamVjdDsKK3B1YmxpYzoKKyAgICBTdGF0aWND
dXN0b21BY2Nlc3NvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CisgICAgfQorCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgSGFz
U3RhdGljUHJvcGVydHlUYWJsZSB8IE92ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdDsKKworICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgRG9sbGFy
Vk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBTdGF0aWNDdXN0b21B
Y2Nlc3NvciogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgICAgICBTdGF0aWNDdXN0
b21BY2Nlc3NvciogYWNjZXNzb3IgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxTdGF0aWND
dXN0b21BY2Nlc3Nvcj4odm0uaGVhcCkpIFN0YXRpY0N1c3RvbUFjY2Vzc29yKHZtLCBzdHJ1Y3R1
cmUpOworICAgICAgICBhY2Nlc3Nvci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1
cm4gYWNjZXNzb3I7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90
KEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKKyAgICB7CisgICAgICAgIGlmIChTdHJpbmco
cHJvcGVydHlOYW1lLnVpZCgpKSA9PSAidGhpbkFpckN1c3RvbUdldHRlciIpIHsKKyAgICAgICAg
ICAgIHNsb3Quc2V0Q2FjaGVhYmxlQ3VzdG9tKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IHwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yLCB0ZXN0
U3RhdGljQWNjZXNzb3JHZXR0ZXIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIEpTTm9uRmluYWxPYmplY3Q6OmdldE93blByb3BlcnR5U2xvdCh0
aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgIH0KK307CisKIGNsYXNz
IERPTUpJVE5vZGUgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJsaWM6CiAgICAgRE9N
SklUTm9kZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzI5LDYgKzgwMiw3IEBA
IHZvaWQgRE9NSklUR2V0dGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBwdXREaXJlY3RD
dXN0b21BY2Nlc3Nvcih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImN1c3RvbUdldHRl
ciIpLCBjdXN0b21HZXR0ZXJTZXR0ZXIsIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSB8IFBy
b3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3Nvcik7CiB9CiAKKwogY2xhc3MgRE9NSklUR2V0
dGVyQ29tcGxleCA6IHB1YmxpYyBET01KSVROb2RlIHsKIHB1YmxpYzoKICAgICBET01KSVRHZXR0
ZXJDb21wbGV4KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMTk5LDYgKzEyNzMs
OCBAQCBjb25zdCBDbGFzc0luZm8gRE9NSklURnVuY3Rpb25PYmplY3Q6OnNfCiBjb25zdCBDbGFz
c0luZm8gRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdDo6c19pbmZvID0geyAiRE9NSklUQ2hlY2tT
dWJDbGFzc09iamVjdCIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoRE9NSklUQ2hlY2tTdWJDbGFzc09iamVjdCkgfTsKIGNvbnN0IENsYXNzSW5m
byBKU1Rlc3RDdXN0b21HZXR0ZXJTZXR0ZXI6OnNfaW5mbyA9IHsgIkpTVGVzdEN1c3RvbUdldHRl
clNldHRlciIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNUZXN0Q3VzdG9tR2V0dGVyU2V0dGVyKSB9OwogCitjb25zdCBDbGFzc0luZm8gU3Rh
dGljQ3VzdG9tQWNjZXNzb3I6OnNfaW5mbyA9IHsgIlN0YXRpY0N1c3RvbUFjY2Vzc29yIiwgJkJh
c2U6OnNfaW5mbywgJnN0YXRpY0N1c3RvbUFjY2Vzc29yVGFibGUsIG51bGxwdHIsIENSRUFURV9N
RVRIT0RfVEFCTEUoU3RhdGljQ3VzdG9tQWNjZXNzb3IpIH07CisKIEVsZW1lbnRIYW5kbGVPd25l
ciogRWxlbWVudDo6aGFuZGxlT3duZXIoKQogewogICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNz
ZXJ0U2NvcGU7CkBAIC0yMDE1LDYgKzIwOTEsMTYgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuYwogfQogI2VuZGlmCiAKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IoRXhlY1N0YXRlKiBl
eGVjKQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CisgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGpzTnVsbCgpKTsKKyAgICBhdXRvKiByZXN1bHQg
PSBTdGF0aWNDdXN0b21BY2Nlc3Nvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgZnVuY3Rpb25TZXRJbXB1cmVHZXR0ZXJEZWxlZ2F0ZShFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKQEAgLTI1MzcsNiAr
MjYyMyw3IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICBhZGRGdW5jdGlvbih2bSwgImNyZWF0ZVdhc21TdHJlYW1p
bmdQYXJzZXIiLCBmdW5jdGlvbkNyZWF0ZVdhc21TdHJlYW1pbmdQYXJzZXIsIDApOwogI2VuZGlm
CisgICAgYWRkRnVuY3Rpb24odm0sICJjcmVhdGVTdGF0aWNDdXN0b21BY2Nlc3NvciIsIGZ1bmN0
aW9uQ3JlYXRlU3RhdGljQ3VzdG9tQWNjZXNzb3IsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAi
Z2V0UHJpdmF0ZVByb3BlcnR5IiwgZnVuY3Rpb25HZXRQcml2YXRlUHJvcGVydHksIDIpOwogICAg
IGFkZEZ1bmN0aW9uKHZtLCAic2V0SW1wdXJlR2V0dGVyRGVsZWdhdGUiLCBmdW5jdGlvblNldElt
cHVyZUdldHRlckRlbGVnYXRlLCAyKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwNTMxKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTktMDktMzAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgSW5s
aW5lIGNhY2hpbmcgaXMgd3JvbmcgZm9yIGN1c3RvbSBhY2Nlc3NvcnMgYW5kIGN1c3RvbSB2YWx1
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMTk5
NAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTA4NTAzMjY+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIGpzL2RvbS9jdXN0b20tYWNjZXNzb3ItcmVk
ZWZpbmUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9kb20vY3VzdG9tLWFjY2Vz
c29yLXJlZGVmaW5lLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA5LTMwICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgSURCVHJhbnNhY3Rpb24gLyBJREJPYmplY3RTdG9y
ZSBzaG91bGQgbm90IHByZXZlbnQgYSBwYWdlIGZyb20gZW50ZXJpbmcgdGhlIGJhY2sgLyBmb3J3
YXJkIGNhY2hlCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9kb20vY3VzdG9tLWFjY2Vzc29yLXJlZGVm
aW5lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9kb20vY3VzdG9t
LWFjY2Vzc29yLXJlZGVmaW5lLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9qcy9kb20vY3VzdG9tLWFjY2Vzc29yLXJlZGVmaW5lLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitDaGVjayB0aGF0IGN1c3RvbSBhY2Nlc3NvciBiZWlu
ZyByZWRlZmluZWQgaW52YWxpZGF0ZXMgb3VyIGlubGluZSBjYWNoZXMuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHNldHRlciBjYWxsZWQgYXMgZXhwZWN0ZWQKK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9kb20vY3VzdG9tLWFjY2Vzc29yLXJlZGVmaW5lLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvZG9tL2N1c3RvbS1hY2Nlc3Nvci1yZWRlZmluZS5odG1sCShub25l
eGlzdGVudCkKKysrIExheW91dFRlc3RzL2pzL2RvbS9jdXN0b20tYWNjZXNzb3ItcmVkZWZpbmUu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdDaGVj
ayB0aGF0IGN1c3RvbSBhY2Nlc3NvciBiZWluZyByZWRlZmluZWQgaW52YWxpZGF0ZXMgb3VyIGlu
bGluZSBjYWNoZXMuJyk7CisKKyhmdW5jdGlvbigpIHsKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICBsZXQgc2V0dGVyQ2FsbGVkID0gZmFsc2U7CisKKyAgICBmdW5jdGlvbiBhY2Nlc3NQcm9wZXJ0
eSgpIHsKKyAgICAgICAgbGV0IG9TY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3Jp
cHQiKTsKKyAgICAgICAgb1NjcmlwdC5zcmMgPSBNYXRoLnJhbmRvbSgpOworICAgIH0KKworICAg
IC8vIEZvcmNlICJjb2RlIG9wdGltaXphdGlvbiIgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gc2V2
ZXJhbCB0aW1lcworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKSB7CisgICAgICAg
IGFjY2Vzc1Byb3BlcnR5KCk7CisgICAgfQorCisgICAgLy8gRGVmaW5lIGEgY3VzdG9tIHNldHRl
ciBmb3IgSFRNTFNjcmlwdEVsZW1lbnQjc3JjCisgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVj
dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTFNjcmlwdEVsZW1lbnQucHJvdG90eXBlLCAi
c3JjIik7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxTY3JpcHRFbGVtZW50LnByb3Rv
dHlwZSwgInNyYyIsIHsKKyAgICAgICAgZ2V0OiBkZXNjcmlwdG9yLmdldCwKKyAgICAgICAgc2V0
OiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgc2V0dGVyQ2FsbGVkID0gdHJ1ZTsKKworICAg
ICAgICAgICAgZGVzY3JpcHRvci5zZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAg
fSwKKyAgICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlLAorICAgICAgICBj
b25maWd1cmFibGU6IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlCisgICAgfSk7CisgCisgICAgYWNj
ZXNzUHJvcGVydHkoKTsKKworICAgIGlmIChzZXR0ZXJDYWxsZWQpCisgICAgICAgIHRlc3RQYXNz
ZWQoInNldHRlciBjYWxsZWQgYXMgZXhwZWN0ZWQiKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RG
YWlsZWQoIlVuZXhwZWN0ZWQsIHNldHRlciBub3QgY2FsbGVkLiIpOworfSkoKTsKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>