<?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>77700</bug_id>
          
          <creation_ts>2012-02-02 18:23:08 -0800</creation_ts>
          <short_desc>Make CSSValuePool share values globally.</short_desc>
          <delta_ts>2012-04-09 17:47:37 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>548320</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-02 18:23:08 -0800</bug_when>
    <thetext>We currently limit CSSValuePool to sharing CSSValues inside the same Document. This is because the JSC wrappers are cached, and can have custom properties that we don&apos;t want multiple documents to have access to at the same time.

Because the CSSValue DOM interface is very rarely used, and is poorly supported by other engines, I think we should let CSSValue wrappers be unique objects (i.e calling CSSStyleDeclaration.getPropertyCSSValue(&apos;foo&apos;) twice would return two discrete objects.)

This will allow us to make CSSValuePool global, which will reduce memory usage and bring us one step closer to cacheable stylesheets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548489</commentid>
    <comment_count>1</comment_count>
      <attachid>125270</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-02 23:19:20 -0800</bug_when>
    <thetext>Created attachment 125270
Mostly a patch

Let&apos;s see what EWS thinks of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548513</commentid>
    <comment_count>2</comment_count>
      <attachid>125270</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-03 00:27:12 -0800</bug_when>
    <thetext>Comment on attachment 125270
Mostly a patch

Attachment 125270 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11420198

New failing tests:
http/tests/security/cross-origin-css-primitive.html
fast/css/css-value-wrapper-sameness.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548519</commentid>
    <comment_count>3</comment_count>
      <attachid>125270</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 00:41:07 -0800</bug_when>
    <thetext>Comment on attachment 125270
Mostly a patch

Makes sense to me. While this is an observable behavior change, the case is so obscure it seems unlikely to matter in practice. The current behavior with wrapper identities is already rather surprising and that hasn&apos;t caused problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548655</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 05:39:29 -0800</bug_when>
    <thetext>It might make sense to do the wrapper behavior change separately from the value pool refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548896</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-03 11:37:49 -0800</bug_when>
    <thetext>Do we have a way to check for performance impact? In scripts the repeatedly access the same value, this would cause additional garbage to collect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548930</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-03 12:12:41 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Do we have a way to check for performance impact? In scripts the repeatedly access the same value, this would cause additional garbage to collect.

You are right of course, but I don&apos;t know of anyone or anything using the CSSValue interface to a greater extent in production. There is a single call to getPropertyCSSValue() in our Web Inspector JS code, so that&apos;s not helpful either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548987</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-02-03 13:02:52 -0800</bug_when>
    <thetext>I think the only way to find out is to try it.

Computed styles (which are probably most of the real world use due to wider engine support) don&apos;t consume significant amounts of memory so if needed we could use unique (non-pool) CSSValues there and allow wrapper caching for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548998</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-03 13:13:27 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think the only way to find out is to try it.
&gt; 
&gt; Computed styles (which are probably most of the real world use due to wider engine support) don&apos;t consume significant amounts of memory so if needed we could use unique (non-pool) CSSValues there and allow wrapper caching for those.

Indeed. Like we discussed on IRC, I&apos;m tempted to move towards supporting the CSSValue interface only for computed styles. This would match Gecko, and allow us to simplify non-computed styles further. Completely outside the scope of this bug obviously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559916</commentid>
    <comment_count>9</comment_count>
      <attachid>127738</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-19 11:03:06 -0800</bug_when>
    <thetext>Created attachment 127738
Wrapper part of the change, amended for V8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559930</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-19 12:18:32 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=127738) [details]
&gt; Wrapper part of the change, amended for V8.

This piece landed in &lt;http://trac.webkit.org/changeset/108195&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559947</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-02-19 14:02:41 -0800</bug_when>
    <thetext>I believe this change is incompatible with WebIDL. Do you think there&apos;s a specification that comments on what&apos;s correct behavior here?

&gt; Because the CSSValue DOM interface is very rarely used and is poorly supported by other engines

I see some unclear thinking here. These arguments cut equally against making performance improvements and preserving backwards-compatibility. If nobody uses or implements this API, neither behavior nor performance matter.

&gt; This will allow us to make CSSValuePool global

It seems like you&apos;re trading more wrapper allocation for less underlying value allocation. Why is this trade a net win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559951</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-02-19 14:52:53 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; I believe this change is incompatible with WebIDL. Do you think there&apos;s a specification that comments on what&apos;s correct behavior here?

Not that I know of. If WebIDL does specify this behavior, I suspect we have a number of methods violating it by always returning a unique underlying value resulting in a unique wrapper.

&gt; &gt; Because the CSSValue DOM interface is very rarely used and is poorly supported by other engines
&gt; 
&gt; I see some unclear thinking here. These arguments cut equally against making performance improvements and preserving backwards-compatibility. If nobody uses or implements this API, neither behavior nor performance matter.

The &quot;poorly supported&quot; part refers to the fact that we are the only engine that implements getPropertyCSSValue() for non-computed style declarations. Furthermore, in the new CSSOM draft currently in development, CSSValue is basically stripped down to { .cssText }

Most importantly, this is by no means the intended end state. The per-document value caching was blocking Antti&apos;s ongoing CSS refactoring so he asked me to finish and land it. 

Over the next couple of weeks, we&apos;ll see the introduction of a new internal CSS value class (tentatively named StyleValue.) CSSValue wrapper creation will be managed by their logical owners, i.e the CSSStyleDeclaration they are extracted from. This will change our behavior slightly once again.

&gt; &gt; This will allow us to make CSSValuePool global
&gt; 
&gt; It seems like you&apos;re trading more wrapper allocation for less underlying value allocation. Why is this trade a net win?

Because the vast majority of pages never instantiate a single CSSValue wrapper, but hundreds if not thousands of CSSValue objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559960</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-19 15:33:16 -0800</bug_when>
    <thetext>Reverted r108195 for reason:

Lots of failing ASSERT()s on v8 bots, requested by kling on #webkit

Committed r108200: &lt;http://trac.webkit.org/changeset/108200&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559961</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-02-19 15:35:45 -0800</bug_when>
    <thetext>I couldn&apos;t get a full list of layout tests that failed ASSERT()s in v8 debug since the bots early-exited after 20 crashes, but here&apos;s an example ASSERT() failure from a chromium linux debug bot on test fast/css/CSSPrimitiveValue-exceptions.html:

ASSERTION FAILED: !m_map.contains(obj)
third_party/WebKit/Source/WebCore/bindings/v8/V8DOMMap.h(91) : void WebCore::WeakReferenceMap&lt;KeyType, ValueType&gt;::set(KeyType*, v8::Persistent&lt;ValueType&gt;) [with KeyType = void, ValueType = v8::Object]
1   0x1500864
2   0x1a315b5
3   0x19067c2
4   0x1906800
5   0x253747e
6   0x1878c0f
7   0x198d3bc
8   0x8c476f
9   0x8bf206
10  0x8bf1d7
11  0x1ca037e0424e
[41817:41817:15198725650916:ERROR:process_util_posix.cc(142)] Received signal 11
	base::debug::StackTrace::StackTrace() [0x73193e]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x6eb4d9]
	0x7f8f06ba5af0
	WebCore::WeakReferenceMap&lt;&gt;::set() [0x150086e]
	WebCore::V8CSSPrimitiveValue::wrapSlow() [0x1a315b5]
	WebCore::V8CSSPrimitiveValue::wrap() [0x19067c2]
	WebCore::toV8() [0x1906800]
	WebCore::toV8() [0x253747e]
	WebCore::toV8() [0x1878c0f]
	WebCore::CSSStyleDeclarationInternal::getPropertyCSSValueCallback() [0x198d3bc]
	v8::internal::HandleApiCallHelper&lt;&gt;() [0x8c476f]
	v8::internal::Builtin_Impl_HandleApiCall() [0x8bf206]
	v8::internal::Builtin_HandleApiCall() [0x8bf1d7]
	0x1ca037e0424e
None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589165</commentid>
    <comment_count>15</comment_count>
      <attachid>125270</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-03-27 12:46:48 -0700</bug_when>
    <thetext>Comment on attachment 125270
Mostly a patch

Cleared Antti Koivisto&apos;s review+ from obsolete attachment 125270 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598789</commentid>
    <comment_count>16</comment_count>
      <attachid>136350</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-04-09 17:30:42 -0700</bug_when>
    <thetext>Created attachment 136350
Globalization patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598793</commentid>
    <comment_count>17</comment_count>
      <attachid>136350</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-09 17:33:39 -0700</bug_when>
    <thetext>Comment on attachment 136350
Globalization patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598807</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-04-09 17:47:37 -0700</bug_when>
    <thetext>Committed r113647: &lt;http://trac.webkit.org/changeset/113647&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125270</attachid>
            <date>2012-02-02 23:19:20 -0800</date>
            <delta_ts>2012-03-27 12:46:48 -0700</delta_ts>
            <desc>Mostly a patch</desc>
            <filename>bug-77700.diff</filename>
            <type>text/plain</type>
            <size>231386</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3YmUzNDcwLi4yMGYyZDczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDIt
MDIgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2UgQ1NTVmFsdWVQb29sIHNoYXJlIHZhbHVlcyBnbG9iYWxseS4KKyAgICAgICAgPGh0dHA6Ly93
ZWJraXQub3JnL2IvNzc3MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgYSB0ZXN0IHRvIGRvY3VtZW50IHRoZSBzYW1lbmVzcyBjaGFyYWN0
ZXJpc3RpY3Mgb2YgQ1NTVmFsdWUgRE9NIHdyYXBwZXJzLgorCisgICAgICAgICogZmFzdC9jc3Mv
Y3NzLXZhbHVlLXdyYXBwZXItc2FtZW5lc3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Nzcy9jc3MtdmFsdWUtd3JhcHBlci1zYW1lbmVzcy5odG1sOiBBZGRlZC4KKwogMjAx
Mi0wMi0wMiAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9jc3MtdmFsdWUtd3JhcHBlci1zYW1lbmVzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9jc3MtdmFsdWUtd3JhcHBlci1zYW1lbmVzcy1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwZDNkZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY3NzL2Nzcy12YWx1ZS13cmFwcGVyLXNhbWVuZXNzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDc1IEBACitUaGlzIHRlc3QgZG9jdW1lbnRzIHRoZSBzYW1lbmVzcyBj
aGFyYWN0ZXJpc3RpY3Mgb2YgQ1NTVmFsdWUgd3JhcHBlcnMgKHVuc2hhcmVkLCB1bmlxdWUgb2Jq
ZWN0cy4pCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHZhbHVlMCA9PT0g
bnVsbCBpcyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09IG51bGwgaXMgZmFsc2UKK1BBU1Mgc3R5bGUu
Z2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9PSBzdHlsZS5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PT0gdmFsdWUxIGlz
IGZhbHNlCitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwLmNzc1Rl
eHQgPT0gdmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFTUyB2YWx1ZTAgPT09IG51bGwgaXMgZmFs
c2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHN0eWxlLmdldFByb3BlcnR5
Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHls
ZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZhbHVlMSBpcyBmYWxzZQorUEFT
UyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMC5jc3NUZXh0ID09IHZhbHVl
MS5jc3NUZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUwID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHZh
bHVlMSA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0
eWxlLml0ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkg
aXMgZmFsc2UKK1BBU1MgdmFsdWUwID09PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09
IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAuY3NzVGV4dCA9PSB2YWx1ZTEuY3NzVGV4dCBp
cyB0cnVlCitQQVNTIHZhbHVlMCA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09IG51
bGwgaXMgZmFsc2UKK1BBU1Mgc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDAp
KSA9PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQ
QVNTIHZhbHVlMCA9PT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMg
ZmFsc2UKK1BBU1MgdmFsdWUwLmNzc1RleHQgPT0gdmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFT
UyB2YWx1ZTAgPT09IG51bGwgaXMgZmFsc2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNl
CitQQVNTIHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUu
Z2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAg
PT09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNT
IHZhbHVlMC5jc3NUZXh0ID09IHZhbHVlMS5jc3NUZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUwID09
PSBudWxsIGlzIGZhbHNlCitQQVNTIHZhbHVlMSA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdHls
ZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5
Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09PSB2YWx1ZTEg
aXMgZmFsc2UKK1BBU1MgdmFsdWUwID09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAuY3Nz
VGV4dCA9PSB2YWx1ZTEuY3NzVGV4dCBpcyB0cnVlCitQQVNTIHZhbHVlMCA9PT0gbnVsbCBpcyBm
YWxzZQorUEFTUyB2YWx1ZTEgPT09IG51bGwgaXMgZmFsc2UKK1BBU1Mgc3R5bGUuZ2V0UHJvcGVy
dHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0
eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PT0gdmFsdWUxIGlzIGZhbHNlCitQ
QVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwLmNzc1RleHQgPT0gdmFs
dWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFTUyB2YWx1ZTAgPT09IG51bGwgaXMgZmFsc2UKK1BBU1Mg
dmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUo
c3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDAp
KSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAg
PT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMC5jc3NUZXh0ID09IHZhbHVlMS5jc3NUZXh0
IGlzIHRydWUKK1BBU1MgdmFsdWUwID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHZhbHVlMSA9PT0g
bnVsbCBpcyBmYWxzZQorUEFTUyBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0o
MCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgaXMgZmFsc2UK
K1BBU1MgdmFsdWUwID09PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09IHZhbHVlMSBp
cyBmYWxzZQorUEFTUyB2YWx1ZTAuY3NzVGV4dCA9PSB2YWx1ZTEuY3NzVGV4dCBpcyB0cnVlCitQ
QVNTIHZhbHVlMCA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09IG51bGwgaXMgZmFs
c2UKK1BBU1Mgc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9PSBzdHls
ZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQQVNTIHZhbHVl
MCA9PT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMgZmFsc2UKK1BB
U1MgdmFsdWUwLmNzc1RleHQgPT0gdmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFTUyB2YWx1ZTAg
PT09IG51bGwgaXMgZmFsc2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHN0
eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJvcGVy
dHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZhbHVl
MSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMC5j
c3NUZXh0ID09IHZhbHVlMS5jc3NUZXh0IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9jc3MtdmFsdWUtd3JhcHBlci1zYW1lbmVzcy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3MvY3NzLXZhbHVlLXdyYXBwZXItc2FtZW5lc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45MGVmNzAwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3MvY3NzLXZhbHVlLXdyYXBwZXItc2FtZW5lc3MuaHRtbApAQCAtMCwwICsxLDQxIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8
c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHN0eWxlPgorLmEgeyB3aWR0aDogMHB4OyBoZWlnaHQ6IDBweDsgfQor
LmEgeyB3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7IH0KKy5hIHsgd2lkdGg6IDEwMDBweDsg
aGVpZ2h0OiAxMDAwcHg7IH0KKy5hIHsgd2lkdGg6IDUwJTsgaGVpZ2h0OiA1MCU7IH0KKy5hIHsg
Y29sb3I6IHJlZDsgYmFja2dyb3VuZC1jb2xvcjogcmVkOyB9CisuYSB7IGNvbG9yOiByZ2IoMCww
LDApOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwwLDApOyB9CisuYSB7IGNvbG9yOiByZ2IoMjU1
LDI1NSwyNTUpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LDI1NSwyNTUpOyB9CisuYSB7IGNv
bG9yOiByZ2JhKDAsMCwwLDI1NSk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMjU1KTsg
fQorLmEgeyBjb2xvcjogcmdiYSgwLDAsMCwwKTsgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLDAs
MCwwKTsgfQorLmEgeyBjb2xvcjogaW5oZXJpdDsgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDsg
fQorLmEgeyBjb2xvcjogaW5pdGlhbDsgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsgfQorPC9z
dHlsZT4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZG9jdW1lbnRzIHRoZSBz
YW1lbmVzcyBjaGFyYWN0ZXJpc3RpY3Mgb2YgQ1NTVmFsdWUgd3JhcHBlcnMgKHVuc2hhcmVkLCB1
bmlxdWUgb2JqZWN0cy4pIik7CisKK3J1bGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoJ3N0eWxlJylbMV0uc2hlZXQuY3NzUnVsZXM7Citmb3IgKGkgPSAwOyBpIDwgcnVsZXMubGVu
Z3RoOyArK2kpIHsKKyAgICBzdHlsZSA9IHJ1bGVzW2ldLnN0eWxlOworICAgIHZhbHVlMCA9IHN0
eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSk7CisgICAgdmFsdWUxID0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDEpKTsKKyAgICBzaG91bGRCZUZhbHNl
KCJ2YWx1ZTAgPT09IG51bGwiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJ2YWx1ZTEgPT09IG51bGwi
KTsKKyAgICBzaG91bGRCZUZhbHNlKCJzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0
ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkiKTsKKyAg
ICBzaG91bGRCZUZhbHNlKCJ2YWx1ZTAgPT09IHZhbHVlMSIpOworICAgIHNob3VsZEJlRmFsc2Uo
InZhbHVlMCA9PSB2YWx1ZTEiKTsKKyAgICBzaG91bGRCZVRydWUoInZhbHVlMC5jc3NUZXh0ID09
IHZhbHVlMS5jc3NUZXh0Iik7Cit9CisKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDdmOTAyZWIuLjRhMDkwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTUgQEAK
KzIwMTItMDItMDIgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgorCisg
ICAgICAgIE1ha2UgQ1NTVmFsdWVQb29sIHNoYXJlIHZhbHVlcyBnbG9iYWxseS4KKyAgICAgICAg
PGh0dHA6Ly93ZWJraXQub3JnL2IvNzc3MDA+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHRoZSBwZXItRG9jdW1lbnQgQ1NTVmFsdWVQb29s
IGFuZCBoYXZlIGV2ZXJ5b25lIHVzZSBhIGdsb2JhbCBwb29sCisgICAgICAgIGFjY2Vzc2VkIHZp
YSAiQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2woKSIuCisKKyAgICAgICAgVGhpcyByZWR1Y2Vz
IG1lbW9yeSB1c2FnZSBieSBzaGFyaW5nIGNhY2hlZCBDU1NWYWx1ZXMgYmV0d2VlbiBhbGwgZG9j
dW1lbnRzLAorICAgICAgICBhbmQgcmVkdWNlcyBoZWFwIGNodXJuIHNpbmNlIHRoZSBjb21tb24s
IHBlcnNpc3Rlbmx5IGNhY2hlZCB2YWx1ZXMgYXJlIGhlbGQKKyAgICAgICAgYnkgQ1NTVmFsdWVQ
b29sIGZvcmV2ZXIuCisKKyAgICAgICAgSXQgY29tZXMgd2l0aCBhIHNtYWxsIGJlaGF2aW9yIGNo
YW5nZSwgZWFjaCBKUyBjYWxsIHRoYXQgcmV0dXJucyBhIENTU1ZhbHVlCisgICAgICAgIHdyYXBw
ZXIgd2lsbCBub3cgYWx3YXlzIHJldHVybiB1bmlxdWUgb2JqZWN0cy4gQWRkZWQgYSB0ZXN0IHRv
IGRvY3VtZW50CisgICAgICAgIHRoaXMgbmV3IGJlaGF2aW9yLgorCisgICAgICAgIFRlc3Q6IGZh
c3QvY3NzL2Nzcy12YWx1ZS13cmFwcGVyLXNhbWVuZXNzLmh0bWwKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisK
KyAgICAgICAgICAgIENvbnN0cnVjdCBhIG5ldyB3cmFwcGVyIGV2ZXJ5IHRpbWUgaW4gdG9KUyhD
U1NWYWx1ZSkuCisKKyAgICAgICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yTmluZVBpZWNlSW1hZ2VTbGljZSk6CisgICAg
ICAgIChXZWJDb3JlOjp2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJD
b3JlOjp2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OnZh
bHVlRm9yTmluZVBpZWNlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUFkanVzdGVkUGl4
ZWxWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OnZhbHVlRm9yUmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpnZXRQ
b3NpdGlvbk9mZnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OmdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRCb3Jk
ZXJSYWRpdXNDb3JuZXJWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRCb3JkZXJSYWRpdXNT
aG9ydGhhbmRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlZFRyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVlRm9yQ3Vz
dG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6dmFsdWVGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6dmFs
dWVGb3JHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yR3JpZFRy
YWNrTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXREZWxheVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldER1cmF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTGluZUJv
eENvbnRhaW5WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb246OmdldEZvbnRTaXplQ1NTVmFsdWVQcmVmZXJyaW5nS2V5d29yZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVlRm9yU2hhZG93KToKKyAg
ICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OnJlbmRl
clRleHREZWNvcmF0aW9uRmxhZ3NUb0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxS
ZXBlYXRUb0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxTaXplVG9DU1NWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpjb250ZW50VG9DU1NWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3VudGVyVG9DU1NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250RmFtaWx5RnJvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmxpbmVIZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6Zm9udFNpemVGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udFN0eWxl
RnJvbVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRWYXJpYW50RnJvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZvbnRXZWlnaHRGcm9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKToKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
Q29sb3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGVWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpzZXRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUJhY2tncm91bmRDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNob3J0aGFuZCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlU2l6ZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25YKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25ZKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25Db21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OnBhcnNlRmlsbFJlcGVhdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
RmlsbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25GaWxsTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbk5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmlkVHJhY2tMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb3VudGVyQ29udGVudCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVdyYXBTaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9u
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VGb250VmFyaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlRm9udFdlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dQYXJzZUNv
bnRleHQ6OmNvbW1pdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VT
aGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVJlZmxlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZsZXgpOgorICAgICAgICAoV2ViQ29yZTo6
Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlcklt
YWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0
Ojpjb21taXROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFyc2VD
b250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUJvcmRlclJhZGl1cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlQXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvdW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OnZhbHVlRnJvbVNpZGVLZXl3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlR3JhZGllbnRDb2xvck9yS2V5d29yZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnBhcnNlTGluZWFyR3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZVJhZGlhbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDcm9z
c2ZhZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUN1c3RvbUZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQnVpbHRpbkZpbHRlckFyZ3VtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VSZWdpb25UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VGb250RmVhdHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VGb250VmFyaWFudExpZ2F0dXJlcyk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5o
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NQYXJzZXIpOgorICAgICAgICAqIGNz
cy9DU1NWYWx1ZVBvb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3NzVmFsdWVQb29sKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZVBvb2wuaDoKKyAgICAgICAg
KENTU1ZhbHVlUG9vbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBkb20vQ1NTTWFw
cGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWFwcGVk
QXR0cmlidXRlRGVjbGFyYXRpb246OnNldE1hcHBlZFByb3BlcnR5KToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChEb2N1bWVudCk6CisKIDIwMTItMDItMDIgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgcmVtYWluaW5nIGltcGxlbWVudGF0aW9u
IGZyb20gQ1NTU3R5bGVEZWNsYXJhdGlvbiB0byBzdWJjbGFzc2VzIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NWYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcAppbmRleCAwZWZiNGJiLi5iOGFh
MGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3Vz
dG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9t
LmNwcApAQCAtNzYsMzEgKzc2LDI0IEBAIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENTU1ZhbHVlKiB2YWx1ZSkKICAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKLSAgICBKU0RPTVdyYXBwZXIqIHdy
YXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGN1cnJlbnRXb3JsZChleGVjKSwgdmFsdWUpOwotCi0g
ICAgaWYgKHdyYXBwZXIpCi0gICAgICAgIHJldHVybiB3cmFwcGVyOwotCiAgICAgaWYgKHZhbHVl
LT5pc1dlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkpCi0gICAgICAgIHdyYXBwZXIgPSBDUkVBVEVf
RE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSwg
dmFsdWUpOworICAgICAgICByZXR1cm4gSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3JlYXRl
KGdldERPTVN0cnVjdHVyZTxKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlPihleGVjLCBnbG9iYWxP
YmplY3QpLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
Kj4odmFsdWUpKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgZWxzZSBpZiAodmFsdWUt
PmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKLSAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01f
V1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFdlYktpdENTU0ZpbHRlclZhbHVlLCB2YWx1ZSk7
CisgICAgaWYgKHZhbHVlLT5pc1dlYktpdENTU0ZpbHRlclZhbHVlKCkpCisgICAgICAgIHJldHVy
biBKU1dlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTV2ViS2l0
Q1NTRmlsdGVyVmFsdWU+KGV4ZWMsIGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWUqPih2YWx1ZSkpOwogI2VuZGlmCi0gICAgZWxzZSBp
ZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHdyYXBwZXIgPSBDUkVBVEVfRE9NX1dS
QVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBDU1NWYWx1ZUxpc3QsIHZhbHVlKTsKKyAgICBpZiAo
dmFsdWUtPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybiBKU0NTU1ZhbHVlTGlzdDo6Y3Jl
YXRlKGdldERPTVN0cnVjdHVyZTxKU0NTU1ZhbHVlTGlzdD4oZXhlYywgZ2xvYmFsT2JqZWN0KSwg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih2YWx1ZSkpOwogI2lmIEVO
QUJMRShTVkcpCi0gICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkKLSAgICAgICAgd3Jh
cHBlciA9IENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR1BhaW50LCB2
YWx1ZSk7Ci0gICAgZWxzZSBpZiAodmFsdWUtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgd3JhcHBl
ciA9IENSRUFURV9ET01fV1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFNWR0NvbG9yLCB2YWx1
ZSk7CisgICAgaWYgKHZhbHVlLT5pc1NWR1BhaW50KCkpCisgICAgICAgIHJldHVybiBKU1NWR1Bh
aW50OjpjcmVhdGUoZ2V0RE9NU3RydWN0dXJlPEpTU1ZHUGFpbnQ+KGV4ZWMsIGdsb2JhbE9iamVj
dCksIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8U1ZHUGFpbnQqPih2YWx1ZSkpOworICAgIGlm
ICh2YWx1ZS0+aXNTVkdDb2xvcigpKQorICAgICAgICByZXR1cm4gSlNTVkdDb2xvcjo6Y3JlYXRl
KGdldERPTVN0cnVjdHVyZTxKU1NWR0NvbG9yPihleGVjLCBnbG9iYWxPYmplY3QpLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PFNWR0NvbG9yKj4odmFsdWUpKTsKICNlbmRpZgotICAgIGVsc2Ug
aWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHdyYXBwZXIgPSBDUkVBVEVf
RE9NX1dSQVBQRVIoZXhlYywgZ2xvYmFsT2JqZWN0LCBDU1NQcmltaXRpdmVWYWx1ZSwgdmFsdWUp
OwotICAgIGVsc2UKLSAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBFUihleGVjLCBn
bG9iYWxPYmplY3QsIENTU1ZhbHVlLCB2YWx1ZSk7CisgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2
ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiBKU0NTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZ2V0
RE9NU3RydWN0dXJlPEpTQ1NTUHJpbWl0aXZlVmFsdWU+KGV4ZWMsIGdsb2JhbE9iamVjdCksIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSkpOwogCi0g
ICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIEpTQ1NTVmFsdWU6OmNyZWF0ZShnZXRET01T
dHJ1Y3R1cmU8SlNDU1NWYWx1ZT4oZXhlYywgZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCB2
YWx1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggZDY3NzQzNy4uNzE2
ZWMzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAKQEAgLTM2Miw3ICszNjIsNyBAQCBzdGF0aWMgaW50IHZhbHVlRm9yUmVwZWF0
UnVsZShpbnQgcnVsZSkKICAgICB9CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5pbmVQaWVj
ZUltYWdlJiBpbWFnZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VTbGlj
ZShjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgLy8gQ3JlYXRlIHRoZSBzbGlj
ZXMuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0b3A7CkBAIC0zNzEsOSArMzcxLDkg
QEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiB2YWx1ZUZvck5p
bmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGxlZnQ7CiAKICAgICBpZiAoaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS5pc1BlcmNlbnQoKSkK
LSAgICAgICAgdG9wID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNsaWNl
cygpLnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Cisg
ICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2Vz
KCkudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAg
ICBlbHNlCi0gICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1h
Z2VTbGljZXMoKS50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CisgICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xp
Y2VzKCkudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogCiAg
ICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygp
LnRvcCgpICYmIGltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9tKCkgPT0gaW1hZ2UuaW1hZ2VTbGlj
ZXMoKS50b3AoKQogICAgICAgICAmJiBpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSA9PSBpbWFn
ZS5pbWFnZVNsaWNlcygpLnRvcCgpKSB7CkBAIC0zODIsMjYgKzM4MiwyNiBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VT
bGljZShjb25zdCBOaQogICAgICAgICBsZWZ0ID0gdG9wOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChpbWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkuaXNQZXJjZW50KCkpCi0gICAgICAgICAg
ICByaWdodCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5y
aWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAg
ICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xp
Y2VzKCkucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIAogICAgICAgICBpZiAoaW1hZ2UuaW1hZ2VTbGljZXMoKS5i
b3R0b20oKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpICYmIGltYWdlLmltYWdlU2xpY2Vz
KCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSkgewogICAgICAgICAgICAg
Ym90dG9tID0gdG9wOwogICAgICAgICAgICAgbGVmdCA9IHJpZ2h0OwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9tKCkuaXNQZXJjZW50
KCkpCi0gICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShp
bWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7CisgICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGlj
ZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Cisg
ICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW1hZ2Uu
aW1hZ2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CiAKICAgICAgICAgICAgIGlmIChpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKSA9PSBp
bWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkpCiAgICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGltYWdlLmltYWdlU2xp
Y2VzKCkubGVmdCgpLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3Nz
VmFsdWVQb29sLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLmxlZnQoKS52YWx1ZSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgICAgICAg
ICBsZWZ0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5s
ZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpLnZhbHVlKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpLnZhbHVlKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTQxMiwxMCArNDEyLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKGNvbnN0IE5pCiAg
ICAgcXVhZC0+c2V0Qm90dG9tKGJvdHRvbSk7CiAgICAgcXVhZC0+c2V0TGVmdChsZWZ0KTsKIAot
ICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OmNyZWF0ZShjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKHF1YWQucmVsZWFzZSgpKSwgaW1hZ2UuZmlsbCgpKTsKKyAgICByZXR1cm4g
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjcmVhdGUoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUocXVhZC5yZWxlYXNlKCkpLCBpbWFnZS5maWxsKCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoY29uc3QgTGVu
Z3RoQm94JiBib3gsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExl
bmd0aEJveCYgYm94KQogewogICAgIC8vIENyZWF0ZSB0aGUgc2xpY2VzLgogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gdG9wOwpAQCAtNDI0LDkgKzQyNCw5IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChjb25zdCBM
ZW5ndGhCb3gmCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsZWZ0OwogCiAgICAgaWYg
KGJveC50b3AoKS5pc1JlbGF0aXZlKCkpCi0gICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoYm94LnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKKyAgICAgICAgdG9wID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnRvcCgpLnZh
bHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICBlbHNlCi0gICAgICAg
IHRvcCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94LnRvcCgpKTsKKyAgICAgICAgdG9w
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnRvcCgpKTsKIAogICAgIGlmIChib3gu
cmlnaHQoKSA9PSBib3gudG9wKCkgJiYgYm94LmJvdHRvbSgpID09IGJveC50b3AoKSAmJiBib3gu
bGVmdCgpID09IGJveC50b3AoKSkgewogICAgICAgICByaWdodCA9IHRvcDsKQEAgLTQzNCwyNiAr
NDM0LDI2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5p
bmVQaWVjZUltYWdlUXVhZChjb25zdCBMZW5ndGhCb3gmCiAgICAgICAgIGxlZnQgPSB0b3A7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGJveC5yaWdodCgpLmlzUmVsYXRpdmUoKSkKLSAgICAg
ICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShib3gucmlnaHQoKS52YWx1
ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByaWdodCA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmlnaHQg
PSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGJveC5yaWdodCgpKTsKKyAgICAgICAgICAgIHJp
Z2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnJpZ2h0KCkpOwogCiAgICAgICAg
IGlmIChib3guYm90dG9tKCkgPT0gYm94LnRvcCgpICYmIGJveC5yaWdodCgpID09IGJveC5sZWZ0
KCkpIHsKICAgICAgICAgICAgIGJvdHRvbSA9IHRvcDsKICAgICAgICAgICAgIGxlZnQgPSByaWdo
dDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChib3guYm90dG9tKCkuaXNSZWxh
dGl2ZSgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoYm94LmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
KyAgICAgICAgICAgICAgICBib3R0b20gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3gu
Ym90dG9tKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoYm94LmJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICBib3R0b20gPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkpOwogCiAgICAgICAgICAgICBpZiAoYm94Lmxl
ZnQoKSA9PSBib3gucmlnaHQoKSkKICAgICAgICAgICAgICAgICBsZWZ0ID0gcmlnaHQ7CiAgICAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoYm94LmxlZnQoKS5pc1JlbGF0aXZl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KGJveC5sZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAg
ICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94Lmxl
ZnQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShib3gubGVmdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtNDY0LDI2ICs0NjQsMjYgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEJveCYKICAg
ICBxdWFkLT5zZXRCb3R0b20oYm90dG9tKTsKICAgICBxdWFkLT5zZXRMZWZ0KGxlZnQpOwogCi0g
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpOworICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShxdWFkLnJlbGVhc2UoKSk7CiB9CiAK
LXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0
KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wp
CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVJlcGVh
dChjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBob3Jpem9udGFsUmVwZWF0OwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
dmVydGljYWxSZXBlYXQ7CiAKLSAgICBob3Jpem9udGFsUmVwZWF0ID0gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVGb3JSZXBlYXRSdWxlKGltYWdlLmhvcml6b250YWxS
dWxlKCkpKTsKKyAgICBob3Jpem9udGFsUmVwZWF0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlRm9yUmVwZWF0UnVsZShpbWFnZS5ob3Jpem9udGFsUnVsZSgpKSk7
CiAgICAgaWYgKGltYWdlLmhvcml6b250YWxSdWxlKCkgPT0gaW1hZ2UudmVydGljYWxSdWxlKCkp
CiAgICAgICAgIHZlcnRpY2FsUmVwZWF0ID0gaG9yaXpvbnRhbFJlcGVhdDsKICAgICBlbHNlCi0g
ICAgICAgIHZlcnRpY2FsUmVwZWF0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWVGb3JSZXBlYXRSdWxlKGltYWdlLnZlcnRpY2FsUnVsZSgpKSk7Ci0gICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKGhvcml6b250YWxSZXBlYXQu
cmVsZWFzZSgpLCB2ZXJ0aWNhbFJlcGVhdC5yZWxlYXNlKCkpKTsKKyAgICAgICAgdmVydGljYWxS
ZXBlYXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVGb3JSZXBl
YXRSdWxlKGltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShob3Jpem9udGFsUmVwZWF0LnJlbGVhc2UoKSwgdmVy
dGljYWxSZXBlYXQucmVsZWFzZSgpKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgQ1NT
VmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFs
dWVGb3JOaW5lUGllY2VJbWFnZShjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAgICAg
aWYgKCFpbWFnZS5oYXNJbWFnZSgpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgLy8gSW1h
Z2UgZmlyc3QuCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFnZVZhbHVlOwpAQCAtNDkxLDUyICs0
OTEsNTIgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1h
Z2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlLAogICAgICAgICBpbWFnZVZhbHVlID0gaW1h
Z2UuaW1hZ2UoKS0+Y3NzVmFsdWUoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgaW1hZ2Ugc2xpY2Uu
Ci0gICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gaW1hZ2VTbGljZXMgPSB2YWx1
ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoaW1hZ2UsIGNzc1ZhbHVlUG9vbCk7CisgICAgUmVmUHRy
PENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gaW1hZ2VTbGljZXMgPSB2YWx1ZUZvck5pbmVQaWVj
ZUltYWdlU2xpY2UoaW1hZ2UpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBib3JkZXIgYXJlYSBzbGlj
ZXMuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBib3JkZXJTbGljZXMgPSB2YWx1ZUZvck5pbmVQaWVj
ZUltYWdlUXVhZChpbWFnZS5ib3JkZXJTbGljZXMoKSwgY3NzVmFsdWVQb29sKTsKKyAgICBSZWZQ
dHI8Q1NTVmFsdWU+IGJvcmRlclNsaWNlcyA9IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKGlt
YWdlLmJvcmRlclNsaWNlcygpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgYm9yZGVyIG91dHNldC4K
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IG91dHNldCA9IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFk
KGltYWdlLm91dHNldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gb3V0
c2V0ID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoaW1hZ2Uub3V0c2V0KCkpOwogCiAgICAg
Ly8gQ3JlYXRlIHRoZSByZXBlYXQgcnVsZXMuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiByZXBlYXQg
PSB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KGltYWdlLCBjc3NWYWx1ZVBvb2wpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gcmVwZWF0ID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVJlcGVhdChp
bWFnZSk7CiAKICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1hZ2VWYWx1ZShpbWFnZVZhbHVlLCBp
bWFnZVNsaWNlcywgYm9yZGVyU2xpY2VzLCBvdXRzZXQsIHJlcGVhdCk7CiB9CiAKLWlubGluZSBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShpbnQgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTVmFsdWVQb29sKiBjc3NW
YWx1ZVBvb2wpCitpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUoaW50IHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
CiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYWRqdXN0Rm9yQWJzb2x1
dGVab29tKHZhbHVlLCBzdHlsZSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhZGp1c3RGb3JBYnNvbHV0ZVpvb20odmFs
dWUsIHN0eWxlKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiB9CiAKLWlubGluZSBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gem9vbUFkanVzdGVkTnVtYmVyVmFsdWUo
ZG91YmxlIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3Nz
VmFsdWVQb29sKQoraW5saW5lIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB6
b29tQWRqdXN0ZWROdW1iZXJWYWx1ZShkb3VibGUgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh2YWx1ZSAvIHN0
eWxlLT5lZmZlY3RpdmVab29tKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodmFsdWUgLyBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGNvbnN0
IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCog
Y3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHpvb21BZGp1c3RlZFBp
eGVsVmFsdWVGb3JMZW5ndGgoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
KiBzdHlsZSkKIHsKICAgICBpZiAobGVuZ3RoLmlzRml4ZWQoKSkKLSAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUobGVuZ3RoLnZhbHVlKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wp
OwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGxlbmd0aCk7CisgICAgICAg
IHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSk7Cisg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxlbmd0aCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclJlZmxlY3Rpb24oY29uc3QgU3R5bGVSZWZs
ZWN0aW9uKiByZWZsZWN0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9v
bCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yUmVm
bGVjdGlvbihjb25zdCBTdHlsZVJlZmxlY3Rpb24qIHJlZmxlY3Rpb24sIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoIXJlZmxlY3Rpb24pCi0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG9mZnNldDsKICAgICBpZiAocmVmbGVj
dGlvbi0+b2Zmc2V0KCkuaXNQZXJjZW50KCkpCi0gICAgICAgIG9mZnNldCA9IGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCkucGVyY2VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS5wZXJjZW50KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgZWxzZQotICAgICAgICBvZmZzZXQgPSB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHJlZmxlY3Rpb24tPm9mZnNldCgpLnZhbHVlKCksIHN0eWxlLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICBvZmZzZXQgPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHJl
ZmxlY3Rpb24tPm9mZnNldCgpLnZhbHVlKCksIHN0eWxlKTsKIAotICAgIHJldHVybiBDU1NSZWZs
ZWN0VmFsdWU6OmNyZWF0ZShyZWZsZWN0aW9uLT5kaXJlY3Rpb24oKSwgb2Zmc2V0LnJlbGVhc2Uo
KSwgdmFsdWVGb3JOaW5lUGllY2VJbWFnZShyZWZsZWN0aW9uLT5tYXNrKCksIGNzc1ZhbHVlUG9v
bCkpOworICAgIHJldHVybiBDU1NSZWZsZWN0VmFsdWU6OmNyZWF0ZShyZWZsZWN0aW9uLT5kaXJl
Y3Rpb24oKSwgb2Zmc2V0LnJlbGVhc2UoKSwgdmFsdWVGb3JOaW5lUGllY2VJbWFnZShyZWZsZWN0
aW9uLT5tYXNrKCkpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFBvc2l0
aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcHJvcGVydHlJRCwgQ1NTVmFs
dWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0UG9z
aXRpb25PZmZzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGludCBwcm9wZXJ0eUlEKQogewog
ICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTYxLDUzICs1NjEsNTIgQEAg
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVy
U3R5bGUqIHN0eWxlLCBpbnQgcHJvcGUKIAogICAgIGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBB
YnNvbHV0ZVBvc2l0aW9uIHx8IHN0eWxlLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24pIHsK
ICAgICAgICAgaWYgKGwudHlwZSgpID09IFdlYkNvcmU6OkZpeGVkKQotICAgICAgICAgICAgcmV0
dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobC52YWx1ZSgpLCBzdHlsZSwgY3NzVmFsdWVQb29s
KTsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobCk7CisgICAgICAg
ICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShsLnZhbHVlKCksIHN0eWxlKTsKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGwpOwogICAgIH0KIAogICAg
IGlmIChzdHlsZS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uKQogICAgICAgICAvLyBG
SVhNRTogSXQncyBub3QgZW5vdWdoIHRvIHNpbXBseSByZXR1cm4gImF1dG8iIHZhbHVlcyBmb3Ig
b25lIG9mZnNldCBpZiB0aGUgb3RoZXIgc2lkZSBpcyBkZWZpbmVkLgogICAgICAgICAvLyBJbiBv
dGhlciB3b3JkcyBpZiBsZWZ0IGlzIGF1dG8gYW5kIHJpZ2h0IGlzIG5vdCBhdXRvLCB0aGVuIGxl
ZnQncyBjb21wdXRlZCB2YWx1ZSBpcyBuZWdhdGl2ZSByaWdodCgpLgogICAgICAgICAvLyBTbyB3
ZSBzaG91bGQgZ2V0IHRoZSBvcHBvc2l0ZSBsZW5ndGggdW5pdCBhbmQgc2VlIGlmIGl0IGlzIGF1
dG8uCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGwpOworICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobCk7CiAKLSAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiB9
CiAKIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbjo6Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3Qg
Q29sb3ImIGNvbG9yKSBjb25zdAogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gZG9lcyBOT1QgbG9v
ayBhdCB2aXNpdGVkIGluZm9ybWF0aW9uLCBzbyB0aGF0IGNvbXB1dGVkIHN0eWxlIGRvZXNuJ3Qg
ZXhwb3NlIHRoYXQuCi0gICAgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wgPSBtX25vZGUtPmRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwogICAgIGlmICghY29sb3IuaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT5j
b2xvcigpLnJnYigpKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVl
KGNvbG9yLnJnYigpKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9y
VmFsdWUoc3R5bGUtPmNvbG9yKCkucmdiKCkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVDb2xvclZhbHVlKGNvbG9yLnJnYigpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoTGVuZ3RoU2l6ZSByYWRpdXMs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitz
dGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVl
cyhMZW5ndGhTaXplIHJhZGl1cywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7CiAgICAgaWYgKHJhZGl1cy53aWR0aCgpLnR5cGUoKSA9PSBQZXJjZW50KQotICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShyYWRpdXMud2lkdGgoKS5w
ZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOworICAgICAgICBs
aXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmFkaXVzLndpZHRoKCkucGVy
Y2VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKICAgICBlbHNlCi0g
ICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHJhZGl1cy53aWR0aCgp
LnZhbHVlKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUocmFkaXVzLndpZHRoKCkudmFsdWUoKSwgc3R5bGUpKTsKICAg
ICBpZiAocmFkaXVzLmhlaWdodCgpLnR5cGUoKSA9PSBQZXJjZW50KQotICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShyYWRpdXMuaGVpZ2h0KCkucGVyY2VudCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKKyAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJhZGl1cy5oZWlnaHQoKS5wZXJjZW50KCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOwogICAgIGVsc2UKLSAgICAgICAg
bGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUocmFkaXVzLmhlaWdodCgpLnZhbHVl
KCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1
c3RlZFBpeGVsVmFsdWUocmFkaXVzLmhlaWdodCgpLnZhbHVlKCksIHN0eWxlKSk7CiAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gZ2V0
Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoTGVuZ3RoU2l6ZSByYWRpdXMsIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoTGVuZ3RoU2l6ZSByYWRpdXMs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAocmFkaXVzLndpZHRoKCkgPT0g
cmFkaXVzLmhlaWdodCgpKSB7CiAgICAgICAgIGlmIChyYWRpdXMud2lkdGgoKS50eXBlKCkgPT0g
UGVyY2VudCkKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHJh
ZGl1cy53aWR0aCgpLnBlcmNlbnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdF
KTsKLSAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUocmFkaXVzLndpZHRoKCku
dmFsdWUoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUocmFkaXVzLndpZHRoKCkucGVyY2VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShyYWRpdXMud2lkdGgoKS52YWx1ZSgpLCBzdHlsZSk7CiAgICAgfQotICAgIHJldHVy
biBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMocmFkaXVzLCBzdHlsZSwgY3NzVmFsdWVQb29s
KTsKKyAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWVzKHJhZGl1cywgc3R5bGUp
OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldEJvcmRlclJhZGl1c1No
b3J0aGFuZFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTVmFsdWVQb29sKiBjc3NW
YWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldEJvcmRlclJhZGl1
c1Nob3J0aGFuZFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTbGFzaFNlcGFyYXRlZCgp
OwogICAgIGJvb2wgc2hvd0hvcml6b250YWxCb3R0b21MZWZ0ID0gc3R5bGUtPmJvcmRlclRvcFJp
Z2h0UmFkaXVzKCkud2lkdGgoKSAhPSBzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLndp
ZHRoKCk7CkBAIC02MTksMTAgKzYxOCwxMCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGdldEJvcmRlclJhZGl1c1Nob3J0aGFuZFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKgogICAg
IGJvb2wgc2hvd1ZlcnRpY2FsVG9wUmlnaHQgPSAoc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVz
KCkuaGVpZ2h0KCkgIT0gc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKS5oZWlnaHQoKSkgfHwg
c2hvd1ZlcnRpY2FsQm90dG9tUmlnaHQ7CiAgICAgYm9vbCBzaG93VmVydGljYWxUb3BMZWZ0ID0g
KHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGgoKSAhPSBzdHlsZS0+Ym9yZGVyVG9w
TGVmdFJhZGl1cygpLmhlaWdodCgpKTsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHRvcExl
ZnRSYWRpdXMgPSBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJvcmRlclRvcExl
ZnRSYWRpdXMoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlz
dD4gdG9wUmlnaHRSYWRpdXMgPSBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJv
cmRlclRvcFJpZ2h0UmFkaXVzKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOwotICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGJvdHRvbVJpZ2h0UmFkaXVzID0gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFs
dWVzKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLCBzdHlsZSwgY3NzVmFsdWVQb29s
KTsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBib3R0b21MZWZ0UmFkaXVzID0gZ2V0Qm9yZGVy
UmFkaXVzQ29ybmVyVmFsdWVzKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCksIHN0eWxl
LCBjc3NWYWx1ZVBvb2wpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHRvcExlZnRSYWRpdXMg
PSBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMo
KSwgc3R5bGUpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHRvcFJpZ2h0UmFkaXVzID0gZ2V0
Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWVzKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLCBz
dHlsZSk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gYm90dG9tUmlnaHRSYWRpdXMgPSBnZXRC
b3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCks
IHN0eWxlKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBib3R0b21MZWZ0UmFkaXVzID0gZ2V0
Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWVzKHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCks
IHN0eWxlKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGhvcml6b250YWxSYWRpaSA9IENT
U1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBob3Jpem9udGFsUmFkaWkt
PmFwcGVuZCh0b3BMZWZ0UmFkaXVzLT5pdGVtKDApKTsKQEAgLTY2MywxMCArNjYyLDEwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBoYXNDb21wb3NpdGVkTGF5ZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKICAgICByZXR1cm4gcmVuZGVyZXIgJiYgcmVuZGVyZXItPmhhc0xheWVyKCkgJiYgdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChyZW5kZXJlciktPmxheWVyKCktPmlzQ29tcG9zaXRlZCgpOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFuc2Zvcm0oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZVBvb2wqIGNz
c1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9y
bShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAg
ICAgaWYgKCFyZW5kZXJlciB8fCBzdHlsZS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgIEludFJlY3QgYm94ID0gc2l6aW5nQm94
KHJlbmRlcmVyKTsKIApAQCAtNjgwLDM0ICs2NzksMzQgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJl
bmQKICAgICBpZiAodHJhbnNmb3JtLmlzQWZmaW5lKCkpIHsKICAgICAgICAgdHJhbnNmb3JtVmFs
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKTsKIAotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFw
cGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5hKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLmIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZSh0cmFuc2Zvcm0uYygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
OwotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHRyYW5zZm9ybS5kKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAg
IHRyYW5zZm9ybVZhbC0+YXBwZW5kKHpvb21BZGp1c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5l
KCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
em9vbUFkanVzdGVkTnVtYmVyVmFsdWUodHJhbnNmb3JtLmYoKSwgc3R5bGUsIGNzc1ZhbHVlUG9v
bCkpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZSh0cmFuc2Zvcm0uYSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFu
c2Zvcm0uYigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFu
c2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0uYygp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0uZCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZCh6
b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zvcm0uZSgpLCBzdHlsZSkpOworICAgICAgICB0
cmFuc2Zvcm1WYWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zvcm0uZigp
LCBzdHlsZSkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRyYW5zZm9ybVZhbCA9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uKTsKIAotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMTEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTEyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUodHJhbnNmb3JtLm0xMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwot
ICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRy
YW5zZm9ybS5tMTQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLQotICAgICAg
ICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9y
bS5tMjEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNm
b3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTIyKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLm0yMygpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjQoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKTsKLQotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1
ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMzEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTMyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUodHJhbnNmb3JtLm0zMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5z
Zm9ybS5tMzQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLQotICAgICAgICB0
cmFuc2Zvcm1WYWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zvcm0ubTQx
KCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
em9vbUFkanVzdGVkTnVtYmVyVmFsdWUodHJhbnNmb3JtLm00MigpLCBzdHlsZSwgY3NzVmFsdWVQ
b29sKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKHpvb21BZGp1c3RlZE51bWJlclZh
bHVlKHRyYW5zZm9ybS5tNDMoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCkpOwotICAgICAgICB0cmFu
c2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tNDQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFs
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0xMSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTEyKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMTMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0xNCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOworCisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodHJhbnNmb3JtLm0yMigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFu
c2Zvcm0ubTIzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRy
YW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5t
MjQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKworICAgICAgICB0cmFuc2Zv
cm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTMxKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMzIoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0zMygpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTM0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoem9vbUFkanVzdGVk
TnVtYmVyVmFsdWUodHJhbnNmb3JtLm00MSgpLCBzdHlsZSkpOworICAgICAgICB0cmFuc2Zvcm1W
YWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zvcm0ubTQyKCksIHN0eWxl
KSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKHpvb21BZGp1c3RlZE51bWJlclZhbHVl
KHRyYW5zZm9ybS5tNDMoKSwgc3R5bGUpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm00NCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOwogICAgIH0KIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CkBAIC03MjAsOSArNzE5
LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmQKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6dmFsdWVGb3JDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0
ZXIoY29uc3QgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKiBudW1iZXJQYXJhbWV0ZXIpIGNv
bnN0CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbnVtYmVyUGFyYW1ldGVyVmFsdWUgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgQ1NTVmFsdWVQb29sKiBj
c3NWYWx1ZVBvb2wgPSBtX25vZGUtPmRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1iZXJQYXJhbWV0ZXItPnNpemUoKTsgKytp
KQotICAgICAgICBudW1iZXJQYXJhbWV0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUobnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KGkpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgICAgICBudW1iZXJQYXJhbWV0ZXJWYWx1ZS0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG51bWJlclBhcmFtZXRlci0+dmFsdWVBdChpKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICByZXR1cm4gbnVtYmVyUGFyYW1ldGVyVmFs
dWUucmVsZWFzZSgpOwogfQogCkBAIC03NDMsMTAgKzc0MSw4IEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6dmFsdWVGb3JDdXN0b21GaWx0ZXJQYXJh
bWV0ZXIoCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvckZpbHRlcihSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7Ci0gICAgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wgPSBtX25vZGUtPmRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwotCiAgICAgaWYgKHN0eWxlLT5maWx0ZXIo
KS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKIApAQCAtNzU5LDYxICs3NTUsNjEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvckZpbHRlcihSZW5kZXJTdHlsZSogc3QKICAg
ICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlJFRkVSRU5DRTogewogICAgICAgICAgICAgUmVm
ZXJlbmNlRmlsdGVyT3BlcmF0aW9uKiByZWZlcmVuY2VPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxS
ZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAg
ZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRl
clZhbHVlOjpSZWZlcmVuY2VGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFs
dWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHJlZmVyZW5jZU9wZXJhdGlvbi0+
cmVmZXJlbmNlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgICAg
ICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJlZmVyZW5j
ZU9wZXJhdGlvbi0+cmVmZXJlbmNlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6R1JBWVNDQUxFOiB7CiAgICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3Bl
cmF0aW9uKiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJhc2ljQ29sb3JNYXRy
aXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVy
VmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVl
OjpHcmF5c2NhbGVGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFw
cGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91
bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRl
clZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVy
YXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNF
UElBOiB7CiAgICAgICAgICAgICBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBjb2xv
ck1hdHJpeE9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVy
YXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJL
aXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpTZXBpYUZpbHRl
ck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6IHsKICAgICAg
ICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0
aW9uID0gc3RhdGljX2Nhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRl
ck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZh
bHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNhdHVyYXRlRmlsdGVyT3BlcmF0aW9u
KTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOiB7CiAgICAgICAgICAgICBC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKiBjb2xvck1hdHJpeE9wZXJhdGlvbiA9IHN0
YXRpY19jYXN0PEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRp
b24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3Jl
YXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpIdWVSb3RhdGVGaWx0ZXJPcGVyYXRpb24pOwotICAg
ICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNv
bG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19ERUcp
KTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RFRykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDogewogICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFu
c2ZlckZpbHRlck9wZXJhdGlvbiogY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24gPSBzdGF0aWNf
Y2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0
aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNy
ZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6SW52ZXJ0RmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjb21w
b25lbnRUcmFuc2Zlck9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOiB7CiAgICAgICAgICAgICBC
YXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb21wb25lbnRUcmFuc2Zlck9w
ZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpPcGFjaXR5RmlsdGVy
T3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbi0+YW1vdW50KCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9u
LT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRO
RVNTOiB7CiAgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
KiBicmlnaHRuZXNzT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8QmFzaWNDb21wb25lbnRUcmFuc2Zl
ckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJW
YWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6
OkJyaWdodG5lc3NGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFw
cGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGJyaWdodG5lc3NPcGVyYXRpb24tPmFtb3Vu
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVy
VmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShicmlnaHRuZXNzT3BlcmF0
aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05U
UkFTVDogewogICAgICAgICAgICAgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlv
biogY29udHJhc3RPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZh
bHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
Q29udHJhc3RGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNvbnRyYXN0T3BlcmF0aW9uLT5hbW91bnQoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVl
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29udHJhc3RPcGVyYXRpb24tPmFt
b3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAg
ICAgICAgICAgIEJsdXJGaWx0ZXJPcGVyYXRpb24qIGJsdXJPcGVyYXRpb24gPSBzdGF0aWNfY2Fz
dDxCbHVyRmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZp
bHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6Qmx1ckZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBw
ZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoYmx1ck9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCku
dmFsdWUoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGJsdXJPcGVyYXRpb24tPnN0ZERldmlhdGlv
bigpLnZhbHVlKCksIHN0eWxlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKQEAgLTgzOCwyMiArODM0
LDIyIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
dmFsdWVGb3JGaWx0ZXIoUmVuZGVyU3R5bGUqIHN0CiAgICAgICAgICAgICBpZiAocHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgc2hhZGVyc0xpc3QtPmFwcGVuZChwcm9n
cmFtLT52ZXJ0ZXhTaGFkZXIoKS0+Y3NzVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgc2hhZGVyc0xpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAgICBzaGFkZXJzTGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
KTsKICAgICAgICAgICAgIGlmIChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpKQogICAgICAgICAg
ICAgICAgIHNoYWRlcnNMaXN0LT5hcHBlbmQocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS0+Y3Nz
VmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2hhZGVyc0xpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
KTsKKyAgICAgICAgICAgICAgICBzaGFkZXJzTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgICAgIGZpbHRlclZh
bHVlLT5hcHBlbmQoc2hhZGVyc0xpc3QucmVsZWFzZSgpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbWVzaFBhcmFtZXRlcnMgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICBtZXNoUGFyYW1ldGVycy0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoY3VzdG9tT3BlcmF0aW9uLT5tZXNoUm93cygp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAgICAgICAgbWVzaFBhcmFt
ZXRlcnMtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGN1c3RvbU9wZXJhdGlvbi0+
bWVzaENvbHVtbnMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAg
ICAgIG1lc2hQYXJhbWV0ZXJzLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjdXN0
b21PcGVyYXRpb24tPm1lc2hCb3hUeXBlKCkpKTsKKyAgICAgICAgICAgIG1lc2hQYXJhbWV0ZXJz
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY3VzdG9tT3BlcmF0aW9uLT5tZXNo
Um93cygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgbWVz
aFBhcmFtZXRlcnMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjdXN0b21PcGVy
YXRpb24tPm1lc2hDb2x1bW5zKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Cisg
ICAgICAgICAgICBtZXNoUGFyYW1ldGVycy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhlIHNwZWNpZmljYXRpb24gZG9lc24ndCBoYXZlIGFueSAiYXR0
YWNoZWQiIGlkZW50aWZpZXIuIFNob3VsZCB3ZSBhZGQgb25lPwogICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyNzAwCiAgICAgICAgICAgICBp
ZiAoY3VzdG9tT3BlcmF0aW9uLT5tZXNoVHlwZSgpID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6
REVUQUNIRUQpCi0gICAgICAgICAgICAgICAgbWVzaFBhcmFtZXRlcnMtPmFwcGVuZChjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZURldGFjaGVkKSk7CisgICAgICAg
ICAgICAgICAgbWVzaFBhcmFtZXRlcnMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVEZXRhY2hlZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKG1lc2hQYXJhbWV0ZXJzLnJlbGVhc2UoKSk7CiAgICAgICAg
ICAgICAKQEAgLTg2NSw3ICs4NjEsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OnZhbHVlRm9yRmlsdGVyKFJlbmRlclN0eWxlKiBzdAogICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzU2l6ZTsgKytpKSB7CiAgICAg
ICAgICAgICAgICAgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKiBwYXJhbWV0ZXIgPSBwYXJh
bWV0ZXJzLmF0KGkpLmdldCgpOwogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IHBhcmFtZXRlckNTU05hbWVBbmRWYWx1ZSA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBh
cmF0ZWQoKTsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJDU1NOYW1lQW5kVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHBhcmFtZXRlci0+bmFtZSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlckNTU05hbWVB
bmRWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBhcmFtZXRlci0+bmFt
ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgICAgICAgICAgICAgIHBh
cmFtZXRlckNTU05hbWVBbmRWYWx1ZS0+YXBwZW5kKHZhbHVlRm9yQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyKHBhcmFtZXRlcikpOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNDU1NWYWx1ZS0+YXBw
ZW5kKHBhcmFtZXRlckNTU05hbWVBbmRWYWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQpA
QCAtODg2LDUzICs4ODIsNTMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjp2YWx1ZUZvckZpbHRlcihSZW5kZXJTdHlsZSogc3QKICNlbmRpZgogCiAj
aWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZUZvckdyaWRUcmFja0JyZWFkdGgoY29uc3QgTGVuZ3RoJiB0cmFja0xlbmd0aCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0JyZWFkdGgoY29uc3QgTGVuZ3Ro
JiB0cmFja0xlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmICh0cmFj
a0xlbmd0aC5pc1BlcmNlbnQoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUodHJhY2tMZW5ndGgpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUodHJhY2tMZW5ndGgpOwogICAgIGlmICh0cmFja0xlbmd0aC5pc0F1dG8oKSkKLSAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
byk7Ci0gICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodHJhY2tMZW5ndGgudmFsdWUo
KSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZSh0cmFja0xlbmd0aC52YWx1ZSgpLCBzdHlsZSk7CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckdyaWRUcmFja0xpc3QoY29uc3QgVmVjdG9yPExl
bmd0aD4mIHRyYWNrTGVuZ3RocywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZVBv
b2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvckdy
aWRUcmFja0xpc3QoY29uc3QgVmVjdG9yPExlbmd0aD4mIHRyYWNrTGVuZ3RocywgY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQogewogICAgIC8vIFdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IGFuIGVs
ZW1lbnQhCiAgICAgQVNTRVJUKHRyYWNrTGVuZ3Rocy5zaXplKCkpOwogCiAgICAgLy8gSGFuZGxl
IHRoZSAnbm9uZScgY2FzZSBoZXJlLgogICAgIGlmICh0cmFja0xlbmd0aHMuc2l6ZSgpID09IDEg
JiYgdHJhY2tMZW5ndGhzWzBdLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAK
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdHJhY2tMZW5ndGhzLnNp
emUoKTsgKytpKQotICAgICAgICBsaXN0LT5hcHBlbmQodmFsdWVGb3JHcmlkVHJhY2tCcmVhZHRo
KHRyYWNrTGVuZ3Roc1tpXSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCkpOworICAgICAgICBsaXN0LT5h
cHBlbmQodmFsdWVGb3JHcmlkVHJhY2tCcmVhZHRoKHRyYWNrTGVuZ3Roc1tpXSwgc3R5bGUpKTsK
ICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKIAotc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldERlbGF5VmFsdWUoY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbUxpc3Qs
IENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IGdldERlbGF5VmFsdWUoY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbUxpc3QpCiB7CiAgICAgUmVm
UHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKICAgICBpZiAoYW5pbUxpc3QpIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhbmltTGlzdC0+c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShhbmltTGlzdC0+YW5pbWF0aW9uKGkpLT5kZWxheSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShhbmltTGlzdC0+YW5pbWF0aW9uKGkpLT5kZWxheSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRo
YXQgaW5pdGlhbEFuaW1hdGlvbkRlbGF5KCkgaXMgdXNlZCBmb3IgYm90aCB0cmFuc2l0aW9ucyBh
bmQgYW5pbWF0aW9ucwotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1MpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlvbkRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUykpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXREdXJhdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvbkxp
c3QqIGFuaW1MaXN0LCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBnZXREdXJhdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1M
aXN0KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNy
ZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgaWYgKGFuaW1MaXN0KSB7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYW5pbUxpc3QtPnNpemUoKTsgKytpKQotICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYW5pbUxpc3QtPmFuaW1hdGlvbihp
KS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYW5pbUxpc3QtPmFuaW1hdGlv
bihpKS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gTm90ZSB0aGF0IGluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpIGlzIHVz
ZWQgZm9yIGJvdGggdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKLSAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoQW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9u
RHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRp
b25EdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICB9CiAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOwogfQpAQCAtOTY5LDEwICs5NjUsMTAgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGdldFRpbWluZ0Z1bmN0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uTGlz
dCogYW5pbUxpc3QKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBjcmVhdGVMaW5lQm94Q29udGFpblZhbHVlKENTU1ZhbHVlUG9vbCog
Y3NzVmFsdWVQb29sLCB1bnNpZ25lZCBsaW5lQm94Q29udGFpbikKK3N0YXRpYyBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBjcmVhdGVMaW5lQm94Q29udGFpblZhbHVlKHVuc2lnbmVkIGxpbmVCb3hDb250
YWluKQogewogICAgIGlmICghbGluZUJveENvbnRhaW4pCi0gICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgcmV0dXJuIENTU0xpbmVCb3hDb250YWluVmFsdWU6OmNyZWF0ZShsaW5lQm94Q29udGFpbik7
CiB9CiAKQEAgLTEwMjgsMTMgKzEwMjQsMTAgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0sKICAg
ICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIENTU1ZhbHVlUG9vbCogY3Nz
VmFsdWVQb29sID0gbV9ub2RlLT5kb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS5nZXQoKTsKLQog
ICAgIGlmIChpbnQga2V5d29yZFNpemUgPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29y
ZFNpemUoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKGNzc0lkZW50aWZpZXJGb3JGb250U2l6ZUtleXdvcmQoa2V5d29yZFNpemUpKTsKKyAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjc3NJZGVudGlm
aWVyRm9yRm9udFNpemVLZXl3b3JkKGtleXdvcmRTaXplKSk7CiAKLQotICAgIHJldHVybiB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVs
U2l6ZSgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUo
KSwgc3R5bGUuZ2V0KCkpOwogfQogCiBib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSBjb25zdApAQCAtMTA1MSwyMCArMTA0NCwxOSBAQCBi
b29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6dXNlRml4ZWRGb250RGVmYXVsdFNpemUo
KSBjb25zdAogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246OnZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdywgaW50IGlkLCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7Ci0gICAgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wg
PSBtX25vZGUtPmRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwogICAgIGlmICghc2hh
ZG93KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
ID0gc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4oaWQpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBm
b3IgKGNvbnN0IFNoYWRvd0RhdGEqIHMgPSBzaGFkb3c7IHM7IHMgPSBzLT5uZXh0KCkpIHsKLSAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB4ID0gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShzLT54KCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHkgPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMtPnkoKSwgc3R5bGUsIGNzc1Zh
bHVlUG9vbCk7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciA9IHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUocy0+Ymx1cigpLCBzdHlsZSwgY3NzVmFsdWVQb29sKTsKLSAgICAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzcHJlYWQgPSBwcm9wZXJ0eUlEID09IENTU1By
b3BlcnR5VGV4dFNoYWRvdyA/IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KCkgOiB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHMtPnNwcmVhZCgpLCBzdHlsZSwgY3NzVmFsdWVQb29sKTsKLSAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlUZXh0U2hhZG93IHx8IHMtPnN0eWxlKCkgPT0gTm9ybWFsID8gUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4oKSA6IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlSW5zZXQpOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9y
ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHMtPmNvbG9yKCkucmdiKCkpOworICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHggPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KHMtPngoKSwgc3R5bGUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHkgPSB6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMtPnkoKSwgc3R5bGUpOworICAgICAgICBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGJsdXIgPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMtPmJsdXIoKSwg
c3R5bGUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNwcmVhZCA9IHByb3Bl
cnR5SUQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93ID8gUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4oKSA6IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUocy0+c3ByZWFkKCksIHN0eWxlKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NT
UHJvcGVydHlUZXh0U2hhZG93IHx8IHMtPnN0eWxlKCkgPT0gTm9ybWFsID8gUGFzc1JlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4oKSA6IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUluc2V0KTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xv
ciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUocy0+Y29sb3IoKS5yZ2IoKSk7CiAg
ICAgICAgIGxpc3QtPnByZXBlbmQoU2hhZG93VmFsdWU6OmNyZWF0ZSh4LnJlbGVhc2UoKSwgeS5y
ZWxlYXNlKCksIGJsdXIucmVsZWFzZSgpLCBzcHJlYWQucmVsZWFzZSgpLCBzdHlsZS5yZWxlYXNl
KCksIGNvbG9yLnJlbGVhc2UoKSkpOwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7
CkBAIC0xMDkyLDg1ICsxMDg0LDg1IEBAIHN0YXRpYyBpbnQgaWRlbnRpZmllckZvckZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yRmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5LCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSkKIHsKICAgICBpZiAoaW50IGZhbWlseUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRm9y
RmFtaWx5KGZhbWlseSkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShmYW1pbHlJZGVudGlmaWVyKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZShmYW1pbHkuc3RyaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShm
YW1pbHlJZGVudGlmaWVyKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
ZmFtaWx5LnN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiByZW5kZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NW
YWx1ZShpbnQgdGV4dERlY29yYXRpb24sIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJlbmRlclRleHREZWNvcmF0aW9uRmxhZ3NUb0NTU1Zh
bHVlKGludCB0ZXh0RGVjb3JhdGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmICh0ZXh0RGVj
b3JhdGlvbiAmIFVOREVSTElORSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKSk7CisgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRl
cmxpbmUpKTsKICAgICBpZiAodGV4dERlY29yYXRpb24gJiBPVkVSTElORSkKLSAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3Zl
cmxpbmUpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU92ZXJsaW5lKSk7CiAgICAgaWYgKHRleHREZWNvcmF0aW9uICYg
TElORV9USFJPVUdIKQotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCkpOworICAgICAgICBsaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91
Z2gpKTsKICAgICBpZiAodGV4dERlY29yYXRpb24gJiBCTElOSykKLSAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQmxpbmspKTsK
KyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUJsaW5rKSk7CiAKICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
KyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOwogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gZmlsbFJlcGVhdFRvQ1NTVmFsdWUoRUZpbGxSZXBlYXQgeFJlcGVhdCwgRUZpbGxSZXBl
YXQgeVJlcGVhdCwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gZmlsbFJlcGVhdFRvQ1NTVmFsdWUoRUZpbGxSZXBlYXQgeFJlcGVhdCwgRUZp
bGxSZXBlYXQgeVJlcGVhdCkKIHsKICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHks
IGlmIGJvdGggdmFsdWVzIGFyZSBlcXVhbCwganVzdCByZXR1cm4gb25lIG9mIHRoZW0uIEFuZAog
ICAgIC8vIGlmIHRoZSB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50IHRvIHJlcGVhdC14IG9yIHJl
cGVhdC15LCBqdXN0IHJldHVybiB0aGUgc2hvcnRoYW5kLgogICAgIGlmICh4UmVwZWF0ID09IHlS
ZXBlYXQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHhSZXBlYXQp
OworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoeFJlcGVhdCk7CiAg
ICAgaWYgKHhSZXBlYXQgPT0gUmVwZWF0RmlsbCAmJiB5UmVwZWF0ID09IE5vUmVwZWF0RmlsbCkK
LSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlUmVwZWF0WCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXRYKTsKICAgICBpZiAoeFJlcGVhdCA9PSBOb1JlcGVhdEZp
bGwgJiYgeVJlcGVhdCA9PSBSZXBlYXRGaWxsKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXRZKTsKKyAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdFkpOwog
CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3Bh
Y2VTZXBhcmF0ZWQoKTsKLSAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1
ZSh4UmVwZWF0KSk7Ci0gICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
eVJlcGVhdCkpOworICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh4
UmVwZWF0KSk7CisgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHlS
ZXBlYXQpKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBmaWxsU2l6ZVRvQ1NTVmFsdWUoY29uc3QgRmlsbFNpemUmIGZpbGxTaXpl
LCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBmaWxsU2l6ZVRvQ1NTVmFsdWUoY29uc3QgRmlsbFNpemUmIGZpbGxTaXplKQogewogICAgIGlm
IChmaWxsU2l6ZS50eXBlID09IENvbnRhaW4pCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRhaW4pOworICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29udGFpbik7CiAK
ICAgICBpZiAoZmlsbFNpemUudHlwZSA9PSBDb3ZlcikKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ292ZXIpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ292ZXIpOwog
CiAgICAgaWYgKGZpbGxTaXplLnNpemUuaGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGZpbGxTaXplLnNpemUud2lkdGgoKSk7CisgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShmaWxsU2l6ZS5zaXplLndpZHRo
KCkpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShmaWxsU2l6ZS5zaXplLndpZHRoKCkpKTsKLSAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShmaWxsU2l6ZS5zaXplLmhlaWdodCgpKSk7CisgICAgbGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGZpbGxTaXplLnNpemUud2lkdGgoKSkp
OworICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShmaWxsU2l6ZS5z
aXplLmhlaWdodCgpKSk7CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gY29udGVudFRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBjb250ZW50VG9DU1NWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKICAgICBmb3IgKGNvbnN0IENvbnRlbnREYXRhKiBjb250ZW50RGF0YSA9IHN0
eWxlLT5jb250ZW50RGF0YSgpOyBjb250ZW50RGF0YTsgY29udGVudERhdGEgPSBjb250ZW50RGF0
YS0+bmV4dCgpKSB7CiAgICAgICAgIGlmIChjb250ZW50RGF0YS0+aXNDb3VudGVyKCkpIHsKICAg
ICAgICAgICAgIGNvbnN0IENvdW50ZXJDb250ZW50KiBjb3VudGVyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgQ291bnRlckNvbnRlbnREYXRhKj4oY29udGVudERhdGEpLT5jb3VudGVyKCk7CiAgICAgICAg
ICAgICBBU1NFUlQoY291bnRlcik7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShjb3VudGVyLT5pZGVudGlmaWVyKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfQ09VTlRFUl9OQU1FKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoY291bnRlci0+aWRlbnRpZmllcigpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0NPVU5URVJfTkFNRSkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnREYXRhLT5p
c0ltYWdlKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFN0eWxlSW1hZ2UqIGltYWdlID0gc3RhdGlj
X2Nhc3Q8Y29uc3QgSW1hZ2VDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+aW1hZ2UoKTsKICAg
ICAgICAgICAgIEFTU0VSVChpbWFnZSk7CiAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoaW1hZ2Ut
PmNzc1ZhbHVlKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbnRlbnREYXRhLT5pc1RleHQoKSkK
LSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0YXRp
Y19jYXN0PGNvbnN0IFRleHRDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+dGV4dCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0YXRpY19jYXN0PGNvbnN0IFRleHRDb250ZW50RGF0
YSo+KGNvbnRlbnREYXRhKS0+dGV4dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykp
OwogICAgIH0KICAgICBpZiAoIXN0eWxlLT5yZWdpb25UaHJlYWQoKS5pc051bGwoKSkKLSAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvblRo
cmVhZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvblRocmVhZCgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvdW50ZXJUb0NTU1ZhbHVlKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbCogY3Nz
VmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNvdW50ZXJUb0NTU1ZhbHVl
KGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgaW50IHByb3BlcnR5SUQpCiB7CiAgICAgY29uc3Qg
Q291bnRlckRpcmVjdGl2ZU1hcCogbWFwID0gc3R5bGUtPmNvdW50ZXJEaXJlY3RpdmVzKCk7CiAg
ICAgaWYgKCFtYXApCkBAIC0xMTc4LDkgKzExNzAsOSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBpbnQgcHJv
cAogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3RpdmVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgc2hvcnQgbnVtYmVyID0gcHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25kLm1faW5jcmVtZW50VmFs
dWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZSgoZG91YmxlKW51bWJlciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQpAQCAtMTE5NCw3MiArMTE4Niw3MiBA
QCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChpbnQgcHJvcGVydHlJRCkK
ICAgICBMT0dfRVJST1IoIldlYktpdCBkb2VzIG5vdCB5ZXQgaW1wbGVtZW50IGdldENvbXB1dGVk
U3R5bGUgZm9yICclcycuIiwgZ2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5
SUQ+KHByb3BlcnR5SUQpKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Zm9udEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3Nz
VmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJv
bVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBGb250RmFtaWx5JiBmaXJz
dEZhbWlseSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OwogICAgIGZvciAoY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmZpcnN0RmFtaWx5OyBmYW1p
bHk7IGZhbWlseSA9IGZhbWlseS0+bmV4dCgpKQotICAgICAgICBsaXN0LT5hcHBlbmQodmFsdWVG
b3JGYW1pbHkoZmFtaWx5LT5mYW1pbHkoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgIGxpc3Qt
PmFwcGVuZCh2YWx1ZUZvckZhbWlseShmYW1pbHktPmZhbWlseSgpKSk7CiAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bGluZUhlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3Nz
VmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpbmVIZWln
aHRGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIExlbmd0aCBsZW5ndGggPSBz
dHlsZS0+bGluZUhlaWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdhdGl2ZSgpKQotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3Jt
YWwpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9ybWFsKTsKICAgICBpZiAobGVuZ3RoLmlzUGVyY2VudCgpKQogICAgICAgICAv
LyBUaGlzIGlzIGltcGVyZmVjdCwgYmVjYXVzZSBpdCBkb2Vzbid0IGluY2x1ZGUgdGhlIHpvb20g
ZmFjdG9yIGFuZCB0aGUgcmVhbCBjb21wdXRhdGlvbgogICAgICAgICAvLyBmb3IgaG93IGhpZ2gg
dG8gYmUgaW4gcGl4ZWxzIGRvZXMgaW5jbHVkZSB0aGluZ3MgbGlrZSBtaW5pbXVtIGZvbnQgc2l6
ZSBhbmQgdGhlIHpvb20gZmFjdG9yLgogICAgICAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgc2lu
Y2UgZm9udC1zaXplIGRvZXNuJ3QgaW5jbHVkZSB0aGUgem9vbSBmYWN0b3IsIHdlIHJlYWxseSBj
YW4ndCBkbwogICAgICAgICAvLyB0aGF0IGhlcmUgZWl0aGVyLgotICAgICAgICByZXR1cm4gem9v
bUFkanVzdGVkUGl4ZWxWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aC5wZXJjZW50KCkgKiBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpKSAvIDEwMCwgc3R5bGUsIGNz
c1ZhbHVlUG9vbCk7Ci0gICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobGVuZ3RoLnZh
bHVlKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICByZXR1cm4gem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aC5wZXJjZW50KCkgKiBzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpKSAvIDEwMCwgc3R5bGUpOworICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0aC52YWx1ZSgpLCBzdHlsZSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U2l6ZUZyb21TdHlsZShSZW5k
ZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRTaXplRnJvbVN0eWxlKFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKLSAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7Cisg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigp
LmNvbXB1dGVkUGl4ZWxTaXplKCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENT
U1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZvbnRTdHlsZUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYg
KHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSXRhbGljKTsKLSAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlSXRhbGljKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9ybWFsKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTVmFsdWVQ
b29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Zm9udFZhcmlhbnRGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkuc21hbGxDYXBzKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNtYWxsQ2Fwcyk7Ci0gICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsK
KyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVNtYWxsQ2Fwcyk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBmb250V2VpZ2h0RnJvbVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSwgQ1NTVmFs
dWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gZm9udFdlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgc3dpdGNo
IChzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpIHsKICAgICBjYXNlIEZvbnRXZWln
aHQxMDA6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZTEwMCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWUxMDApOwogICAgIGNhc2UgRm9udFdlaWdodDIwMDoKLSAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMjAw
KTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZTIwMCk7CiAgICAgY2FzZSBGb250V2VpZ2h0MzAwOgotICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWUzMDApOworICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMzAwKTsK
ICAgICBjYXNlIEZvbnRXZWlnaHROb3JtYWw6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwogICAg
IGNhc2UgRm9udFdlaWdodDUwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlNTAwKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTUwMCk7CiAgICAgY2FzZSBGb250V2Vp
Z2h0NjAwOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWU2MDApOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlNjAwKTsKICAgICBjYXNlIEZvbnRXZWlnaHRCb2xkOgotICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVC
b2xkKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUJvbGQpOwogICAgIGNhc2UgRm9udFdlaWdodDgwMDoKLSAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlODAwKTsKKyAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTgw
MCk7CiAgICAgY2FzZSBGb250V2VpZ2h0OTAwOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWU5MDApOworICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlOTAwKTsKICAgICB9CiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKIH0KIAogUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGludCBwcm9wZXJ0eUlELCBFVXBkYXRlTGF5b3V0IHVwZGF0ZUxheW91dCkgY29uc3QKQEAg
LTEyODcsOCArMTI3OSw2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgaWYgKCFzdHls
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCA9
IG5vZGUtPmRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwotCiAgICAgcHJvcGVydHlJ
RCA9IENTU1Byb3BlcnR5OjpyZXNvbHZlRGlyZWN0aW9uQXdhcmVQcm9wZXJ0eShwcm9wZXJ0eUlE
LCBzdHlsZS0+ZGlyZWN0aW9uKCksIHN0eWxlLT53cml0aW5nTW9kZSgpKTsKIAogICAgIHN3aXRj
aCAoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcGVydHlJRCkpIHsKQEAgLTEyOTYsMTgg
KzEyODYsMTggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3I6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKG1fYWxsb3dWaXNpdGVkU3R5bGU/
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LnJnYigpIDogc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLnJnYigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKG1fYWxsb3dWaXNpdGVkU3R5bGU/
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
LnJnYigpIDogc3R5bGUtPmJhY2tncm91bmRDb2xvcigpLnJnYigpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tJbWFnZTogewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza0ltYWdlID8gc3R5bGUtPm1hc2tMYXllcnMo
KSA6IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycykK
LSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICAgICAgICAgIGlmICgh
bGF5ZXJzLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAobGF5ZXJzLT5pbWFnZSgpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGF5ZXJzLT5pbWFnZSgpLT5jc3NWYWx1ZSgpOwog
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVDb21tYVNlcGFyYXRlZCgpOwpAQCAtMTMxNSw3ICsxMzA1LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXIKICAgICAgICAgICAgICAgICBpZiAoY3VyckxheWVyLT5pbWFnZSgpKQogICAgICAg
ICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3VyckxheWVyLT5pbWFnZSgpLT5jc3NWYWx1ZSgp
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQpAQCAtMTMyNCwxMSArMTMxNCwxMSBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFz
a1NpemU6IHsKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplID8gc3R5bGUtPm1hc2tMYXllcnMoKSA6IHN0
eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4dCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmaWxsU2l6ZVRvQ1NTVmFsdWUobGF5ZXJzLT5zaXpl
KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGxTaXplVG9DU1NW
YWx1ZShsYXllcnMtPnNpemUoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAg
ICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1
cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChmaWxsU2l6ZVRvQ1NTVmFsdWUoY3VyckxheWVyLT5zaXplKCksIGNzc1ZhbHVlUG9vbCkpOwor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChmaWxsU2l6ZVRvQ1NTVmFsdWUoY3VyckxheWVy
LT5zaXplKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAg
ICB9CkBAIC0xMzM2LDExICsxMzI2LDExIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0OiB7CiAgICAgICAgICAgICBjb25z
dCBGaWxsTGF5ZXIqIGxheWVycyA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNr
UmVwZWF0ID8gc3R5bGUtPm1hc2tMYXllcnMoKSA6IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7
CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBmaWxsUmVwZWF0VG9DU1NWYWx1ZShsYXllcnMtPnJlcGVhdFgoKSwgbGF5ZXJzLT5yZXBlYXRZ
KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGxSZXBlYXRUb0NT
U1ZhbHVlKGxheWVycy0+cmVwZWF0WCgpLCBsYXllcnMtPnJlcGVhdFkoKSk7CiAKICAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVy
ID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChmaWxsUmVwZWF0VG9DU1NWYWx1ZShjdXJyTGF5ZXIt
PnJlcGVhdFgoKSwgY3VyckxheWVyLT5yZXBlYXRZKCksIGNzc1ZhbHVlUG9vbCkpOworICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChmaWxsUmVwZWF0VG9DU1NWYWx1ZShjdXJyTGF5ZXItPnJl
cGVhdFgoKSwgY3VyckxheWVyLT5yZXBlYXRZKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOwogICAgICAgICB9CkBAIC0xMzQ4LDExICsxMzM4LDExIEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NW
YWx1ZShpbnQgcHJvcGVyCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9z
aXRlOiB7CiAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGxheWVycyA9IHByb3BlcnR5SUQg
PT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrQ29tcG9zaXRlID8gc3R5bGUtPm1hc2tMYXllcnMoKSA6
IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4
dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGxh
eWVycy0+Y29tcG9zaXRlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShsYXllcnMtPmNvbXBvc2l0ZSgpKTsKIAogICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQo
KTsKICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBsYXllcnM7
IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoY3VyckxheWVyLT5jb21w
b3NpdGUoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShjdXJyTGF5ZXItPmNvbXBvc2l0ZSgpKSk7CiAKICAgICAgICAgICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQpAQCAtMTM2MCwxMSArMTM1MCwxMSBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0F0
dGFjaG1lbnQ6IHsKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVy
dHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50ID8gc3R5bGUtPm1hc2tMYXll
cnMoKSA6IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVy
cy0+bmV4dCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZh
bHVlKGxheWVycy0+YXR0YWNobWVudCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUobGF5ZXJzLT5hdHRhY2htZW50KCkpOwogCiAgICAgICAgICAg
ICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNl
cGFyYXRlZCgpOwogICAgICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1cnJMYXllciA9
IGxheWVyczsgY3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkKLSAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjdXJyTGF5
ZXItPmF0dGFjaG1lbnQoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPmF0dGFjaG1lbnQoKSkpOwogCiAgICAgICAg
ICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTEzNzgsMTMgKzEzNjgs
MTMgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgICAgIGJvb2wgaXNDbGlwID0g
cHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRDbGlwIHx8IHByb3BlcnR5SUQgPT0g
Q1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ2xpcCB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3Bl
cnR5V2Via2l0TWFza0NsaXA7CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4dCgpKSB7CiAg
ICAgICAgICAgICAgICAgRUZpbGxCb3ggYm94ID0gaXNDbGlwID8gbGF5ZXJzLT5jbGlwKCkgOiBs
YXllcnMtPm9yaWdpbigpOwotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZVZhbHVlKGJveCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGJveCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAg
ICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJy
TGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAg
RUZpbGxCb3ggYm94ID0gaXNDbGlwID8gY3VyckxheWVyLT5jbGlwKCkgOiBjdXJyTGF5ZXItPm9y
aWdpbigpOwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0
ZVZhbHVlKGJveCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShib3gpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwpAQCAtMTM5NCwxNiArMTM4NCwxNiBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50
IHByb3BlcgogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9wZXJ0eUlE
ID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uID8gc3R5bGUtPm1hc2tMYXllcnMoKSA6
IHN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCk7CiAgICAgICAgICAgICBpZiAoIWxheWVycy0+bmV4
dCgpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShsYXllcnMtPnhQb3NpdGlvbigpKSk7Ci0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobGF5
ZXJzLT55UG9zaXRpb24oKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShsYXllcnMtPnhQb3NpdGlvbigpKSk7CisgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGxheWVycy0+eVBvc2l0
aW9uKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1
ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZp
bGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJM
YXllci0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcG9z
aXRpb25MaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAg
ICAgICAgICAgIHBvc2l0aW9uTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
Y3VyckxheWVyLT54UG9zaXRpb24oKSkpOwotICAgICAgICAgICAgICAgIHBvc2l0aW9uTGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoY3VyckxheWVyLT55UG9zaXRpb24oKSkp
OworICAgICAgICAgICAgICAgIHBvc2l0aW9uTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGN1cnJMYXllci0+eFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBwb3Np
dGlvbkxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPnlQ
b3NpdGlvbigpKSk7CiAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHBvc2l0aW9uTGlzdCk7
CiAgICAgICAgICAgICB9CiAKQEAgLTE0MTMsMTEgKzE0MDMsMTEgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGlu
dCBwcm9wZXIKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6IHsK
ICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblggPyBzdHlsZS0+bWFza0xheWVycygpIDogc3R5bGUt
PmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobGF5ZXJzLT54
UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGxheWVycy0+eFBvc2l0aW9uKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAg
ICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1cnJMYXllciA9IGxheWVyczsgY3Vyckxh
eWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPnhQb3NpdGlvbigp
KSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGN1cnJMYXllci0+eFBvc2l0aW9uKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxpc3Qu
cmVsZWFzZSgpOwogICAgICAgICB9CkBAIC0xNDI1LDEyMyArMTQxNSwxMjMgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGludCBwcm9wZXIKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
blk6IHsKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkgPyBzdHlsZS0+bWFza0xheWVycygpIDog
c3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobGF5
ZXJzLT55UG9zaXRpb24oKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGxheWVycy0+eVBvc2l0aW9uKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgp
OwogICAgICAgICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1cnJMYXllciA9IGxheWVyczsg
Y3VyckxheWVyOyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPnlQb3Np
dGlvbigpKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGN1cnJMYXllci0+eVBvc2l0aW9uKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJu
IGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJDb2xsYXBzZToKICAgICAgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyQ29sbGFwc2UoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVDb2xsYXBzZSk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTZXBhcmF0ZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbGxhcHNl
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVTZXBhcmF0ZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJTcGFj
aW5nOiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUu
Z2V0KCksIGNzc1ZhbHVlUG9vbCkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1
c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIHN0eWxlLmdl
dCgpKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShz
dHlsZS0+dmVydGljYWxCb3JkZXJTcGFjaW5nKCksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoc3R5bGUtPmhvcml6b250YWxCb3JkZXJTcGFjaW5nKCksIHN0eWxlLmdldCgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZzoK
LSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT52ZXJ0aWNh
bEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAg
ICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dmVydGljYWxCb3JkZXJTcGFj
aW5nKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U291cmNlOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJJbWFnZVNvdXJjZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+Ym9yZGVySW1hZ2VTb3VyY2UoKS0+Y3NzVmFsdWUo
KTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
Qm9yZGVyVG9wQ29sb3I6Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFs
aWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlclRvcENvbG9yKCkpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xv
clZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BD
b2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHls
ZS0+Ym9yZGVyVG9wQ29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dENvbG9yOgotICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xv
cihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlclJpZ2h0Q29sb3IoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFs
dWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29s
b3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUt
PmJvcmRlclJpZ2h0Q29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21Db2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFs
dWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENv
bG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tQ29sb3IoKSk7CisgICAgICAgICAg
ICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9y
VmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bUNvbG9yKS5yZ2IoKSkgOiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0
eWxlLT5ib3JkZXJCb3R0b21Db2xvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3Nz
VmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRD
b2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsKKyAgICAgICAgICAg
IHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JW
YWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENv
bG9yKS5yZ2IoKSkgOiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxl
LT5ib3JkZXJMZWZ0Q29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BT
dHlsZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxl
LT5ib3JkZXJUb3BTdHlsZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+Ym9yZGVyVG9wU3R5bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCb3JkZXJSaWdodFN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPmJvcmRlclJpZ2h0U3R5bGUoKSk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJvcmRlclJpZ2h0U3R5bGUoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZToKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJCb3R0b21TdHls
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+Ym9yZGVyQm90dG9tU3R5bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJM
ZWZ0U3R5bGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShz
dHlsZS0+Ym9yZGVyTGVmdFN0eWxlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aDoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxl
LT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJSaWdodFdpZHRoOgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9v
bCk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21XaWR0aDoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29s
KTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3JkZXJMZWZ0V2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwor
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmJvcmRlckxl
ZnRXaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3R0b206
Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwg
Q1NTUHJvcGVydHlCb3R0b20sIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0
UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlCb3R0b20pOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94QWxpZ246Ci0gICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94QWxpZ24oKSk7CisgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveEFsaWduKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RGlyZWN0aW9uOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmJveERpcmVjdGlvbigpKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94
RGlyZWN0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleDoKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hGbGV4
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94RmxleCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hGbGV4
R3JvdXA6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHls
ZS0+Ym94RmxleEdyb3VwKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94RmxleEdy
b3VwKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEJveExpbmVzOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPmJveExpbmVzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hMaW5lcygpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEJveE9yZGluYWxHcm91cDoKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hPcmRpbmFsR3JvdXAoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hPcmRpbmFsR3JvdXAoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94T3JpZW50Ogot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmJveE9y
aWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+Ym94T3JpZW50KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UGFj
azoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5i
b3hQYWNrKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT5ib3hQYWNrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94UmVm
bGVjdDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvclJlZmxlY3Rpb24oc3R5bGUtPmJveFJl
ZmxlY3QoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4g
dmFsdWVGb3JSZWZsZWN0aW9uKHN0eWxlLT5ib3hSZWZsZWN0KCksIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJveFNoYWRvdzoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveFNoYWRvdzoKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvclNoYWRvdyhzdHls
ZS0+Ym94U2hhZG93KCksIHByb3BlcnR5SUQsIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUNhcHRpb25TaWRlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPmNhcHRpb25TaWRlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jYXB0aW9uU2lkZSgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUNsZWFyOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPmNsZWFyKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jbGVhcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUNvbG9yOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JW
YWx1ZShtX2FsbG93VmlzaXRlZFN0eWxlID8gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSA6IHN0eWxlLT5jb2xvcigpLnJnYigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKG1fYWxsb3dWaXNpdGVk
U3R5bGUgPyBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLnJn
YigpIDogc3R5bGUtPmNvbG9yKCkucmdiKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0UHJpbnRDb2xvckFkanVzdDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZVZhbHVlKHN0eWxlLT5wcmludENvbG9yQWRqdXN0KCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wcmludENvbG9yQWRqdXN0KCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQXhpczoKLSAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5BeGlzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5B
eGlzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQ6CiAgICAg
ICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9Db2x1bW5Db3VudCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmNv
bHVtbkNvdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
QXV0byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPmNvbHVtbkNvdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcDoKICAgICAgICAgICAgIGlmIChzdHls
ZS0+aGFzTm9ybWFsQ29sdW1uR2FwKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKLSAgICAgICAgICAg
IHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5jb2x1bW5HYXAoKSwgc3R5bGUu
Z2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Y29sdW1uR2FwKCksIHN0eWxlLmdl
dCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvcjoKLSAg
ICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sLT5jcmVh
dGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlPdXRs
aW5lQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwg
c3R5bGUtPmNvbHVtblJ1bGVDb2xvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FsbG93Vmlz
aXRlZFN0eWxlID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKS5yZ2IoKSkgOiBjdXJyZW50
Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5jb2x1bW5SdWxlQ29sb3IoKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlU3R5bGU6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uUnVsZVN0
eWxlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT5jb2x1bW5SdWxlU3R5bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5SdWxlV2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShzdHlsZS0+Y29sdW1uUnVsZVdpZHRoKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwor
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNvbHVtblJ1
bGVXaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRD
b2x1bW5TcGFuOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5jb2x1bW5TcGFuKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQWxsKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKDEs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5C
cmVha0FmdGVyOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmNvbHVtbkJyZWFrQWZ0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtbkJyZWFrQWZ0ZXIoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5CcmVha0JlZm9yZToKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5CcmVha0JlZm9yZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29s
dW1uQnJlYWtCZWZvcmUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5C
cmVha0luc2lkZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHN0eWxlLT5jb2x1bW5CcmVha0luc2lkZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uQnJlYWtJbnNpZGUoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aDoKICAgICAgICAgICAgIGlmIChzdHls
ZS0+aGFzQXV0b0NvbHVtbldpZHRoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Y29sdW1uV2lkdGgoKSwgc3R5bGUu
Z2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0
dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNvbHVtbldpZHRoKCksIHN0eWxlLmdl
dCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrQWZ0ZXI6Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9u
QnJlYWtBZnRlcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+cmVnaW9uQnJlYWtBZnRlcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbkJyZWFrQmVmb3JlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkJyZWFrQmVmb3JlKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25CcmVha0JlZm9y
ZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJlZ2lvbkJyZWFrSW5zaWRlOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lv
bkJyZWFrSW5zaWRlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKHN0eWxlLT5yZWdpb25CcmVha0luc2lkZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUN1cnNvcjogewogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKICAg
ICAgICAgICAgIEN1cnNvckxpc3QqIGN1cnNvcnMgPSBzdHlsZS0+Y3Vyc29ycygpOwpAQCAtMTU1
MSw3ICsxNTQxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAgICAgICAgICAgICAgICAg
ICAgaWYgKFN0eWxlSW1hZ2UqIGltYWdlID0gY3Vyc29ycy0+YXQoaSkuaW1hZ2UoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChpbWFnZS0+Y3NzVmFsdWUoKSk7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Y3Vyc29yKCkpOworICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jdXJzb3Io
KSk7CiAgICAgICAgICAgICBpZiAobGlzdCkgewogICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwpAQCAtMTU1
OSw0NSArMTU0OSw0NSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVj
bGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
RGlyZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmRpcmVjdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+ZGlyZWN0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
RGlzcGxheToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT5kaXNwbGF5KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKHN0eWxlLT5kaXNwbGF5KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RW1wdHlD
ZWxsczoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxl
LT5lbXB0eUNlbGxzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKHN0eWxlLT5lbXB0eUNlbGxzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0RmxleE9yZGVyOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPmZsZXhPcmRlcigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmZsZXhP
cmRlcigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRGbGV4UGFjazoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4UGFjaygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleFBhY2soKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRGbGV4QWxpZ246Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleEFsaWduKCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4QWxpZ24oKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbGV4SXRlbUFsaWduOgogICAgICAgICAgICAgLy8gRklY
TUU6IElmIGZsZXgtaXRlbS1hbGlnbjphdXRvLCB0aGVuIHdlIHNob3VsZCByZXR1cm4gdGhlIHBh
cmVudCdzIGZsZXgtYWxpZ24uCiAgICAgICAgICAgICAvLyBodHRwOi8vd2Via2l0Lm9yZy9iLzc2
MzI2Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+
ZmxleEl0ZW1BbGlnbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+ZmxleEl0ZW1BbGlnbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhEaXJlY3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZShzdHlsZS0+ZmxleERpcmVjdGlvbigpKTsKKyAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleERpcmVjdGlvbigpKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhXcmFwOgotICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmZsZXhXcmFwKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4V3JhcCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhGbG93OiB7CiAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRl
ZCgpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmZsZXhEaXJlY3Rpb24oKSkpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmZsZXhXcmFwKCkpKTsKKyAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleERpcmVjdGlv
bigpKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoc3R5bGUtPmZsZXhXcmFwKCkpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5RmxvYXQ6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxvYXRpbmcoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmZsb2F0
aW5nKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udDogewogICAgICAgICAgICAgUmVm
UHRyPEZvbnRWYWx1ZT4gY29tcHV0ZWRGb250ID0gRm9udFZhbHVlOjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIGNvbXB1dGVkRm9udC0+c3R5bGUgPSBmb250U3R5bGVGcm9tU3R5bGUoc3R5bGUuZ2V0
KCksIGNzc1ZhbHVlUG9vbCk7Ci0gICAgICAgICAgICBjb21wdXRlZEZvbnQtPnZhcmlhbnQgPSBm
b250VmFyaWFudEZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAg
ICAgIGNvbXB1dGVkRm9udC0+d2VpZ2h0ID0gZm9udFdlaWdodEZyb21TdHlsZShzdHlsZS5nZXQo
KSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgICAgIGNvbXB1dGVkRm9udC0+c2l6ZSA9IGZvbnRT
aXplRnJvbVN0eWxlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAgICAgY29t
cHV0ZWRGb250LT5saW5lSGVpZ2h0ID0gbGluZUhlaWdodEZyb21TdHlsZShzdHlsZS5nZXQoKSwg
Y3NzVmFsdWVQb29sKTsKLSAgICAgICAgICAgIGNvbXB1dGVkRm9udC0+ZmFtaWx5ID0gZm9udEZh
bWlseUZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIGNv
bXB1dGVkRm9udC0+c3R5bGUgPSBmb250U3R5bGVGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOworICAg
ICAgICAgICAgY29tcHV0ZWRGb250LT52YXJpYW50ID0gZm9udFZhcmlhbnRGcm9tU3R5bGUoc3R5
bGUuZ2V0KCkpOworICAgICAgICAgICAgY29tcHV0ZWRGb250LT53ZWlnaHQgPSBmb250V2VpZ2h0
RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGNvbXB1dGVkRm9udC0+c2l6ZSA9
IGZvbnRTaXplRnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGNvbXB1dGVkRm9u
dC0+bGluZUhlaWdodCA9IGxpbmVIZWlnaHRGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOworICAgICAg
ICAgICAgY29tcHV0ZWRGb250LT5mYW1pbHkgPSBmb250RmFtaWx5RnJvbVN0eWxlKHN0eWxlLmdl
dCgpKTsKICAgICAgICAgICAgIHJldHVybiBjb21wdXRlZEZvbnQucmVsZWFzZSgpOwogICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlGb250RmFtaWx5OiB7Ci0gICAgICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5TGlzdCA9IGZvbnRGYW1pbHlGcm9tU3R5bGUo
c3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBmb250RmFtaWx5TGlzdCA9IGZvbnRGYW1pbHlGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOwog
ICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGZhbWlseSwgcmV0dXJuIHRo
YXQgYXMgYSBDU1NQcmltaXRpdmVWYWx1ZS4KICAgICAgICAgICAgIC8vIE5PVEU6IEdlY2tvIGFs
d2F5cyByZXR1cm5zIHRoaXMgYXMgYSBjb21tYS1zZXBhcmF0ZWQgQ1NTUHJpbWl0aXZlVmFsdWUg
c3RyaW5nLgogICAgICAgICAgICAgaWYgKGZvbnRGYW1pbHlMaXN0LT5sZW5ndGgoKSA9PSAxKQpA
QCAtMTYwNSwxNyArMTU5NSwxNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAg
ICAgcmV0dXJuIGZvbnRGYW1pbHlMaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udFNpemU6Ci0gICAgICAgICAgICByZXR1cm4gZm9udFNpemVGcm9t
U3R5bGUoc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZm9u
dFNpemVGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9u
dFN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGZvbnRTdHlsZUZyb21TdHlsZShzdHlsZS5nZXQo
KSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiBmb250U3R5bGVGcm9tU3R5bGUo
c3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFZhcmlhbnQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZm9udFZhcmlhbnRGcm9tU3R5bGUoc3R5bGUuZ2V0KCksIGNzc1ZhbHVl
UG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZm9udFZhcmlhbnRGcm9tU3R5bGUoc3R5bGUuZ2V0
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Rm9udFdlaWdodDoKLSAgICAgICAgICAgIHJl
dHVybiBmb250V2VpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAg
ICAgICAgICAgcmV0dXJuIGZvbnRXZWlnaHRGcm9tU3R5bGUoc3R5bGUuZ2V0KCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5nczogewogICAgICAgICAg
ICAgY29uc3QgRm9udEZlYXR1cmVTZXR0aW5ncyogZmVhdHVyZVNldHRpbmdzID0gc3R5bGUtPmZv
bnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOwogICAgICAgICAgICAgaWYgKCFmZWF0
dXJlU2V0dGluZ3MgfHwgIWZlYXR1cmVTZXR0aW5ncy0+c2l6ZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1h
bCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZlYXR1cmVTZXR0aW5ncy0+c2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBGb250RmVhdHVyZSYgZmVhdHVyZSA9IGZlYXR1cmVT
ZXR0aW5ncy0+YXQoaSk7CkBAIC0xNjI2LDEwICsxNjE2LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVyCiAgICAgICAgIH0KICNpZiBFTkFCTEUoQ1NTX0dSSURfTEFZT1VUKQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbnM6IHsKLSAgICAgICAgICAgIHJldHVybiB2
YWx1ZUZvckdyaWRUcmFja0xpc3Qoc3R5bGUtPmdyaWRDb2x1bW5zKCksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yR3JpZFRyYWNrTGlzdChz
dHlsZS0+Z3JpZENvbHVtbnMoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRHcmlkUm93czogewotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Rm9yR3JpZFRyYWNrTGlzdChzdHlsZS0+Z3JpZFJvd3MoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVl
UG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JHcmlkVHJhY2tMaXN0KHN0eWxlLT5n
cmlkUm93cygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5SGVpZ2h0OgpAQCAtMTYzNywyMCArMTYyNywyMCBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUo
aW50IHByb3BlcgogICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyL3Zpc3VkZXQuaHRtbCN0aGUtaGVpZ2h0LXByb3BlcnR5LAogICAgICAgICAg
ICAgICAgIC8vIHRoZSAiaGVpZ2h0IiBwcm9wZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJl
cGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5p
c1JlcGxhY2VkKCkgJiYgcmVuZGVyZXItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0Jv
eChyZW5kZXJlcikuaGVpZ2h0KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc2l6aW5nQm94KHJlbmRlcmVyKS5oZWlnaHQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5n
dGgoc3R5bGUtPmhlaWdodCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5oZWlnaHQo
KSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SGlnaGxpZ2h0
OgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oaWdobGlnaHQoKSA9PSBudWxsQXRvbSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHN0eWxlLT5oaWdobGlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+aGlnaGxpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+aHlwaGVucygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+aHlwaGVucygpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+aHlwaGVuYXRpb25TdHJpbmcoKS5pc051bGwoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1p
dEFmdGVyOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSA8
IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlQXV0byk7CkBAIC0xNjY1LDQ0ICsxNjU1LDQ0IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZShpbnQgcHJvcGVyCiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShzdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUJvcmRlcik7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvcmRlcik7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
TGluZXMpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6CiAgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+aW1hZ2VSZW5kZXJp
bmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgICAgICAgICAgcmV0dXJu
IGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoc3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5TGVmdCwgY3Nz
VmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRQb3NpdGlvbk9mZnNldFZhbHVlKHN0
eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUxlZnQpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGV0
dGVyU3BhY2luZzoKICAgICAgICAgICAgIGlmICghc3R5bGUtPmxldHRlclNwYWNpbmcoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpOwotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWUoc3R5bGUtPmxldHRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZShzdHlsZS0+bGV0dGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQ2xhbXA6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmxpbmVD
bGFtcCgpLmlzTm9uZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmxpbmVDbGFtcCgpLnZhbHVlKCksIHN0eWxl
LT5saW5lQ2xhbXAoKS5pc1BlcmNlbnRhZ2UoKSA/IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSA6IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9u
ZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PmxpbmVDbGFtcCgpLnZhbHVlKCksIHN0eWxlLT5saW5lQ2xhbXAoKS5pc1BlcmNlbnRhZ2UoKSA/
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSA6IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpbmVIZWlnaHQ6Ci0gICAgICAg
ICAgICByZXR1cm4gbGluZUhlaWdodEZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29s
KTsKKyAgICAgICAgICAgIHJldHVybiBsaW5lSGVpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlOgogICAgICAgICAgICAgaWYg
KHN0eWxlLT5saXN0U3R5bGVJbWFnZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+
bGlzdFN0eWxlSW1hZ2UoKS0+Y3NzVmFsdWUoKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0eWxlUG9zaXRpb246Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bGlzdFN0eWxlUG9zaXRp
b24oKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPmxpc3RTdHlsZVBvc2l0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGlzdFN0
eWxlVHlwZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT5saXN0U3R5bGVUeXBlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHN0eWxlLT5saXN0U3R5bGVUeXBlKCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TG9jYWxlOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5sb2NhbGUoKS5pc051
bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKHN0eWxlLT5sb2NhbGUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShzdHlsZS0+bG9jYWxlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpblRvcDogewogICAgICAgICAgICAg
TGVuZ3RoIG1hcmdpblRvcCA9IHN0eWxlLT5tYXJnaW5Ub3AoKTsKICAgICAgICAgICAgIGlmICht
YXJnaW5Ub3AuaXNGaXhlZCgpIHx8ICFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgobWFy
Z2luVG9wLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgICAgIHJldHVybiB6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+bWFyZ2luVG9wKCks
IHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpblRvcCwgc3R5bGUuZ2V0KCkpOworICAg
ICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVy
ZXIpLT5tYXJnaW5Ub3AoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlNYXJnaW5SaWdodDogewogICAgICAgICAgICAgTGVuZ3RoIG1hcmdpblJpZ2h0
ID0gc3R5bGUtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNG
aXhlZCgpIHx8ICFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlzQm94KCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgobWFyZ2luUmlnaHQsIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpblJpZ2h0LCBzdHlsZS5nZXQoKSk7CiAgICAg
ICAgICAgICBpbnQgdmFsdWU7CiAgICAgICAgICAgICBpZiAobWFyZ2luUmlnaHQuaXNQZXJjZW50
KCkpCiAgICAgICAgICAgICAgICAgLy8gUmVuZGVyQm94IGdpdmVzIGEgbWFyZ2luUmlnaHQoKSB0
aGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSByaWdodC1lZGdlIG9mIHRoZSBjaGlsZCBi
b3gKQEAgLTE3MTEsMTE5ICsxNzAxLDExOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAg
ICAgICAgICAgICAgIHZhbHVlID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKHRvUmVuZGVyQm94
KHJlbmRlcmVyKS0+Y29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyQm94KHJlbmRl
cmVyKS0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHZhbHVlLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHZhbHVlLCBzdHlsZS5nZXQoKSk7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbTogewogICAgICAgICAgICAg
TGVuZ3RoIG1hcmdpbkJvdHRvbSA9IHN0eWxlLT5tYXJnaW5Cb3R0b20oKTsKICAgICAgICAgICAg
IGlmIChtYXJnaW5Cb3R0b20uaXNGaXhlZCgpIHx8ICFyZW5kZXJlciB8fCAhcmVuZGVyZXItPmlz
Qm94KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JM
ZW5ndGgobWFyZ2luQm90dG9tLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+
bWFyZ2luQm90dG9tKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpbkJvdHRvbSwg
c3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
dG9SZW5kZXJCb3gocmVuZGVyZXIpLT5tYXJnaW5Cb3R0b20oKSwgc3R5bGUuZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0OiB7CiAgICAgICAgICAg
ICBMZW5ndGggbWFyZ2luTGVmdCA9IHN0eWxlLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICBp
ZiAobWFyZ2luTGVmdC5pc0ZpeGVkKCkgfHwgIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3go
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0
aChtYXJnaW5MZWZ0LCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+bWFyZ2lu
TGVmdCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJnaW5MZWZ0LCBzdHlsZS5nZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh0b1JlbmRlckJv
eChyZW5kZXJlciktPm1hcmdpbkxlZnQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlRGlyZWN0aW9uOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPm1hcnF1ZWVEaXJlY3Rpb24o
KSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
Pm1hcnF1ZWVEaXJlY3Rpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJx
dWVlSW5jcmVtZW50OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcnF1ZWVJbmNyZW1lbnQoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlUmVwZXRpdGlvbjoKICAgICAgICAgICAgIGlm
IChzdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVJbmZpbml0ZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bWFycXVl
ZUxvb3BDb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUluZmluaXRlKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+bWFycXVlZUxvb3BDb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3R5bGU6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bWFycXVlZUJlaGF2
aW9yKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRV
c2VyTW9kaWZ5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPnVzZXJNb2RpZnkoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoc3R5bGUtPnVzZXJNb2RpZnkoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlNYXhIZWlnaHQ6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0aCYgbWF4SGVpZ2h0ID0gc3R5
bGUtPm1heEhlaWdodCgpOwogICAgICAgICAgICAgaWYgKG1heEhlaWdodC5pc1VuZGVmaW5lZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUobWF4SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobWF4SGVpZ2h0KTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5TWF4V2lkdGg6IHsKICAgICAgICAgICAgIGNvbnN0IExlbmd0
aCYgbWF4V2lkdGggPSBzdHlsZS0+bWF4V2lkdGgoKTsKICAgICAgICAgICAgIGlmIChtYXhXaWR0
aC5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobWF4V2lkdGgpOworICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShtYXhXaWR0aCk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbkhlaWdodDoKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5taW5IZWlnaHQoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1pbkhl
aWdodCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1pbldpZHRoOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPm1pbldpZHRoKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5taW5XaWR0
aCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU9wYWNpdHk6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+b3BhY2l0eSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoc3R5bGUtPm9wYWNpdHkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3JwaGFuczoKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5vcnBoYW5zKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+b3JwaGFucygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
Uik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3I6Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JWYWx1
ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKS5y
Z2IoKSkgOiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5vdXRs
aW5lQ29sb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENv
bG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+b3V0bGluZUNvbG9yKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5T3V0bGluZU9mZnNldDoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKHN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBv
b2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPm91
dGxpbmVPZmZzZXQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3V0
bGluZVN0eWxlOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0
ZVZhbHVlKHN0eWxlLT5vdXRsaW5lU3R5bGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdXRsaW5lU3R5
bGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGg6Ci0gICAgICAgICAg
ICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+b3V0bGluZVdpZHRoKCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoc3R5bGUtPm91dGxpbmVXaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvdzoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKG1heChzdHlsZS0+b3ZlcmZsb3dYKCksIHN0eWxlLT5vdmVyZmxvd1ko
KSkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG1heChz
dHlsZS0+b3ZlcmZsb3dYKCksIHN0eWxlLT5vdmVyZmxvd1koKSkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5T3ZlcmZsb3dYOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoc3R5bGUtPm92ZXJmbG93WCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dYKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5T3ZlcmZsb3dZOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoc3R5bGUtPm92ZXJmbG93WSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dZKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5UGFkZGluZ1RvcDoKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJl
ci0+aXNCb3goKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZSh0b1JlbmRlckJveChyZW5kZXJlciktPnBhZGRpbmdUb3AoZmFsc2UpLCBzdHlsZS5nZXQoKSwg
Y3NzVmFsdWVQb29sKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZh
bHVlKHN0eWxlLT5wYWRkaW5nVG9wKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ1RvcChmYWxzZSks
IHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+cGFkZGluZ1RvcCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRp
bmdSaWdodDoKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh0b1JlbmRlckJv
eChyZW5kZXJlciktPnBhZGRpbmdSaWdodChmYWxzZSksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBv
b2wpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUt
PnBhZGRpbmdSaWdodCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZSh0b1JlbmRlckJveChyZW5kZXJlciktPnBhZGRpbmdSaWdodChmYWxzZSksIHN0eWxl
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+cGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0Jv
dHRvbToKICAgICAgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNCb3goKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh0b1JlbmRlckJveChy
ZW5kZXJlciktPnBhZGRpbmdCb3R0b20oZmFsc2UpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29s
KTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5w
YWRkaW5nQm90dG9tKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ0JvdHRvbShmYWxzZSksIHN0eWxl
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+cGFkZGluZ0JvdHRvbSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdM
ZWZ0OgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JveCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJl
bmRlcmVyKS0+cGFkZGluZ0xlZnQoZmFsc2UpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsK
LSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWRk
aW5nTGVmdCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZSh0b1JlbmRlckJveChyZW5kZXJlciktPnBhZGRpbmdMZWZ0KGZhbHNlKSwgc3R5bGUuZ2V0KCkp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5w
YWRkaW5nTGVmdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0FmdGVyOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnBhZ2VC
cmVha0FmdGVyKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKHN0eWxlLT5wYWdlQnJlYWtBZnRlcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBh
Z2VCcmVha0JlZm9yZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZh
bHVlKHN0eWxlLT5wYWdlQnJlYWtCZWZvcmUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnBhZ2VCcmVha0JlZm9yZSgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVBhZ2VCcmVha0luc2lkZTogewogICAgICAgICAgICAgRVBhZ2VCcmVh
ayBwYWdlQnJlYWsgPSBzdHlsZS0+cGFnZUJyZWFrSW5zaWRlKCk7CiAgICAgICAgICAgICBBU1NF
UlQocGFnZUJyZWFrICE9IFBCQUxXQVlTKTsKICAgICAgICAgICAgIGlmIChwYWdlQnJlYWsgPT0g
UEJBTFdBWVMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cGFnZUJyZWFrSW5zaWRlKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wYWdlQnJl
YWtJbnNpZGUoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBvc2l0aW9u
OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnBv
c2l0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT5wb3NpdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVJpZ2h0OgotICAg
ICAgICAgICAgcmV0dXJuIGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoc3R5bGUuZ2V0KCksIENTU1By
b3BlcnR5UmlnaHQsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0UG9zaXRp
b25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlSaWdodCk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlUYWJsZUxheW91dDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT50YWJsZUxheW91dCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dGFibGVMYXlvdXQoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0QWxpZ246Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEFsaWduKCkpOworICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0QWxpZ24oKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBy
ZW5kZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NWYWx1ZShzdHlsZS0+dGV4dERlY29yYXRpb24o
KSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiByZW5kZXJUZXh0RGVjb3JhdGlv
bkZsYWdzVG9DU1NWYWx1ZShzdHlsZS0+dGV4dERlY29yYXRpb24oKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDoKLSAgICAgICAgICAgIHJl
dHVybiByZW5kZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NWYWx1ZShzdHlsZS0+dGV4dERlY29y
YXRpb25zSW5FZmZlY3QoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiByZW5k
ZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NWYWx1ZShzdHlsZS0+dGV4dERlY29yYXRpb25zSW5F
ZmZlY3QoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yOgog
ICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwg
c3R5bGUtPnRleHRGaWxsQ29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
ZXh0RW1waGFzaXNDb2xvcjoKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50Q29sb3JPclZhbGlk
Q29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT50ZXh0RW1waGFzaXNDb2xvcigpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRFbXBoYXNpc1Bvc2l0aW9uOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBoYXNpc1Bvc2l0
aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT50ZXh0RW1waGFzaXNQb3NpdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlOgogICAgICAgICAgICAgc3dpdGNoIChzdHlsZS0+dGV4dEVt
cGhhc2lzTWFyaygpKSB7CiAgICAgICAgICAgICBjYXNlIFRleHRFbXBoYXNpc01hcmtOb25lOgot
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIGNhc2UgVGV4
dEVtcGhhc2lzTWFya0N1c3RvbToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgICAgIGNhc2UgVGV4dEVtcGhhc2lzTWFy
a0F1dG86CiAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAg
ICAgICAgLy8gRmFsbCB0aHJvdWdoCkBAIC0xODMzLDEyOSArMTgyMywxMjkgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKGludCBwcm9wZXIKICAgICAgICAgICAgIGNhc2UgVGV4dEVtcGhhc2lzTWFya1RyaWFuZ2xl
OgogICAgICAgICAgICAgY2FzZSBUZXh0RW1waGFzaXNNYXJrU2VzYW1lOiB7CiAgICAgICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3Bh
Y2VTZXBhcmF0ZWQoKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEVtcGhhc2lzRmlsbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnRleHRFbXBo
YXNpc01hcmsoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEVtcGhhc2lzRmlsbCgpKSk7CisgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0RW1w
aGFzaXNNYXJrKCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0
SW5kZW50OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5
bGUtPnRleHRJbmRlbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoc3R5bGUtPnRleHRJbmRlbnQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlU
ZXh0U2hhZG93OgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yU2hhZG93KHN0eWxlLT50ZXh0
U2hhZG93KCksIHByb3BlcnR5SUQsIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVRleHRSZW5kZXJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkudGV4dFJlbmRlcmluZ01vZGUoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2RlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dE92ZXJmbG93OgogICAgICAgICAgICAgaWYgKHN0eWxlLT50ZXh0T3ZlcmZsb3coKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVFbGxpcHNpcyk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDbGlwKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRWxsaXBzaXMp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUNsaXApOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFNlY3Vy
aXR5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUt
PnRleHRTZWN1cml0eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+dGV4dFNlY3VyaXR5KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFNpemVBZGp1c3Q6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPnRleHRTaXplQWRq
dXN0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tl
Q29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxl
LmdldCgpLCBzdHlsZS0+dGV4dFN0cm9rZUNvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VGV4dFN0cm9rZVdpZHRoOgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoc3R5bGUtPnRleHRTdHJva2VXaWR0aCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxl
LT50ZXh0U3Ryb2tlV2lkdGgoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dFRyYW5zZm9ybToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0
ZVZhbHVlKHN0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0VHJhbnNmb3JtKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5VG9wOgotICAgICAgICAgICAgcmV0dXJuIGdldFBvc2l0aW9uT2Zmc2V0
VmFsdWUoc3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5VG9wLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgcmV0dXJuIGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoc3R5bGUuZ2V0KCksIENTU1Byb3Bl
cnR5VG9wKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnVuaWNvZGVCaWRpKCkp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT51
bmljb2RlQmlkaSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ246CiAg
ICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLT52ZXJ0aWNhbEFsaWduKCkpIHsKICAgICAgICAgICAg
ICAgICBjYXNlIEJBU0VMSU5FOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCYXNlbGluZSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVCYXNlbGluZSk7CiAgICAgICAgICAgICAgICAgY2FzZSBNSURETEU6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU1pZGRsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVNaWRkbGUpOwogICAgICAgICAgICAgICAgIGNh
c2UgU1VCOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlU3ViKTsKICAgICAg
ICAgICAgICAgICBjYXNlIFNVUEVSOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdXBlcik7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVTdXBlcik7CiAgICAgICAgICAgICAgICAgY2FzZSBURVhUX1RPUDoKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlVGV4dFRvcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUZXh0VG9wKTsKICAgICAgICAgICAgICAgICBj
YXNlIFRFWFRfQk9UVE9NOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUZXh0Qm90dG9tKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZVRleHRCb3R0b20pOwogICAgICAgICAgICAgICAgIGNhc2UgVE9QOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVUb3ApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKICAgICAgICAgICAgICAgICBjYXNlIEJPVFRP
TToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQm90dG9tKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvdHRvbSk7CiAgICAg
ICAgICAgICAgICAgY2FzZSBCQVNFTElORV9NSURETEU6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEJh
c2VsaW5lTWlkZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKTsKICAg
ICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnZlcnRpY2FsQWxpZ25MZW5ndGgoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+dmVydGljYWxBbGlnbkxlbmd0aCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlWaXNpYmlsaXR5OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPnZpc2liaWxpdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnZpc2liaWxpdHkoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndoaXRlU3BhY2UoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndoaXRlU3BhY2UoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShzdHlsZS0+d2lkb3dzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+d2lkb3dzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdpZHRoOgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CiAgICAgICAg
ICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIvdmlzdWRl
dC5odG1sI3RoZS13aWR0aC1wcm9wZXJ0eSwKICAgICAgICAgICAgICAgICAvLyB0aGUgIndpZHRo
IiBwcm9wZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJlcGxhY2VkIGlubGluZSBlbGVtZW50
cy4KICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1JlcGxhY2VkKCkgJiYgcmVuZGVy
ZXItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0JveChyZW5kZXJlcikud2lkdGgoKSwg
c3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzaXppbmdCb3gocmVuZGVy
ZXIpLndpZHRoKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJl
dHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT53aWR0aCgpLCBzdHls
ZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT53aWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkQnJlYWsoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxl
LT53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
b3JkV3JhcDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT53b3JkV3JhcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShzdHlsZS0+d29yZFdyYXAoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRMaW5lQnJlYWs6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1
ZShzdHlsZS0+a2h0bWxMaW5lQnJlYWsoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmtodG1sTGluZUJyZWFrKCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bmJzcE1vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm5ic3BNb2RlKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2NrcXVvdGVDb2xvcjoKLSAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXRjaE5l
YXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9y
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlc2l6ZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVzaXplKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2Vy
bmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2VybmluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9u
dERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOiB7CiAgICAgICAgICAgICBGb250RGVzY3JpcHRp
b246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCk7CiAgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKS5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzU3RhdGUoKTsKICAgICAg
ICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlzdG9yaWNhbExpZ2F0dXJl
c1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3RvcmljYWxMaWdhdHVyZXNTdGF0
ZSgpOwogICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlw
dGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRl
ID09IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUKICAgICAgICAgICAgICAg
ICAmJiBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxM
aWdhdHVyZXNTdGF0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwog
CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZUxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBpZiAoY29tbW9uTGlnYXR1
cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKLSAgICAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3JpcHRpb246OkRpc2FibGVk
TGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVzIDogQ1NTVmFsdWVDb21t
b25MaWdhdHVyZXMpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1cmVzU3RhdGUgPT0gRm9u
dERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0NvbW1vbkxp
Z2F0dXJlcyA6IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7CiAgICAgICAgICAgICBpZiAoZGlz
Y3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1
cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlID09IEZv
bnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENTU1ZhbHVlTm9EaXNjcmV0
aW9uYXJ5TGlnYXR1cmVzIDogQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKSk7CisgICAg
ICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3JpcHRpb246
OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyA6IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlcykpOwogICAgICAgICAgICAgaWYgKGhp
c3RvcmljYWxMaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246Ok5vcm1hbExpZ2F0dXJl
c1N0YXRlKQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVz
Y3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vSGlzdG9yaWNhbExp
Z2F0dXJlcyA6IENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOworICAgICAgICAgICAgICAg
IHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSho
aXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0
dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMgOiBDU1NWYWx1ZUhpc3Rv
cmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZUxpc3Q7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKICAgICAgICAgICAgIGlmIChzdHls
ZS0+aGFzQXV0b1pJbmRleCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnpJbmRleCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT56SW5kZXgoKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Wm9vbToKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT56b29tKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+em9vbSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXppbmc6CiAgICAgICAgICAg
ICBpZiAoc3R5bGUtPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRl
bnRCb3gpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQm9yZGVyQm94KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29udGVudEJveCk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQm9yZGVyQm94KTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXREYXNoYm9hcmRSZWdpb246CiAgICAgICAgIHsKICAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIHJlZ2lvbnMgPSBzdHlsZS0+
ZGFzaGJvYXJkUmVnaW9ucygpOwogICAgICAgICAgICAgdW5zaWduZWQgY291bnQgPSByZWdpb25z
LnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb3VudCA9PSAxICYmIHJlZ2lvbnNbMF0udHlwZSA9
PSBTdHlsZURhc2hib2FyZFJlZ2lvbjo6Tm9uZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRSZWdpb24+IGZpcnN0UmVn
aW9uOwogICAgICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBwcmV2aW91c1JlZ2lvbiA9IDA7CkBA
IC0xOTY1LDEwICsxOTU1LDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAKICAgICAgICAg
ICAgICAgICByZWdpb24tPm1fbGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJlbDsKICAgICAgICAgICAg
ICAgICBMZW5ndGhCb3ggb2Zmc2V0ID0gc3R5bGVSZWdpb24ub2Zmc2V0OwotICAgICAgICAgICAg
ICAgIHJlZ2lvbi0+c2V0VG9wKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LnRvcCgpLnZh
bHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICByZWdp
b24tPnNldFJpZ2h0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LnJpZ2h0KCkudmFsdWUo
KSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOwotICAgICAgICAgICAgICAgIHJlZ2lvbi0+
c2V0Qm90dG9tKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmJvdHRvbSgpLnZhbHVlKCks
IHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICByZWdpb24tPnNl
dExlZnQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShvZmZzZXQubGVmdCgpLnZhbHVlKCksIHN0eWxl
LmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICByZWdpb24tPnNldFRvcCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG9mZnNldC50b3AoKS52YWx1ZSgpLCBzdHlsZS5nZXQoKSkp
OworICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmlnaHQoem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShvZmZzZXQucmlnaHQoKS52YWx1ZSgpLCBzdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0Qm90dG9tKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmJvdHRvbSgp
LnZhbHVlKCksIHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgcmVnaW9uLT5zZXRMZWZ0
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmxlZnQoKS52YWx1ZSgpLCBzdHlsZS5nZXQo
KSkpOwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+bV9pc1JlY3RhbmdsZSA9IChzdHlsZVJlZ2lv
bi50eXBlID09IFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUpOwogICAgICAgICAgICAg
ICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9IChzdHlsZVJlZ2lvbi50eXBlID09IFN0eWxlRGFzaGJv
YXJkUmVnaW9uOjpDaXJjbGUpOwogCkBAIC0xOTc4LDI3ICsxOTY4LDI3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZShpbnQgcHJvcGVyCiAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVnaW9uID0gcmVnaW9uOwog
ICAgICAgICAgICAgICAgIHByZXZpb3VzUmVnaW9uID0gcmVnaW9uLmdldCgpOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoZmlyc3RS
ZWdpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpOwogICAgICAgICB9CiAjZW5kaWYKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgotICAgICAgICAgICAgcmV0
dXJuIGdldERlbGF5VmFsdWUoc3R5bGUtPmFuaW1hdGlvbnMoKSwgY3NzVmFsdWVQb29sKTsKKyAg
ICAgICAgICAgIHJldHVybiBnZXREZWxheVZhbHVlKHN0eWxlLT5hbmltYXRpb25zKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOiB7CiAgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21t
YVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0eWxl
LT5hbmltYXRpb25zKCk7CiAgICAgICAgICAgICBpZiAodCkgewogICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHQtPmFuaW1hdGlvbihpKS0+ZGlyZWN0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBbHRlcm5hdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbHRlcm5hdGUpKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSk7CisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vcm1hbCkpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlv
bjoKLSAgICAgICAgICAgIHJldHVybiBnZXREdXJhdGlvblZhbHVlKHN0eWxlLT5hbmltYXRpb25z
KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0RHVyYXRpb25WYWx1ZShz
dHlsZS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkZpbGxNb2RlOiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgY29uc3Qg
QW5pbWF0aW9uTGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CkBAIC0yMDA2LDIxICsxOTk2
LDIxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQgcHJvcGVyCiAgICAgICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB0LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKHQtPmFuaW1hdGlvbihpKS0+ZmlsbE1vZGUoKSkgewogICAgICAgICAgICAgICAgICAgICBj
YXNlIEFuaW1hdGlvbkZpbGxNb2RlTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmltYXRpb25GaWxsTW9kZUZv
cndhcmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRm9yd2FyZHMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVGb3J3YXJkcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uRmlsbE1vZGVCYWNrd2FyZHM6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCYWNrd2FyZHMpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVCYWNrd2FyZHMpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlQm90aDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUJvdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCb3RoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsK
KyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFz
ZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25J
dGVyYXRpb25Db3VudDogewpAQCAtMjAzMCwxMiArMjAyMCwxMiBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoaW50
IHByb3BlcgogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZXJhdGlvbkNvdW50ID0gdC0+YW5p
bWF0aW9uKGkpLT5pdGVyYXRpb25Db3VudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
cmF0aW9uQ291bnQgPT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlSW5maW5pdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVJ
bmZpbml0ZSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShpdGVyYXRpb25Db3Vu
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpdGVyYXRpb25Db3Vu
dCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3Vu
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxB
bmltYXRpb25JdGVyYXRpb25Db3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
OwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOiB7CkBAIC0yMDQzLDkgKzIwMzMs
OSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246Omdl
dFByb3BlcnR5Q1NTVmFsdWUoaW50IHByb3BlcgogICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9u
TGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CiAgICAgICAgICAgICBpZiAodCkgewogICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHQt
PmFuaW1hdGlvbihpKS0+bmFtZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwor
ICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodC0+YW5pbWF0aW9uKGkpLT5uYW1lKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7CisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRl
OiB7CkBAIC0yMDU1LDEyOSArMjA0NSwxMjkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKGludCBwcm9wZXIKICAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHQtPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+YW5pbWF0aW9uKGkpLT5wbGF5U3RhdGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSdW5uaW5nKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlUnVubmluZykpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVQYXVzZWQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQYXVzZWQpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBs
aXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVS
dW5uaW5nKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1bm5pbmcpKTsKICAgICAgICAgICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgICAgICAgICByZXR1cm4gZ2V0VGltaW5n
RnVuY3Rpb25WYWx1ZShzdHlsZS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZShzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+YXBwZWFyYW5jZSgpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+
aGFzQXNwZWN0UmF0aW8oKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgICAgICAgICByZXR1cm4gQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKHN0eWxlLT5hc3Bl
Y3RSYXRpb051bWVyYXRvcigpLCBzdHlsZS0+YXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eToKLSAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSgoc3R5bGUtPmJh
Y2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0eUhpZGRlbikgPyBDU1NWYWx1
ZUhpZGRlbiA6IENTU1ZhbHVlVmlzaWJsZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKChzdHlsZS0+YmFja2ZhY2VWaXNpYmlsaXR5KCkg
PT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKSA/IENTU1ZhbHVlSGlkZGVuIDogQ1NTVmFsdWVW
aXNpYmxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckltYWdlOgotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2Uoc3R5bGUtPmJvcmRlckltYWdl
KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJ
bWFnZShzdHlsZS0+Ym9yZGVySW1hZ2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZU91dHNldDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdl
UXVhZChzdHlsZS0+Ym9yZGVySW1hZ2UoKS5vdXRzZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChzdHlsZS0+Ym9yZGVySW1h
Z2UoKS5vdXRzZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVJlcGVh
dDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KHN0eWxl
LT5ib3JkZXJJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVl
Rm9yTmluZVBpZWNlSW1hZ2VSZXBlYXQoc3R5bGUtPmJvcmRlckltYWdlKCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZToKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZUZvck5pbmVQaWVjZUltYWdlU2xpY2Uoc3R5bGUtPmJvcmRlckltYWdlKCksIGNzc1ZhbHVlUG9v
bCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVNsaWNlKHN0eWxl
LT5ib3JkZXJJbWFnZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lk
dGg6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoc3R5bGUt
PmJvcmRlckltYWdlKCkuYm9yZGVyU2xpY2VzKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAg
ICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoc3R5bGUtPmJvcmRlckltYWdlKCku
Ym9yZGVyU2xpY2VzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlOgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2Uoc3R5bGUtPm1h
c2tCb3hJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9y
TmluZVBpZWNlSW1hZ2Uoc3R5bGUtPm1hc2tCb3hJbWFnZSgpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZUZvck5pbmVQaWVjZUltYWdlUXVhZChzdHlsZS0+bWFza0JveEltYWdlKCkub3V0c2V0KCksIGNz
c1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1
YWQoc3R5bGUtPm1hc2tCb3hJbWFnZSgpLm91dHNldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZv
ck5pbmVQaWVjZUltYWdlUmVwZWF0KHN0eWxlLT5tYXNrQm94SW1hZ2UoKSwgY3NzVmFsdWVQb29s
KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KHN0eWxl
LT5tYXNrQm94SW1hZ2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2VTbGljZToKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xp
Y2Uoc3R5bGUtPm1hc2tCb3hJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0
dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VTbGljZShzdHlsZS0+bWFza0JveEltYWdlKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlV2lkdGg6Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoc3R5bGUtPm1hc2tCb3hJbWFn
ZSgpLmJvcmRlclNsaWNlcygpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZh
bHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKHN0eWxlLT5tYXNrQm94SW1hZ2UoKS5ib3JkZXJTbGlj
ZXMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2U6
CiAgICAgICAgICAgICBpZiAoc3R5bGUtPm1hc2tCb3hJbWFnZVNvdXJjZSgpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBzdHlsZS0+bWFza0JveEltYWdlU291cmNlKCktPmNzc1ZhbHVlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEZvbnRTaXplRGVsdGE6CiAgICAgICAgICAgICAvLyBOb3QgYSByZWFsIHN0eWxlIHByb3BlcnR5
IC0tIHVzZWQgYnkgdGhlIGVkaXRpbmcgZW5naW5lIC0tIHNvIGhhcyBubyBjb21wdXRlZCB2YWx1
ZS4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFy
Z2luQm90dG9tQ29sbGFwc2U6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5B
ZnRlckNvbGxhcHNlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSk7CisgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZToKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxhcHNlOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPm1hcmdpbkJlZm9yZUNvbGxh
cHNlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFBlcnNwZWN0aXZlOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+aGFzUGVyc3BlY3RpdmUo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHN0eWxlLT5wZXJzcGVjdGl2ZSgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZShzdHlsZS0+cGVyc3BlY3RpdmUoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0UGVyc3BlY3RpdmVPcmlnaW46IHsKICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IGJv
eCA9IHNpemluZ0JveChyZW5kZXJlcik7Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLmNhbGNNaW5W
YWx1ZShib3gud2lkdGgoKSksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+cGVyc3Bl
Y3RpdmVPcmlnaW5ZKCkuY2FsY01pblZhbHVlKGJveC5oZWlnaHQoKSksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCkuY2FsY01pblZhbHVlKGJveC53
aWR0aCgpKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9v
bUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCkuY2FsY01pblZh
bHVlKGJveC5oZWlnaHQoKSksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCksIHN0eWxlLmdldCgp
LCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5ZKCksIHN0eWxl
LmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9v
bUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3BlY3RpdmVPcmlnaW5YKCks
IHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWSgpLCBzdHlsZS5n
ZXQoKSkpOwogCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNl
KCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFJ0bE9yZGVyaW5n
OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KHN0eWxlLT5ydGxPcmRlcmluZygpID8gQ1NTVmFsdWVWaXN1YWwgOiBDU1NWYWx1ZUxvZ2ljYWwp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShzdHlsZS0+cnRsT3JkZXJpbmcoKSA/IENTU1ZhbHVlVmlzdWFsIDogQ1NTVmFsdWVMb2dpY2Fs
KTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VGFwSGlnaGxpZ2h0Q29sb3I6CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9yT3JW
YWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+dGFwSGlnaGxpZ2h0Q29sb3IoKSk7CiAjZW5k
aWYKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJEcmFnOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnVzZXJEcmFnKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT51c2VyRHJh
ZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJTZWxlY3Q6Ci0gICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+dXNlclNlbGVjdCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
dXNlclNlbGVjdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRS
YWRpdXM6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoc3R5
bGUtPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7
CisgICAgICAgICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoc3R5bGUtPmJv
cmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Qm9y
ZGVyUmFkaXVzQ29ybmVyVmFsdWUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJh
ZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpLCBzdHlsZS5n
ZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzOgotICAg
ICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJU
b3BMZWZ0UmFkaXVzKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAg
cmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFk
aXVzKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFJp
Z2h0UmFkaXVzOgotICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVl
KHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29s
KTsKKyAgICAgICAgICAgIHJldHVybiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZShzdHlsZS0+
Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Q2xpcDogewogICAgICAgICAgICAgaWYgKCFzdHlsZS0+aGFzQ2xpcCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUF1dG8pOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWN0PiBy
ZWN0ID0gUmVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICByZWN0LT5zZXRUb3Aoem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZShzdHlsZS0+Y2xpcCgpLnRvcCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgIHJlY3QtPnNldFJpZ2h0KHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUtPmNsaXAoKS5yaWdodCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NW
YWx1ZVBvb2wpKTsKLSAgICAgICAgICAgIHJlY3QtPnNldEJvdHRvbSh6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHN0eWxlLT5jbGlwKCkuYm90dG9tKCkudmFsdWUoKSwgc3R5bGUuZ2V0KCksIGNzc1Zh
bHVlUG9vbCkpOwotICAgICAgICAgICAgcmVjdC0+c2V0TGVmdCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHN0eWxlLT5jbGlwKCkubGVmdCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBv
b2wpKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHJlY3Qu
cmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJlY3QtPnNldFRvcCh6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHN0eWxlLT5jbGlwKCkudG9wKCkudmFsdWUoKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAg
ICAgIHJlY3QtPnNldFJpZ2h0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNsaXAoKS5y
aWdodCgpLnZhbHVlKCksIHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRCb3R0
b20oem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Y2xpcCgpLmJvdHRvbSgpLnZhbHVlKCks
IHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRMZWZ0KHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUtPmNsaXAoKS5sZWZ0KCkudmFsdWUoKSwgc3R5bGUuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZWN0LnJlbGVhc2Uo
KSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnNwZWFrKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5zcGVhaygp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKLSAgICAgICAgICAg
IHJldHVybiBjb21wdXRlZFRyYW5zZm9ybShyZW5kZXJlciwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVl
UG9vbCk7CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZWRUcmFuc2Zvcm0ocmVuZGVyZXIsIHN0
eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdp
bjogewogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIEludFJlY3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsKLSAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dHJh
bnNmb3JtT3JpZ2luWCgpLmNhbGNNaW5WYWx1ZShib3gud2lkdGgoKSksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWSgpLmNhbGNNaW5WYWx1ZShib3guaGVp
Z2h0KCkpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgo
KS5jYWxjTWluVmFsdWUoYm94LndpZHRoKCkpLCBzdHlsZS5nZXQoKSkpOworICAgICAgICAgICAg
ICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT50cmFuc2Zvcm1P
cmlnaW5ZKCkuY2FsY01pblZhbHVlKGJveC5oZWlnaHQoKSksIHN0eWxlLmdldCgpKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCkgIT0gMCkKLSAgICAgICAg
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnRy
YW5zZm9ybU9yaWdpblooKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOworICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dHJh
bnNmb3JtT3JpZ2luWigpLCBzdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0
aChzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7
Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JM
ZW5ndGgoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9v
bCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCksIHN0eWxlLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgo
c3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKSwgc3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgICAg
ICBpZiAoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblooKSAhPSAwKQotICAgICAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dHJhbnNmb3JtT3Jp
Z2luWigpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT50cmFuc2Zvcm1Pcmln
aW5aKCksIHN0eWxlLmdldCgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
bGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybVN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKChzdHlsZS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0
eWxlM0RQcmVzZXJ2ZTNEKSA/IENTU1ZhbHVlUHJlc2VydmUzZCA6IENTU1ZhbHVlRmxhdCk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKChz
dHlsZS0+dHJhbnNmb3JtU3R5bGUzRCgpID09IFRyYW5zZm9ybVN0eWxlM0RQcmVzZXJ2ZTNEKSA/
IENTU1ZhbHVlUHJlc2VydmUzZCA6IENTU1ZhbHVlRmxhdCk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0RGVsYXlW
YWx1ZShzdHlsZS0+dHJhbnNpdGlvbnMoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJl
dHVybiBnZXREZWxheVZhbHVlKHN0eWxlLT50cmFuc2l0aW9ucygpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBn
ZXREdXJhdGlvblZhbHVlKHN0eWxlLT50cmFuc2l0aW9ucygpLCBjc3NWYWx1ZVBvb2wpOworICAg
ICAgICAgICAgcmV0dXJuIGdldER1cmF0aW9uVmFsdWUoc3R5bGUtPnRyYW5zaXRpb25zKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiB7CiAgICAg
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVD
b21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0
eWxlLT50cmFuc2l0aW9ucygpOwpAQCAtMjE4Niw2OSArMjE3Niw2OSBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUo
aW50IHByb3BlcgogICAgICAgICAgICAgICAgICAgICBpbnQgcHJvcCA9IHQtPmFuaW1hdGlvbihp
KS0+cHJvcGVydHkoKTsKICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBwcm9w
ZXJ0eVZhbHVlOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZU5vbmUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcCA9PSBjQW5p
bWF0ZUFsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQWxsKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
Z2V0UHJvcGVydHlOYW1lKHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3ApKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGdldFByb3BlcnR5TmFtZShzdGF0
aWNfY2FzdDxDU1NQcm9wZXJ0eUlEPihwcm9wKSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKTsKICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHByb3BlcnR5VmFsdWUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFs
bCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGwpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvblRpbWluZ0Z1bmN0aW9uOgogICAgICAgICAgICAgcmV0dXJuIGdldFRpbWluZ0Z1bmN0aW9u
VmFsdWUoc3R5bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UG9p
bnRlckV2ZW50czoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHN0eWxlLT5wb2ludGVyRXZlbnRzKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wb2ludGVyRXZlbnRzKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0Q29sb3JDb3JyZWN0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbG9yU3BhY2UoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRMaW5lR3JpZDoKICAgICAgICAgICAgIGlmIChz
dHlsZS0+bGluZUdyaWQoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5saW5lR3JpZCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5saW5lR3JpZCgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRMaW5lR3JpZFNuYXA6CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShzdHlsZS0+bGluZUdyaWRTbmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0V3JpdGluZ01vZGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShzdHlsZS0+d3JpdGluZ01vZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndyaXRpbmdNb2RlKCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0VGV4dENvbWJpbmU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dENvbWJpbmUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRDb21iaW5lKCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dE9yaWVudGF0aW9uOgogICAgICAgICAg
ICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpLnRleHRPcmllbnRhdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVCb3hDb250YWluOgotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpbmVCb3hDb250YWluVmFs
dWUoY3NzVmFsdWVQb29sLCBzdHlsZS0+bGluZUJveENvbnRhaW4oKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGluZUJveENvbnRhaW5WYWx1ZShzdHlsZS0+bGluZUJveENvbnRhaW4oKSk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb250ZW50OgotICAgICAgICAgICAgcmV0dXJuIGNv
bnRlbnRUb0NTU1ZhbHVlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAg
cmV0dXJuIGNvbnRlbnRUb0NTU1ZhbHVlKHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQ6Ci0gICAgICAgICAgICByZXR1cm4gY291bnRlclRvQ1NT
VmFsdWUoc3R5bGUuZ2V0KCksIHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAg
ICByZXR1cm4gY291bnRlclRvQ1NTVmFsdWUoc3R5bGUuZ2V0KCksIHByb3BlcnR5SUQpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5Q291bnRlclJlc2V0OgotICAgICAgICAgICAgcmV0dXJuIGNv
dW50ZXJUb0NTU1ZhbHVlKHN0eWxlLmdldCgpLCBwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2wpOwor
ICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXJUb0NTU1ZhbHVlKHN0eWxlLmdldCgpLCBwcm9wZXJ0
eUlEKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dJbnRvOgogICAgICAgICAg
ICAgaWYgKHN0eWxlLT5mbG93VGhyZWFkKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Zmxvd1Ro
cmVhZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5m
bG93VGhyZWFkKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZsb3dGcm9tOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5yZWdp
b25UaHJlYWQoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uVGhyZWFkKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdFJlZ2lvbk92ZXJmbG93OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbk92ZXJmbG93KCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25PdmVyZmxvdygpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBGbG93OgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyYXBGbG93KCkpOworICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53cmFwRmxvdygpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBNYXJnaW46Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+d3JhcE1hcmdpbigpKTsKKyAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+d3JhcE1h
cmdpbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBQYWRkaW5nOgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyYXBQYWRk
aW5nKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0
eWxlLT53cmFwUGFkZGluZygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBT
aGFwZUluc2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPndyYXBTaGFwZUluc2lkZSgpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoc3R5bGUtPndyYXBTaGFwZUluc2lkZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndyYXBTaGFw
ZUluc2lkZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBTaGFwZU91dHNp
ZGU6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT53cmFwU2hhcGVPdXRzaWRlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShz
dHlsZS0+d3JhcFNoYXBlT3V0c2lkZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndyYXBTaGFwZU91dHNp
ZGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwVGhyb3VnaDoKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT53cmFwVGhyb3Vn
aCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+d3JhcFRocm91Z2goKSk7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0RmlsdGVyOgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yRmls
dGVyKHN0eWxlLmdldCgpKTsKQEAgLTIyODUsOSArMjI3NSw5IEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShpbnQg
cHJvcGVyCiAgICAgICAgICAgICByZXR1cm4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhh
bmRQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIFdURl9BUlJBWV9MRU5HVEgocHJvcGVydGllcykpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZToKLSAgICAgICAg
ICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKHN0eWxlLT5ib3JkZXJJbWFnZSgpLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2Uo
c3R5bGUtPmJvcmRlckltYWdlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmFk
aXVzOgotICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c1Nob3J0aGFuZFZhbHVlKHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJh
ZGl1c1Nob3J0aGFuZFZhbHVlKHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJvcmRlclJpZ2h0OiB7CiAgICAgICAgICAgICBjb25zdCBpbnQgcHJvcGVydGllc1szXSA9IHsg
Q1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlCb3Jk
ZXJSaWdodENvbG9yIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uLmgKaW5kZXggMmI2MTM1NS4uYjdiNTQ2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaApAQCAtMzIsNyArMzIsNiBA
QCBjbGFzcyBDb2xvcjsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3Mg
Q1NTUHJpbWl0aXZlVmFsdWU7CiBjbGFzcyBDU1NWYWx1ZUxpc3Q7Ci1jbGFzcyBDU1NWYWx1ZVBv
b2w7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTaGFkb3dEYXRhOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA3Y2RhNGFlLi5kYTgyOWJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcApAQCAtMTcyLDEyICsxNzIsNiBAQCBzdGF0aWMgYm9vbCBoYXNQcmVm
aXgoY29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IGNoYXIqIHByZWZp
eCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWlubGluZSB2b2lkIENTU1BhcnNlcjo6ZW5zdXJl
Q1NTVmFsdWVQb29sKCkKLXsKLSAgICBpZiAoIW1fY3NzVmFsdWVQb29sKQotICAgICAgICBtX2Nz
c1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6Y3JlYXRlKCk7Ci19Ci0KIC8vIEZJWE1FOiBDYW4g
bV9wYXJzZWRQcm9wZXJ0aWVzIGp1c3QgYmUgYSBWZWN0b3I/CiAgICAgCiBDU1NQYXJzZXI6OkNT
U1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCkBAIC0zMjYsNyArMzIwLDcgQEAgc3RhdGljIGlu
bGluZSBib29sIGlzQ29sb3JQcm9wZXJ0eUlEKGludCBwcm9wZXJ0eUlkKQogICAgIH0KIH0KIAot
c3RhdGljIGJvb2wgcGFyc2VDb2xvclZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBk
ZWNsYXJhdGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGlt
cG9ydGFudCwgYm9vbCBzdHJpY3QsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0g
MCkKK3N0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogZGVjbGFyYXRpb24sIGludCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9v
bCBpbXBvcnRhbnQsIGJvb2wgc3RyaWN0KQogewogICAgIGlmICghc3RyaW5nLmxlbmd0aCgpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDYsMjEgKzM0MCwxNSBAQCBzdGF0aWMgYm9vbCBw
YXJzZUNvbG9yVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBp
bnQgcHJvcGVydAogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgfQogCi0gICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnRleHRTdHlsZVNoZWV0ID8gY29udGV4dFN0
eWxlU2hlZXQgOiBkZWNsYXJhdGlvbi0+Y29udGV4dFN0eWxlU2hlZXQoKTsKLSAgICBpZiAoIXN0
eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50KQotICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0gICAgICAgIENTU1By
b3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SWQsIGRvY3VtZW50LT5jc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlSUQpLCBpbXBvcnRhbnQpOworICAgICAgICBDU1NQcm9w
ZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWVJRCksIGltcG9ydGFudCk7CiAgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJz
ZWRQcm9wZXJ0eShwcm9wZXJ0eSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBS
R0JBMzIgY29sb3I7CiAgICAgaWYgKCFDU1NQYXJzZXI6OmZhc3RQYXJzZUNvbG9yKGNvbG9yLCBz
dHJpbmcsIHN0cmljdCAmJiBzdHJpbmdbMF0gIT0gJyMnKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIENTU1Byb3BlcnR5IHByb3BlcnR5KHByb3BlcnR5SWQsIGRvY3VtZW50LT5jc3NWYWx1
ZVBvb2woKS0+Y3JlYXRlQ29sb3JWYWx1ZShjb2xvciksIGltcG9ydGFudCk7CisgICAgQ1NTUHJv
cGVydHkgcHJvcGVydHkocHJvcGVydHlJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1
ZShjb2xvciksIGltcG9ydGFudCk7CiAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5
KHByb3BlcnR5KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQwOSw3ICszOTcsNyBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKGludCBwcm9wZXJ0eUlkLCBi
b29sJiBhY2NlcHRzTmVnYXRpdgogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgcGFyc2VTaW1wbGVM
ZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGludCBw
cm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIGJvb2wgc3Ry
aWN0LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCA9IDApCitzdGF0aWMgYm9vbCBw
YXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJh
dGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFu
dCwgYm9vbCBzdHJpY3QpCiB7CiAgICAgYm9vbCBhY2NlcHRzTmVnYXRpdmVOdW1iZXJzOwogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKQEAgLTQ3MywxMyArNDYxLDcgQEAg
c3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbiogZGVjbGFyYXRpb24sIGludAogICAgIGlmIChudW1iZXIgPCAwICYmICFhY2NlcHRzTmVn
YXRpdmVOdW1iZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0ID0gY29udGV4dFN0eWxlU2hlZXQgPyBjb250ZXh0U3R5bGVTaGVldCA6IGRl
Y2xhcmF0aW9uLT5jb250ZXh0U3R5bGVTaGVldCgpOwotICAgIGlmICghc3R5bGVTaGVldCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQt
PmZpbmREb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBDU1NQcm9wZXJ0eSBwcm9wZXJ0eShwcm9wZXJ0eUlkLCBkb2N1bWVudC0+Y3NzVmFs
dWVQb29sKCktPmNyZWF0ZVZhbHVlKG51bWJlciwgdW5pdCksIGltcG9ydGFudCk7CisgICAgQ1NT
UHJvcGVydHkgcHJvcGVydHkocHJvcGVydHlJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
bnVtYmVyLCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBkZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJv
cGVydHkocHJvcGVydHkpOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNDkwLDkgKzQ3Miw5IEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZVZhbHVlKENTU01hcHBlZEF0dHJp
YnV0ZURlY2xhcmF0aW9uKiBtYXBwZWRBCiAgICAgQVNTRVJUKGVsZW1lbnQpOwogICAgIEFTU0VS
VChlbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICBDU1NTdHlsZVNoZWV0KiBlbGVtZW50U2hlZXQg
PSBlbGVtZW50LT5kb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKTsKLSAgICBpZiAocGFyc2VTaW1w
bGVMZW5ndGhWYWx1ZShtYXBwZWRBdHRyaWJ1dGUtPmRlY2xhcmF0aW9uKCksIHByb3BlcnR5SWQs
IHZhbHVlLCBmYWxzZSwgZmFsc2UsIGVsZW1lbnRTaGVldCkpCisgICAgaWYgKHBhcnNlU2ltcGxl
TGVuZ3RoVmFsdWUobWFwcGVkQXR0cmlidXRlLT5kZWNsYXJhdGlvbigpLCBwcm9wZXJ0eUlkLCB2
YWx1ZSwgZmFsc2UsIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHBhcnNl
Q29sb3JWYWx1ZShtYXBwZWRBdHRyaWJ1dGUtPmRlY2xhcmF0aW9uKCksIHByb3BlcnR5SWQsIHZh
bHVlLCBmYWxzZSwgZmFsc2UsIGVsZW1lbnRTaGVldCkpCisgICAgaWYgKHBhcnNlQ29sb3JWYWx1
ZShtYXBwZWRBdHRyaWJ1dGUtPmRlY2xhcmF0aW9uKCksIHByb3BlcnR5SWQsIHZhbHVlLCBmYWxz
ZSwgZmFsc2UpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBDU1NQYXJzZXIgcGFyc2VyKGZh
bHNlKTsKICAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWUobWFwcGVkQXR0cmlidXRlLT5kZWNs
YXJhdGlvbigpLCBwcm9wZXJ0eUlkLCB2YWx1ZSwgZmFsc2UsIGVsZW1lbnRTaGVldCk7CkBAIC01
NjQsMTAgKzU0Niw2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3Is
IGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKIAogYm9vbCBDU1NQYXJzZXI6OnBh
cnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBt
YXkgYmUgY2FsbGVkIHdpdGhvdXQgYSBzdHlsZXNoZWV0IHNldCBvbiB0aGUgcGFyc2VyLCBzbyB3
ZSBuZWVkIHRvCi0gICAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIENTU1ZhbHVlUG9vbCBv
ciB3ZSdsbCBjcmFzaCBiZWxvdyBjc3N5eXBhcnNlKCkuCi0gICAgZW5zdXJlQ1NTVmFsdWVQb29s
KCk7Ci0KICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7Y29sb3I6Iiwgc3RyaW5nLCAi
fSAiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMpOwogICAgIG1fcnVsZSA9IDA7CkBAIC03MDgsOCAr
Njg2LDYgQEAgdm9pZCBDU1NQYXJzZXI6OmNsZWFyUHJvcGVydGllcygpCiB2b2lkIENTU1BhcnNl
cjo6c2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQogewogICAgIG1fc3R5
bGVTaGVldCA9IHN0eWxlU2hlZXQ7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZmluZERvY3Vt
ZW50KCk7Ci0gICAgbV9jc3NWYWx1ZVBvb2wgPSBkb2N1bWVudCA/IGRvY3VtZW50LT5jc3NWYWx1
ZVBvb2woKSA6IENTU1ZhbHVlUG9vbDo6Y3JlYXRlKCk7CiB9CiAKIERvY3VtZW50KiBDU1NQYXJz
ZXI6OmZpbmREb2N1bWVudCgpIGNvbnN0CkBAIC04MjIsMTMgKzc5OCwxMyBAQCBpbmxpbmUgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUoQ1NTUAogICAgICAgICAgICAgICAgCiAgICAgQVNTRVJUKCh2YWx1ZS0+dW5pdCA+
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0tIWikKICAgICAgICAgICAgfHwgKHZhbHVlLT51bml0ID49IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVFVSTiAmJiB2YWx1ZS0+dW5pdCA8PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1JFTVMpKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHZh
bHVlLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZh
bHVlLT51bml0KSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHZhbHVl
LT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVl
LT51bml0KSk7CiB9CiAKIGlubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQ
YXJzZXI6OmNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKENTU1BhcnNlclZhbHVlKiB2YWx1ZSkK
IHsKICAgICBBU1NFUlQodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCk7Ci0gICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKIH0K
IAogc3RhdGljIGludCB1bml0RnJvbVN0cmluZyhDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCkBAIC05
MDgsNyArODg0LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmNoZWNrRm9yT3JwaGFuZWRVbml0cygpCiBp
bmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbGlk
UHJpbWl0aXZlKGludCBpZCwgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQogewogICAgIGlmIChpZCkK
LSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQp
OworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
KTsKICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
CiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSk7CiAgICAg
aWYgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVl
LT51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQpAQCAtOTUwLDEzICs5MjYsMTMg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgaWYgKGlkID09IENTU1ZhbHVlSW5oZXJpdCkgewogICAgICAgICBpZiAobnVtICE9IDEp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUluaGVyaXRlZFZhbHVlKCksIGltcG9ydGFudCk7CisgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW5oZXJpdGVkVmFs
dWUoKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGVsc2Ug
aWYgKGlkID09IENTU1ZhbHVlSW5pdGlhbCkgewogICAgICAgICBpZiAobnVtICE9IDEpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CisgICAg
ICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlRXhwbGljaXRJbml0
aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0xMjU4LDkgKzEyMzQsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICAgICAgICAgICAgICBpZiAobGlzdC0+bGVuZ3RoKCkgIT0g
MSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNl
IGlmICghbV9zdHJpY3QgJiYgdmFsdWUtPmlkID09IENTU1ZhbHVlSGFuZCkgLy8gTVNJRSA1IGNv
bXBhdGliaWxpdHkgOi8KLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVBvaW50ZXIpKTsKKyAgICAgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlUG9pbnRlcikpOwogICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgJiYgKCh2YWx1ZS0+
aWQgPj0gQ1NTVmFsdWVBdXRvICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZVdlYmtpdEdyYWJiaW5n
KSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb3B5IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5v
bmUpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAg
ICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBs
aXN0LnJlbGVhc2UoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTUyMSw3ICsxNDk3LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVVuZGVybGluZToKICAgICAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlT3ZlcmxpbmU6CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUxpbmVU
aHJvdWdoOgotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwpAQCAtMTYyOSw3ICsxNjA1
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAKICAgICAgICAg
UmVmUHRyPFBhaXI+IHBhaXIgPSBQYWlyOjpjcmVhdGUocGFyc2VkVmFsdWUxLnJlbGVhc2UoKSwg
cGFyc2VkVmFsdWUyLnJlbGVhc2UoKSk7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gdmFsID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHBhaXIucmVsZWFzZSgpKTsKKyAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShwYWlyLnJlbGVhc2UoKSk7CiAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFs
LnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTcxOCw3ICsxNjk0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhPcmRlcjoKICAg
ICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIsIHRydWUpKSB7CiAgICAgICAgICAg
ICAvLyBXZSByZXN0cmljdCB0aGUgc21hbGxlc3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVz
ZSB3ZSB1c2UgaW50IG1pbiBhbmQgaW50IG1pbiArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBo
YXNoIHNldC4KLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0
ZVZhbHVlKG1heChzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCkgKyAyKSwgdmFsdWUtPmZWYWx1ZSksCisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG1heChzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAyKSwgdmFsdWUtPmZWYWx1ZSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUtPnVuaXQpKTsKICAgICAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIH0KQEAgLTIwNTgsNyArMjAzNCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50
KQogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKSB7CiAgICAgICAgICAgICBTdHJpbmcgbGluZUdyaWRWYWx1ZSA9IFN0cmluZyh2YWx1
ZS0+c3RyaW5nKTsKICAgICAgICAgICAgIGlmICghbGluZUdyaWRWYWx1ZS5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVh
dGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGlt
cG9ydGFudCk7CisgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShsaW5lR3JpZFZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORyksIGltcG9ydGFudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTIxMzMsNyArMjEwOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAocGFyc2VT
aG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCAzLCBpbXBvcnRhbnQpKSB7CiAgICAgICAgICAg
ICAvLyBUaGUgQ1NTMyBCb3JkZXJzIGFuZCBCYWNrZ3JvdW5kcyBzcGVjaWZpY2F0aW9uIHNheXMg
dGhhdCBib3JkZXIgYWxzbyByZXNldHMgYm9yZGVyLWltYWdlLiBJdCdzIGFzCiAgICAgICAgICAg
ICAvLyB0aG91Z2ggYSB2YWx1ZSBvZiBub25lIHdhcyBzcGVjaWZpZWQgZm9yIHRoZSBpbWFnZS4K
LSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsIGNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOworICAgICAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwgY3NzVmFsdWVQb29sKCku
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIzOTMsMTEg
KzIzNjksMTEgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+
JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKQogICAgICAgICBsdmFsID0gcnZhbDsK
IH0KIAotc3RhdGljIGJvb2wgcGFyc2VCYWNrZ3JvdW5kQ2xpcChDU1NQYXJzZXJWYWx1ZSogcGFy
c2VyVmFsdWUsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlLCBDU1NWYWx1ZVBvb2wqIGNzc1Zh
bHVlUG9vbCkKK3N0YXRpYyBib29sIHBhcnNlQmFja2dyb3VuZENsaXAoQ1NTUGFyc2VyVmFsdWUq
IHBhcnNlclZhbHVlLCBSZWZQdHI8Q1NTVmFsdWU+JiBjc3NWYWx1ZSkKIHsKICAgICBpZiAocGFy
c2VyVmFsdWUtPmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHBhcnNlclZhbHVlLT5pZCA9PSBD
U1NWYWx1ZVBhZGRpbmdCb3gKICAgICAgICAgfHwgcGFyc2VyVmFsdWUtPmlkID09IENTU1ZhbHVl
Q29udGVudEJveCB8fCBwYXJzZXJWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVXZWJraXRUZXh0KSB7Ci0g
ICAgICAgIGNzc1ZhbHVlID0gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUocGFy
c2VyVmFsdWUtPmlkKTsKKyAgICAgICAgY3NzVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUocGFyc2VyVmFsdWUtPmlkKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI0MzMsMTQgKzI0MDksMTQgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRp
ZXMsIGludCBudW1Qcm8KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSAmJiBwcm9wZXJ0aWVzW2ldICE9IENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZEZpbGxW
YWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFs
dWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uIHx8
IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24pCi0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUocG9zaXRpb25ZVmFsdWUsIGNzc1ZhbHVlUG9v
bCgpLT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1w
bGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVz
W2ldID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFJlcGVhdCB8fCBwcm9wZXJ0aWVzW2ldID09IENT
U1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZp
bGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZ
VmFsdWUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICBpZiAoKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kT3JpZ2luIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrT3JpZ2lu
KSAmJiAhcGFyc2VkUHJvcGVydHlbaV0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElm
IGJhY2tncm91bmQtb3JpZ2luIHdhc24ndCBwcmVzZW50LCB0aGVuIHJlc2V0IGJhY2tncm91bmQt
Y2xpcCBhbHNvLgotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNsaXBWYWx1
ZSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNsaXBWYWx1ZSwgY3NzVmFsdWVQb29sKCku
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlbaV0gPSBmYWxz
ZTsKQEAgLTI0NjUsMTAgKzI0NDEsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0
aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIHZhbDIucmVsZWFz
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kT3JpZ2luIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRN
YXNrT3JpZ2luKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBhcnNlIHRoZSB2YWx1
ZSBhcyBhIGNsaXAsIGFuZCBzZWUgaWYgd2Ugc3VjY2VlZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKHBhcnNlclZhbHVlLCB2YWwxLCBjc3NWYWx1ZVBv
b2woKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VCYWNrZ3JvdW5kQ2xpcChw
YXJzZXJWYWx1ZSwgdmFsMSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZh
bHVlKGNsaXBWYWx1ZSwgdmFsMS5yZWxlYXNlKCkpOyAvLyBUaGUgcHJvcGVydHkgcGFyc2VkIHN1
Y2Nlc3NmdWxseS4KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7IC8vIFNvbWUgdmFsdWUgd2FzIHVzZWQgZm9yIG9y
aWdpbiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY2xpcC4gSnVzdCByZXNldCBjbGlwIGluc3Rl
YWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNsaXBWYWx1ZSwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7IC8vIFNvbWUgdmFs
dWUgd2FzIHVzZWQgZm9yIG9yaWdpbiB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgY2xpcC4gSnVz
dCByZXNldCBjbGlwIGluc3RlYWQuCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ2xpcCB8
fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza0NsaXApIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjbGlwVmFsdWUKQEAgLTI0ODgsMTQgKzI0NjQsMTQg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBp
bnQqIHByb3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAvLyBGaWxsIGluIGFueSByZW1haW5pbmcg
cHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAgIGZvciAoaSA9IDA7IGkgPCBu
dW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewot
ICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCktPmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVl
c1tpXSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAg
ICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlv
biB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uKQotICAg
ICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sKCkt
PmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAgIGFkZEZpbGxW
YWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFs
VmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tS
ZXBlYXQpCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwgY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0
SW5pdGlhbFZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKChwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Vi
a2l0TWFza09yaWdpbikgJiYgIXBhcnNlZFByb3BlcnR5W2ldKSB7CiAgICAgICAgICAgICAgICAg
Ly8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dy
b3VuZC1jbGlwIGFsc28uCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKGNsaXBWYWx1ZSwg
Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAg
ICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MjU3NSw3ICsyNTUxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5k
KGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgICAgICAgICBhZGRBbmlt
YXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRp
YWxWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVz
W2ldLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAg
ICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9IGZhbHNlOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCFtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKQpAQCAtMjYwMiw3ICsyNTc4LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50
KQogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRp
YWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAg
ICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQotICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFs
dWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUo
KSk7CisgICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwogICAgIH0KIAogICAgIC8vIE5vdyBh
ZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgpAQCAtMjYzMyw3ICsyNjA5LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkK
ICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQ
cm9wZXJ0eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVz
W2ldLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29s
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgcGFyc2Vk
UHJvcGVydHlbaV0gPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSkKQEAgLTI2NjAsNyArMjYzNiw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgLy8gRmlsbCBp
biBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBm
b3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgIGlmICghcGFyc2Vk
UHJvcGVydHlbaV0pCi0gICAgICAgICAgICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKKyAgICAgICAgICAg
IGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSk7CiAgICAgfQogCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHBy
b3BlcnRpZXMgd2UgZm91bmQuCkBAIC0yNzAxLDcgKzI2NzcsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VTaG9ydGhhbmQoaW50IHByb3BJZCwgY29uc3QgaW50ICpwcm9wZXJ0aWVzLCBpbnQgbnVt
UHJvcGVydAogICAgIEltcGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSh0aGlzLCBQcm9wZXJ0eUlt
cGxpY2l0KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewog
ICAgICAgICBpZiAoIWZuZFtpXSkKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNb
aV0sIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRh
bnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgY3NzVmFsdWVQb29s
KCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKICAgICB9CiAKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTI3NzgsNyArMjc1NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVBhZ2UoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSAwICYmIHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgYWRkUHJvcGVy
dHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSksIGltcG9ydGFudCk7
CkBAIC0yODIzLDE0ICsyNzk5LDE0IEBAIENTU1BhcnNlcjo6U2l6ZVBhcmFtZXRlclR5cGUgQ1NT
UGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0KiBwYXJzZWRWCiAgICAgc3dp
dGNoICh2YWx1ZS0+aWQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKICAgICAgICAgaWYgKHBy
ZXZQYXJhbVR5cGUgPT0gTm9uZSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAg
ICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIHJldHVybiBBdXRvOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBOb25lOwogICAgIGNhc2UgQ1NTVmFsdWVMYW5kc2NhcGU6CiAgICAg
Y2FzZSBDU1NWYWx1ZVBvcnRyYWl0OgogICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25l
IHx8IHByZXZQYXJhbVR5cGUgPT0gUGFnZVNpemUpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVl
cy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlk
KSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICByZXR1cm4gT3JpZW50
YXRpb247CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vbmU7CkBAIC0yODQ1LDcgKzI4MjEs
NyBAQCBDU1NQYXJzZXI6OlNpemVQYXJhbWV0ZXJUeXBlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFy
YW1ldGVyKENTU1ZhbHVlTGlzdCogcGFyc2VkVgogICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9
PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgIC8v
IE5vcm1hbGl6ZSB0byBQYWdlIFNpemUgdGhlbiBPcmllbnRhdGlvbiBvcmRlciBieSBwcmVwZW5k
aW5nLgogICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBDU1MzIFBh
Z2VkIE1lZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5nIGxhdGVy
IChDU1NTdHlsZVNlbGVjdG9yOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgotICAgICAgICAgICAg
cGFyc2VkVmFsdWVzLT5wcmVwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPnByZXBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAg
cmV0dXJuIFBhZ2VTaXplOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOwpAQCAtMjkz
NCw3ICsyOTEwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb0Nsb3NlUXVvdGU6CiAg
ICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9uZToKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVO
b3JtYWw6Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykgewogICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQcmltaXRp
dmVTdHJpbmdWYWx1ZSh2YWwpOwpAQCAtMjk3NSw3ICsyOTUxLDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUF0dHIoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogICAg
IGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgYXR0
ck5hbWUgPSBhdHRyTmFtZS5sb3dlcigpOwogCi0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVWYWx1ZShhdHRyTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19BVFRSKTsKKyAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYXR0ck5hbWUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfQVRUUik7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VCYWNrZ3JvdW5kQ29sb3IoKQpAQCAtMjk4Myw3ICsyOTU5LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcigpCiAgICAgaW50IGlkID0gbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4
dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwg
aWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yIHx8CiAgICAg
ICAgIChpZCA+PSBDU1NWYWx1ZUdyZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQgJiYgIW1f
c3RyaWN0KSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGlkKTsKICAgICByZXR1cm4gcGFyc2VDb2xvcigpOwogfQogCkBAIC0zMDE2LDcgKzI5
OTIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9u
WChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdAogICAgICAgICAgICAgcGVyY2VudCA9IDEw
MDsKICAgICAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDZW50ZXIpCiAgICAgICAgICAgICBw
ZXJjZW50ID0gNTA7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUo
cGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQogICAgIGlmICh2YWxpZFVuaXQodmFsdWVMaXN0LT5j
dXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlTGlzdC0+Y3VycmVudCgpKTsKQEAgLTMw
MzIsNyArMzAwOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0CiAgICAgICAgICAgICBwZXJj
ZW50ID0gMTAwOwogICAgICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNlbnRlcikKICAgICAg
ICAgICAgIHBlcmNlbnQgPSA1MDsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVh
dGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1
ZUxpc3QtPmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoLCBtX3N0cmljdCkpCiAgICAgICAg
IHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVMaXN0LT5jdXJyZW50KCkp
OwpAQCAtMzA2NSw3ICszMDQxLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHYKICAgICAgICAg
ICAgIGN1bXVsYXRpdmVGbGFncyB8PSBBbWJpZ3VvdXNGaWxsUG9zaXRpb247CiAgICAgICAgICAg
ICBpbmRpdmlkdWFsRmxhZyA9IEFtYmlndW91c0ZpbGxQb3NpdGlvbjsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OwogICAgIH0KICAgICBpZiAodmFsaWRVbml0KHZhbHVlTGlzdC0+Y3VycmVudCgpLCBGUGVyY2Vu
dCB8IEZMZW5ndGgsIG1fc3RyaWN0KSkgewogICAgICAgICBpZiAoIWN1bXVsYXRpdmVGbGFncykg
ewpAQCAtMzEyMiw3ICszMDk4LDcgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9u
KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsdWUKICAgICAgICAg
Ly8gaXMgc2ltcGx5IDUwJS4gIFRoaXMgaXMgb3VyIGRlZmF1bHQuCiAgICAgICAgIC8vIEZvciBr
ZXl3b3JkcywgdGhlIGtleXdvcmQgd2FzIGVpdGhlciBhbiB4LWtleXdvcmQgKGxlZnQvcmlnaHQp
LCBhIHkta2V5d29yZCAodG9wL2JvdHRvbSksIG9yIGFuIGFtYmlndW91cyBrZXl3b3JkIChjZW50
ZXIpLgogICAgICAgICAvLyBGb3IgbGVmdC9yaWdodC9jZW50ZXIsIHRoZSBkZWZhdWx0IG9mIDUw
JSBpbiB0aGUgeSBpcyBzdGlsbCBjb3JyZWN0LgotICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBv
b2woKS0+Y3JlYXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
CisgICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDUwLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogCiAgICAgaWYgKHZhbHVlMUZsYWcgPT0gWUZp
bGxQb3NpdGlvbiB8fCB2YWx1ZTJGbGFnID09IFhGaWxsUG9zaXRpb24pCiAgICAgICAgIHZhbHVl
MS5zd2FwKHZhbHVlMik7CkBAIC0zMTM1LDIwICszMTExLDIwIEBAIHZvaWQgQ1NTUGFyc2VyOjpw
YXJzZUZpbGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUxLCBSZWZQdHI8Q1NTVmFsdWU+
JiB2YWx1CiAgICAgaW50IGlkID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYg
KGlkID09IENTU1ZhbHVlUmVwZWF0WCkgewogICAgICAgICBtX2ltcGxpY2l0U2hvcnRoYW5kID0g
dHJ1ZTsKLSAgICAgICAgdmFsdWUxID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZVJlcGVhdCk7Ci0gICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb1JlcGVhdCk7CisgICAgICAgIHZhbHVlMSA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdCk7Cisg
ICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vUmVwZWF0KTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRZKSB7CiAgICAgICAgIG1f
aW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICB2YWx1ZTEgPSBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwotICAgICAgICB2YWx1
ZTIgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUmVwZWF0
KTsKKyAgICAgICAgdmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9SZXBlYXQpOworICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXQpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJl
cGVhdCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwg
aWQgPT0gQ1NTVmFsdWVTcGFjZSkKLSAgICAgICAgdmFsdWUxID0gY3NzVmFsdWVQb29sKCktPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHZhbHVlMSA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIHZhbHVlMSA9
IDA7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNjQsMTIgKzMxNDAsMTIgQEAgdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NW
YWx1ZT4mIHZhbHUKICAgICAgICAgaWQgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5pZDsKIAog
ICAgIGlmICh2YWx1ZSAmJiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXQgfHwgaWQgPT0gQ1NTVmFsdWVO
b1JlcGVhdCB8fCBpZCA9PSBDU1NWYWx1ZVJvdW5kIHx8IGlkID09IENTU1ZhbHVlU3BhY2UpKSB7
Ci0gICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
aWQpOworICAgICAgICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoaWQpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIElmIG9ubHkgb25lIHZhbHVlIHdhcyBzcGVjaWZpZWQsIHZhbHVlMiBpcyB0aGUgc2Ft
ZSBhcyB2YWx1ZTEuCiAgICAgICAgIG1faW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAg
ICB2YWx1ZTIgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUxLmdldCgpKS0+Z2V0SWRlbnQoKSk7CisgICAg
ICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlMS5nZXQoKSktPmdldElkZW50KCkpOwogICAg
IH0KIH0KIApAQCAtMzE3OSwxMiArMzE1NSwxMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlRmlsbFNpemUoaW50IHByb3BJZCwgYm9vbCYgYWxsb3dDb21tYSkKICAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogCiAgICAgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvbnRhaW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ292
ZXIpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKTsKIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFy
c2VkVmFsdWUxOwogCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAg
IHBhcnNlZFZhbHVlMSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKTsKKyAgICAgICAgcGFyc2VkVmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmICgh
dmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQsIG1fc3RyaWN0KSkKICAgICAgICAg
ICAgIHJldHVybiAwOwpAQCAtMzIxMCw3ICszMTg2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKGludCBwcm9wSWQsIGJvb2wmIGFsbG93Q29tbWEpCiAK
ICAgICBpZiAoIXBhcnNlZFZhbHVlMikKICAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlMTsKLSAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShwYXJzZWRW
YWx1ZTEucmVsZWFzZSgpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgpKSk7CisgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShwYXJzZWRWYWx1ZTEucmVsZWFz
ZSgpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgpKSk7CiB9CiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKQEAg
LTMyNjEsNyArMzIzNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0eShpbnQg
cHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAgICAgICAgICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZEF0dGFjaG1lbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tBdHRhY2htZW50OgogICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsLT5pZCA9PSBDU1NWYWx1ZVNjcm9sbCB8fCB2YWwtPmlkID09IENTU1ZhbHVlRml4ZWQgfHwg
dmFsLT5pZCA9PSBDU1NWYWx1ZUxvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjdXJy
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMyODAsMTcgKzMyNTYsMTcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmls
bFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWwtPmlk
ID09IENTU1ZhbHVlUGFkZGluZ0JveCB8fCB2YWwtPmlkID09IENTU1ZhbHVlQ29udGVudEJveCB8
fAogICAgICAgICAgICAgICAgICAgICAgICAgKChwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kQ2xpcCB8fCBwcm9wSWQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCkgJiYK
ICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsLT5pZCA9PSBDU1NWYWx1ZVRleHQgfHwgdmFs
LT5pZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
bGlwOgotICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VCYWNrZ3JvdW5kQ2xpcCh2YWwsIGN1
cnJWYWx1ZSwgY3NzVmFsdWVQb29sKCkpKQorICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VC
YWNrZ3JvdW5kQ2xpcCh2YWwsIGN1cnJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbjoKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgdmFsLT5pZCA9PSBDU1NW
YWx1ZVBhZGRpbmdCb3ggfHwgdmFsLT5pZCA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsLT5pZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzMxNiw3ICszMjkyLDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwg
aW50JiBwcm9wSWQyLAogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kQ29tcG9zaXRlOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQ29tcG9zaXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoKHZhbC0+aWQgPj0gQ1NTVmFs
dWVDbGVhciAmJiB2YWwtPmlkIDw9IENTU1ZhbHVlUGx1c0xpZ2h0ZXIpIHx8IHZhbC0+aWQgPT0g
Q1NTVmFsdWVIaWdobGlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9
IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMzM5MSw3ICszMzY3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9y
bWFsIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSkKLSAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwog
ICAgIHJldHVybiAwOwogfQogCkBAIC0zNDA3LDcgKzMzODMsNyBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRmlsbE1vZGUoKQogewogICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRm9yd2FyZHMgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlQmFja3dhcmRzIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJvdGgp
Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzQxNSw3ICszMzkxLDcg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50KCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsK
KyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpOwogICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZJbnRlZ2VyIHwgRk5vbk5lZywgbV9z
dHJpY3QpKQogICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKICAgICByZXR1cm4gMDsKQEAgLTM0MjYsNyArMzQwMiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25OYW1lKCkKICAgICBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVO
b25lIHx8ICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyAmJiBl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+c3RyaW5nLCAibm9uZSIpKSkgewotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KQEAgLTM0MzgsNyAr
MzQxNCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Q
bGF5U3RhdGUoKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJ1bm5pbmcgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlUGF1c2VkKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgcmV0dXJuIDA7CiB9
CiAKQEAgLTM0NDksMTEgKzM0MjUsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZUFuaW1hdGlvblByb3BlcnR5KCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaW50IHJl
c3VsdCA9IGNzc1Byb3BlcnR5SUQodmFsdWUtPnN0cmluZyk7CiAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUocmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShy
ZXN1bHQpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+c3RyaW5nLCAiYWxsIikp
Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQWxsKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUFsbCk7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLT5z
dHJpbmcsICJub25lIikpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICByZXR1cm4gMDsKIH0K
IApAQCAtMzQ5NCw3ICszNDcwLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKCkKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVF
YXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZU91dAogICAgICAgICB8fCB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU3RlcFN0
YXJ0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVN0ZXBFbmQpCi0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKIAog
ICAgIC8vIFdlIG11c3QgYmUgYSBmdW5jdGlvbi4KICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NT
UGFyc2VyVmFsdWU6OkZ1bmN0aW9uKQpAQCAtMzY2NSw3ICszNjQxLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlR3JpZFRyYWNrTGlzdChpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgaWYgKG1fdmFsdWVMaXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMzY3NSw3ICszNjUx
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZFRyYWNrTGlzdChpbnQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0g
dmFsdWUtPmlkID09IENTU1ZhbHVlQXV0byA/IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZSk7CisgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQXV0bykgOiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUp
OwogICAgICAgICB2YWx1ZXMtPmFwcGVuZChwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCkpOwogICAg
ICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQpAQCAtMzcxMSw3ICszNjg3
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSkgewogICAg
ICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGlt
cG9ydGFudCk7CiAgICAgICAgIHJldHVybiB2YWxpZDsKICAgICB9CiAKQEAgLTM3ODEsNyArMzc1
Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwg
Ym9vbCBpbXBvcnRhbnQpCiAKICAgICAgICAgaWYgKG51bUFyZ3MgPT0gREFTSEJPQVJEX1JFR0lP
Tl9TSE9SVF9OVU1fUEFSQU1FVEVSUyB8fCBudW1BcmdzID09IChEQVNIQk9BUkRfUkVHSU9OX1NI
T1JUX05VTV9QQVJBTUVURVJTKjItMSkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgb3JpZ2luYWxs
eSB1c2VkIENTU1ZhbHVlSW52YWxpZCBieSBhY2NpZGVudC4gSXQgbWlnaHQgYmUgbW9yZSBsb2dp
Y2FsIHRvIHVzZSBzb21ldGhpbmcgZWxzZS4KLSAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gYW1vdW50ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUludmFsaWQpOworICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBh
bW91bnQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVJbnZh
bGlkKTsKIAogICAgICAgICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKICAgICAgICAgICAg
IHJlZ2lvbi0+c2V0UmlnaHQoYW1vdW50KTsKQEAgLTM3OTksNyArMzc3NSw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/Ci0gICAg
ICAgICAgICAgICAgICAgIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKSA6CisgICAgICAgICAgICAgICAgICAgIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDoKICAgICAgICAgICAgICAgICAgICAgY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZyk7CiAKICAgICAgICAgICAgICAgICBpZiAoaSA9PSAw
KQpAQCAtMzgyMCw3ICszNzk2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVn
aW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICB9CiAKICAgICBpZiAodmFsaWQp
Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVl
KGZpcnN0UmVnaW9uLnJlbGVhc2UoKSksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5
KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZmlyc3RSZWdpb24ucmVsZWFzZSgp
KSwgaW1wb3J0YW50KTsKIAogICAgIHJldHVybiB2YWxpZDsKIH0KQEAgLTM4NDIsNyArMzgxOCw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VDb3VudGVyQ29udGVudChD
U1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MsIGJvCiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHNlcGFyYXRvcjsKICAgICBpZiAoIWNvdW50ZXJzKQotICAgICAgICBzZXBhcmF0b3IgPSBj
c3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoU3RyaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfU1RSSU5HKTsKKyAgICAgICAgc2VwYXJhdG9yID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoU3RyaW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKICAgICBlbHNlIHsK
ICAgICAgICAgaSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGktPmlWYWx1ZSAhPSAnLCcpCkBAIC0zODU4LDcgKzM4MzQs
NyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQo
Q1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gbGlzdFN0eWxlOwogICAgIGkgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFpKSAvLyBNYWtl
IHRoZSBsaXN0IHN0eWxlIGRlZmF1bHQgZGVjaW1hbAotICAgICAgICBsaXN0U3R5bGUgPSBjc3NW
YWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRGVjaW1hbCk7CisgICAg
ICAgIGxpc3RTdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZURlY2ltYWwpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQYXJz
ZXJWYWx1ZTo6T3BlcmF0b3IgfHwgaS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVy
biAwOwpAQCAtMzg3MywxMCArMzg0OSwxMCBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBsaXN0U3R5bGUgPSBj
c3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGxpc3RTdHlsZUlEKTsKKyAgICAg
ICAgbGlzdFN0eWxlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGxpc3RT
dHlsZUlEKTsKICAgICB9CiAKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVl
KENvdW50ZXI6OmNyZWF0ZShpZGVudGlmaWVyLnJlbGVhc2UoKSwgbGlzdFN0eWxlLnJlbGVhc2Uo
KSwgc2VwYXJhdG9yLnJlbGVhc2UoKSkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoaWRlbnRpZmllci5yZWxlYXNlKCksIGxpc3RTdHlsZS5y
ZWxlYXNlKCksIHNlcGFyYXRvci5yZWxlYXNlKCkpKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBh
cnNlU2hhcGUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCkBAIC0zODk5LDcgKzM4NzUsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0aCA9IGEtPmlkID09IENTU1ZhbHVlQXV0byA/Ci0gICAg
ICAgICAgICBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
bykgOgorICAgICAgICAgICAgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQXV0bykgOgogICAgICAgICAgICAgY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
OwogICAgICAgICBpZiAoaSA9PSAwKQogICAgICAgICAgICAgcmVjdC0+c2V0VG9wKGxlbmd0aCk7
CkBAIC0zOTIxLDcgKzM4OTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaSsrOwogICAgIH0KICAgICBpZiAodmFsaWQp
IHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFs
dWUocmVjdC5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJlY3QucmVsZWFzZSgpKSwgaW1wb3J0YW50
KTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQpAQCAtNDE0MSw3ICs0MTE3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlV3JhcFNoYXBl
KGJvb2wgc2hhcGVJbnNpZGUsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBzaGFwZSA9IHBhcnNl
V3JhcFNoYXBlUG9seWdvbihhcmdzKTsKIAogICAgIGlmIChzaGFwZSkgewotICAgICAgICBhZGRQ
cm9wZXJ0eShzaGFwZUluc2lkZSA/IENTU1Byb3BlcnR5V2Via2l0V3JhcFNoYXBlSW5zaWRlIDog
Q1NTUHJvcGVydHlXZWJraXRXcmFwU2hhcGVPdXRzaWRlLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
VmFsdWUoc2hhcGUucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHko
c2hhcGVJbnNpZGUgPyBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBTaGFwZUluc2lkZSA6IENTU1Byb3Bl
cnR5V2Via2l0V3JhcFNoYXBlT3V0c2lkZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc2hh
cGUucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNDE4MSwxNyArNDE1NywxNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgfSBlbHNl
IGlmIChpZCA9PSBDU1NWYWx1ZUl0YWxpYyB8fCBpZCA9PSBDU1NWYWx1ZU9ibGlxdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAoZm9udC0+c3R5bGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb250LT5zdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAgICAgICAgICAgIGZvbnQtPnN0eWxlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICAgICAgICAgICAg
ICBzdHlsZUltcGxpY2l0ID0gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlkID09IENT
U1ZhbHVlU21hbGxDYXBzKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZvbnQtPnZhcmlhbnQpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBmb250LT52
YXJpYW50ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAg
ICAgICAgICAgICAgZm9udC0+dmFyaWFudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShpZCk7CiAgICAgICAgICAgICAgICAgdmFyaWFudEltcGxpY2l0ID0gZmFsc2U7CiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGlkID49IENTU1ZhbHVlQm9sZCAmJiBpZCA8PSBDU1NWYWx1
ZUxpZ2h0ZXIpIHsKICAgICAgICAgICAgICAgICBpZiAoZm9udC0+d2VpZ2h0KQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9udC0+d2VpZ2h0ID0g
Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgICAgICAg
ICAgZm9udC0+d2VpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
KTsKICAgICAgICAgICAgICAgICB3ZWlnaHRJbXBsaWNpdCA9IGZhbHNlOwogICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKQEAgLTQyMTgsNyArNDE5NCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAg
ICAgICAgdmFsID0gQ1NTVmFsdWU5MDA7CiAKICAgICAgICAgICAgIGlmICh2YWwpIHsKLSAgICAg
ICAgICAgICAgICBmb250LT53ZWlnaHQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbCk7CisgICAgICAgICAgICAgICAgZm9udC0+d2VpZ2h0ID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbCk7CiAgICAgICAgICAgICAgICAgd2VpZ2h0SW1w
bGljaXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHZhbGlk
ID0gZmFsc2U7CkBAIC00MjM1LDE2ICs0MjExLDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZv
bnQoYm9vbCBpbXBvcnRhbnQpCiAKICAgICAvLyBTZXQgdW5kZWZpbmVkIHZhbHVlcyB0byBkZWZh
dWx0LgogICAgIGlmICghZm9udC0+c3R5bGUpCi0gICAgICAgIGZvbnQtPnN0eWxlID0gY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAg
IGZvbnQtPnN0eWxlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9ybWFsKTsKICAgICBpZiAoIWZvbnQtPnZhcmlhbnQpCi0gICAgICAgIGZvbnQtPnZhcmlh
bnQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFs
KTsKKyAgICAgICAgZm9udC0+dmFyaWFudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAgICAgaWYgKCFmb250LT53ZWlnaHQpCi0gICAgICAg
IGZvbnQtPndlaWdodCA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOworICAgICAgICBmb250LT53ZWlnaHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwogCiAgICAgLy8gTm93IGEgZm9udCBz
aXplIF9tdXN0XyBjb21lLgogICAgIC8vIDxhYnNvbHV0ZS1zaXplPiB8IDxyZWxhdGl2ZS1zaXpl
PiB8IDxsZW5ndGg+IHwgPHBlcmNlbnRhZ2U+IHwgaW5oZXJpdAogICAgIGlmICh2YWx1ZS0+aWQg
Pj0gQ1NTVmFsdWVYeFNtYWxsICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZUxhcmdlcikKLSAgICAg
ICAgZm9udC0+c2l6ZSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKTsKKyAgICAgICAgZm9udC0+c2l6ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgIGVsc2UgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxl
bmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgbV9zdHJpY3QpKQogICAgICAgICBmb250LT5zaXpl
ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICB2YWx1ZSA9IG1fdmFs
dWVMaXN0LT5uZXh0KCk7CkBAIC00MjcwLDcgKzQyNDYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgIH0KIAogICAgIGlmICghZm9udC0+bGluZUhlaWdo
dCkKLSAgICAgICAgZm9udC0+bGluZUhlaWdodCA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICBmb250LT5saW5lSGVpZ2h0ID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKIAog
ICAgIC8vIEZvbnQgZmFtaWx5IG11c3QgY29tZSBub3cuCiAgICAgZm9udC0+ZmFtaWx5ID0gcGFy
c2VGb250RmFtaWx5KCk7CkBAIC00MzExLDcgKzQyODcsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVl
TGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogICAgICAgICAgICAgaWYgKGN1cnJG
YW1pbHkpCiAgICAgICAgICAgICAgICAgY3VyckZhbWlseS0+YXBwZW5kU3BhY2VTZXBhcmF0ZWQo
dmFsdWUtPnN0cmluZy5jaGFyYWN0ZXJzLCB2YWx1ZS0+c3RyaW5nLmxlbmd0aCk7CiAgICAgICAg
ICAgICBlbHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIFJlZlB0cjxGb250RmFtaWx5VmFsdWU+IG5ld0ZhbWls
eSA9IEZvbnRGYW1pbHlWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5zdHJpbmcpOwogICAgICAgICAgICAg
ICAgIGN1cnJGYW1pbHkgPSBuZXdGYW1pbHkuZ2V0KCk7CkBAIC00MzY0LDEyICs0MzQwLDEyIEBA
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRTdHlsZShib29sIGltcG9ydGFudCkKICAgICAgICAg
aWYgKCFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAg
ICAgICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsLT5pZCA9PSBDU1NW
YWx1ZUl0YWxpYyB8fCB2YWwtPmlkID09IENTU1ZhbHVlT2JsaXF1ZSkKLSAgICAgICAgICAgICAg
ICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
LT5pZCk7CisgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWwtPmlk
ID09IENTU1ZhbHVlQWxsICYmICF2YWx1ZXMpIHsKICAgICAgICAgICAgICAgICAvLyAnYWxsJyBp
cyBvbmx5IGFsbG93ZWQgaW4gQGZvbnQtZmFjZSBhbmQgd2l0aCBubyBvdGhlciB2YWx1ZXMuIE1h
a2UgYSB2YWx1ZSBsaXN0IHRvCiAgICAgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCB3ZSBh
cmUgaW4gdGhlIEBmb250LWZhY2UgY2FzZS4KICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NW
YWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwor
ICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZh
bC0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywn
KSB7CiAgICAgICAgICAgICBleHBlY3RDb21tYSA9IGZhbHNlOwpAQCAtNDQxMSwxMiArNDM4Nywx
MiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250VmFyaWFudChib29sIGltcG9ydGFudCkKICAg
ICAgICAgaWYgKCFleHBlY3RDb21tYSkgewogICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVl
OwogICAgICAgICAgICAgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgdmFsLT5pZCA9
PSBDU1NWYWx1ZVNtYWxsQ2FwcykKLSAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CisgICAgICAgICAgICAg
ICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
LT5pZCk7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWwtPmlkID09IENTU1ZhbHVlQWxsICYmICF2
YWx1ZXMpIHsKICAgICAgICAgICAgICAgICAvLyAnYWxsJyBpcyBvbmx5IGFsbG93ZWQgaW4gQGZv
bnQtZmFjZSBhbmQgd2l0aCBubyBvdGhlciB2YWx1ZXMuIE1ha2UgYSB2YWx1ZSBsaXN0IHRvCiAg
ICAgICAgICAgICAgICAgLy8gaW5kaWNhdGUgdGhhdCB3ZSBhcmUgaW4gdGhlIEBmb250LWZhY2Ug
Y2FzZS4KICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1h
U2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7CiAgICAgICAgICAgICBleHBl
Y3RDb21tYSA9IGZhbHNlOwpAQCAtNDQ1OSwxNyArNDQzNSwxNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VGb250V2VpZ2h0KGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgZXhwZWN0Q29tbWEg
PSB0cnVlOwogICAgICAgICAgICAgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbC0+aWQgPj0gQ1NTVmFsdWVOb3Jt
YWwgJiYgdmFsLT5pZCA8PSBDU1NWYWx1ZTkwMCkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2Vk
VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwor
ICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWwtPmlk
ID09IENTU1ZhbHVlQWxsICYmICF2YWx1ZXMpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gJ2Fs
bCcgaXMgb25seSBhbGxvd2VkIGluIEBmb250LWZhY2UgYW5kIHdpdGggbm8gb3RoZXIgdmFsdWVz
LiBNYWtlIGEgdmFsdWUgbGlzdCB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB0
aGF0IHdlIGFyZSBpbiB0aGUgQGZvbnQtZmFjZSBjYXNlLgogICAgICAgICAgICAgICAgICAgICB2
YWx1ZXMgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZFVuaXQodmFsLCBGSW50ZWdlciB8IEZOb25O
ZWcsIGZhbHNlKSkgewogICAgICAgICAgICAgICAgIGludCB3ZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHZhbC0+ZlZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoISh3ZWlnaHQgJSAxMDApICYm
IHdlaWdodCA+PSAxMDAgJiYgd2VpZ2h0IDw9IDkwMCkKLSAgICAgICAgICAgICAgICAgICAgcGFy
c2VkVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
MTAwICsgd2VpZ2h0IC8gMTAwIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMTAwICsgd2Vp
Z2h0IC8gMTAwIC0gMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAodmFsLT51
bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWwtPmlWYWx1ZSA9PSAnLCcpIHsK
ICAgICAgICAgICAgIGV4cGVjdENvbW1hID0gZmFsc2U7CkBAIC01MDgzLDcgKzUwNTksNyBAQCBQ
YXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlKQogICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5zcGFyZW50OwogICAg
IGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZSA/IHZhbHVlIDogbV92YWx1ZUxpc3QtPmN1
cnJlbnQoKSwgYykpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlQ29sb3JWYWx1ZShjKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
Q29sb3JWYWx1ZShjKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3JGcm9tVmFsdWUo
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBSR0JBMzImIGMpCkBAIC01MjI4LDcgKzUyMDQsNyBAQCBz
dHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKIAogICAgIHZvaWQgY29tbWl0U3R5bGUoQ1NTUGFy
c2VyVmFsdWUqIHYpCiAgICAgewotICAgICAgICBzdHlsZSA9IG1fcGFyc2VyLT5jc3NWYWx1ZVBv
b2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHYtPmlkKTsKKyAgICAgICAgc3R5bGUgPSBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodi0+aWQpOwogICAgICAgICBhbGxvd1N0
eWxlID0gZmFsc2U7CiAgICAgICAgIGlmIChhbGxvd1gpCiAgICAgICAgICAgICBhbGxvd0JyZWFr
ID0gZmFsc2U7CkBAIC01Mjk4LDcgKzUyNzQsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgaQog
ICAgICAgICAgICAgaWYgKGlzQ29sb3IpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQu
YWxsb3dDb2xvcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAg
ICAgcGFyc2VkQ29sb3IgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bC0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoIXBhcnNlZENvbG9yKQpAQCAtNTM1Miw3ICs1MzI4LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlUmVmbGVjdChpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICB2YWwgPSBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb2Zmc2V0Owog
ICAgIGlmICghdmFsKQotICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFs
dWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgIG9mZnNldCA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAg
IGVsc2UgewogICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWwsIEZMZW5ndGggfCBGUGVyY2VudCwg
bV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTM5Myw3ICs1MzY5LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkK
ICAgICAgICAgICAgICAgICBuZWdhdGl2ZUZsZXggPSBhcmctPmZWYWx1ZTsKICAgICAgICAgICAg
IGVsc2UgaWYgKCFhcmctPmZWYWx1ZSkgewogICAgICAgICAgICAgICAgIC8vIGZsZXgoKSBvbmx5
IGFsbG93cyBhIHByZWZlcnJlZCBzaXplIG9mIDAgKHNhbnMgdW5pdHMpIGlmIHRoZSBwb3NpdGl2
ZSBhbmQgbmVnYXRpdmUgZmxleCB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW4gc2V0LgotICAgICAg
ICAgICAgICAgIHByZWZlcnJlZFNpemUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoMCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgcHJlZmVycmVkU2l6
ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UFgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IGFs
bG93IDMgbnVtYmVycyB3aXRob3V0IHVuaXRzIGlmIHRoZSBsYXN0IHZhbHVlIGlzIDAuIEUuZy4s
IGZsZXgoMSAxIDEpIGlzIGludmFsaWQuCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNTQxMiw3ICs1Mzg4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxleChpbnQgcHJvcElk
LCBib29sIGltcG9ydGFudCkKICAgICBpZiAobmVnYXRpdmVGbGV4ID09IHVuc2V0VmFsdWUpCiAg
ICAgICAgIG5lZ2F0aXZlRmxleCA9IDA7CiAgICAgaWYgKCFwcmVmZXJyZWRTaXplKQotICAgICAg
ICBwcmVmZXJyZWRTaXplID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICBwcmVmZXJyZWRTaXplID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAKICAgICBSZWZQ
dHI8Q1NTRmxleFZhbHVlPiBmbGV4ID0gQ1NTRmxleFZhbHVlOjpjcmVhdGUoY2xhbXBUb0Zsb2F0
KHBvc2l0aXZlRmxleCksIGNsYW1wVG9GbG9hdChuZWdhdGl2ZUZsZXgpLCBwcmVmZXJyZWRTaXpl
KTsKICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGZsZXgucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwpA
QCAtNTUyMCw3ICs1NDk2LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKICAg
ICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcGFyc2VyLT5hZGRQcm9wZXJ0eShwcm9wSWQs
IHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJzZXItPmFk
ZFByb3BlcnR5KHByb3BJZCwgcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSW1wbGljaXRJ
bml0aWFsVmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICAgICAgICAgIHBhcnNlci0+YWRk
UHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1
ZSgpLCBpbXBvcnRhbnQsIHRydWUpOwogICAgIH0KIAogICAgIGJvb2wgbV9jYW5BZHZhbmNlOwpA
QCAtNTYyMCwxNCArNTU5NiwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZVJl
cGVhdChSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzZWNvbmRWYWx1ZTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0gbV92YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKICAgICBpZiAoaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdvcmQodmFsLT5pZCkp
Ci0gICAgICAgIGZpcnN0VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKHZhbC0+aWQpOworICAgICAgICBmaXJzdFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgdmFsID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBpZiAodmFsKSB7CiAgICAg
ICAgIGlmIChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkKLSAgICAgICAgICAg
IHNlY29uZFZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwt
PmlkKTsKKyAgICAgICAgICAgIHNlY29uZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICBlbHNlIGlmICghaW5TaG9ydGhhbmQoKSkg
ewogICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9ydGhhbmQgdGhlbiB3
ZSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTU2MzksNyArNTYx
NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0KFJlZlB0cjxDU1NW
YWx1ZT4mIHJlc3VsdCkKICAgICB9IGVsc2UKICAgICAgICAgc2Vjb25kVmFsdWUgPSBmaXJzdFZh
bHVlOwogCi0gICAgcmVzdWx0ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKFBhaXI6OmNy
ZWF0ZShmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZSkpOworICAgIHJlc3VsdCA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01NzA2LDcgKzU2ODIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHF1YWQtPnNldExlZnQobV9sZWZ0KTsKIAogICAgICAgICAvLyBNYWtlIG91ciBuZXcgYm9y
ZGVyIGltYWdlIHZhbHVlIG5vdy4KLSAgICAgICAgcmV0dXJuIENTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZTo6Y3JlYXRlKG1fcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUocXVhZC5y
ZWxlYXNlKCkpLCBtX2ZpbGwpOworICAgICAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlOjpjcmVhdGUoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpLCBt
X2ZpbGwpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU3NzcsNyArNTc1Myw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsOwogICAgICAgICBp
ZiAodi0+aWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsID0gbV9wYXJzZXItPmNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodi0+aWQpOworICAgICAgICAgICAg
dmFsID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHYtPmlkKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgdmFsID0gbV9wYXJzZXItPmNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2KTsKIApAQCAtNTgyMyw3ICs1Nzk5LDcgQEAgcHVibGljOgogICAgICAgICBxdWFk
LT5zZXRMZWZ0KG1fbGVmdCk7CiAKICAgICAgICAgLy8gTWFrZSBvdXIgbmV3IHZhbHVlIG5vdy4K
LSAgICAgICAgcmV0dXJuIG1fcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUocXVh
ZC5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
cXVhZC5yZWxlYXNlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU5MzgsMTAgKzU5MTQsMTAg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzKGludCBwcm9wSWQsIGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBjb21wbGV0ZUJvcmRlclJhZGlpKHJhZGlpWzFdKTsKIAogICAgIElt
cGxpY2l0U2NvcGUgaW1wbGljaXRTY29wZSh0aGlzLCBQcm9wZXJ0eUltcGxpY2l0KTsKLSAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsIGNzc1ZhbHVlUG9vbCgp
LT5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUocmFkaWlbMF1bMF0ucmVsZWFzZSgpLCByYWRpaVsx
XVswXS5yZWxlYXNlKCkpKSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoUGFpcjo6
Y3JlYXRlKHJhZGlpWzBdWzFdLnJlbGVhc2UoKSwgcmFkaWlbMV1bMV0ucmVsZWFzZSgpKSksIGlt
cG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJh
ZGl1cywgY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShyYWRpaVswXVsy
XS5yZWxlYXNlKCksIHJhZGlpWzFdWzJdLnJlbGVhc2UoKSkpLCBpbXBvcnRhbnQpOwotICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgY3NzVmFsdWVQb29s
KCktPmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShyYWRpaVswXVszXS5yZWxlYXNlKCksIHJhZGlp
WzFdWzNdLnJlbGVhc2UoKSkpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoUGFpcjo6
Y3JlYXRlKHJhZGlpWzBdWzBdLnJlbGVhc2UoKSwgcmFkaWlbMV1bMF0ucmVsZWFzZSgpKSksIGlt
cG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1
cywgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHJhZGlpWzBdWzFdLnJl
bGVhc2UoKSwgcmFkaWlbMV1bMV0ucmVsZWFzZSgpKSksIGltcG9ydGFudCk7CisgICAgYWRkUHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHJhZGlpWzBdWzJdLnJlbGVhc2UoKSwgcmFkaWlbMV1b
Ml0ucmVsZWFzZSgpKSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShQYWlyOjpj
cmVhdGUocmFkaWlbMF1bM10ucmVsZWFzZSgpLCByYWRpaVsxXVszXS5yZWxlYXNlKCkpKSwgaW1w
b3J0YW50KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTk0OSw3ICs1OTI1LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQXNwZWN0UmF0aW8oYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgdW5z
aWduZWQgbnVtID0gbV92YWx1ZUxpc3QtPnNpemUoKTsKICAgICBpZiAobnVtID09IDEgJiYgbV92
YWx1ZUxpc3QtPnZhbHVlQXQoMCktPmlkID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvLCBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CisgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QXNwZWN0UmF0aW8sIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTU5OTksOCArNTk3NSw4IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZUNvdW50ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUoY291bnRlck5hbWUucmVsZWFzZSgpLAotICAgICAgICAg
ICAgICAgICAgICBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoaSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUoY291bnRlck5hbWUucmVsZWFzZSgpLAor
ICAgICAgICAgICAgICAgICAgICBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpKSk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBJRDsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTYwMTcsMjAgKzU5
OTMsMjAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ291bnRlcihpbnQgcHJvcElkLCBpbnQgZGVm
YXVsdFZhbHVlLCBib29sIGltcG9ydGFudCkKIH0KIAogLy8gVGhpcyBzaG91bGQgZ28gYXdheSBv
bmNlIHdlIGRyb3Agc3VwcG9ydCBmb3IgLXdlYmtpdC1ncmFkaWVudAotc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFy
c2VyVmFsdWUqIGEsIGJvb2wgaG9yaXpvbnRhbCwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wp
CitzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VEZXByZWNhdGVkR3Jh
ZGllbnRQb2ludChDU1NQYXJzZXJWYWx1ZSogYSwgYm9vbCBob3Jpem9udGFsKQogewogICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmVzdWx0OwogICAgIGlmIChhLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgaWYgKChlcXVhbElnbm9yaW5nQ2Fz
ZShhLT5zdHJpbmcsICJsZWZ0IikgJiYgaG9yaXpvbnRhbCkKICAgICAgICAgICAgIHx8IChlcXVh
bElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJ0b3AiKSAmJiAhaG9yaXpvbnRhbCkpCi0gICAgICAg
ICAgICByZXN1bHQgPSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKDAuLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAg
ICAgICAgIGVsc2UgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJyaWdodCIpICYm
IGhvcml6b250YWwpCiAgICAgICAgICAgICAgICAgIHx8IChlcXVhbElnbm9yaW5nQ2FzZShhLT5z
dHJpbmcsICJib3R0b20iKSAmJiAhaG9yaXpvbnRhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKDEwMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSk7CisgICAgICAgICAgICByZXN1bHQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJjZW50ZXIiKSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAg
IH0gZWxzZSBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiB8fCBh
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgcmVz
dWx0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShhLT5mVmFsdWUsIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KGEtPnVuaXQpKTsKKyAgICAgICAgcmVzdWx0ID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZTo6VW5pdFR5cGVzPihhLT51bml0KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IApAQCAtNjA1NSwxMyArNjAzMSwxMyBAQCBzdGF0aWMgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudENvbG9yU3RvcChDU1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDUwogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhLT5m
dW5jdGlvbi0+bmFtZSwgImZyb20oIikpCi0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBw
LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOworICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBwLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
VmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgc3Rv
cC5tX3Bvc2l0aW9uID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOwogCiAgICAgICAgIGludCBpZCA9IGFyZ3MtPmN1cnJlbnQoKS0+
aWQ7CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgKGlkID49IENTU1Zh
bHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVu
dSkKLSAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHAtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgc3RvcC5tX2NvbG9yID0gcC0+cGFyc2VDb2xvcihhcmdzLT5jdXJyZW50KCkpOwogICAgICAg
ICBpZiAoIXN0b3AubV9jb2xvcikKQEAgLTYwNzUsOSArNjA1MSw5IEBAIHN0YXRpYyBib29sIHBh
cnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciogcCwgQ1NTUGFyc2VyVmFs
dWUqIGEsIENTCiAKICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHN0b3BBcmcgPSBhcmdzLT5jdXJy
ZW50KCk7CiAgICAgICAgIGlmIChzdG9wQXJnLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IHAtPmNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVWYWx1ZShzdG9wQXJnLT5mVmFsdWUgLyAxMDAsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0b3BBcmctPmZWYWx1ZSAvIDEwMCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwogICAgICAgICBlbHNlIGlmIChzdG9wQXJnLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0g
cC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKHN0b3BBcmctPmZWYWx1ZSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3RvcEFyZy0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtNjA4OCw3ICs2MDY0LDcgQEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGll
bnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1MKICAgICAgICAg
c3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaW50IGlkID0gc3RvcEFyZy0+aWQ7CiAg
ICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgKGlkID49IENTU1ZhbHVlQXF1
YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVudSkKLSAg
ICAgICAgICAgIHN0b3AubV9jb2xvciA9IHAtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoaWQpOworICAgICAgICAgICAgc3RvcC5tX2NvbG9yID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3Rv
cC5tX2NvbG9yID0gcC0+cGFyc2VDb2xvcihzdG9wQXJnKTsKICAgICAgICAgaWYgKCFzdG9wLm1f
Y29sb3IpCkBAIC02MTM4LDcgKzYxMTQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNh
dGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAg
IGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRp
ZW50UG9pbnQoYSwgdHJ1ZSwgY3NzVmFsdWVQb29sKCkpOworICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KGEsIHRydWUpOwog
ICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldEZp
cnN0WChwb2ludC5yZWxlYXNlKCkpOwpAQCAtNjE0Nyw3ICs2MTIzLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0
LCBSZWZQdHI8Q1MKICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIGlmICghYSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChh
LCBmYWxzZSwgY3NzVmFsdWVQb29sKCkpOworICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3Jh
ZGllbnRQb2ludChhLCBmYWxzZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHBvaW50LnJlbGVhc2UoKSk7CkBAIC02MTc1LDcg
KzYxNTEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFy
c2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAgIGEgPSBhcmdzLT5uZXh0KCk7
CiAgICAgaWYgKCFhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQgPSBwYXJzZURl
cHJlY2F0ZWRHcmFkaWVudFBvaW50KGEsIHRydWUsIGNzc1ZhbHVlUG9vbCgpKTsKKyAgICBwb2lu
dCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgdHJ1ZSk7CiAgICAgaWYgKCFwb2lu
dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJlc3VsdC0+c2V0U2Vjb25kWChwb2ludC5y
ZWxlYXNlKCkpOwpAQCAtNjE4NCw3ICs2MTYwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1MK
ICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIGlmICghYSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChhLCBmYWxzZSwgY3Nz
VmFsdWVQb29sKCkpOworICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChh
LCBmYWxzZSk7CiAgICAgaWYgKCFwb2ludCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJl
c3VsdC0+c2V0U2Vjb25kWShwb2ludC5yZWxlYXNlKCkpOwpAQCAtNjIyOCw3ICs2MjA0LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlz
dCogdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRnJvbVNpZGVLZXl3b3JkKENTU1BhcnNl
clZhbHVlKiBhLCBib29sJiBpc0hvcml6b250YWwsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29s
KQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRnJvbVNpZGVLZXl3
b3JkKENTU1BhcnNlclZhbHVlKiBhLCBib29sJiBpc0hvcml6b250YWwpCiB7CiAgICAgaWYgKGEt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC02MjQ1LDE0ICs2MjIxLDE0IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSogYSwgYm9vCiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGEtPmlkKTsKKyAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGEtPmlkKTsKIH0KIAogc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZChDU1NQ
YXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKIHsKICAgICBpbnQgaWQgPSB2YWx1ZS0+
aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVB
cXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8
IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQotICAgICAgICByZXR1cm4gcC0+Y3NzVmFsdWVQ
b29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwogCiAgICAgcmV0dXJuIHAtPnBhcnNl
Q29sb3IodmFsdWUpOwogfQpAQCAtNjI4Myw3ICs2MjU5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlTGluZWFyR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NWYWwKIAogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxvY2F0aW9uOwogICAg
ICAgICBib29sIGlzSG9yaXpvbnRhbCA9IGZhbHNlOwotICAgICAgICBpZiAoKGxvY2F0aW9uID0g
dmFsdWVGcm9tU2lkZUtleXdvcmQoYSwgaXNIb3Jpem9udGFsLCBjc3NWYWx1ZVBvb2woKSkpKSB7
CisgICAgICAgIGlmICgobG9jYXRpb24gPSB2YWx1ZUZyb21TaWRlS2V5d29yZChhLCBpc0hvcml6
b250YWwpKSkgewogICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkKICAgICAgICAgICAgICAg
ICBzdGFydFggPSBsb2NhdGlvbjsKICAgICAgICAgICAgIGVsc2UKQEAgLTYyOTEsNyArNjI2Nyw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlz
dCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAKICAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0
KCk7CiAgICAgICAgICAgICBpZiAoYSkgewotICAgICAgICAgICAgICAgIGlmICgobG9jYXRpb24g
PSB2YWx1ZUZyb21TaWRlS2V5d29yZChhLCBpc0hvcml6b250YWwsIGNzc1ZhbHVlUG9vbCgpKSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoKGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQo
YSwgaXNIb3Jpem9udGFsKSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRh
bCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0WCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MzEwLDcgKzYyODYsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlz
dCwgUmVmUHRyPENTU1ZhbAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFzdGFydFggJiYgIXN0
YXJ0WSkKLSAgICAgICAgICAgIHN0YXJ0WSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVUb3ApOworICAgICAgICAgICAgc3RhcnRZID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKIAogICAgICAgICByZXN1bHQt
PnNldEZpcnN0WChzdGFydFgucmVsZWFzZSgpKTsKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFko
c3RhcnRZLnJlbGVhc2UoKSk7CkBAIC02MzgyLDcgKzYzNTgsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRy
PENTU1ZhbAogICAgICAgICBzd2l0Y2ggKGEtPmlkKSB7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVD
aXJjbGU6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVFbGxpcHNlOgotICAgICAgICAgICAgc2hhcGVW
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYS0+aWQpOworICAg
ICAgICAgICAgc2hhcGVWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShhLT5pZCk7CiAgICAgICAgICAgICBmb3VuZFZhbHVlID0gdHJ1ZTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VzdFNpZGU6CkBAIC02MzkxLDcgKzYzNjcs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VSYWRpYWxHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxp
c3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTU1ZhbAogICAgICAgICBjYXNlIENTU1ZhbHVlRmFydGhl
c3RDb3JuZXI6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVDb250YWluOgogICAgICAgICBjYXNlIENT
U1ZhbHVlQ292ZXI6Ci0gICAgICAgICAgICBzaXplVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKGEtPmlkKTsKKyAgICAgICAgICAgIHNpemVWYWx1ZSA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhLT5pZCk7CiAgICAgICAgICAgICBmb3Vu
ZFZhbHVlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC02NTY3LDkg
KzY1NDMsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDcm9zc2ZhZGUoQ1NTUGFyc2VyVmFsdWVM
aXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWx1ZT4mCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpCi0gICAgICAgIHBlcmNlbnRhZ2UgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoY2xh
bXBUbzxkb3VibGU+KGEtPmZWYWx1ZSAvIDEwMCwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKTsKKyAgICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGNsYW1wVG88ZG91YmxlPihhLT5mVmFsdWUgLyAxMDAsIDAsIDEpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgZWxzZSBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikKLSAgICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLT5j
cmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oYS0+ZlZhbHVlLCAwLCAxKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICBwZXJjZW50YWdlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoY2xhbXBUbzxkb3VibGU+KGEtPmZWYWx1ZSwgMCwgMSksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNjg0NSw3ICs2ODIxLDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUN1c3RvbUZpbHRlcihDU1NQYXJzZXJWYWx1ZSogdmEKICAgICB3aGlsZSAo
KGFyZyA9IGFyZ3NMaXN0LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4g
dmFsdWU7CiAgICAgICAgIGlmIChhcmctPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAg
IHZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOworICAgICAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgZWxzZSBpZiAoYXJnLT51bml0ID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICBLVVJMIHNoYWRlclVSTCA9IG1f
c3R5bGVTaGVldCA/IG1fc3R5bGVTaGVldC0+Y29tcGxldGVVUkwoYXJnLT5zdHJpbmcpIDogS1VS
TCgpOwogICAgICAgICAgICAgdmFsdWUgPSBXZWJLaXRDU1NTaGFkZXJWYWx1ZTo6Y3JlYXRlKHNo
YWRlclVSTC5zdHJpbmcoKSk7CkBAIC02ODcyLDcgKzY4NDgsNyBAQCBQYXNzUmVmUHRyPFdlYktp
dENTU0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tRmlsdGVyKENTU1BhcnNlclZh
bHVlKiB2YQogICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gd2UgY2Fu
IG9ubHkgYWNjZXB0IHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlcy4KICAgICAgICAgaWYgKGludGVn
ZXJWYWx1ZSA8IDEpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbWVzaFNpemVMaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGludGVnZXJWYWx1ZSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgbWVzaFNpemVMaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW50ZWdlclZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICBhcmdzTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICAK
QEAgLTY4ODEsMTIgKzY4NTcsMTIgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZUN1c3RvbUZpbHRlcihDU1NQYXJzZXJWYWx1ZSogdmEKICAgICAKICAg
ICBpZiAoKGFyZyA9IGFyZ3NMaXN0LT5jdXJyZW50KCkpICYmIChhcmctPmlkID09IENTU1ZhbHVl
Qm9yZGVyQm94IHx8IGFyZy0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nQm94CiAgICAgICAgIHx8IGFy
Zy0+aWQgPT0gQ1NTVmFsdWVDb250ZW50Qm94IHx8IGFyZy0+aWQgPT0gQ1NTVmFsdWVGaWx0ZXJC
b3gpKSB7Ci0gICAgICAgIG1lc2hTaXplTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoYXJnLT5pZCkpOworICAgICAgICBtZXNoU2l6ZUxpc3QtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJnLT5pZCkpOwogICAgICAg
ICBhcmdzTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICAKICAgICBpZiAoKGFyZyA9IGFyZ3NMaXN0
LT5jdXJyZW50KCkpICYmIGFyZy0+aWQgPT0gQ1NTVmFsdWVEZXRhY2hlZCkgewotICAgICAgICBt
ZXNoU2l6ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KGFyZy0+aWQpKTsKKyAgICAgICAgbWVzaFNpemVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGFyZy0+aWQpKTsKICAgICAgICAgYXJnc0xpc3QtPm5leHQo
KTsKICAgICB9CiAgICAgCkBAIC02OTIxLDcgKzY4OTcsNyBAQCBQYXNzUmVmUHRyPFdlYktpdENT
U0ZpbHRlclZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tRmlsdGVyKENTU1BhcnNlclZhbHVl
KiB2YQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQo
YXJnLCBGTnVtYmVyLCB0cnVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
ICAgIHBhcmFtVmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGFy
Zy0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAg
cGFyYW1WYWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhcmctPmZW
YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGFyZ3NM
aXN0LT5uZXh0KCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwYXJhbVZhbHVlTGlzdC0+bGVu
Z3RoKCkgfHwgcGFyYW1WYWx1ZUxpc3QtPmxlbmd0aCgpID4gNCkKQEAgLTY5NzAsNyArNjk0Niw3
IEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWls
dGluRmlsdGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTY5OTAsNyArNjk2Niw3IEBAIFBhc3NSZWZQdHI8V2Vi
S2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRz
KENTU1BhcnNlCiAgICAgICAgICAgICBpZiAoYW1vdW50IDwgbWluQWxsb3dlZCB8fCBhbW91bnQg
PiBtYXhBbGxvd2VkKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBm
aWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShhbW91bnQsIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOwor
ICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVl
LT51bml0KSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTcwNTQsNyAr
NzAzMCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRmlsdGVy
KCkKICAgICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJ
KSB7CiAgICAgICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHJlZmVyZW5jZUZp
bHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJW
YWx1ZTo6UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChyZWZlcmVuY2VGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXJWYWx1
ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVy
VmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgY29uc3QgQ1NTUGFyc2VyU3RyaW5nIG5hbWUgPSB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWU7
CiAgICAgICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXJndW1lbnRDb3VudCA9IDE7CkBAIC03MTIz
LDcgKzcwOTksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlQXV0bykgewotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsK
KyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC03MTMxLDkgKzcxMDcsOSBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhy
ZWFkKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGlmICghaW5wdXRQcm9wZXJ0eS5p
c0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCF2YWxpZEZsb3dOYW1lKGlucHV0UHJvcGVydHkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOwogICAgIH0gZWxzZQotICAgICAgICBhZGRQcm9w
ZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50KTsK
IAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzE1NCwxNSArNzEzMCwxNSBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VSZWdpb25UaHJlYWQoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQot
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1w
b3J0YW50KTsKICAgICBlbHNlIHsKICAgICAgICAgU3RyaW5nIGlucHV0UHJvcGVydHkgPSBTdHJp
bmcodmFsdWUtPnN0cmluZyk7CiAgICAgICAgIGlmICghaW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGlmICghdmFsaWRGbG93TmFtZShpbnB1dFByb3BlcnR5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQs
IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGlucHV0UHJvcGVydHksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9uZSksIGltcG9ydGFudCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC03MjU4LDcg
KzcyMzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHlsZShib29sIGlt
cG9ydGFudCkKICAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAg
ICAgICAgIGlmIChmaWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hv
cnRoYW5kKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGNzc1ZhbHVlUG9v
bCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50KTsKKyAg
ICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUs
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBv
cnRhbnQpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC03MjY2LDExICs3MjQyLDExIEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAo
dmFsdWUtPmlkID09IENTU1ZhbHVlT3BlbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsZWQp
IHsKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGZpbGwgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7CisgICAgICAgICAgICBmaWxsID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPmlkID09
IENTU1ZhbHVlRG90IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNpcmNsZSB8fCB2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVEb3VibGVDaXJjbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlVHJpYW5nbGUg
fHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU2VzYW1lKSB7CiAgICAgICAgICAgICBpZiAoc2hhcGUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgc2hhcGUgPSBjc3NW
YWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAg
ICBzaGFwZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQp
OwogICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFuZCgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBlbHNlCkBAIC03Mzc2LDcgKzczNTIsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VGb250RmVhdHVyZVRhZyhDU1NWYWx1ZUxpc3QqIHNldHRpbmdzKQogYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyhib29sIGltcG9ydGFudCkKIHsKICAgICBp
ZiAobV92YWx1ZUxpc3QtPnNpemUoKSA9PSAxICYmIG1fdmFsdWVMaXN0LT5jdXJyZW50KCktPmlk
ID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
bm9ybWFsVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9ybWFsKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBub3JtYWxWYWx1
ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7
CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGFkZFByb3BlcnR5KENTU1By
b3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5ncywgbm9ybWFsVmFsdWUucmVsZWFzZSgpLCBp
bXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc0MTYsMjEgKzczOTIsMjEgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQp
CiAgICAgICAgICAgICBpZiAoc2F3Q29tbW9uTGlnYXR1cmVzVmFsdWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgc2F3Q29tbW9uTGlnYXR1cmVzVmFsdWUgPSB0
cnVlOwotICAgICAgICAgICAgbGlnYXR1cmVWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgbGlnYXR1cmVW
YWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vRGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlczoKICAgICAgICAgY2FzZSBDU1NWYWx1ZURpc2NyZXRpb25hcnlMaWdh
dHVyZXM6CiAgICAgICAgICAgICBpZiAoc2F3RGlzY3JldGlvbmFyeUxpZ2F0dXJlc1ZhbHVlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHNhd0Rpc2NyZXRpb25h
cnlMaWdhdHVyZXNWYWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICBsaWdhdHVyZVZhbHVlcy0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Cisg
ICAgICAgICAgICBsaWdhdHVyZVZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVzOgogICAgICAgICBjYXNlIENTU1ZhbHVl
SGlzdG9yaWNhbExpZ2F0dXJlczoKICAgICAgICAgICAgIGlmIChzYXdIaXN0b3JpY2FsTGlnYXR1
cmVzVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgc2F3
SGlzdG9yaWNhbExpZ2F0dXJlc1ZhbHVlID0gdHJ1ZTsKLSAgICAgICAgICAgIGxpZ2F0dXJlVmFs
dWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlVmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKaW5kZXggYjczODRlZS4uYTAxODRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAt
NDYsNyArNDYsNiBAQCBjbGFzcyBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU7CiBjbGFzcyBDU1NN
YXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOwogY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7Ci1jbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFz
cyBDU1NQcm9wZXJ0eTsKIGNsYXNzIENTU1J1bGU7CiBjbGFzcyBDU1NSdWxlTGlzdDsKQEAgLTgx
LDggKzgwLDYgQEAgcHVibGljOgogCiAgICAgRG9jdW1lbnQqIGZpbmREb2N1bWVudCgpIGNvbnN0
OwogCi0gICAgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2woKSBjb25zdCB7IHJldHVybiBtX2Nz
c1ZhbHVlUG9vbC5nZXQoKTsgfQotCiAgICAgdm9pZCBhZGRQcm9wZXJ0eShpbnQgcHJvcElkLCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxz
ZSk7CiAgICAgdm9pZCByb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pOwogICAgIGJvb2wg
aGFzUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtUGFyc2VkUHJvcGVydGllcyA+IDA7
IH0KQEAgLTI4OCw3ICsyODUsNiBAQCBwdWJsaWM6CiAgICAgQ1NTUHJvcGVydHkqKiBtX3BhcnNl
ZFByb3BlcnRpZXM7CiAgICAgQ1NTU2VsZWN0b3JMaXN0KiBtX3NlbGVjdG9yTGlzdEZvclBhcnNl
U2VsZWN0b3I7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWVQb29sPiBtX2Nzc1ZhbHVlUG9vbDsKICAg
ICB1bnNpZ25lZCBtX251bVBhcnNlZFByb3BlcnRpZXM7CiAgICAgdW5zaWduZWQgbV9tYXhQYXJz
ZWRQcm9wZXJ0aWVzOwogICAgIHVuc2lnbmVkIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1h
cmdpbkJveDsKQEAgLTM0Myw3ICszMzksNiBAQCBwcml2YXRlOgogICAgIGlubGluZSB2b2lkIGRl
dGVjdEF0VG9rZW4oaW50LCBib29sKTsKIAogICAgIHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHls
ZVNoZWV0Kik7Ci0gICAgdm9pZCBlbnN1cmVDU1NWYWx1ZVBvb2woKTsKIAogICAgIHZvaWQgcmVj
aGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVuKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWVQb29sLmNwcAppbmRleCAzZDg4OTNlLi41MjllMTQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVmFsdWVQb29sLmNwcApAQCAtMjksNiArMjksMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChDU1NWYWx1ZVBvb2wsIHBvb2wsICgpKTsKKyAgICByZXR1cm4gcG9vbDsKK30KKwogQ1NT
VmFsdWVQb29sOjpDU1NWYWx1ZVBvb2woKQogICAgIDogbV9pbmhlcml0ZWRWYWx1ZShDU1NJbmhl
cml0ZWRWYWx1ZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2ltcGxpY2l0SW5pdGlhbFZhbHVlKENTU0lu
aXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQoKSkKQEAgLTQyLDEwICs0OCw2IEBAIENTU1ZhbHVl
UG9vbDo6Q1NTVmFsdWVQb29sKCkKIHsKIH0KIAotQ1NTVmFsdWVQb29sOjp+Q1NTVmFsdWVQb29s
KCkKLXsKLX0KLQogUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTVmFsdWVQb29sOjpj
cmVhdGVJZGVudGlmaWVyVmFsdWUoaW50IGlkZW50KQogewogICAgIGlmIChpZGVudCA8PSAwIHx8
IGlkZW50ID49IG51bUNTU1ZhbHVlS2V5d29yZHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWVQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmgK
aW5kZXggYmM3NTFlYi4uMTI3OTk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaApAQCAt
MzQsMTEgKzM0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NWYWx1ZVBv
b2wgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NWYWx1ZVBvb2w+IHsKK2NsYXNzIENTU1ZhbHVlUG9v
bCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVQb29sPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTVmFsdWVQb29sKTsgfQotICAgIH5DU1NWYWx1ZVBv
b2woKTsKLQogICAgIFBhc3NSZWZQdHI8Q1NTSW5oZXJpdGVkVmFsdWU+IGNyZWF0ZUluaGVyaXRl
ZFZhbHVlKCkgeyByZXR1cm4gbV9pbmhlcml0ZWRWYWx1ZTsgfQogICAgIFBhc3NSZWZQdHI8Q1NT
SW5pdGlhbFZhbHVlPiBjcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpIHsgcmV0dXJuIG1faW1w
bGljaXRJbml0aWFsVmFsdWU7IH0KICAgICBQYXNzUmVmUHRyPENTU0luaXRpYWxWYWx1ZT4gY3Jl
YXRlRXhwbGljaXRJbml0aWFsVmFsdWUoKSB7IHJldHVybiBtX2V4cGxpY2l0SW5pdGlhbFZhbHVl
OyB9CkBAIC00OSw2ICs0Niw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlVmFsdWUoVCB2YWx1ZSkg
eyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7IH0KIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgQ1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2woKTsKKwogICAgIENTU1ZhbHVl
UG9vbCgpOwogCiAgICAgUmVmUHRyPENTU0luaGVyaXRlZFZhbHVlPiBtX2luaGVyaXRlZFZhbHVl
OwpAQCAtNzMsNiArNzIsOCBAQCBwcml2YXRlOgogICAgIEludGVnZXJWYWx1ZUNhY2hlIG1fbnVt
YmVyVmFsdWVDYWNoZTsKIH07CiAKK0NTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CisKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ1NTTWFwcGVkQXR0cmli
dXRlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0NTU01hcHBlZEF0dHJpYnV0
ZURlY2xhcmF0aW9uLmNwcAppbmRleCA3MmUyNTZhLi5iN2UzOTA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQ1NTTWFwcGVkQXR0cmlidXRlRGVjbGFyYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9DU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbi5jcHAKQEAgLTU0
LDggKzU0LDcgQEAgdm9pZCBDU1NNYXBwZWRBdHRyaWJ1dGVEZWNsYXJhdGlvbjo6c2V0TWFwcGVk
TGVuZ3RoUHJvcGVydHkoU3R5bGVkRWxlbWVudCogZWxlbWUKIAogdm9pZCBDU1NNYXBwZWRBdHRy
aWJ1dGVEZWNsYXJhdGlvbjo6c2V0TWFwcGVkUHJvcGVydHkoU3R5bGVkRWxlbWVudCogZWxlbWVu
dCwgaW50IHByb3BlcnR5SWQsIGludCB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9j
dW1lbnQoKSk7Ci0gICAgbV9kZWNsYXJhdGlvbi0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHkocHJv
cGVydHlJZCwgZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZSh2YWx1ZSkpKTsKKyAgICBtX2RlY2xhcmF0aW9uLT5zZXRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eShwcm9wZXJ0eUlkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWUpKSk7CiAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggMzEwMWUwNC4uY2NhZWRhYmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgotI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hl
ZXQuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNocm9t
ZS5oIgpAQCAtMTc4MCwxMyArMTc3OSw2IEBAIHZvaWQgRG9jdW1lbnQ6OnBhZ2VTaXplQW5kTWFy
Z2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIEludFNpemUmIHBhZ2VTaXplLCBpbnQmCiAgICAg
bWFyZ2luTGVmdCA9IHN0eWxlLT5tYXJnaW5MZWZ0KCkuaXNBdXRvKCkgPyBtYXJnaW5MZWZ0IDog
c3R5bGUtPm1hcmdpbkxlZnQoKS5jYWxjVmFsdWUod2lkdGgpOwogfQogCi1QYXNzUmVmUHRyPENT
U1ZhbHVlUG9vbD4gRG9jdW1lbnQ6OmNzc1ZhbHVlUG9vbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Nzc1ZhbHVlUG9vbCkKLSAgICAgICAgbV9jc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OmNy
ZWF0ZSgpOwotICAgIHJldHVybiBtX2Nzc1ZhbHVlUG9vbDsKLX0KLQogdm9pZCBEb2N1bWVudDo6
c2V0SXNWaWV3U291cmNlKGJvb2wgaXNWaWV3U291cmNlKQogewogICAgIG1faXNWaWV3U291cmNl
ID0gaXNWaWV3U291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAyZDE2MGYxLi43MTMxMjgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNjIsNyArNjIsNiBAQCBjbGFzcyBDREFUQVNlY3Rp
b247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsK
IGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRT
Y3JpcHQ7CkBAIC00MzgsOSArNDM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Bs
dWdpbkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNNZWRpYURvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNGcmFtZVNldCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZVBvb2w+IGNzc1ZhbHVlUG9vbCgpIGNvbnN0OwotICAgIAorCiAgICAgQ1NT
U3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNlbGVjdG9yLmdldCgpOyB9CiAKICAgICBib29sIGlzVmlld1NvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWaWV3U291cmNlOyB9CkBAIC0xMTk2LDggKzExOTMsNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9oYXNEaXJ0eVN0eWxlU2VsZWN0b3I7CiAgICAgVmVjdG9yPE93blB0cjxGb250
RGF0YT4gPiBtX2N1c3RvbUZvbnRzOwogCi0gICAgbXV0YWJsZSBSZWZQdHI8Q1NTVmFsdWVQb29s
PiBtX2Nzc1ZhbHVlUG9vbDsKLQogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93blB0cjxDYWNo
ZWRSZXNvdXJjZUxvYWRlcj4gbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsKICAgICBSZWZQdHI8RG9j
dW1lbnRQYXJzZXI+IG1fcGFyc2VyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127738</attachid>
            <date>2012-02-19 11:03:06 -0800</date>
            <delta_ts>2012-04-09 17:30:42 -0700</delta_ts>
            <desc>Wrapper part of the change, amended for V8.</desc>
            <filename>bug-77700-wrappers.diff</filename>
            <type>text/plain</type>
            <size>16910</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4YTQyYjVmLi45ZmMxZmVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDIt
MTkgIEFuZHJlYXMgS2xpbmcgIDxhd2Vzb21la2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIE1h
a2UgQ1NTVmFsdWUgd3JhcHBlciBnZXR0ZXJzIHJldHVybiB1bmlxdWUgb2JqZWN0cyBldmVyeSB0
aW1lLgorICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi83NzcwMD4KKworICAgICAgICBSZXZp
ZXdlZCBieSBBbnR0aSBLb2l2aXN0by4KKworICAgICAgICAqIGZhc3QvY3NzL2Nzcy12YWx1ZS13
cmFwcGVyLXNhbWVuZXNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
Y3NzLXZhbHVlLXdyYXBwZXItc2FtZW5lc3MuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9k
b20vU3R5bGVTaGVldC9nYy1pbmxpbmUtc3R5bGUtY3NzdmFsdWVzLWV4cGVjdGVkLnR4dDogUmVt
b3ZlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9TdHlsZVNoZWV0L2djLWlubGluZS1zdHlsZS1jc3N2
YWx1ZXMuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L2RvbS9kb21MaXN0RW51bWVyYXRp
b24tZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvZG9tL2djLTktZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3QvZG9tL2djLTkuaHRtbDoKKyAgICAgICAgKiBmYXN0L2RvbS9zY3JpcHQt
dGVzdHMvZG9tTGlzdEVudW1lcmF0aW9uLmpzOgorCiAyMDEyLTAyLTE4ICBDc2FiYSBPc3p0cm9n
b27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRl
bmluZyBhZnRlciByMTA3OTcxLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Nz
LXZhbHVlLXdyYXBwZXItc2FtZW5lc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3MvY3NzLXZhbHVlLXdyYXBwZXItc2FtZW5lc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MGQzZGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9jc3MtdmFsdWUtd3JhcHBlci1zYW1lbmVzcy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw3NSBAQAorVGhpcyB0ZXN0IGRvY3VtZW50cyB0aGUgc2FtZW5lc3MgY2hhcmFjdGVy
aXN0aWNzIG9mIENTU1ZhbHVlIHdyYXBwZXJzICh1bnNoYXJlZCwgdW5pcXVlIG9iamVjdHMuKQor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB2YWx1ZTAgPT09IG51bGwgaXMg
ZmFsc2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShz
dHlsZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZhbHVlMSBpcyBmYWxzZQor
UEFTUyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMC5jc3NUZXh0ID09IHZh
bHVlMS5jc3NUZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUwID09PSBudWxsIGlzIGZhbHNlCitQQVNT
IHZhbHVlMSA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KHN0eWxlLml0ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgw
KSkgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUw
ID09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAuY3NzVGV4dCA9PSB2YWx1ZTEuY3NzVGV4
dCBpcyB0cnVlCitQQVNTIHZhbHVlMCA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09
IG51bGwgaXMgZmFsc2UKK1BBU1Mgc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVt
KDApKSA9PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNl
CitQQVNTIHZhbHVlMCA9PT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEg
aXMgZmFsc2UKK1BBU1MgdmFsdWUwLmNzc1RleHQgPT0gdmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQor
UEFTUyB2YWx1ZTAgPT09IG51bGwgaXMgZmFsc2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZh
bHNlCitQQVNTIHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1
ZTAgPT09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQ
QVNTIHZhbHVlMC5jc3NUZXh0ID09IHZhbHVlMS5jc3NUZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUw
ID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHZhbHVlMSA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBz
dHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpID09IHN0eWxlLmdldFByb3Bl
cnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09PSB2YWx1
ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAu
Y3NzVGV4dCA9PSB2YWx1ZTEuY3NzVGV4dCBpcyB0cnVlCitQQVNTIHZhbHVlMCA9PT0gbnVsbCBp
cyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09IG51bGwgaXMgZmFsc2UKK1BBU1Mgc3R5bGUuZ2V0UHJv
cGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PT0gdmFsdWUxIGlzIGZhbHNl
CitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwLmNzc1RleHQgPT0g
dmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFTUyB2YWx1ZTAgPT09IG51bGwgaXMgZmFsc2UKK1BB
U1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVt
KDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1
ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMC5jc3NUZXh0ID09IHZhbHVlMS5jc3NU
ZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUwID09PSBudWxsIGlzIGZhbHNlCitQQVNTIHZhbHVlMSA9
PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0
ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgaXMgZmFs
c2UKK1BBU1MgdmFsdWUwID09PSB2YWx1ZTEgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09IHZhbHVl
MSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAuY3NzVGV4dCA9PSB2YWx1ZTEuY3NzVGV4dCBpcyB0cnVl
CitQQVNTIHZhbHVlMCA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyB2YWx1ZTEgPT09IG51bGwgaXMg
ZmFsc2UKK1BBU1Mgc3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9PSBz
dHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpIGlzIGZhbHNlCitQQVNTIHZh
bHVlMCA9PT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVlMCA9PSB2YWx1ZTEgaXMgZmFsc2UK
K1BBU1MgdmFsdWUwLmNzc1RleHQgPT0gdmFsdWUxLmNzc1RleHQgaXMgdHJ1ZQorUEFTUyB2YWx1
ZTAgPT09IG51bGwgaXMgZmFsc2UKK1BBU1MgdmFsdWUxID09PSBudWxsIGlzIGZhbHNlCitQQVNT
IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgwKSkgPT0gc3R5bGUuZ2V0UHJv
cGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT09IHZh
bHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAgPT0gdmFsdWUxIGlzIGZhbHNlCitQQVNTIHZhbHVl
MC5jc3NUZXh0ID09IHZhbHVlMS5jc3NUZXh0IGlzIHRydWUKK1BBU1MgdmFsdWUwID09PSBudWxs
IGlzIGZhbHNlCitQQVNTIHZhbHVlMSA9PT0gbnVsbCBpcyBmYWxzZQorUEFTUyBzdHlsZS5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpID09IHN0eWxlLmdldFByb3BlcnR5Q1NTVmFs
dWUoc3R5bGUuaXRlbSgwKSkgaXMgZmFsc2UKK1BBU1MgdmFsdWUwID09PSB2YWx1ZTEgaXMgZmFs
c2UKK1BBU1MgdmFsdWUwID09IHZhbHVlMSBpcyBmYWxzZQorUEFTUyB2YWx1ZTAuY3NzVGV4dCA9
PSB2YWx1ZTEuY3NzVGV4dCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3MvY3Nz
LXZhbHVlLXdyYXBwZXItc2FtZW5lc3MuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2Nzcy12
YWx1ZS13cmFwcGVyLXNhbWVuZXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOTBlZjcwMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL2Nz
cy12YWx1ZS13cmFwcGVyLXNhbWVuZXNzLmh0bWwKQEAgLTAsMCArMSw0MSBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPgorPHNjcmlwdCBz
cmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzdHlsZT4KKy5hIHsgd2lkdGg6IDBweDsgaGVpZ2h0OiAwcHg7IH0KKy5hIHsgd2lk
dGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyB9CisuYSB7IHdpZHRoOiAxMDAwcHg7IGhlaWdodDog
MTAwMHB4OyB9CisuYSB7IHdpZHRoOiA1MCU7IGhlaWdodDogNTAlOyB9CisuYSB7IGNvbG9yOiBy
ZWQ7IGJhY2tncm91bmQtY29sb3I6IHJlZDsgfQorLmEgeyBjb2xvcjogcmdiKDAsMCwwKTsgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDAsMCwwKTsgfQorLmEgeyBjb2xvcjogcmdiKDI1NSwyNTUsMjU1
KTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwyNTUsMjU1KTsgfQorLmEgeyBjb2xvcjogcmdi
YSgwLDAsMCwyNTUpOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsMCwwLDI1NSk7IH0KKy5hIHsg
Y29sb3I6IHJnYmEoMCwwLDAsMCk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwwLDAsMCk7IH0K
Ky5hIHsgY29sb3I6IGluaGVyaXQ7IGJhY2tncm91bmQtY29sb3I6IGluaGVyaXQ7IH0KKy5hIHsg
Y29sb3I6IGluaXRpYWw7IGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7IH0KKzwvc3R5bGU+Cis8
c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGRvY3VtZW50cyB0aGUgc2FtZW5lc3Mg
Y2hhcmFjdGVyaXN0aWNzIG9mIENTU1ZhbHVlIHdyYXBwZXJzICh1bnNoYXJlZCwgdW5pcXVlIG9i
amVjdHMuKSIpOworCitydWxlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdHls
ZScpWzFdLnNoZWV0LmNzc1J1bGVzOworZm9yIChpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgKytp
KSB7CisgICAgc3R5bGUgPSBydWxlc1tpXS5zdHlsZTsKKyAgICB2YWx1ZTAgPSBzdHlsZS5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpOworICAgIHZhbHVlMSA9IHN0eWxlLmdldFBy
b3BlcnR5Q1NTVmFsdWUoc3R5bGUuaXRlbSgxKSk7CisgICAgc2hvdWxkQmVGYWxzZSgidmFsdWUw
ID09PSBudWxsIik7CisgICAgc2hvdWxkQmVGYWxzZSgidmFsdWUxID09PSBudWxsIik7CisgICAg
c2hvdWxkQmVGYWxzZSgic3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZS5pdGVtKDApKSA9
PSBzdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlLml0ZW0oMCkpIik7CisgICAgc2hvdWxk
QmVGYWxzZSgidmFsdWUwID09PSB2YWx1ZTEiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJ2YWx1ZTAg
PT0gdmFsdWUxIik7CisgICAgc2hvdWxkQmVUcnVlKCJ2YWx1ZTAuY3NzVGV4dCA9PSB2YWx1ZTEu
Y3NzVGV4dCIpOworfQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL1N0eWxlU2hlZXQvZ2MtaW5saW5lLXN0eWxlLWNzc3ZhbHVl
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9TdHlsZVNoZWV0L2djLWlubGlu
ZS1zdHlsZS1jc3N2YWx1ZXMtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmYTAxNmVkLi4wMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1N0eWxlU2hl
ZXQvZ2MtaW5saW5lLXN0eWxlLWNzc3ZhbHVlcy1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApA
QCAtMSwxMSArMCwwIEBACi1UZXN0IHRoYXQgY3VzdG9tIHByb3BlcnRpZXMgb24gQ1NTVmFsdWVz
IG9mIGlubGluZSBzdHlsZSBkZWNsYXJhdGlvbnMgc3Vydml2ZSBHQwotCi1PbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCi0KLQotUEFTUyBkb2N1bWVudC5ib2R5LnN0eWxlLmdldFByb3BlcnR5Q1NT
VmFsdWUoImNvbG9yIikuY3NzVGV4dCBpcyAiYmxhY2siCi1QQVNTIGRvY3VtZW50LmJvZHkuc3R5
bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgiY29sb3IiKS5mb28gaXMgJ2JhcicKLVBBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQotCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9TdHlsZVNoZWV0L2djLWlubGluZS1zdHlsZS1jc3N2YWx1ZXMuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1N0eWxlU2hlZXQvZ2MtaW5saW5lLXN0eWxlLWNzc3Zh
bHVlcy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzNlYjA5Li4wMDAwMDAw
Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1N0eWxlU2hlZXQvZ2MtaW5saW5lLXN0eWxlLWNz
c3ZhbHVlcy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPGh0bWw+Ci08aGVh
ZD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgotPC9oZWFkPgotPGJvZHkgc3R5bGU9ImNvbG9yOmJsYWNrIj4KLTxzY3JpcHQ+Ci0gICAg
ZGVzY3JpcHRpb24oIlRlc3QgdGhhdCBjdXN0b20gcHJvcGVydGllcyBvbiBDU1NWYWx1ZXMgb2Yg
aW5saW5lIHN0eWxlIGRlY2xhcmF0aW9ucyBzdXJ2aXZlIEdDIik7Ci0KLSAgICB2YXIgZXhwciA9
ICdkb2N1bWVudC5ib2R5LnN0eWxlLmdldFByb3BlcnR5Q1NTVmFsdWUoImNvbG9yIiknOwotICAg
IHNob3VsZEJlKGV4cHIgKyAiLmNzc1RleHQiLCAnImJsYWNrIicpOwotICAgIGV2YWwoZXhwciku
Zm9vID0gImJhciIKLSAgICBnYygpOwotICAgIHNob3VsZEJlKGV4cHIgKyAiLmZvbyIsICInYmFy
JyIpOwotCi08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2RvbUxpc3RFbnVtZXJhdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9kb21MaXN0RW51bWVyYXRpb24tZXhwZWN0ZWQudHh0CmluZGV4IDljYTk3
ZWMuLmYwNjZjYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2RvbUxpc3RFbnVt
ZXJhdGlvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vZG9tTGlzdEVu
dW1lcmF0aW9uLWV4cGVjdGVkLnR4dApAQCAtNzYsOSArNzYsOSBAQCBQQVNTIHJlc3VsdEFycmF5
WzJdLml0ZW0gaXMgY3NzU3R5bGVEZWNsYXJhdGlvbi5pdGVtKDIpCiBbb2JqZWN0IENTU1ZhbHVl
TGlzdF0KIFBBU1MgcmVzdWx0QXJyYXkubGVuZ3RoIGlzIDEwCiBQQVNTIHJlc3VsdEFycmF5WzBd
LmkgaXMgJzAnCi1QQVNTIHJlc3VsdEFycmF5WzBdLml0ZW0gaXMgY3NzVmFsdWVMaXN0Lml0ZW0o
MCkKK1BBU1MgcmVzdWx0QXJyYXlbMF0uaXRlbS5jc3NUZXh0IGlzIGNzc1ZhbHVlTGlzdC5pdGVt
KDApLmNzc1RleHQKIFBBU1MgcmVzdWx0QXJyYXlbMV0uaSBpcyAnMScKLVBBU1MgcmVzdWx0QXJy
YXlbMV0uaXRlbSBpcyBjc3NWYWx1ZUxpc3QuaXRlbSgxKQorUEFTUyByZXN1bHRBcnJheVsxXS5p
dGVtLmNzc1RleHQgaXMgY3NzVmFsdWVMaXN0Lml0ZW0oMSkuY3NzVGV4dAogCiBbb2JqZWN0IE1l
ZGlhTGlzdF0KIFBBU1MgcmVzdWx0QXJyYXkubGVuZ3RoIGlzIDgKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2djLTktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
Z2MtOS1leHBlY3RlZC50eHQKaW5kZXggMTkxZjRkZC4uYWYzMjU2OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vZ2MtOS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vZ2MtOS1leHBlY3RlZC50eHQKQEAgLTMxLDcgKzMxLDcgQEAgUEFTUzogZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJylbMF0udEJvZGllc1swXS5yb3dzLm15Q3VzdG9t
UHJvcGVydHkKIFBBU1M6IGRvY3VtZW50LmJvZHkuY2hpbGRyZW4ubXlDdXN0b21Qcm9wZXJ0eSBz
aG91bGQgYmUgMSBhbmQgaXMuCiBQQVNTOiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
bWFwJylbMF0uYXJlYXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBhbmQgaXMuCiBQQVNT
OiBkb2N1bWVudC5ib2R5LnN0eWxlLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlz
LgotUEFTUzogZG9jdW1lbnQuYm9keS5zdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCdjb2xvcicp
Lm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgorUEFTUzogZG9jdW1lbnQuYm9k
eS5zdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCdjb2xvcicpLm15Q3VzdG9tUHJvcGVydHkgc2hv
dWxkIGJlIHVuZGVmaW5lZCBhbmQgaXMuCiBQQVNTOiBkb2N1bWVudC5zdHlsZVNoZWV0cy5teUN1
c3RvbVByb3BlcnR5IHNob3VsZCBiZSAxIGFuZCBpcy4KIFBBU1M6IGRvY3VtZW50LnN0eWxlU2hl
ZXRzWzBdLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgogUEFTUzogZG9jdW1l
bnQuc3R5bGVTaGVldHNbMF0uY3NzUnVsZXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgdW5k
ZWZpbmVkIGFuZCBpcy4KQEAgLTY3LDcgKzY3LDcgQEAgUEFTUzogZG9jdW1lbnQuZ2V0RWxlbWVu
dHNCeVRhZ05hbWUoJ3RhYmxlJylbMF0udEJvZGllc1swXS5yb3dzLm15Q3VzdG9tUHJvcGVydHkK
IFBBU1M6IGRvY3VtZW50LmJvZHkuY2hpbGRyZW4ubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUg
MSBhbmQgaXMuCiBQQVNTOiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbWFwJylbMF0u
YXJlYXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgMSBhbmQgaXMuCiBQQVNTOiBkb2N1bWVu
dC5ib2R5LnN0eWxlLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgotUEFTUzog
ZG9jdW1lbnQuYm9keS5zdHlsZS5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCdjb2xvcicpLm15Q3VzdG9t
UHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgorUEFTUzogZG9jdW1lbnQuYm9keS5zdHlsZS5n
ZXRQcm9wZXJ0eUNTU1ZhbHVlKCdjb2xvcicpLm15Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIHVu
ZGVmaW5lZCBhbmQgaXMuCiBQQVNTOiBkb2N1bWVudC5zdHlsZVNoZWV0cy5teUN1c3RvbVByb3Bl
cnR5IHNob3VsZCBiZSAxIGFuZCBpcy4KIFBBU1M6IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdLm15
Q3VzdG9tUHJvcGVydHkgc2hvdWxkIGJlIDEgYW5kIGlzLgogUEFTUzogZG9jdW1lbnQuc3R5bGVT
aGVldHNbMF0uY3NzUnVsZXMubXlDdXN0b21Qcm9wZXJ0eSBzaG91bGQgYmUgdW5kZWZpbmVkIGFu
ZCBpcy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL2djLTkuaHRtbCBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL2djLTkuaHRtbAppbmRleCA0OWYyMjQwLi4yZmYwOTBkIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9nYy05Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vZ2MtOS5odG1sCkBAIC0xNDMsNyArMTQzLDcgQEAgdmFyIG9iamVjdHNUb1Rlc3QgPSBb
CiAgICAgWyAiZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hcCcpWzBdLmFyZWFzIiwg
ImFsbG93IGN1c3RvbSIgXSwKICAgICAKICAgICBbICJkb2N1bWVudC5ib2R5LnN0eWxlIiwgImFs
bG93IGN1c3RvbSIgXSwKLSAgICBbICJkb2N1bWVudC5ib2R5LnN0eWxlLmdldFByb3BlcnR5Q1NT
VmFsdWUoJ2NvbG9yJykiLCAiYWxsb3cgY3VzdG9tIiBdLAorICAgIFsgImRvY3VtZW50LmJvZHku
c3R5bGUuZ2V0UHJvcGVydHlDU1NWYWx1ZSgnY29sb3InKSIgXSwKICAgICBbICJkb2N1bWVudC5z
dHlsZVNoZWV0cyIsICJhbGxvdyBjdXN0b20iIF0sCiAgICAgWyAiZG9jdW1lbnQuc3R5bGVTaGVl
dHNbMF0iLCAiYWxsb3cgY3VzdG9tIiBdLAogICAgIFsgImRvY3VtZW50LnN0eWxlU2hlZXRzWzBd
LmNzc1J1bGVzIiBdLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRl
c3RzL2RvbUxpc3RFbnVtZXJhdGlvbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10
ZXN0cy9kb21MaXN0RW51bWVyYXRpb24uanMKaW5kZXggN2E5ODc1NS4uZDUyMmI0MSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0LXRlc3RzL2RvbUxpc3RFbnVtZXJhdGlv
bi5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMvZG9tTGlzdEVudW1l
cmF0aW9uLmpzCkBAIC0xODUsOSArMTg1LDkgQEAgdmFyIGNzc1ZhbHVlTGlzdCA9IHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdvbCcpWzAKIHJl
c3VsdEFycmF5ID0gaXRlcmF0ZUxpc3QoY3NzVmFsdWVMaXN0KTsKIHNob3VsZEJlKCJyZXN1bHRB
cnJheS5sZW5ndGgiLCAiMTAiKTsKIHNob3VsZEJlKCJyZXN1bHRBcnJheVswXS5pIiwgIicwJyIp
Owotc2hvdWxkQmUoInJlc3VsdEFycmF5WzBdLml0ZW0iLCAiY3NzVmFsdWVMaXN0Lml0ZW0oMCki
KTsKK3Nob3VsZEJlKCJyZXN1bHRBcnJheVswXS5pdGVtLmNzc1RleHQiLCAiY3NzVmFsdWVMaXN0
Lml0ZW0oMCkuY3NzVGV4dCIpOwogc2hvdWxkQmUoInJlc3VsdEFycmF5WzFdLmkiLCAiJzEnIik7
Ci1zaG91bGRCZSgicmVzdWx0QXJyYXlbMV0uaXRlbSIsICJjc3NWYWx1ZUxpc3QuaXRlbSgxKSIp
Oworc2hvdWxkQmUoInJlc3VsdEFycmF5WzFdLml0ZW0uY3NzVGV4dCIsICJjc3NWYWx1ZUxpc3Qu
aXRlbSgxKS5jc3NUZXh0Iik7CiAKIC8vIE1lZGlhTGlzdAogdmFyIG1lZGlhTGlzdCA9IGRvY3Vt
ZW50LnN0eWxlU2hlZXRzWzNdLmNzc1J1bGVzWzBdLm1lZGlhOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDYyYzRl
YzkuLjhmZDdkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMi0wMi0xOSAgQW5k
cmVhcyBLbGluZyAgPGF3ZXNvbWVrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBDU1NW
YWx1ZSB3cmFwcGVyIGdldHRlcnMgcmV0dXJuIHVuaXF1ZSBvYmplY3RzIGV2ZXJ5IHRpbWUuCisg
ICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9iLzc3NzAwPgorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIENoYW5nZSB0aGUgYmVoYXZpb3Igb2YgQ1NTVmFs
dWUgZ2V0dGVycyB0byByZXR1cm4gdW5pcXVlIEpTIHdyYXBwZXJzIGV2ZXJ5CisgICAgICAgIHRp
bWUgdGhleSBhcmUgY2FsbGVkLiBUaGlzIG1lYW5zIHdlIG5vIGxvbmdlciBoYXZlIHRvIGRlYWwg
d2l0aCB0aGUgcmlzaworICAgICAgICBvZiBsZWFraW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGJldHdl
ZW4gdW5yZWxhdGVkIGRvY3VtZW50cywgYW5kIGFyZSBmcmVlIHRvCisgICAgICAgIGltcGxlbWVu
dCBnbG9iYWwgdmFsdWUgc2hhcmluZyBhY3Jvc3MgV2ViQ29yZS4KKworICAgICAgICBUaGlzIHBh
dGNoIHdpbGwgYmUgZm9sbG93ZWQgYnkgb25lIG1ha2luZyBDU1NWYWx1ZVBvb2wgZ2xvYmFsbHkg
c2hhcmVkLAorICAgICAgICBpdCdzIGRvbmUgaW4gdHdvIHN0ZXBzIHRvIG1vbml0b3IgdGhlIGlt
cGFjdCBvZiB0aGlzIGNoYW5nZS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTVmFsdWVD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6Cisg
ICAgICAgIChJc0NTU1ZhbHVlVHlwZSk6CisKIDIwMTItMDItMTggIEFuZHJlYXMgS2xpbmcgIDxh
d2Vzb21la2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFNocmluayBhdHRyaWJ1dGUgc3R5bGUg
cHJvcGVydHkgc2V0cyBhZnRlciBwb3B1bGF0aW5nIHRoZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1ZhbHVlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3BwCmluZGV4IDBlZmI0YmIuLmI4YWEwZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTVmFsdWVDdXN0b20uY3Bw
CkBAIC03NiwzMSArNzYsMjQgQEAgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01H
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ1NTVmFsdWUqIHZhbHVlKQogICAgIGlmICghdmFs
dWUpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAotICAgIEpTRE9NV3JhcHBlciogd3JhcHBl
ciA9IGdldENhY2hlZFdyYXBwZXIoY3VycmVudFdvcmxkKGV4ZWMpLCB2YWx1ZSk7Ci0KLSAgICBp
ZiAod3JhcHBlcikKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0KICAgICBpZiAodmFsdWUtPmlz
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSkKLSAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01f
V1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLCB2YWx1
ZSk7CisgICAgICAgIHJldHVybiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpjcmVhdGUoZ2V0
RE9NU3RydWN0dXJlPEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+KGV4ZWMsIGdsb2JhbE9iamVj
dCksIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqPih2
YWx1ZSkpOwogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBlbHNlIGlmICh2YWx1ZS0+aXNX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZSgpKQotICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQ
UEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgV2ViS2l0Q1NTRmlsdGVyVmFsdWUsIHZhbHVlKTsKKyAg
ICBpZiAodmFsdWUtPmlzV2ViS2l0Q1NTRmlsdGVyVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIEpT
V2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNXZWJLaXRDU1NG
aWx0ZXJWYWx1ZT4oZXhlYywgZ2xvYmFsT2JqZWN0KSwgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NGaWx0ZXJWYWx1ZSo+KHZhbHVlKSk7CiAjZW5kaWYKLSAgICBlbHNlIGlmICh2
YWx1ZS0+aXNWYWx1ZUxpc3QoKSkKLSAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01fV1JBUFBF
UihleGVjLCBnbG9iYWxPYmplY3QsIENTU1ZhbHVlTGlzdCwgdmFsdWUpOworICAgIGlmICh2YWx1
ZS0+aXNWYWx1ZUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIEpTQ1NTVmFsdWVMaXN0OjpjcmVhdGUo
Z2V0RE9NU3RydWN0dXJlPEpTQ1NTVmFsdWVMaXN0PihleGVjLCBnbG9iYWxPYmplY3QpLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKSk7CiAjaWYgRU5BQkxF
KFNWRykKLSAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdQYWludCgpKQotICAgICAgICB3cmFwcGVy
ID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHUGFpbnQsIHZhbHVl
KTsKLSAgICBlbHNlIGlmICh2YWx1ZS0+aXNTVkdDb2xvcigpKQotICAgICAgICB3cmFwcGVyID0g
Q1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2JhbE9iamVjdCwgU1ZHQ29sb3IsIHZhbHVlKTsK
KyAgICBpZiAodmFsdWUtPmlzU1ZHUGFpbnQoKSkKKyAgICAgICAgcmV0dXJuIEpTU1ZHUGFpbnQ6
OmNyZWF0ZShnZXRET01TdHJ1Y3R1cmU8SlNTVkdQYWludD4oZXhlYywgZ2xvYmFsT2JqZWN0KSwg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxTVkdQYWludCo+KHZhbHVlKSk7CisgICAgaWYgKHZh
bHVlLT5pc1NWR0NvbG9yKCkpCisgICAgICAgIHJldHVybiBKU1NWR0NvbG9yOjpjcmVhdGUoZ2V0
RE9NU3RydWN0dXJlPEpTU1ZHQ29sb3I+KGV4ZWMsIGdsb2JhbE9iamVjdCksIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih2YWx1ZSkpOwogI2VuZGlmCi0gICAgZWxzZSBpZiAo
dmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKLSAgICAgICAgd3JhcHBlciA9IENSRUFURV9ET01f
V1JBUFBFUihleGVjLCBnbG9iYWxPYmplY3QsIENTU1ByaW1pdGl2ZVZhbHVlLCB2YWx1ZSk7Ci0g
ICAgZWxzZQotICAgICAgICB3cmFwcGVyID0gQ1JFQVRFX0RPTV9XUkFQUEVSKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgQ1NTVmFsdWUsIHZhbHVlKTsKKyAgICBpZiAodmFsdWUtPmlzUHJpbWl0aXZlVmFs
dWUoKSkKKyAgICAgICAgcmV0dXJuIEpTQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShnZXRET01T
dHJ1Y3R1cmU8SlNDU1NQcmltaXRpdmVWYWx1ZT4oZXhlYywgZ2xvYmFsT2JqZWN0KSwgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKSk7CiAKLSAgICBy
ZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gSlNDU1NWYWx1ZTo6Y3JlYXRlKGdldERPTVN0cnVj
dHVyZTxKU0NTU1ZhbHVlPihleGVjLCBnbG9iYWxPYmplY3QpLCBnbG9iYWxPYmplY3QsIHZhbHVl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBmNDgzNDIyLi4zZGJiYzA5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQpAQCAtNDM1LDEzICs0MzUsMTUgQEAgRU5ECiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
ICR7Y2xhc3NOYW1lfTo6d3JhcCgke25hdGl2ZVR5cGV9KiBpbXBsJHtmb3JjZU5ld09iamVjdElu
cHV0fSkKIHsKIEVORAotICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaWYgKCFmb3JjZU5l
d09iamVjdCkge1xuIikgaWYgSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSk7Ci0gICAgcHVz
aChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworICAgIGlmICghSXNDU1NWYWx1ZVR5cGUoJGludGVy
ZmFjZU5hbWUpKSB7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsICIgICAgaWYgKCFmb3Jj
ZU5ld09iamVjdCkge1xuIikgaWYgSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSk7CisgICAg
ICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3cmFwcGVyID0gZXhpc3RpbmdXcmFwcGVyKGltcGwpOwogICAgICAgICBpZiAoIXdy
YXBwZXIuSXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiBFTkQKLSAgICBw
dXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cbiIpIGlmIElzRE9NTm9kZVR5cGUoJGludGVyZmFj
ZU5hbWUpOworICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCAiICAgIH1cbiIpIGlmIElzRE9N
Tm9kZVR5cGUoJGludGVyZmFjZU5hbWUpOworICAgIH0KICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCA8PEVORCk7CiAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcFNsb3coaW1wbCk7CiB9CkBA
IC0zNjA5LDYgKzM2MTEsMjEgQEAgc3ViIElzQXJyYXlUeXBlCiAgICAgcmV0dXJuICR0eXBlID1+
IG0vXFtcXSQvOwogfQogCitzdWIgSXNDU1NWYWx1ZVR5cGUKK3sKKyAgICBteSAkdHlwZSA9IHNo
aWZ0OworCisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ0NTU1ByaW1pdGl2ZVZhbHVlJzsKKyAg
ICByZXR1cm4gMSBpZiAkdHlwZSBlcSAnQ1NTVmFsdWUnOworICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICdDU1NWYWx1ZUxpc3QnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICdTVkdDb2xvcic7
CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgJ1NWR1BhaW50JzsKKyAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAnV2ViS2l0Q1NTRmlsdGVyVmFsdWUnOworICAgIHJldHVybiAxIGlmICR0eXBlIGVx
ICdXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSc7CisKKyAgICByZXR1cm4gMDsKK30KKwogc3ViIElz
RE9NTm9kZVR5cGUKIHsKICAgICBteSAkdHlwZSA9IHNoaWZ0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136350</attachid>
            <date>2012-04-09 17:30:42 -0700</date>
            <delta_ts>2012-04-09 17:33:39 -0700</delta_ts>
            <desc>Globalization patch</desc>
            <filename>bug-77700-totally.diff</filename>
            <type>text/plain</type>
            <size>246593</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MjZhZWIzLi41ZDA1OGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY4
IEBACisyMDEyLTA0LTA5ICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBNYWtlIENTU1ZhbHVlUG9vbCBzaGFyZSB2YWx1ZXMgZ2xvYmFsbHkuCisgICAgICAgIDxo
dHRwOi8vd2Via2l0Lm9yZy9iLzc3NzAwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSB0aGUgcGVyLURvY3VtZW50IENTU1ZhbHVlUG9vbCBh
bmQgaGF2ZSBldmVyeW9uZSB1c2UgYSBnbG9iYWwgcG9vbAorICAgICAgICBhY2Nlc3NlZCB2aWEg
IkNTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCkiLgorCisgICAgICAgIFRoaXMgcmVkdWNlcyBt
ZW1vcnkgdXNhZ2UgYnkgc2hhcmluZyBjYWNoZWQgQ1NTVmFsdWVzIGJldHdlZW4gYWxsIGRvY3Vt
ZW50cywKKyAgICAgICAgYW5kIHJlbGF4ZXMgaGVhcCBjaHVybiBzaW5jZSB0aGUgY29tbW9uLCBw
ZXJzaXN0ZW5seSBjYWNoZWQgdmFsdWVzIGFyZSBoZWxkCisgICAgICAgIGJ5IENTU1ZhbHVlUG9v
bCBmb3JldmVyLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZSB0aGFua3MgdG8gcjExMzU4
OCB3aGljaCBpbnRyb2R1Y2VkIGEgbWVjaGFuaXNtIHRoYXQgbWFrZXMKKyAgICAgICAgc3VyZSB3
ZSBuZXZlciBleHBvc2UgaW50ZXJuYWwgQ1NTVmFsdWUgb2JqZWN0cyB0byBiaW5kaW5ncywgYnV0
IHJlYWQtb25seQorICAgICAgICBjbG9uZXMgb2YgdGhvc2UgdmFsdWVzLgorCisgICAgICAgICog
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVGb3JO
aW5lUGllY2VJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVGb3JOaW5lUGllY2VJ
bWFnZVJlcGVhdCk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvck5pbmVQaWVjZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6Onpvb21BZGp1c3RlZFBpeGVsVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6em9vbUFkanVzdGVkTnVtYmVyVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6em9vbUFk
anVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvclJl
ZmxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UG9zaXRpb25PZmZzZXRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmN1cnJlbnRDb2xv
ck9yVmFsaWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpnZXRCb3JkZXJSYWRpdXNDb3JuZXJW
YWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUmFkaXVzU2hvcnRoYW5kVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29tcHV0ZWRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29t
cHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvckN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVl
Rm9yRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlRm9yR3JpZFRyYWNrQnJlYWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvckdyaWRUcmFja0xpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6dmFsdWVGb3JHcmlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RGVsYXlW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXREdXJhdGlvblZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUxpbmVCb3hDb250YWluVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRGb250U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0tl
eXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2
YWx1ZUZvclNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZvckZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpyZW5kZXJVbmljb2RlQmlkaUZsYWdzVG9DU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpyZW5kZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsUmVwZWF0VG9DU1NWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
U2l6ZVRvQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29udGVudFRvQ1NTVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y291bnRlclRvQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Zm9udEZhbWlseUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpsaW5lSGVpZ2h0RnJvbVN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRTaXplRnJvbVN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OmZvbnRTdHlsZUZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250VmFyaWFu
dEZyb21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpmb250V2VpZ2h0RnJvbVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlD
U1NWYWx1ZSk6CisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUNvbG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1w
bGVMZW5ndGhWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUtleXdvcmRWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
c2V0U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VW
YWxpZFByaW1pdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUJhY2tncm91bmRDbGlwKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNob3J0aGFuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlU2l6ZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZUZpbGxQb3NpdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUZpbGxQb3NpdGlvbkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlRmlsbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxs
UmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EaXJlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkZpbGxNb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VDbGlwU2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUV4
Y2x1c2lvblNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250KToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXI6OkZvbnRGYW1pbHlWYWx1
ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEZhbWlseVZhbHVlQnVpbGRlcjo6Y29t
bWl0KToKKyAgICAgICAgKEZvbnRGYW1pbHlWYWx1ZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUZvbnRWYXJpYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFy
c2VGb250V2VpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd1BhcnNlQ29udGV4dDo6Y29t
bWl0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlRmxleCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFn
ZVBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRl
ckltYWdlU2xpY2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlckltYWdlU2xpY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0Ojpjb21taXROdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFyc2VDb250ZXh0Ojpjb21taXRCb3Jk
ZXJJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJvcmRlclJh
ZGl1cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQXNwZWN0UmF0aW8pOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvdW50ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpw
YXJzZURlcHJlY2F0ZWRHcmFkaWVudENvbG9yU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVl
RnJvbVNpZGVLZXl3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvck9y
S2V5d29yZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDcm9zc2ZhZGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUltYWdlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VDdXN0b21GaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZUJ1aWx0aW5GaWx0ZXJBcmd1bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmxv
d1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUmVnaW9uVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRMaWdhdHVyZXMp
OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoQ1NTUGFyc2VyKToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVQb29sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmNzc1ZhbHVlUG9vbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBj
c3MvQ1NTVmFsdWVQb29sLmg6CisgICAgICAgIChDU1NWYWx1ZVBvb2wpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQcm9wZXJ0eVNldDo6c2V0UHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHls
ZVByb3BlcnR5U2V0Lmg6CisgICAgICAgIChTdHlsZVByb3BlcnR5U2V0KToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnQuY3BwOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRQcm9wZXJ0eVRvQXR0
cmlidXRlU3R5bGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmFkZEhUTUxDb2xvclRvU3R5bGUpOgorICAgICAgICAqIGh0
bWwvSFRNTEZvbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb250RWxlbWVu
dDo6Y29sbGVjdFN0eWxlRm9yQXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxIUkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEhSRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9y
QXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6Y3JlYXRlU2hhcmVkQ2VsbFN0eWxlKToKKwog
MjAxMi0wNC0wOSAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4IHRoZSBhc3NlcnRpb24gaW4gUGFnZVNjcmlwdERlYnVnU2VydmVyOjpkaWRQYXVzZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHAKaW5kZXggMzAwYTE1NC4uNjU0MDEwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTM3NSw3ICszNzUsNyBAQCBzdGF0
aWMgaW50IHZhbHVlRm9yUmVwZWF0UnVsZShpbnQgcnVsZSkKICAgICB9CiB9CiAKLXN0YXRpYyBQ
YXNzUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFn
ZVNsaWNlKGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1
ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHZhbHVl
Rm9yTmluZVBpZWNlSW1hZ2VTbGljZShjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAg
ICAgLy8gQ3JlYXRlIHRoZSBzbGljZXMuCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB0
b3A7CkBAIC0zODQsOSArMzg0LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VT
bGljZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoY29uc3QgTmkKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlZnQ7CiAKICAgICBpZiAoaW1hZ2UuaW1hZ2VTbGljZXMo
KS50b3AoKS5pc1BlcmNlbnQoKSkKLSAgICAgICAgdG9wID0gY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKTsKICAgICBlbHNlCi0gICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKS52YWx1ZSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkudG9wKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwogCiAgICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSA9
PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpICYmIGltYWdlLmltYWdlU2xpY2VzKCkuYm90dG9t
KCkgPT0gaW1hZ2UuaW1hZ2VTbGljZXMoKS50b3AoKQogICAgICAgICAmJiBpbWFnZS5pbWFnZVNs
aWNlcygpLmxlZnQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgpKSB7CkBAIC0zOTUsMjYg
KzM5NSwyNiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IHZh
bHVlRm9yTmluZVBpZWNlSW1hZ2VTbGljZShjb25zdCBOaQogICAgICAgICBsZWZ0ID0gdG9wOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChpbWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkuaXNQ
ZXJjZW50KCkpCi0gICAgICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
aW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7CisgICAgICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByaWdodCA9
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgpLnZh
bHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJpZ2h0
ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5yaWdodCgp
LnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIAogICAgICAgICBpZiAo
aW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnRvcCgp
ICYmIGltYWdlLmltYWdlU2xpY2VzKCkucmlnaHQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLmxl
ZnQoKSkgewogICAgICAgICAgICAgYm90dG9tID0gdG9wOwogICAgICAgICAgICAgbGVmdCA9IHJp
Z2h0OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGltYWdlLmltYWdlU2xpY2Vz
KCkuYm90dG9tKCkuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNsaWNlcygpLmJvdHRvbSgpLnZhbHVlKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgICAgICAgICAgYm90
dG9tID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0
b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgYm90dG9tID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoaW1hZ2UuaW1hZ2VTbGljZXMoKS5ib3R0b20oKS52YWx1ZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAKICAgICAgICAgICAgIGlmIChpbWFnZS5pbWFn
ZVNsaWNlcygpLmxlZnQoKSA9PSBpbWFnZS5pbWFnZVNsaWNlcygpLnJpZ2h0KCkpCiAgICAgICAg
ICAgICAgICAgbGVmdCA9IHJpZ2h0OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGltYWdlLmltYWdlU2xpY2VzKCkubGVmdCgpLmlzUGVyY2VudCgpKQotICAgICAgICAg
ICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShpbWFnZS5pbWFnZVNs
aWNlcygpLmxlZnQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0Up
OworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
aW1hZ2UuaW1hZ2VTbGljZXMoKS5sZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IGxlZnQgPSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xpY2VzKCkubGVm
dCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGltYWdlLmltYWdlU2xp
Y2VzKCkubGVmdCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTQyNSwxMCArNDI1LDEwIEBAIHN0YXRp
YyBQYXNzUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJ
bWFnZVNsaWNlKGNvbnN0IE5pCiAgICAgcXVhZC0+c2V0Qm90dG9tKGJvdHRvbSk7CiAgICAgcXVh
ZC0+c2V0TGVmdChsZWZ0KTsKIAotICAgIHJldHVybiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6
OmNyZWF0ZShjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHF1YWQucmVsZWFzZSgpKSwgaW1hZ2Uu
ZmlsbCgpKTsKKyAgICByZXR1cm4gQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlOjpjcmVhdGUoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpLCBpbWFnZS5maWxsKCkpOwog
fQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZVF1YWQoY29uc3QgTGVuZ3RoQm94JiBib3gsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQ
b29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBp
ZWNlSW1hZ2VRdWFkKGNvbnN0IExlbmd0aEJveCYgYm94KQogewogICAgIC8vIENyZWF0ZSB0aGUg
c2xpY2VzLgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdG9wOwpAQCAtNDM3LDkgKzQz
Nyw5IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQ
aWVjZUltYWdlUXVhZChjb25zdCBMZW5ndGhCb3gmCiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBsZWZ0OwogCiAgICAgaWYgKGJveC50b3AoKS5pc1JlbGF0aXZlKCkpCi0gICAgICAgIHRv
cCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94LnRvcCgpLnZhbHVlKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgdG9wID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoYm94LnRvcCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKICAgICBlbHNlCi0gICAgICAgIHRvcCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94
LnRvcCgpKTsKKyAgICAgICAgdG9wID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94LnRv
cCgpKTsKIAogICAgIGlmIChib3gucmlnaHQoKSA9PSBib3gudG9wKCkgJiYgYm94LmJvdHRvbSgp
ID09IGJveC50b3AoKSAmJiBib3gubGVmdCgpID09IGJveC50b3AoKSkgewogICAgICAgICByaWdo
dCA9IHRvcDsKQEAgLTQ0NywyNiArNDQ3LDI2IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChjb25zdCBMZW5ndGhCb3gmCiAg
ICAgICAgIGxlZnQgPSB0b3A7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGJveC5yaWdodCgp
LmlzUmVsYXRpdmUoKSkKLSAgICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShib3gucmlnaHQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CisgICAgICAgICAgICByaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5yaWdo
dCgpLnZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmlnaHQgPSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGJveC5yaWdo
dCgpKTsKKyAgICAgICAgICAgIHJpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoYm94
LnJpZ2h0KCkpOwogCiAgICAgICAgIGlmIChib3guYm90dG9tKCkgPT0gYm94LnRvcCgpICYmIGJv
eC5yaWdodCgpID09IGJveC5sZWZ0KCkpIHsKICAgICAgICAgICAgIGJvdHRvbSA9IHRvcDsKICAg
ICAgICAgICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChib3guYm90dG9tKCkuaXNSZWxhdGl2ZSgpKQotICAgICAgICAgICAgICAgIGJvdHRvbSA9IGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94LmJvdHRvbSgpLnZhbHVlKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICBib3R0b20gPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJvdHRvbSA9
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94LmJvdHRvbSgpKTsKKyAgICAgICAgICAgICAg
ICBib3R0b20gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShib3guYm90dG9tKCkpOwogCiAg
ICAgICAgICAgICBpZiAoYm94LmxlZnQoKSA9PSBib3gucmlnaHQoKSkKICAgICAgICAgICAgICAg
ICBsZWZ0ID0gcmlnaHQ7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAo
Ym94LmxlZnQoKS5pc1JlbGF0aXZlKCkpCi0gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoYm94LmxlZnQoKS52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsZWZ0
ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShib3gubGVmdCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbGVmdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJveC5sZWZ0KCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNDc3LDI2ICs0NzcsMjYgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFk
KGNvbnN0IExlbmd0aEJveCYKICAgICBxdWFkLT5zZXRCb3R0b20oYm90dG9tKTsKICAgICBxdWFk
LT5zZXRMZWZ0KGxlZnQpOwogCi0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
cXVhZC5yZWxlYXNlKCkpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShx
dWFkLnJlbGVhc2UoKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZv
ck5pbmVQaWVjZUltYWdlUmVwZWF0KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBpbWFnZSwgQ1NTVmFs
dWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVG
b3JOaW5lUGllY2VJbWFnZVJlcGVhdChjb25zdCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCiB7CiAg
ICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBob3Jpem9udGFsUmVwZWF0OwogICAgIFJlZlB0
cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmVydGljYWxSZXBlYXQ7CiAKLSAgICBob3Jpem9udGFsUmVw
ZWF0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVGb3JSZXBlYXRS
dWxlKGltYWdlLmhvcml6b250YWxSdWxlKCkpKTsKKyAgICBob3Jpem9udGFsUmVwZWF0ID0gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlRm9yUmVwZWF0UnVsZShpbWFn
ZS5ob3Jpem9udGFsUnVsZSgpKSk7CiAgICAgaWYgKGltYWdlLmhvcml6b250YWxSdWxlKCkgPT0g
aW1hZ2UudmVydGljYWxSdWxlKCkpCiAgICAgICAgIHZlcnRpY2FsUmVwZWF0ID0gaG9yaXpvbnRh
bFJlcGVhdDsKICAgICBlbHNlCi0gICAgICAgIHZlcnRpY2FsUmVwZWF0ID0gY3NzVmFsdWVQb29s
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWVGb3JSZXBlYXRSdWxlKGltYWdlLnZlcnRpY2Fs
UnVsZSgpKSk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoUGFpcjo6Y3Jl
YXRlKGhvcml6b250YWxSZXBlYXQucmVsZWFzZSgpLCB2ZXJ0aWNhbFJlcGVhdC5yZWxlYXNlKCkp
KTsKKyAgICAgICAgdmVydGljYWxSZXBlYXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVGb3JSZXBlYXRSdWxlKGltYWdlLnZlcnRpY2FsUnVsZSgpKSk7CisgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShob3Jpem9udGFs
UmVwZWF0LnJlbGVhc2UoKSwgdmVydGljYWxSZXBlYXQucmVsZWFzZSgpKSk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiBpbWFnZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZShjb25zdCBOaW5lUGllY2VJ
bWFnZSYgaW1hZ2UpCiB7CiAgICAgaWYgKCFpbWFnZS5oYXNJbWFnZSgpKQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpOwogCiAgICAgLy8gSW1hZ2UgZmlyc3QuCiAgICAgUmVmUHRyPENTU1ZhbHVlPiBpbWFn
ZVZhbHVlOwpAQCAtNTA0LDUyICs1MDQsNTIgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlRm9yTmluZVBpZWNlSW1hZ2UoY29uc3QgTmluZVBpZWNlSW1hZ2UmIGltYWdlLAogICAg
ICAgICBpbWFnZVZhbHVlID0gaW1hZ2UuaW1hZ2UoKS0+Y3NzVmFsdWUoKTsKIAogICAgIC8vIENy
ZWF0ZSB0aGUgaW1hZ2Ugc2xpY2UuCi0gICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZT4gaW1hZ2VTbGljZXMgPSB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoaW1hZ2UsIGNzc1Zh
bHVlUG9vbCk7CisgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gaW1hZ2VTbGlj
ZXMgPSB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2UoaW1hZ2UpOwogCiAgICAgLy8gQ3JlYXRl
IHRoZSBib3JkZXIgYXJlYSBzbGljZXMuCi0gICAgUmVmUHRyPENTU1ZhbHVlPiBib3JkZXJTbGlj
ZXMgPSB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChpbWFnZS5ib3JkZXJTbGljZXMoKSwgY3Nz
VmFsdWVQb29sKTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGJvcmRlclNsaWNlcyA9IHZhbHVlRm9y
TmluZVBpZWNlSW1hZ2VRdWFkKGltYWdlLmJvcmRlclNsaWNlcygpKTsKIAogICAgIC8vIENyZWF0
ZSB0aGUgYm9yZGVyIG91dHNldC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IG91dHNldCA9IHZhbHVl
Rm9yTmluZVBpZWNlSW1hZ2VRdWFkKGltYWdlLm91dHNldCgpLCBjc3NWYWx1ZVBvb2wpOworICAg
IFJlZlB0cjxDU1NWYWx1ZT4gb3V0c2V0ID0gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoaW1h
Z2Uub3V0c2V0KCkpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSByZXBlYXQgcnVsZXMuCi0gICAgUmVm
UHRyPENTU1ZhbHVlPiByZXBlYXQgPSB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KGltYWdl
LCBjc3NWYWx1ZVBvb2wpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcmVwZWF0ID0gdmFsdWVGb3JO
aW5lUGllY2VJbWFnZVJlcGVhdChpbWFnZSk7CiAKICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1h
Z2VWYWx1ZShpbWFnZVZhbHVlLCBpbWFnZVNsaWNlcywgYm9yZGVyU2xpY2VzLCBvdXRzZXQsIHJl
cGVhdCk7CiB9CiAKLWlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZShpbnQgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitpbmxpbmUgc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoaW50IHZhbHVlLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoYWRqdXN0Rm9yQWJzb2x1dGVab29tKHZhbHVlLCBzdHlsZSksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUFgpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhZGp1
c3RGb3JBYnNvbHV0ZVpvb20odmFsdWUsIHN0eWxlKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
WCk7CiB9CiAKLWlubGluZSBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gem9v
bUFkanVzdGVkTnVtYmVyVmFsdWUoZG91YmxlIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5
bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQoraW5saW5lIHN0YXRpYyBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiB6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZShkb3VibGUgdmFsdWUs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZSh2YWx1ZSAvIHN0eWxlLT5lZmZlY3RpdmVab29tKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
dmFsdWUgLyBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlRm9yTGVuZ3RoKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoY29uc3QgTGVuZ3RoJiBsZW5n
dGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAobGVuZ3RoLmlzRml4ZWQo
KSkKLSAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobGVuZ3RoLnZhbHVlKCks
IHN0eWxlLCBjc3NWYWx1ZVBvb2wpOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZh
bHVlKGxlbmd0aCk7CisgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKGxlbmd0
aC52YWx1ZSgpLCBzdHlsZSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZUZvclJlZmxl
Y3Rpb24oY29uc3QgU3R5bGVSZWZsZWN0aW9uKiByZWZsZWN0aW9uLCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IHZhbHVlRm9yUmVmbGVjdGlvbihjb25zdCBTdHlsZVJlZmxlY3Rpb24qIHJlZmxl
Y3Rpb24sIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoIXJlZmxlY3Rpb24p
Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IG9m
ZnNldDsKICAgICBpZiAocmVmbGVjdGlvbi0+b2Zmc2V0KCkuaXNQZXJjZW50KCkpCi0gICAgICAg
IG9mZnNldCA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUocmVmbGVjdGlvbi0+b2Zmc2V0KCku
cGVyY2VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICBv
ZmZzZXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZWZsZWN0aW9uLT5vZmZzZXQoKS5w
ZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgZWxzZQot
ICAgICAgICBvZmZzZXQgPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHJlZmxlY3Rpb24tPm9mZnNl
dCgpLnZhbHVlKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICBvZmZzZXQgPSB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHJlZmxlY3Rpb24tPm9mZnNldCgpLnZhbHVlKCksIHN0eWxlKTsK
IAotICAgIHJldHVybiBDU1NSZWZsZWN0VmFsdWU6OmNyZWF0ZShyZWZsZWN0aW9uLT5kaXJlY3Rp
b24oKSwgb2Zmc2V0LnJlbGVhc2UoKSwgdmFsdWVGb3JOaW5lUGllY2VJbWFnZShyZWZsZWN0aW9u
LT5tYXNrKCksIGNzc1ZhbHVlUG9vbCkpOworICAgIHJldHVybiBDU1NSZWZsZWN0VmFsdWU6OmNy
ZWF0ZShyZWZsZWN0aW9uLT5kaXJlY3Rpb24oKSwgb2Zmc2V0LnJlbGVhc2UoKSwgdmFsdWVGb3JO
aW5lUGllY2VJbWFnZShyZWZsZWN0aW9uLT5tYXNrKCkpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sLCBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3KQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFBvc2l0
aW9uT2Zmc2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIFJlbmRlclZpZXcqIHJlbmRlclZpZXcpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAg
cmV0dXJuIDA7CkBAIC01NzQsNTUgKzU3NCw1NCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3Blcgog
CiAgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24gfHwgc3R5bGUt
PnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikgewogICAgICAgICBpZiAobC50eXBlKCkgPT0g
V2ViQ29yZTo6Rml4ZWQpCi0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZShsLnZhbHVlKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUobC52YWx1ZSgpLCBzdHlsZSk7CiAgICAgICAgIGVsc2UgaWYg
KGwuaXNWaWV3cG9ydFBlcmNlbnRhZ2UoKSkKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHZhbHVlRm9yTGVuZ3RoKGwsIDAsIHJlbmRlclZpZXcpLCBzdHlsZSwgY3Nz
VmFsdWVQb29sKTsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobCk7
CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh2YWx1ZUZvckxlbmd0
aChsLCAwLCByZW5kZXJWaWV3KSwgc3R5bGUpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUobCk7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlLT5wb3NpdGlvbigpID09
IFJlbGF0aXZlUG9zaXRpb24pCiAgICAgICAgIC8vIEZJWE1FOiBJdCdzIG5vdCBlbm91Z2ggdG8g
c2ltcGx5IHJldHVybiAiYXV0byIgdmFsdWVzIGZvciBvbmUgb2Zmc2V0IGlmIHRoZSBvdGhlciBz
aWRlIGlzIGRlZmluZWQuCiAgICAgICAgIC8vIEluIG90aGVyIHdvcmRzIGlmIGxlZnQgaXMgYXV0
byBhbmQgcmlnaHQgaXMgbm90IGF1dG8sIHRoZW4gbGVmdCdzIGNvbXB1dGVkIHZhbHVlIGlzIG5l
Z2F0aXZlIHJpZ2h0KCkuCiAgICAgICAgIC8vIFNvIHdlIHNob3VsZCBnZXQgdGhlIG9wcG9zaXRl
IGxlbmd0aCB1bml0IGFuZCBzZWUgaWYgaXQgaXMgYXV0by4KLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUobCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShsKTsKIAotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjdXJyZW50Q29sb3JPclZhbGlk
Q29sb3IoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBDb2xvciYgY29sb3IpIGNvbnN0CiB7CiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBkb2VzIE5PVCBsb29rIGF0IHZpc2l0ZWQgaW5mb3JtYXRpb24s
IHNvIHRoYXQgY29tcHV0ZWQgc3R5bGUgZG9lc24ndCBleHBvc2UgdGhhdC4KLSAgICBDU1NWYWx1
ZVBvb2wqIGNzc1ZhbHVlUG9vbCA9IG1fbm9kZS0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCku
Z2V0KCk7CiAgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPmNvbG9yKCkucmdiKCkpOwotICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IucmdiKCkpOworICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+Y29sb3IoKS5yZ2Io
KSk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUoY29sb3Iucmdi
KCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGdldEJvcmRlclJhZGl1
c0Nvcm5lclZhbHVlcyhMZW5ndGhTaXplIHJhZGl1cywgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxl
LCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCwgUmVuZGVyVmlldyogcmVuZGVyVmlldykKK3N0
YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWVz
KExlbmd0aFNpemUgcmFkaXVzLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRlclZpZXcq
IHJlbmRlclZpZXcpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBpZiAocmFkaXVzLndpZHRoKCkudHlw
ZSgpID09IFBlcmNlbnQpCi0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0
ZVZhbHVlKHJhZGl1cy53aWR0aCgpLnBlcmNlbnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShyYWRpdXMud2lkdGgoKS5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSkpOwogICAgIGVsc2UKLSAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUodmFsdWVGb3JMZW5ndGgocmFkaXVzLndpZHRoKCksIDAsIHJlbmRlclZpZXcpLCBz
dHlsZSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKHZhbHVlRm9yTGVuZ3RoKHJhZGl1cy53aWR0aCgpLCAwLCByZW5kZXJWaWV3KSwg
c3R5bGUpKTsKICAgICBpZiAocmFkaXVzLmhlaWdodCgpLnR5cGUoKSA9PSBQZXJjZW50KQotICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShyYWRpdXMuaGVpZ2h0
KCkucGVyY2VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpKTsKKyAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHJhZGl1cy5oZWlnaHQo
KS5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSkpOwogICAgIGVs
c2UKLSAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodmFsdWVGb3JM
ZW5ndGgocmFkaXVzLmhlaWdodCgpLCAwLCByZW5kZXJWaWV3KSwgc3R5bGUsIGNzc1ZhbHVlUG9v
bCkpOworICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh2YWx1ZUZv
ckxlbmd0aChyYWRpdXMuaGVpZ2h0KCksIDAsIHJlbmRlclZpZXcpLCBzdHlsZSkpOwogICAgIHJl
dHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdl
dEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKExlbmd0aFNpemUgcmFkaXVzLCBjb25zdCBSZW5kZXJT
dHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sLCBSZW5kZXJWaWV3KiByZW5k
ZXJWaWV3KQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldEJvcmRlclJhZGl1c0Nvcm5l
clZhbHVlKExlbmd0aFNpemUgcmFkaXVzLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIFJlbmRl
clZpZXcqIHJlbmRlclZpZXcpCiB7CiAgICAgaWYgKHJhZGl1cy53aWR0aCgpID09IHJhZGl1cy5o
ZWlnaHQoKSkgewogICAgICAgICBpZiAocmFkaXVzLndpZHRoKCkudHlwZSgpID09IFBlcmNlbnQp
Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShyYWRpdXMud2lk
dGgoKS5wZXJjZW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7Ci0gICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHZhbHVlRm9yTGVuZ3RoKHJhZGl1cy53
aWR0aCgpLCAwLCByZW5kZXJWaWV3KSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmFkaXVzLndpZHRoKCkucGVyY2Vu
dCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICByZXR1cm4g
em9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh2YWx1ZUZvckxlbmd0aChyYWRpdXMud2lkdGgoKSwgMCwg
cmVuZGVyVmlldyksIHN0eWxlKTsKICAgICB9Ci0gICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nv
cm5lclZhbHVlcyhyYWRpdXMsIHN0eWxlLCBjc3NWYWx1ZVBvb2wsIHJlbmRlclZpZXcpOworICAg
IHJldHVybiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMocmFkaXVzLCBzdHlsZSwgcmVuZGVy
Vmlldyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gZ2V0Qm9yZGVyUmFk
aXVzU2hvcnRoYW5kVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZVBvb2wq
IGNzc1ZhbHVlUG9vbCwgUmVuZGVyVmlldyogcmVuZGVyVmlldykKK3N0YXRpYyBQYXNzUmVmUHRy
PENTU1ZhbHVlTGlzdD4gZ2V0Qm9yZGVyUmFkaXVzU2hvcnRoYW5kVmFsdWUoY29uc3QgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3KQogewogICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNsYXNoU2VwYXJhdGVkKCk7CiAg
ICAgYm9vbCBzaG93SG9yaXpvbnRhbEJvdHRvbUxlZnQgPSBzdHlsZS0+Ym9yZGVyVG9wUmlnaHRS
YWRpdXMoKS53aWR0aCgpICE9IHN0eWxlLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkud2lkdGgo
KTsKQEAgLTYzNCwxMCArNjMzLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Z2V0Qm9yZGVyUmFkaXVzU2hvcnRoYW5kVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgYm9v
bCBzaG93VmVydGljYWxUb3BSaWdodCA9IChzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKS5o
ZWlnaHQoKSAhPSBzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodCgpKSB8fCBzaG93
VmVydGljYWxCb3R0b21SaWdodDsKICAgICBib29sIHNob3dWZXJ0aWNhbFRvcExlZnQgPSAoc3R5
bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKS53aWR0aCgpICE9IHN0eWxlLT5ib3JkZXJUb3BMZWZ0
UmFkaXVzKCkuaGVpZ2h0KCkpOwogCi0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdG9wTGVmdFJh
ZGl1cyA9IGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlcyhzdHlsZS0+Ym9yZGVyVG9wTGVmdFJh
ZGl1cygpLCBzdHlsZSwgY3NzVmFsdWVQb29sLCByZW5kZXJWaWV3KTsKLSAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiB0b3BSaWdodFJhZGl1cyA9IGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlcyhz
dHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCwgcmVuZGVy
Vmlldyk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gYm90dG9tUmlnaHRSYWRpdXMgPSBnZXRC
b3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCks
IHN0eWxlLCBjc3NWYWx1ZVBvb2wsIHJlbmRlclZpZXcpOwotICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGJvdHRvbUxlZnRSYWRpdXMgPSBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUt
PmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCwgcmVuZGVyVmll
dyk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdG9wTGVmdFJhZGl1cyA9IGdldEJvcmRlclJh
ZGl1c0Nvcm5lclZhbHVlcyhzdHlsZS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLCBzdHlsZSwgcmVu
ZGVyVmlldyk7CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdG9wUmlnaHRSYWRpdXMgPSBnZXRC
b3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCksIHN0
eWxlLCByZW5kZXJWaWV3KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBib3R0b21SaWdodFJh
ZGl1cyA9IGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlcyhzdHlsZS0+Ym9yZGVyQm90dG9tUmln
aHRSYWRpdXMoKSwgc3R5bGUsIHJlbmRlclZpZXcpOworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+
IGJvdHRvbUxlZnRSYWRpdXMgPSBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZXMoc3R5bGUtPmJv
cmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgc3R5bGUsIHJlbmRlclZpZXcpOwogCiAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gaG9yaXpvbnRhbFJhZGlpID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwogICAgIGhvcml6b250YWxSYWRpaS0+YXBwZW5kKHRvcExlZnRSYWRpdXMt
Pml0ZW0oMCkpOwpAQCAtNjg0LDEwICs2ODMsMTAgQEAgc3RhdGljIGlubGluZSBib29sIGhhc0Nv
bXBvc2l0ZWRMYXllcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIHJldHVybiByZW5kZXJl
ciAmJiByZW5kZXJlci0+aGFzTGF5ZXIoKSAmJiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KHJlbmRl
cmVyKS0+bGF5ZXIoKS0+aXNDb21wb3NpdGVkKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBjb21wdXRlZFRyYW5zZm9ybShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkVHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoIXJlbmRlcmVyIHx8IHN0
eWxlLT50cmFuc2Zvcm0oKS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5v
bmUpOwogCiAgICAgTGF5b3V0UmVjdCBib3ggPSBzaXppbmdCb3gocmVuZGVyZXIpOwogCkBAIC03
MDEsMzQgKzcwMCwzNCBAQCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFu
c2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZAogICAgIGlmICh0cmFuc2Zv
cm0uaXNBZmZpbmUoKSkgewogICAgICAgICB0cmFuc2Zvcm1WYWwgPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6Y3JlYXRlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24pOwogCi0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUodHJhbnNmb3JtLmEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1
ZSh0cmFuc2Zvcm0uYigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAg
ICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9y
bS5jKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9y
bVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLmQoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBl
bmQoem9vbUFkanVzdGVkTnVtYmVyVmFsdWUodHJhbnNmb3JtLmUoKSwgc3R5bGUsIGNzc1ZhbHVl
UG9vbCkpOwotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJW
YWx1ZSh0cmFuc2Zvcm0uZigpLCBzdHlsZSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgIHRyYW5z
Zm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5hKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5iKCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5jKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5kKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKHpvb21BZGp1c3RlZE51bWJlclZh
bHVlKHRyYW5zZm9ybS5lKCksIHN0eWxlKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5k
KHpvb21BZGp1c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5mKCksIHN0eWxlKSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgdHJhbnNmb3JtVmFsID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OmNy
ZWF0ZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24p
OwogCi0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUodHJhbnNmb3JtLm0xMSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5z
Zm9ybS5tMTIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJh
bnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTEz
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZh
bC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLm0xNCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotCi0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLm0yMSgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTIzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUodHJhbnNmb3JtLm0yNCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwot
Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
dHJhbnNmb3JtLm0zMSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAg
ICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHRyYW5zZm9y
bS5tMzIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgdHJhbnNm
b3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTMzKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLm0zNCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotCi0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5k
KHpvb21BZGp1c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5tNDEoKSwgc3R5bGUsIGNzc1ZhbHVl
UG9vbCkpOwotICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJW
YWx1ZSh0cmFuc2Zvcm0ubTQyKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgdHJh
bnNmb3JtVmFsLT5hcHBlbmQoem9vbUFkanVzdGVkTnVtYmVyVmFsdWUodHJhbnNmb3JtLm00Mygp
LCBzdHlsZSwgY3NzVmFsdWVQb29sKSk7Ci0gICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNz
c1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUodHJhbnNmb3JtLm00NCgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTExKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMTIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUodHJhbnNmb3JtLm0xMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFu
c2Zvcm0ubTE0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisKKyAgICAgICAg
dHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3Jt
Lm0yMSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICB0cmFuc2Zv
cm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFuc2Zvcm0ubTIyKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMjMoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0yNCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOworCisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHRyYW5zZm9ybS5tMzEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKKyAgICAgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUodHJhbnNmb3JtLm0zMigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZSh0cmFuc2Zvcm0ubTMzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHRyYW5zZm9ybS5tMzQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKworICAg
ICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZCh6b29tQWRqdXN0ZWROdW1iZXJWYWx1ZSh0cmFuc2Zv
cm0ubTQxKCksIHN0eWxlKSk7CisgICAgICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKHpvb21BZGp1
c3RlZE51bWJlclZhbHVlKHRyYW5zZm9ybS5tNDIoKSwgc3R5bGUpKTsKKyAgICAgICAgdHJhbnNm
b3JtVmFsLT5hcHBlbmQoem9vbUFkanVzdGVkTnVtYmVyVmFsdWUodHJhbnNmb3JtLm00MygpLCBz
dHlsZSkpOworICAgICAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVWYWx1ZSh0cmFuc2Zvcm0ubTQ0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CiAgICAgfQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6
Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKQEAgLTc0MSw5ICs3NDAsOCBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gY29tcHV0ZWRUcmFuc2Zvcm0oUmVuZGVyT2JqZWN0KiByZW5kZXJlciwg
Y29uc3QgUmVuZAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0
aW9uOjp2YWx1ZUZvckN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcihjb25zdCBDdXN0b21GaWx0
ZXJOdW1iZXJQYXJhbWV0ZXIqIG51bWJlclBhcmFtZXRlcikgY29uc3QKIHsKICAgICBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBudW1iZXJQYXJhbWV0ZXJWYWx1ZSA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRl
U3BhY2VTZXBhcmF0ZWQoKTsKLSAgICBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCA9IG1fbm9k
ZS0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCkuZ2V0KCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlclBhcmFtZXRlci0+c2l6ZSgpOyArK2kpCi0gICAgICAgIG51bWJlclBh
cmFtZXRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShudW1iZXJQYXJh
bWV0ZXItPnZhbHVlQXQoaSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAg
ICAgIG51bWJlclBhcmFtZXRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUobnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KGkpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOwogICAgIHJldHVybiBudW1iZXJQYXJhbWV0ZXJWYWx1ZS5yZWxlYXNlKCk7CiB9CiAK
QEAgLTc2NCwxMCArNzYyLDggQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHls
ZURlY2xhcmF0aW9uOjp2YWx1ZUZvckN1c3RvbUZpbHRlclBhcmFtZXRlcigKICNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb246OnZhbHVlRm9yRmlsdGVyKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKLSAgICBD
U1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCA9IG1fbm9kZS0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQ
b29sKCkuZ2V0KCk7Ci0KICAgICBpZiAoc3R5bGUtPmZpbHRlcigpLm9wZXJhdGlvbnMoKS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBs
aXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogCkBAIC03ODAsNjEg
Kzc3Niw2MSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b246OnZhbHVlRm9yRmlsdGVyKFJlbmRlclN0eWxlKiBzdAogICAgICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6UkVGRVJFTkNFOiB7CiAgICAgICAgICAgICBSZWZlcmVuY2VGaWx0ZXJPcGVyYXRp
b24qIHJlZmVyZW5jZU9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PFJlZmVyZW5jZUZpbHRlck9wZXJh
dGlvbio+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktp
dENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlJlZmVyZW5jZUZp
bHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0aW9uLT5yZWZlcmVuY2UoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBl
bmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocmVmZXJlbmNlT3BlcmF0aW9uLT5yZWZlcmVu
Y2UoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6IHsK
ICAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4
T3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+
KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0Zp
bHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OkdyYXlzY2FsZUZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6IHsKICAgICAgICAgICAg
IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0aW9uID0g
c3RhdGljX2Nhc3Q8QmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJh
dGlvbik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpj
cmVhdGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OlNlcGlhRmlsdGVyT3BlcmF0aW9uKTsKLSAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjb2xv
ck1hdHJpeE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZVZhbHVlKGNvbG9yTWF0cml4T3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURTogewogICAgICAgICAgICAgQmFzaWNDb2xvck1h
dHJpeEZpbHRlck9wZXJhdGlvbiogY29sb3JNYXRyaXhPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxC
YXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uKj4oZmlsdGVyT3BlcmF0aW9uKTsKICAgICAg
ICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6U2F0dXJhdGVGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmls
dGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNvbG9yTWF0cml4T3Bl
cmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAg
ICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29s
b3JNYXRyaXhPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkhVRV9ST1RBVEU6IHsKICAgICAgICAgICAgIEJhc2ljQ29sb3JNYXRyaXhGaWx0
ZXJPcGVyYXRpb24qIGNvbG9yTWF0cml4T3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8QmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlvbik7CiAgICAgICAgICAgICBm
aWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVhdGUoV2ViS2l0Q1NTRmlsdGVy
VmFsdWU6Okh1ZVJvdGF0ZUZpbHRlck9wZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1
ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoY29sb3JNYXRyaXhPcGVyYXRpb24t
PmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RFRykpOworICAgICAgICAgICAgZmls
dGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjb2xvck1hdHJpeE9w
ZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfREVHKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOiB7CiAgICAgICAgICAgICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
KiBjb21wb25lbnRUcmFuc2Zlck9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJhc2ljQ29tcG9uZW50
VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAg
ZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRl
clZhbHVlOjpJbnZlcnRGaWx0ZXJPcGVyYXRpb24pOwotICAgICAgICAgICAgZmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0
aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAg
ICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY29tcG9u
ZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246Ok9QQUNJVFk6IHsKICAgICAgICAgICAgIEJhc2ljQ29tcG9uZW50VHJhbnNm
ZXJGaWx0ZXJPcGVyYXRpb24qIGNvbXBvbmVudFRyYW5zZmVyT3BlcmF0aW9uID0gc3RhdGljX2Nh
c3Q8QmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9wZXJhdGlvbio+KGZpbHRlck9wZXJhdGlv
bik7CiAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IFdlYktpdENTU0ZpbHRlclZhbHVlOjpjcmVh
dGUoV2ViS2l0Q1NTRmlsdGVyVmFsdWU6Ok9wYWNpdHlGaWx0ZXJPcGVyYXRpb24pOwotICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGNvbXBv
bmVudFRyYW5zZmVyT3BlcmF0aW9uLT5hbW91bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoY29tcG9uZW50VHJhbnNmZXJPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6IHsKICAgICAgICAgICAg
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qIGJyaWdodG5lc3NPcGVyYXRp
b24gPSBzdGF0aWNfY2FzdDxCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKj4o
ZmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gV2ViS2l0Q1NTRmls
dGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6QnJpZ2h0bmVzc0ZpbHRlck9w
ZXJhdGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoYnJpZ2h0bmVzc09wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGJyaWdodG5lc3NPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOiB7CiAgICAgICAgICAg
ICBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uKiBjb250cmFzdE9wZXJhdGlv
biA9IHN0YXRpY19jYXN0PEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24qPihm
aWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpDb250cmFzdEZpbHRlck9wZXJh
dGlvbik7Ci0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoY29udHJhc3RPcGVyYXRpb24tPmFtb3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShjb250cmFzdE9wZXJhdGlvbi0+YW1vdW50KCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewogICAgICAgICAgICAgQmx1ckZpbHRl
ck9wZXJhdGlvbiogYmx1ck9wZXJhdGlvbiA9IHN0YXRpY19jYXN0PEJsdXJGaWx0ZXJPcGVyYXRp
b24qPihmaWx0ZXJPcGVyYXRpb24pOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBXZWJLaXRD
U1NGaWx0ZXJWYWx1ZTo6Y3JlYXRlKFdlYktpdENTU0ZpbHRlclZhbHVlOjpCbHVyRmlsdGVyT3Bl
cmF0aW9uKTsKLSAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBlbmQoem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShibHVyT3BlcmF0aW9uLT5zdGREZXZpYXRpb24oKS52YWx1ZSgpLCBzdHlsZSwgY3Nz
VmFsdWVQb29sKSk7CisgICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoYmx1ck9wZXJhdGlvbi0+c3RkRGV2aWF0aW9uKCkudmFsdWUoKSwgc3R5bGUp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpEUk9QX1NIQURPVzogewpAQCAtODU5LDIyICs4NTUsMjIgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjp2YWx1ZUZvckZpbHRlcihSZW5k
ZXJTdHlsZSogc3QKICAgICAgICAgICAgIGlmIChwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKSkKICAg
ICAgICAgICAgICAgICBzaGFkZXJzTGlzdC0+YXBwZW5kKHByb2dyYW0tPnZlcnRleFNoYWRlcigp
LT5jc3NWYWx1ZSgpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaGFkZXJz
TGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
Tm9uZSkpOworICAgICAgICAgICAgICAgIHNoYWRlcnNMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwogICAgICAgICAgICAgaWYg
KHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkpCiAgICAgICAgICAgICAgICAgc2hhZGVyc0xpc3Qt
PmFwcGVuZChwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLT5jc3NWYWx1ZSgpKTsKICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzaGFkZXJzTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOworICAgICAgICAgICAgICAg
IHNoYWRlcnNMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSkpOwogICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChzaGFkZXJz
TGlzdC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBtZXNoUGFyYW1ldGVycyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0
ZWQoKTsKLSAgICAgICAgICAgIG1lc2hQYXJhbWV0ZXJzLT5hcHBlbmQoY3NzVmFsdWVQb29sLT5j
cmVhdGVWYWx1ZShjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgICAgICBtZXNoUGFyYW1ldGVycy0+YXBwZW5kKGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoY3VzdG9tT3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwotICAgICAgICAgICAgbWVzaFBhcmFtZXRlcnMt
PmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGN1c3RvbU9wZXJhdGlvbi0+bWVzaEJv
eFR5cGUoKSkpOworICAgICAgICAgICAgbWVzaFBhcmFtZXRlcnMtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShjdXN0b21PcGVyYXRpb24tPm1lc2hSb3dzKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgICAgICBtZXNoUGFyYW1ldGVycy0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGN1c3RvbU9wZXJhdGlvbi0+bWVzaENvbHVtbnMo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIG1lc2hQYXJh
bWV0ZXJzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY3VzdG9tT3BlcmF0aW9u
LT5tZXNoQm94VHlwZSgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGUgc3BlY2lmaWNhdGlvbiBkb2Vzbid0IGhhdmUgYW55ICJhdHRhY2hlZCIgaWRlbnRpZmllci4g
U2hvdWxkIHdlIGFkZCBvbmU/CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NzI3MDAKICAgICAgICAgICAgIGlmIChjdXN0b21PcGVyYXRpb24t
Pm1lc2hUeXBlKCkgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKLSAgICAgICAg
ICAgICAgICBtZXNoUGFyYW1ldGVycy0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlRGV0YWNoZWQpKTsKKyAgICAgICAgICAgICAgICBtZXNoUGFyYW1l
dGVycy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZURldGFjaGVkKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZpbHRlclZhbHVlLT5hcHBl
bmQobWVzaFBhcmFtZXRlcnMucmVsZWFzZSgpKTsKICAgICAgICAgICAgIApAQCAtODg2LDcgKzg4
Miw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
dmFsdWVGb3JGaWx0ZXIoUmVuZGVyU3R5bGUqIHN0CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhcmFtZXRlcnNTaXplOyArK2kpIHsKICAgICAgICAgICAgICAgICBjb25zdCBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IHBhcmFtZXRlcnMuYXQoaSkuZ2V0KCk7
CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gcGFyYW1ldGVyQ1NTTmFtZUFu
ZFZhbHVlID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlckNTU05hbWVBbmRWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUocGFyYW1ldGVyLT5uYW1lKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyQ1NTTmFtZUFuZFZhbHVlLT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGFyYW1ldGVyLT5uYW1lKCksIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfU1RSSU5HKSk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyQ1NTTmFtZUFuZFZh
bHVlLT5hcHBlbmQodmFsdWVGb3JDdXN0b21GaWx0ZXJQYXJhbWV0ZXIocGFyYW1ldGVyKSk7CiAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyc0NTU1ZhbHVlLT5hcHBlbmQocGFyYW1ldGVyQ1NTTmFt
ZUFuZFZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CkBAIC05MDcsNjIgKzkwMyw2MiBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVl
Rm9yRmlsdGVyKFJlbmRlclN0eWxlKiBzdAogI2VuZGlmCiAKICNpZiBFTkFCTEUoQ1NTX0dSSURf
TEFZT1VUKQotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrQnJl
YWR0aChjb25zdCBMZW5ndGgmIHRyYWNrTGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlRm9yR3JpZFRyYWNrQnJlYWR0aChjb25zdCBMZW5ndGgmIHRyYWNrTGVuZ3RoLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKHRyYWNrTGVuZ3RoLmlzUGVyY2VudCgp
KQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh0cmFja0xlbmd0aCk7
CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh0cmFja0xlbmd0aCk7
CiAgICAgaWYgKHRyYWNrTGVuZ3RoLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICByZXR1cm4gem9v
bUFkanVzdGVkUGl4ZWxWYWx1ZSh0cmFja0xlbmd0aC52YWx1ZSgpLCBzdHlsZSwgY3NzVmFsdWVQ
b29sKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUF1dG8pOworICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRyYWNr
TGVuZ3RoLnZhbHVlKCksIHN0eWxlKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChjb25zdCBWZWN0b3I8TGVuZ3RoPiYgdHJhY2tMZW5ndGhz
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQor
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFRyYWNrTGlzdChjb25zdCBW
ZWN0b3I8TGVuZ3RoPiYgdHJhY2tMZW5ndGhzLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CiAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3QgYW4gZWxlbWVudCEKICAgICBBU1NFUlQo
dHJhY2tMZW5ndGhzLnNpemUoKSk7CiAKICAgICAvLyBIYW5kbGUgdGhlICdub25lJyBjYXNlIGhl
cmUuCiAgICAgaWYgKHRyYWNrTGVuZ3Rocy5zaXplKCkgPT0gMSAmJiB0cmFja0xlbmd0aHNbMF0u
aXNVbmRlZmluZWQoKSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB0cmFja0xlbmd0aHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
IGxpc3QtPmFwcGVuZCh2YWx1ZUZvckdyaWRUcmFja0JyZWFkdGgodHJhY2tMZW5ndGhzW2ldLCBz
dHlsZSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZCh2YWx1ZUZvckdyaWRU
cmFja0JyZWFkdGgodHJhY2tMZW5ndGhzW2ldLCBzdHlsZSkpOwogICAgIHJldHVybiBsaXN0LnJl
bGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFBv
c2l0aW9uKGNvbnN0IExlbmd0aCYgcG9zaXRpb24sIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29s
KQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlRm9yR3JpZFBvc2l0aW9uKGNvbnN0
IExlbmd0aCYgcG9zaXRpb24pCiB7CiAgICAgaWYgKHBvc2l0aW9uLmlzQXV0bygpKQotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRv
KTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUF1dG8pOwogCiAgICAgQVNTRVJUKHBvc2l0aW9uLmlzRml4ZWQoKSk7Ci0gICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUocG9zaXRpb24udmFsdWUoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShwb3NpdGlvbi52YWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiB9
CiAjZW5kaWYKIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldERlbGF5VmFsdWUoY29u
c3QgQW5pbWF0aW9uTGlzdCogYW5pbUxpc3QsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQor
c3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldERlbGF5VmFsdWUoY29uc3QgQW5pbWF0aW9u
TGlzdCogYW5pbUxpc3QpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBpZiAoYW5pbUxpc3QpIHsKICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltTGlzdC0+c2l6ZSgpOyArK2kpCi0gICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShhbmltTGlzdC0+
YW5pbWF0aW9uKGkpLT5kZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbmltTGlzdC0+
YW5pbWF0aW9uKGkpLT5kZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKICAgICB9
IGVsc2UgewogICAgICAgICAvLyBOb3RlIHRoYXQgaW5pdGlhbEFuaW1hdGlvbkRlbGF5KCkgaXMg
dXNlZCBmb3IgYm90aCB0cmFuc2l0aW9ucyBhbmQgYW5pbWF0aW9ucwotICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRp
b25EZWxheSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKEFuaW1hdGlvbjo6aW5pdGlhbEFuaW1hdGlv
bkRlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOwogICAgIH0KICAgICByZXR1cm4g
bGlzdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXREdXJh
dGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1MaXN0LCBDU1NWYWx1ZVBvb2wqIGNz
c1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBnZXREdXJhdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvbkxpc3QqIGFuaW1MaXN0KQogewogICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgaWYg
KGFuaW1MaXN0KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYW5pbUxpc3QtPnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoYW5pbUxpc3QtPmFuaW1hdGlvbihpKS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TKSk7CisgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoYW5pbUxpc3QtPmFuaW1hdGlvbihpKS0+ZHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm90ZSB0aGF0IGluaXRp
YWxBbmltYXRpb25EdXJhdGlvbigpIGlzIHVzZWQgZm9yIGJvdGggdHJhbnNpdGlvbnMgYW5kIGFu
aW1hdGlvbnMKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
QW5pbWF0aW9uOjppbml0aWFsQW5pbWF0aW9uRHVyYXRpb24oKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShBbmltYXRpb246OmluaXRpYWxBbmltYXRpb25EdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1MpKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQpAQCAtOTk5
LDEwICs5OTUsMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGdldFRpbWluZ0Z1bmN0
aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbUxpc3QKICAgICByZXR1cm4gbGlzdC5y
ZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjcmVhdGVMaW5lQm94
Q29udGFpblZhbHVlKENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sLCB1bnNpZ25lZCBsaW5lQm94
Q29udGFpbikKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjcmVhdGVMaW5lQm94Q29udGFp
blZhbHVlKHVuc2lnbmVkIGxpbmVCb3hDb250YWluKQogewogICAgIGlmICghbGluZUJveENvbnRh
aW4pCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgcmV0dXJuIENTU0xpbmVCb3hDb250YWluVmFs
dWU6OmNyZWF0ZShsaW5lQm94Q29udGFpbik7CiB9CiAKQEAgLTEwNzEsMTMgKzEwNjcsMTEgQEAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRGb250
U2l6ZUNTU1ZhbHVlUHJlZmVycmluZ0sKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sID0gbV9ub2RlLT5kb2N1bWVudCgp
LT5jc3NWYWx1ZVBvb2woKS5nZXQoKTsKLQogICAgIGlmIChpbnQga2V5d29yZFNpemUgPSBzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkua2V5d29yZFNpemUoKSkKLSAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGNzc0lkZW50aWZpZXJGb3JGb250U2l6ZUtl
eXdvcmQoa2V5d29yZFNpemUpKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShjc3NJZGVudGlmaWVyRm9yRm9udFNpemVLZXl3b3JkKGtleXdvcmRT
aXplKSk7CiAKIAotICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5mb250
RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQ
b29sKTsKKyAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Zm9udERlc2Ny
aXB0aW9uKCkuY29tcHV0ZWRQaXhlbFNpemUoKSwgc3R5bGUuZ2V0KCkpOwogfQogCiBib29sIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSBjb25z
dApAQCAtMTA5NCwxOCArMTA4OCwxNyBAQCBib29sIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bjo6dXNlRml4ZWRGb250RGVmYXVsdFNpemUoKSBjb25zdAogCiBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OnZhbHVlRm9yU2hhZG93KGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvdywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7Ci0gICAgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wgPSBtX25vZGUtPmRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLmdldCgpOwogICAgIGlmICghc2hhZG93KQotICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25l
KTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVl
TGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBmb3IgKGNvbnN0IFNoYWRvd0RhdGEq
IHMgPSBzaGFkb3c7IHM7IHMgPSBzLT5uZXh0KCkpIHsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiB4ID0gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzLT54KCksIHN0eWxlLCBjc3NW
YWx1ZVBvb2wpOwotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHkgPSB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHMtPnkoKSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYmx1ciA9IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUocy0+
Ymx1cigpLCBzdHlsZSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBzcHJlYWQgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdyA/IFBh
c3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+KCkgOiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMt
PnNwcmVhZCgpLCBzdHlsZSwgY3NzVmFsdWVQb29sKTsKLSAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93IHx8
IHMtPnN0eWxlKCkgPT0gTm9ybWFsID8gUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4oKSA6
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5zZXQpOwotICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNvbG9yID0gY3NzVmFsdWVQb29sLT5jcmVh
dGVDb2xvclZhbHVlKHMtPmNvbG9yKCkucmdiKCkpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0
aXZlVmFsdWU+IHggPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMtPngoKSwgc3R5bGUpOworICAg
ICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHkgPSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
KHMtPnkoKSwgc3R5bGUpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJsdXIg
PSB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHMtPmJsdXIoKSwgc3R5bGUpOworICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNwcmVhZCA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlU
ZXh0U2hhZG93ID8gUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4oKSA6IHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUocy0+c3ByZWFkKCksIHN0eWxlKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBzdHlsZSA9IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93IHx8
IHMtPnN0eWxlKCkgPT0gTm9ybWFsID8gUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4oKSA6
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluc2V0KTsKKyAg
ICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUNvbG9yVmFsdWUocy0+Y29sb3IoKS5yZ2IoKSk7CiAgICAgICAgIGxpc3QtPnByZXBlbmQo
U2hhZG93VmFsdWU6OmNyZWF0ZSh4LnJlbGVhc2UoKSwgeS5yZWxlYXNlKCksIGJsdXIucmVsZWFz
ZSgpLCBzcHJlYWQucmVsZWFzZSgpLCBzdHlsZS5yZWxlYXNlKCksIGNvbG9yLnJlbGVhc2UoKSkp
OwogICAgIH0KICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CkBAIC0xMTMzLDMxICsxMTI2LDMx
IEBAIHN0YXRpYyBpbnQgaWRlbnRpZmllckZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSkKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHZhbHVlRm9yRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBDU1NWYWx1
ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiB2YWx1ZUZvckZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKIHsKICAgICBpZiAo
aW50IGZhbWlseUlkZW50aWZpZXIgPSBpZGVudGlmaWVyRm9yRmFtaWx5KGZhbWlseSkpCi0gICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShmYW1pbHlJZGVu
dGlmaWVyKTsKLSAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShmYW1pbHkuc3Ry
aW5nKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShmYW1pbHlJZGVudGlmaWVyKTsKKyAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoZmFtaWx5LnN0cmluZygpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1Zh
bHVlPiByZW5kZXJVbmljb2RlQmlkaUZsYWdzVG9DU1NWYWx1ZShFVW5pY29kZUJpZGkgdW5pY29k
ZUJpZGksIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHJlbmRlclVuaWNvZGVCaWRpRmxhZ3NUb0NTU1ZhbHVlKEVVbmljb2RlQmlkaSB1bmlj
b2RlQmlkaSkKIHsKICAgICBzd2l0Y2ggKHVuaWNvZGVCaWRpKSB7CiAgICAgY2FzZSBVQk5vcm1h
bDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAgICAgY2FzZSBFbWJlZDoKLSAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRW1iZWQpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlRW1iZWQpOwogICAgIGNhc2UgUGxhaW50ZXh0OgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRQbGFpbnRleHQpOworICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
V2Via2l0UGxhaW50ZXh0KTsKICAgICBjYXNlIE92ZXJyaWRlOgotICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCaWRpT3ZlcnJpZGUpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlQmlkaU92ZXJyaWRlKTsKICAgICBjYXNlIElzb2xhdGU6Ci0gICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdElzb2xhdGUpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlV2Via2l0SXNvbGF0ZSk7CiAgICAgY2FzZSBPdmVycmlkZUlzb2xhdGU6CiAgICAgewogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFj
ZVNlcGFyYXRlZCgpOwotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCaWRpT3ZlcnJpZGUpKTsKLSAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlV2Via2l0SXNv
bGF0ZSkpOworICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQmlkaU92ZXJyaWRlKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVXZWJraXRJc29sYXRl
KSk7CiAgICAgICAgIHJldHVybiBsaXN0OwogICAgIH0KICAgICB9CkBAIC0xMTY1LDc4ICsxMTU4
LDc4IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiByZW5kZXJVbmljb2RlQmlkaUZsYWdz
VG9DU1NWYWx1ZShFVW5pY29kZUJpZGkgdW5pY29kCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPENTU1ZhbHVlPiByZW5kZXJUZXh0RGVjb3JhdGlvbkZsYWdzVG9DU1NWYWx1
ZShpbnQgdGV4dERlY29yYXRpb24sIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJlbmRlclRleHREZWNvcmF0aW9uRmxhZ3NUb0NTU1ZhbHVl
KGludCB0ZXh0RGVjb3JhdGlvbikKIHsKICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0g
Q1NTVmFsdWVMaXN0OjpjcmVhdGVTcGFjZVNlcGFyYXRlZCgpOwogICAgIGlmICh0ZXh0RGVjb3Jh
dGlvbiAmIFVOREVSTElORSkKLSAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVW5kZXJsaW5lKSk7CisgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVVbmRlcmxp
bmUpKTsKICAgICBpZiAodGV4dERlY29yYXRpb24gJiBPVkVSTElORSkKLSAgICAgICAgbGlzdC0+
YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlT3Zlcmxp
bmUpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU92ZXJsaW5lKSk7CiAgICAgaWYgKHRleHREZWNvcmF0aW9uICYgTElO
RV9USFJPVUdIKQotICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lVGhyb3VnaCkpOworICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTGluZVRocm91Z2gp
KTsKICAgICBpZiAodGV4dERlY29yYXRpb24gJiBCTElOSykKLSAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQmxpbmspKTsKKyAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZUJsaW5rKSk7CiAKICAgICBpZiAoIWxpc3QtPmxlbmd0aCgpKQotICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpOwogICAgIHJldHVybiBsaXN0OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gZmlsbFJlcGVhdFRvQ1NTVmFsdWUoRUZpbGxSZXBlYXQgeFJlcGVhdCwgRUZpbGxSZXBlYXQg
eVJlcGVhdCwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gZmlsbFJlcGVhdFRvQ1NTVmFsdWUoRUZpbGxSZXBlYXQgeFJlcGVhdCwgRUZpbGxS
ZXBlYXQgeVJlcGVhdCkKIHsKICAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlm
IGJvdGggdmFsdWVzIGFyZSBlcXVhbCwganVzdCByZXR1cm4gb25lIG9mIHRoZW0uIEFuZAogICAg
IC8vIGlmIHRoZSB0d28gdmFsdWVzIGFyZSBlcXVpdmFsZW50IHRvIHJlcGVhdC14IG9yIHJlcGVh
dC15LCBqdXN0IHJldHVybiB0aGUgc2hvcnRoYW5kLgogICAgIGlmICh4UmVwZWF0ID09IHlSZXBl
YXQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHhSZXBlYXQpOwor
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoeFJlcGVhdCk7CiAgICAg
aWYgKHhSZXBlYXQgPT0gUmVwZWF0RmlsbCAmJiB5UmVwZWF0ID09IE5vUmVwZWF0RmlsbCkKLSAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
UmVwZWF0WCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVSZXBlYXRYKTsKICAgICBpZiAoeFJlcGVhdCA9PSBOb1JlcGVhdEZpbGwg
JiYgeVJlcGVhdCA9PSBSZXBlYXRGaWxsKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSZXBlYXRZKTsKKyAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdFkpOwogCiAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKLSAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSh4
UmVwZWF0KSk7Ci0gICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoeVJl
cGVhdCkpOworICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh4UmVw
ZWF0KSk7CisgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHlSZXBl
YXQpKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBmaWxsU2l6ZVRvQ1NTVmFsdWUoY29uc3QgRmlsbFNpemUmIGZpbGxTaXplLCBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGZpbGxTaXplVG9DU1NWYWx1ZShjb25zdCBGaWxsU2l6
ZSYgZmlsbFNpemUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoZmlsbFNp
emUudHlwZSA9PSBDb250YWluKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDb250YWluKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbnRhaW4pOwogCiAgICAgaWYg
KGZpbGxTaXplLnR5cGUgPT0gQ292ZXIpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvdmVyKTsKKyAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvdmVyKTsKIAogICAgIGlm
IChmaWxsU2l6ZS5zaXplLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm4gem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChmaWxsU2l6ZS5zaXplLndpZHRoKCksIHN0eWxlLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxl
bmd0aChmaWxsU2l6ZS5zaXplLndpZHRoKCksIHN0eWxlKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAg
bGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZmlsbFNpemUuc2l6
ZS53aWR0aCgpLCBzdHlsZSwgY3NzVmFsdWVQb29sKSk7Ci0gICAgbGlzdC0+YXBwZW5kKHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoZmlsbFNpemUuc2l6ZS5oZWlnaHQoKSwgc3R5bGUs
IGNzc1ZhbHVlUG9vbCkpOworICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVl
Rm9yTGVuZ3RoKGZpbGxTaXplLnNpemUud2lkdGgoKSwgc3R5bGUpKTsKKyAgICBsaXN0LT5hcHBl
bmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChmaWxsU2l6ZS5zaXplLmhlaWdodCgp
LCBzdHlsZSkpOwogICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IGNvbnRlbnRUb0NTU1ZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgQ1NTVmFsdWVQb29sKiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gY29udGVudFRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJh
dGVkKCk7CiAgICAgZm9yIChjb25zdCBDb250ZW50RGF0YSogY29udGVudERhdGEgPSBzdHlsZS0+
Y29udGVudERhdGEoKTsgY29udGVudERhdGE7IGNvbnRlbnREYXRhID0gY29udGVudERhdGEtPm5l
eHQoKSkgewogICAgICAgICBpZiAoY29udGVudERhdGEtPmlzQ291bnRlcigpKSB7CiAgICAgICAg
ICAgICBjb25zdCBDb3VudGVyQ29udGVudCogY291bnRlciA9IHN0YXRpY19jYXN0PGNvbnN0IENv
dW50ZXJDb250ZW50RGF0YSo+KGNvbnRlbnREYXRhKS0+Y291bnRlcigpOwogICAgICAgICAgICAg
QVNTRVJUKGNvdW50ZXIpOwotICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlVmFsdWUoY291bnRlci0+aWRlbnRpZmllcigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0NPVU5URVJfTkFNRSkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKGNvdW50ZXItPmlkZW50aWZpZXIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19DT1VOVEVSX05BTUUpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50RGF0YS0+aXNJbWFn
ZSgpKSB7CiAgICAgICAgICAgICBjb25zdCBTdHlsZUltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0
PGNvbnN0IEltYWdlQ29udGVudERhdGEqPihjb250ZW50RGF0YSktPmltYWdlKCk7CiAgICAgICAg
ICAgICBBU1NFUlQoaW1hZ2UpOwogICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGltYWdlLT5jc3NW
YWx1ZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50RGF0YS0+aXNUZXh0KCkpCi0gICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdGF0aWNfY2Fz
dDxjb25zdCBUZXh0Q29udGVudERhdGEqPihjb250ZW50RGF0YSktPnRleHQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdGF0aWNfY2FzdDxjb25zdCBUZXh0Q29udGVudERhdGEqPihj
b250ZW50RGF0YSktPnRleHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKICAg
ICB9CiAgICAgaWYgKCFzdHlsZS0+cmVnaW9uVGhyZWFkKCkuaXNOdWxsKCkpCi0gICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25UaHJlYWQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25UaHJlYWQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb3VudGVyVG9DU1NWYWx1ZShjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWVQb29s
KiBjc3NWYWx1ZVBvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NT
VmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
CiB7CiAgICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogbWFwID0gc3R5bGUtPmNvdW50ZXJE
aXJlY3RpdmVzKCk7CiAgICAgaWYgKCFtYXApCkBAIC0xMjQ0LDkgKzEyMzcsOSBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gY291bnRlclRvQ1NTVmFsdWUoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBDU1NQcm9wZQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQoKTsKICAgICBmb3IgKENvdW50ZXJEaXJlY3Rp
dmVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLT5iZWdpbigpOyBpdCAhPSBtYXAtPmVuZCgp
OyArK2l0KSB7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KGl0LT5maXJzdC5nZXQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKKyAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGl0LT5maXJzdC5nZXQo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpKTsKICAgICAgICAgc2hvcnQgbnVtYmVy
ID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eUNvdW50ZXJJbmNyZW1lbnQgPyBpdC0+c2Vjb25k
Lm1faW5jcmVtZW50VmFsdWUgOiBpdC0+c2Vjb25kLm1fcmVzZXRWYWx1ZTsKLSAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoKGRvdWJsZSludW1iZXIsIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZSgoZG91YmxlKW51bWJlciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKICAgICB9CiAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogfQpAQCAtMTI2
MCw3MiArMTI1Myw3MiBAQCBzdGF0aWMgdm9pZCBsb2dVbmltcGxlbWVudGVkUHJvcGVydHlJRChD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiAgICAgTE9HX0VSUk9SKCJXZWJLaXQgZG9lcyBub3Qg
eWV0IGltcGxlbWVudCBnZXRDb21wdXRlZFN0eWxlIGZvciAnJXMnLiIsIGdldFByb3BlcnR5TmFt
ZShwcm9wZXJ0eUlEKSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gZm9u
dEZhbWlseUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFs
dWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBmb250RmFtaWx5RnJvbVN0
eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBjb25zdCBGb250RmFtaWx5JiBmaXJzdEZh
bWlseSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5mYW1pbHkoKTsKICAgICBSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwog
ICAgIGZvciAoY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmZpcnN0RmFtaWx5OyBmYW1pbHk7
IGZhbWlseSA9IGZhbWlseS0+bmV4dCgpKQotICAgICAgICBsaXN0LT5hcHBlbmQodmFsdWVGb3JG
YW1pbHkoZmFtaWx5LT5mYW1pbHkoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgIGxpc3QtPmFw
cGVuZCh2YWx1ZUZvckZhbWlseShmYW1pbHktPmZhbWlseSgpKSk7CiAgICAgcmV0dXJuIGxpc3Qu
cmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGlu
ZUhlaWdodEZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFs
dWVQb29sLCBSZW5kZXJWaWV3KiByZW5kZXJWaWV3KQorc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGxpbmVIZWlnaHRGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3KQogewogICAgIExlbmd0aCBsZW5ndGggPSBzdHlsZS0+bGluZUhl
aWdodCgpOwogICAgIGlmIChsZW5ndGguaXNOZWdhdGl2ZSgpKQotICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKTsKICAgICBpZiAobGVuZ3RoLmlzUGVyY2VudCgpKQogICAgICAgICAvLyBUaGlzIGlzIGlt
cGVyZmVjdCwgYmVjYXVzZSBpdCBkb2Vzbid0IGluY2x1ZGUgdGhlIHpvb20gZmFjdG9yIGFuZCB0
aGUgcmVhbCBjb21wdXRhdGlvbgogICAgICAgICAvLyBmb3IgaG93IGhpZ2ggdG8gYmUgaW4gcGl4
ZWxzIGRvZXMgaW5jbHVkZSB0aGluZ3MgbGlrZSBtaW5pbXVtIGZvbnQgc2l6ZSBhbmQgdGhlIHpv
b20gZmFjdG9yLgogICAgICAgICAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgc2luY2UgZm9udC1zaXpl
IGRvZXNuJ3QgaW5jbHVkZSB0aGUgem9vbSBmYWN0b3IsIHdlIHJlYWxseSBjYW4ndCBkbwogICAg
ICAgICAvLyB0aGF0IGhlcmUgZWl0aGVyLgotICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aC5wZXJjZW50KCkgKiBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpKSAvIDEwMCwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7
Ci0gICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodmFsdWVGb3JMZW5ndGgobGVuZ3Ro
LCAwLCByZW5kZXJWaWV3KSwgc3R5bGUsIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgIHJldHVybiB6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0YXRpY19jYXN0PGludD4obGVuZ3RoLnBlcmNlbnQoKSAq
IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCkpIC8gMTAwLCBzdHlsZSk7
CisgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodmFsdWVGb3JMZW5ndGgobGVuZ3Ro
LCAwLCByZW5kZXJWaWV3KSwgc3R5bGUpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gZm9udFNpemVGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1
ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBmb250U2l6ZUZyb21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkUGl4
ZWxTaXplKCksIHN0eWxlLCBjc3NWYWx1ZVBvb2wpOworICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFBpeGVsU2l6ZSgpLCBz
dHlsZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5
bGVGcm9tU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlLCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9v
bCkKK3N0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250U3R5bGVGcm9tU3R5
bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGlmIChzdHlsZS0+Zm9udERlc2NyaXB0aW9u
KCkuaXRhbGljKCkpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUl0YWxpYyk7CisgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBmb250VmFyaWFudEZyb21T
dHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRWYXJpYW50RnJvbVN0eWxlKFJl
bmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNt
YWxsQ2FwcygpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVTbWFsbENhcHMpOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTbWFsbENhcHMpOworICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwp
OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gZm9udFdlaWdodEZy
b21TdHlsZShSZW5kZXJTdHlsZSogc3R5bGUsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQor
c3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGZvbnRXZWlnaHRGcm9tU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIHN3aXRjaCAoc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpLndlaWdodCgpKSB7CiAgICAgY2FzZSBGb250V2VpZ2h0MTAwOgotICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWUxMDApOworICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlMTAw
KTsKICAgICBjYXNlIEZvbnRXZWlnaHQyMDA6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTIwMCk7CisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWUyMDApOwogICAgIGNhc2Ug
Rm9udFdlaWdodDMwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlMzAwKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTMwMCk7CiAgICAgY2FzZSBGb250V2VpZ2h0Tm9y
bWFsOgotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb3JtYWwpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKICAgICBjYXNlIEZvbnRXZWlnaHQ1MDA6Ci0g
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZTUwMCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWU1MDApOwogICAgIGNhc2UgRm9udFdlaWdodDYwMDoKLSAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlNjAwKTsKKyAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTYw
MCk7CiAgICAgY2FzZSBGb250V2VpZ2h0Qm9sZDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQm9sZCk7CisgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCb2xkKTsKICAgICBj
YXNlIEZvbnRXZWlnaHQ4MDA6Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZTgwMCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWU4MDApOwogICAgIGNhc2UgRm9udFdlaWdo
dDkwMDoKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlOTAwKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZTkwMCk7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vcm1hbCk7CiB9CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQsIEVVcGRhdGVMYXlvdXQgdXBkYXRlTGF5b3V0KSBjb25zdApAQCAtMTM2MCw4ICsxMzUz
LDYgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpn
ZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnQKICAgICAgICAgICAgIHJlbmRlcmVyID0gcmVu
ZGVyZXItPmJlZm9yZVBzZXVkb0VsZW1lbnRSZW5kZXJlcigpOwogICAgIH0KIAotICAgIENTU1Zh
bHVlUG9vbCogY3NzVmFsdWVQb29sID0gbm9kZS0+ZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCku
Z2V0KCk7Ci0KICAgICBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rpb25B
d2FyZVByb3BlcnR5KHByb3BlcnR5SUQsIHN0eWxlLT5kaXJlY3Rpb24oKSwgc3R5bGUtPndyaXRp
bmdNb2RlKCkpOwogCiAgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CkBAIC0xMzY5LDE4ICsxMzYw
LDE4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6
Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yOgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JWYWx1ZShtX2FsbG93VmlzaXRlZFN0eWxlPyBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2Io
KSA6IHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2IoKSk7CisgICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShtX2FsbG93VmlzaXRlZFN0eWxlPyBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKS5yZ2Io
KSA6IHN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2U6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
SW1hZ2U6IHsKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSA/IHN0eWxlLT5tYXNrTGF5ZXJzKCkgOiBz
dHlsZS0+YmFja2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgaWYgKCFsYXllcnMpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogCiAgICAgICAgICAgICBpZiAoIWxheWVy
cy0+bmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGxheWVycy0+aW1hZ2UoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxheWVycy0+aW1hZ2UoKS0+Y3NzVmFsdWUoKTsKIAotICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKQEAgLTEzODgsNyArMTM3OSw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0CiAgICAgICAgICAgICAgICAgaWYgKGN1cnJMYXllci0+aW1hZ2UoKSkKICAgICAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGN1cnJMYXllci0+aW1hZ2UoKS0+Y3NzVmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7CisgICAgICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4g
bGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTEzOTcsMTEgKzEzODgsMTEgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnQKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXpl
OiB7CiAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGxheWVycyA9IHByb3BlcnR5SUQgPT0g
Q1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSA/IHN0eWxlLT5tYXNrTGF5ZXJzKCkgOiBzdHlsZS0+
YmFja2dyb3VuZExheWVycygpOwogICAgICAgICAgICAgaWYgKCFsYXllcnMtPm5leHQoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmlsbFNpemVUb0NTU1ZhbHVlKGxheWVycy0+c2l6ZSgpLCBz
dHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsbFNp
emVUb0NTU1ZhbHVlKGxheWVycy0+c2l6ZSgpLCBzdHlsZS5nZXQoKSk7CiAKICAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2Vw
YXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0g
bGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChmaWxsU2l6ZVRvQ1NTVmFsdWUoY3VyckxheWVyLT5zaXpl
KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoZmlsbFNpemVUb0NTU1ZhbHVlKGN1cnJMYXllci0+c2l6ZSgpLCBzdHlsZS5nZXQoKSkp
OwogCiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTE0
MDksMTEgKzE0MDAsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnQKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQ6IHsKICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXll
ciogbGF5ZXJzID0gcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tSZXBlYXQgPyBz
dHlsZS0+bWFza0xheWVycygpIDogc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAg
ICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGxSZXBl
YXRUb0NTU1ZhbHVlKGxheWVycy0+cmVwZWF0WCgpLCBsYXllcnMtPnJlcGVhdFkoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsbFJlcGVhdFRvQ1NTVmFsdWUobGF5
ZXJzLT5yZXBlYXRYKCksIGxheWVycy0+cmVwZWF0WSgpKTsKIAogICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQo
KTsKICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBsYXllcnM7
IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpCi0gICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGZpbGxSZXBlYXRUb0NTU1ZhbHVlKGN1cnJMYXllci0+cmVwZWF0WCgp
LCBjdXJyTGF5ZXItPnJlcGVhdFkoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKGZpbGxSZXBlYXRUb0NTU1ZhbHVlKGN1cnJMYXllci0+cmVwZWF0WCgpLCBj
dXJyTGF5ZXItPnJlcGVhdFkoKSkpOwogCiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNl
KCk7CiAgICAgICAgIH0KQEAgLTE0MjEsMTEgKzE0MTIsMTEgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1By
b3BlcnQKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6IHsKICAg
ICAgICAgICAgIGNvbnN0IEZpbGxMYXllciogbGF5ZXJzID0gcHJvcGVydHlJRCA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGUgPyBzdHlsZS0+bWFza0xheWVycygpIDogc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobGF5ZXJzLT5jb21w
b3NpdGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGxheWVycy0+Y29tcG9zaXRlKCkpOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVM
aXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAg
ICAgICAgZm9yIChjb25zdCBGaWxsTGF5ZXIqIGN1cnJMYXllciA9IGxheWVyczsgY3VyckxheWVy
OyBjdXJyTGF5ZXIgPSBjdXJyTGF5ZXItPm5leHQoKSkKLSAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShjdXJyTGF5ZXItPmNvbXBvc2l0ZSgpKSk7
CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KGN1cnJMYXllci0+Y29tcG9zaXRlKCkpKTsKIAogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVs
ZWFzZSgpOwogICAgICAgICB9CkBAIC0xNDMzLDExICsxNDI0LDExIEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNobWVudDog
ewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXllcnMgPSBwcm9wZXJ0eUlEID09IENT
U1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQgPyBzdHlsZS0+bWFza0xheWVycygpIDogc3R5
bGUtPmJhY2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobGF5ZXJz
LT5hdHRhY2htZW50KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShsYXllcnMtPmF0dGFjaG1lbnQoKSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxD
U1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7
CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3VyckxheWVyID0gbGF5ZXJzOyBj
dXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgpKQotICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKGN1cnJMYXllci0+YXR0YWNo
bWVudCgpKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKGN1cnJMYXllci0+YXR0YWNobWVudCgpKSk7CiAKICAgICAgICAgICAgIHJldHVy
biBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQpAQCAtMTQ1MSwxMyArMTQ0MiwxMyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAgICAgICAgYm9vbCBpc0NsaXAgPSBwcm9wZXJ0eUlE
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZENsaXAgfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEJhY2tncm91bmRDbGlwIHx8IHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRN
YXNrQ2xpcDsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpIHsKICAgICAgICAgICAg
ICAgICBFRmlsbEJveCBib3ggPSBpc0NsaXAgPyBsYXllcnMtPmNsaXAoKSA6IGxheWVycy0+b3Jp
Z2luKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
Ym94KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
Ym94KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4g
bGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAg
IGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBsYXllcnM7IGN1cnJMYXllcjsgY3Vy
ckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpIHsKICAgICAgICAgICAgICAgICBFRmlsbEJveCBi
b3ggPSBpc0NsaXAgPyBjdXJyTGF5ZXItPmNsaXAoKSA6IGN1cnJMYXllci0+b3JpZ2luKCk7Ci0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoYm94
KSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGJveCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CkBAIC0xNDY3LDE2ICsxNDU4LDE2IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAg
ICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXIqIGxheWVycyA9IHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb24gPyBzdHlsZS0+bWFza0xheWVycygpIDogc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKTsKICAgICAgICAgICAgIGlmICghbGF5ZXJzLT5uZXh0KCkpIHsKICAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVTcGFjZVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKGxheWVycy0+eFBvc2l0aW9uKCksIHN0eWxlLmdl
dCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChsYXllcnMtPnlQb3NpdGlvbigpLCBzdHlsZS5nZXQo
KSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1
c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgobGF5ZXJzLT54UG9zaXRpb24oKSwgc3R5bGUuZ2V0KCkp
KTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZv
ckxlbmd0aChsYXllcnMtPnlQb3NpdGlvbigpLCBzdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBh
cmF0ZWQoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgRmlsbExheWVyKiBjdXJyTGF5ZXIgPSBs
YXllcnM7IGN1cnJMYXllcjsgY3VyckxheWVyID0gY3VyckxheWVyLT5uZXh0KCkpIHsKICAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwb3NpdGlvbkxpc3QgPSBDU1NWYWx1ZUxp
c3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICAgICAgcG9zaXRpb25MaXN0
LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChjdXJyTGF5ZXItPnhQb3Np
dGlvbigpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7Ci0gICAgICAgICAgICAgICAgcG9z
aXRpb25MaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChjdXJyTGF5
ZXItPnlQb3NpdGlvbigpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAg
ICAgICAgcG9zaXRpb25MaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0
aChjdXJyTGF5ZXItPnhQb3NpdGlvbigpLCBzdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgICAg
IHBvc2l0aW9uTGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoY3Vy
ckxheWVyLT55UG9zaXRpb24oKSwgc3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQocG9zaXRpb25MaXN0KTsKICAgICAgICAgICAgIH0KIApAQCAtMTQ4NiwxMSArMTQ3
NywxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246
OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWDogewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVyKiBsYXll
cnMgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCA/IHN0eWxl
LT5tYXNrTGF5ZXJzKCkgOiBzdHlsZS0+YmFja2dyb3VuZExheWVycygpOwogICAgICAgICAgICAg
aWYgKCFsYXllcnMtPm5leHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
LT5jcmVhdGVWYWx1ZShsYXllcnMtPnhQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobGF5ZXJzLT54UG9zaXRpb24oKSk7CiAKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0
ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXllciogY3Vy
ckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+bmV4dCgp
KQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KGN1cnJMYXllci0+eFBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY3VyckxheWVyLT54UG9zaXRpb24oKSkpOwogCiAg
ICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KQEAgLTE0OTgsMTIz
ICsxNDg5LDEyMyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWTogewogICAgICAgICAgICAgY29uc3QgRmlsbExheWVy
KiBsYXllcnMgPSBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWSA/
IHN0eWxlLT5tYXNrTGF5ZXJzKCkgOiBzdHlsZS0+YmFja2dyb3VuZExheWVycygpOwogICAgICAg
ICAgICAgaWYgKCFsYXllcnMtPm5leHQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShsYXllcnMtPnlQb3NpdGlvbigpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobGF5ZXJzLT55UG9zaXRpb24oKSk7
CiAKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6
OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IEZpbGxMYXll
ciogY3VyckxheWVyID0gbGF5ZXJzOyBjdXJyTGF5ZXI7IGN1cnJMYXllciA9IGN1cnJMYXllci0+
bmV4dCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0
ZVZhbHVlKGN1cnJMYXllci0+eVBvc2l0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoY3VyckxheWVyLT55UG9zaXRpb24oKSkp
OwogCiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckNvbGxhcHNlOgogICAgICAgICAgICAgaWYgKHN0eWxl
LT5ib3JkZXJDb2xsYXBzZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUNvbGxhcHNlKTsKLSAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNlcGFyYXRl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKENTU1ZhbHVlQ29sbGFwc2UpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNlcGFyYXRlKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+aG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOwotICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnZlcnRpY2Fs
Qm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+aG9yaXpvbnRhbEJv
cmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSwgc3R5
bGUuZ2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAg
fQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmc6
Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+aG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAg
ICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+aG9yaXpvbnRhbEJvcmRl
clNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyVmVydGljYWxTcGFjaW5nOgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUtPnZlcnRpY2FsQm9yZGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgY3Nz
VmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLT52ZXJ0aWNhbEJvcmRlclNwYWNpbmcoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmJv
cmRlckltYWdlU291cmNlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXJJ
bWFnZVNvdXJjZSgpLT5jc3NWYWx1ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcjoKLSAgICAgICAgICAgIHJldHVy
biBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHN0
eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcikucmdi
KCkpIDogY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVy
VG9wQ29sb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xv
cihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yKS5yZ2IoKSkgOiBjdXJyZW50Q29sb3JPclZhbGlk
Q29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5ib3JkZXJUb3BDb2xvcigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3I6Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxv
d1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcikucmdiKCkpIDog
Y3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRD
b2xvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFs
dWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENv
bG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRDb2xvcigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yOgotICAgICAgICAgICAgcmV0dXJuIG1fYWxs
b3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yKS5yZ2IoKSkg
OiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5ib3JkZXJCb3R0
b21Db2xvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFs
aWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlckJvdHRvbUNvbG9yKCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yOgotICAgICAgICAgICAgcmV0dXJuIG1f
YWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUt
PnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcikucmdiKCkp
IDogY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgpLCBzdHlsZS0+Ym9yZGVyTGVm
dENvbG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fYWxsb3dWaXNpdGVkU3R5bGUgPyBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRD
b2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPmJvcmRlckxlZnRDb2xvcigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmJvcmRlclRvcFN0eWxlKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJUb3BTdHlsZSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0U3R5bGU6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Ym9yZGVyUmlnaHRTdHls
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+Ym9yZGVyUmlnaHRTdHlsZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmJvcmRlckJvdHRvbVN0eWxlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJCb3R0b21TdHlsZSgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRTdHlsZToKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKSk7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJvcmRlckxlZnRT
dHlsZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoOgotICAgICAg
ICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLmdldCgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGg6Ci0gICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBz
dHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoOgotICAgICAgICAgICAgcmV0
dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWUoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aDoKLSAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUu
Z2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJvdHRvbToKLSAgICAgICAgICAgIHJldHVybiBnZXRQb3NpdGlvbk9m
ZnNldFZhbHVlKHN0eWxlLmdldCgpLCBDU1NQcm9wZXJ0eUJvdHRvbSwgY3NzVmFsdWVQb29sLCBt
X25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0
UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlCb3R0b20sIG1fbm9k
ZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdEJveEFsaWduOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPmJveEFsaWduKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hBbGlnbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJveERpcmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZVZhbHVlKHN0eWxlLT5ib3hEaXJlY3Rpb24oKSk7CisgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveERpcmVjdGlvbigpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveEZsZXg6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94RmxleCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFs
dWUoc3R5bGUtPmJveEZsZXgoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm94RmxleEdyb3VwOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmJveEZsZXhHcm91cCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveEZsZXhHcm91cCgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hMaW5lczoK
LSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hM
aW5lcygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+Ym94TGluZXMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hPcmRp
bmFsR3JvdXA6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShz
dHlsZS0+Ym94T3JkaW5hbEdyb3VwKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94
T3JkaW5hbEdyb3VwKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveE9yaWVudDoKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5ib3hPcmllbnQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmJveE9yaWVudCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFBhY2s6Ci0gICAgICAgICAgICByZXR1cm4g
Y3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94UGFjaygpKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Ym94UGFjaygpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3Q6Ci0gICAgICAgICAgICByZXR1
cm4gdmFsdWVGb3JSZWZsZWN0aW9uKHN0eWxlLT5ib3hSZWZsZWN0KCksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yUmVmbGVjdGlvbihzdHls
ZS0+Ym94UmVmbGVjdCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
b3hTaGFkb3c6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c6CiAgICAg
ICAgICAgICByZXR1cm4gdmFsdWVGb3JTaGFkb3coc3R5bGUtPmJveFNoYWRvdygpLCBwcm9wZXJ0
eUlELCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDYXB0aW9uU2lkZToK
LSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jYXB0
aW9uU2lkZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+Y2FwdGlvblNpZGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDbGVhcjoK
LSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jbGVh
cigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHls
ZS0+Y2xlYXIoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDb2xvcjoKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUNvbG9yVmFsdWUobV9hbGxvd1Zpc2l0ZWRTdHls
ZSA/IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikucmdiKCkg
OiBzdHlsZS0+Y29sb3IoKS5yZ2IoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlQ29sb3JWYWx1ZShtX2FsbG93VmlzaXRlZFN0eWxlID8gc3R5bGUtPnZpc2l0ZWRE
ZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKS5yZ2IoKSA6IHN0eWxlLT5jb2xvcigpLnJn
YigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFByaW50Q29sb3JBZGp1c3Q6Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cHJpbnRD
b2xvckFkanVzdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+cHJpbnRDb2xvckFkanVzdCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdENvbHVtbkF4aXM6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVh
dGVWYWx1ZShzdHlsZS0+Y29sdW1uQXhpcygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uQXhpcygpKTsKICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50OgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oYXNB
dXRvQ29sdW1uQ291bnQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5Db3VudCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5Db3VudCgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRDb2x1bW5HYXA6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhhc05vcm1hbENvbHVtbkdhcCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vcm1hbCk7Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4
ZWxWYWx1ZShzdHlsZS0+Y29sdW1uR2FwKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc3R5bGUtPmNvbHVtbkdhcCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3I6Ci0gICAgICAgICAgICByZXR1cm4gbV9hbGxv
d1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlQ29sb3JWYWx1ZShzdHlsZS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKS5yZ2IoKSkgOiBjdXJy
ZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5jb2x1bW5SdWxlQ29sb3Io
KSk7CisgICAgICAgICAgICByZXR1cm4gbV9hbGxvd1Zpc2l0ZWRTdHlsZSA/IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUNvbG9yVmFsdWUoc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eU91dGxpbmVDb2xvcikucmdiKCkpIDogY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxl
LmdldCgpLCBzdHlsZS0+Y29sdW1uUnVsZUNvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVN0eWxlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtblJ1bGVTdHlsZSgpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uUnVsZVN0eWxlKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoOgotICAgICAg
ICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNvbHVtblJ1bGVXaWR0
aCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29t
QWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5jb2x1bW5SdWxlV2lkdGgoKSwgc3R5bGUuZ2V0KCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uU3BhbjoKICAgICAgICAgICAg
IGlmIChzdHlsZS0+Y29sdW1uU3BhbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtBZnRlcjoKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5jb2x1bW5CcmVha0FmdGVy
KCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxl
LT5jb2x1bW5CcmVha0FmdGVyKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29s
dW1uQnJlYWtCZWZvcmU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShzdHlsZS0+Y29sdW1uQnJlYWtCZWZvcmUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmNvbHVtbkJyZWFrQmVmb3JlKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQnJlYWtJbnNpZGU6Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Y29sdW1uQnJlYWtJbnNp
ZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPmNvbHVtbkJyZWFrSW5zaWRlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uV2lkdGg6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmhhc0F1dG9Db2x1bW5XaWR0aCgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc3R5bGUtPmNvbHVtbldpZHRoKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHN0eWxlLT5jb2x1bW5XaWR0aCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0FmdGVyOgotICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkJyZWFrQWZ0ZXIoKSk7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJlZ2lvbkJyZWFr
QWZ0ZXIoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25CcmVha0JlZm9y
ZToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5y
ZWdpb25CcmVha0JlZm9yZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uQnJlYWtCZWZvcmUoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRSZWdpb25CcmVha0luc2lkZToKLSAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25CcmVha0luc2lkZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uQnJl
YWtJbnNpZGUoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlDdXJzb3I6IHsKICAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Q7CiAgICAgICAgICAgICBDdXJzb3JMaXN0KiBj
dXJzb3JzID0gc3R5bGUtPmN1cnNvcnMoKTsKQEAgLTE2MjQsNyArMTYxNSw3IEBAIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdHlsZUltYWdlKiBpbWFn
ZSA9IGN1cnNvcnMtPmF0KGkpLmltYWdlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoaW1hZ2UtPmNzc1ZhbHVlKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUt
PmN1cnNvcigpKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+Y3Vyc29yKCkpOwogICAgICAgICAgICAgaWYgKGxp
c3QpIHsKICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQodmFsdWUpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKQEAgLTE2MzIsNjIgKzE2MjMsNjIgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnQKICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZWxlYXNlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpcmVjdGlvbjoKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5kaXJlY3Rpb24oKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmRpcmVj
dGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eURpc3BsYXk6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZGlzcGxheSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZGlzcGxheSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUVtcHR5Q2VsbHM6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZW1wdHlDZWxscygpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZW1wdHlDZWxs
cygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXg6IHsKICAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2Vw
YXJhdGVkKCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShzdHlsZS0+cG9zaXRpdmVGbGV4KCkpKTsKLSAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5uZWdhdGl2ZUZsZXgoKSkpOworICAgICAg
ICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5wb3Np
dGl2ZUZsZXgoKSkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5uZWdhdGl2ZUZsZXgoKSkpOwogCiAgICAgICAgICAgICBMZW5ndGgg
cHJlZmVycmVkU2l6ZSA9IHN0eWxlLT5mbGV4UHJlZmVycmVkU2l6ZSgpOwogICAgICAgICAgICAg
aWYgKHByZWZlcnJlZFNpemUuaXNBdXRvKCkpCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykpOworICAg
ICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVBdXRvKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChwcmVmZXJyZWRTaXpl
LmlzUGVyY2VudCgpKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKHByZWZlcnJlZFNpemUudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QRVJDRU5UQUdFKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHByZWZlcnJlZFNpemUudmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19QRVJDRU5UQUdFKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUocHJlZmVycmVkU2l6ZS52YWx1ZSgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHByZWZlcnJlZFNpemUudmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QWCkpOwogCiAgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxl
YXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZsZXhPcmRl
cjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5m
bGV4T3JkZXIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4T3JkZXIoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0RmxleFBhY2s6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1
ZShzdHlsZS0+ZmxleFBhY2soKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoc3R5bGUtPmZsZXhQYWNrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0RmxleEFsaWduOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
VmFsdWUoc3R5bGUtPmZsZXhBbGlnbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleEFsaWduKCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0RmxleEl0ZW1BbGlnbjoKICAgICAgICAgICAgIGlmIChzdHlsZS0+ZmxleEl0
ZW1BbGlnbigpID09IEFsaWduQXV0byAmJiBtX25vZGUgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkg
JiYgbV9ub2RlLT5wYXJlbnROb2RlKCktPmNvbXB1dGVkU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShtX25vZGUtPnBhcmVudE5vZGUoKS0+
Y29tcHV0ZWRTdHlsZSgpLT5mbGV4QWxpZ24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleEl0ZW1BbGlnbigpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobV9ub2RlLT5wYXJlbnROb2Rl
KCktPmNvbXB1dGVkU3R5bGUoKS0+ZmxleEFsaWduKCkpOworICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4SXRlbUFsaWduKCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleERpcmVjdGlvbjoKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4RGlyZWN0aW9uKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4RGly
ZWN0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleFdyYXA6Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleFdyYXAo
KSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PmZsZXhXcmFwKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0RmxleExpbmVQYWNr
OgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmZs
ZXhMaW5lUGFjaygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+ZmxleExpbmVQYWNrKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0RmxleEZsb3c6IHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBD
U1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleERpcmVjdGlvbigpKSk7
Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHls
ZS0+ZmxleFdyYXAoKSkpOworICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKHN0eWxlLT5mbGV4RGlyZWN0aW9uKCkpKTsKKyAgICAgICAgICAgIGxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxleFdyYXAoKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlGbG9hdDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZVZhbHVlKHN0eWxlLT5mbG9hdGluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+ZmxvYXRpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlGb250OiB7CiAgICAgICAgICAgICBSZWZQdHI8Rm9udFZhbHVlPiBjb21wdXRlZEZv
bnQgPSBGb250VmFsdWU6OmNyZWF0ZSgpOwotICAgICAgICAgICAgY29tcHV0ZWRGb250LT5zdHls
ZSA9IGZvbnRTdHlsZUZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKLSAgICAg
ICAgICAgIGNvbXB1dGVkRm9udC0+dmFyaWFudCA9IGZvbnRWYXJpYW50RnJvbVN0eWxlKHN0eWxl
LmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAgICAgY29tcHV0ZWRGb250LT53ZWlnaHQg
PSBmb250V2VpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAg
ICAgICAgY29tcHV0ZWRGb250LT5zaXplID0gZm9udFNpemVGcm9tU3R5bGUoc3R5bGUuZ2V0KCks
IGNzc1ZhbHVlUG9vbCk7Ci0gICAgICAgICAgICBjb21wdXRlZEZvbnQtPmxpbmVIZWlnaHQgPSBs
aW5lSGVpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wsIG1fbm9kZS0+ZG9j
dW1lbnQoKS0+cmVuZGVyVmlldygpKTsKLSAgICAgICAgICAgIGNvbXB1dGVkRm9udC0+ZmFtaWx5
ID0gZm9udEZhbWlseUZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAg
ICAgICAgIGNvbXB1dGVkRm9udC0+c3R5bGUgPSBmb250U3R5bGVGcm9tU3R5bGUoc3R5bGUuZ2V0
KCkpOworICAgICAgICAgICAgY29tcHV0ZWRGb250LT52YXJpYW50ID0gZm9udFZhcmlhbnRGcm9t
U3R5bGUoc3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgY29tcHV0ZWRGb250LT53ZWlnaHQgPSBm
b250V2VpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGNvbXB1dGVkRm9u
dC0+c2l6ZSA9IGZvbnRTaXplRnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIGNv
bXB1dGVkRm9udC0+bGluZUhlaWdodCA9IGxpbmVIZWlnaHRGcm9tU3R5bGUoc3R5bGUuZ2V0KCks
IG1fbm9kZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAgICAgIGNvbXB1dGVk
Rm9udC0+ZmFtaWx5ID0gZm9udEZhbWlseUZyb21TdHlsZShzdHlsZS5nZXQoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gY29tcHV0ZWRGb250LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Rm9udEZhbWlseTogewotICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
TGlzdD4gZm9udEZhbWlseUxpc3QgPSBmb250RmFtaWx5RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gZm9udEZhbWls
eUxpc3QgPSBmb250RmFtaWx5RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIC8v
IElmIHRoZXJlJ3Mgb25seSBhIHNpbmdsZSBmYW1pbHksIHJldHVybiB0aGF0IGFzIGEgQ1NTUHJp
bWl0aXZlVmFsdWUuCiAgICAgICAgICAgICAvLyBOT1RFOiBHZWNrbyBhbHdheXMgcmV0dXJucyB0
aGlzIGFzIGEgY29tbWEtc2VwYXJhdGVkIENTU1ByaW1pdGl2ZVZhbHVlIHN0cmluZy4KICAgICAg
ICAgICAgIGlmIChmb250RmFtaWx5TGlzdC0+bGVuZ3RoKCkgPT0gMSkKQEAgLTE2OTUsMTcgKzE2
ODYsMTcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpnZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnQKICAgICAgICAgICAgIHJldHVybiBmb250
RmFtaWx5TGlzdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUZvbnRTaXplOgotICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplRnJvbVN0eWxlKHN0eWxlLmdl
dCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIGZvbnRTaXplRnJvbVN0eWxl
KHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRTdHlsZToKLSAgICAg
ICAgICAgIHJldHVybiBmb250U3R5bGVGcm9tU3R5bGUoc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9v
bCk7CisgICAgICAgICAgICByZXR1cm4gZm9udFN0eWxlRnJvbVN0eWxlKHN0eWxlLmdldCgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50OgotICAgICAgICAgICAgcmV0dXJu
IGZvbnRWYXJpYW50RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgcmV0dXJuIGZvbnRWYXJpYW50RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4gZm9udFdlaWdo
dEZyb21TdHlsZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVy
biBmb250V2VpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEZvbnRGZWF0dXJlU2V0dGluZ3M6IHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRG
ZWF0dXJlU2V0dGluZ3MqIGZlYXR1cmVTZXR0aW5ncyA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24o
KS5mZWF0dXJlU2V0dGluZ3MoKTsKICAgICAgICAgICAgIGlmICghZmVhdHVyZVNldHRpbmdzIHx8
ICFmZWF0dXJlU2V0dGluZ3MtPnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb3JtYWwpOwogICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1Zh
bHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBmZWF0dXJlU2V0dGluZ3MtPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAg
ICAgICAgY29uc3QgRm9udEZlYXR1cmUmIGZlYXR1cmUgPSBmZWF0dXJlU2V0dGluZ3MtPmF0KGkp
OwpAQCAtMTcxNiwzNiArMTcwNywzNiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAg
ICB9CiAjaWYgRU5BQkxFKENTU19HUklEX0xBWU9VVCkKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEdyaWRDb2x1bW5zOiB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JHcmlkVHJh
Y2tMaXN0KHN0eWxlLT5ncmlkQ29sdW1ucygpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckdyaWRUcmFja0xpc3Qoc3R5bGUtPmdyaWRDb2x1
bW5zKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0R3JpZFJvd3M6IHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckdyaWRUcmFja0xp
c3Qoc3R5bGUtPmdyaWRSb3dzKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlRm9yR3JpZFRyYWNrTGlzdChzdHlsZS0+Z3JpZFJvd3MoKSwgc3R5
bGUuZ2V0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEdy
aWRDb2x1bW46Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JHcmlkUG9zaXRpb24oc3R5bGUt
PmdyaWRJdGVtQ29sdW1uKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFs
dWVGb3JHcmlkUG9zaXRpb24oc3R5bGUtPmdyaWRJdGVtQ29sdW1uKCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0R3JpZFJvdzoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvckdy
aWRQb3NpdGlvbihzdHlsZS0+Z3JpZEl0ZW1Sb3coKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAg
ICAgIHJldHVybiB2YWx1ZUZvckdyaWRQb3NpdGlvbihzdHlsZS0+Z3JpZEl0ZW1Sb3coKSk7CiAj
ZW5kaWYKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUhlaWdodDoKICAgICAgICAgICAgIGlmIChy
ZW5kZXJlcikgewogICAgICAgICAgICAgICAgIC8vIEFjY29yZGluZyB0byBodHRwOi8vd3d3Lncz
Lm9yZy9UUi9DU1MyL3Zpc3VkZXQuaHRtbCN0aGUtaGVpZ2h0LXByb3BlcnR5LAogICAgICAgICAg
ICAgICAgIC8vIHRoZSAiaGVpZ2h0IiBwcm9wZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJl
cGxhY2VkIGlubGluZSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5p
c1JlcGxhY2VkKCkgJiYgcmVuZGVyZXItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0Jv
eChyZW5kZXJlcikuaGVpZ2h0KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVs
VmFsdWUoc2l6aW5nQm94KHJlbmRlcmVyKS5oZWlnaHQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5n
dGgoc3R5bGUtPmhlaWdodCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5oZWlnaHQo
KSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0SGlnaGxpZ2h0
OgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oaWdobGlnaHQoKSA9PSBudWxsQXRvbSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHN0eWxlLT5oaWdobGlnaHQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+aGlnaGxpZ2h0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbnM6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+aHlwaGVucygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+aHlwaGVucygpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEh5cGhlbmF0ZUNoYXJhY3RlcjoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+aHlwaGVuYXRpb25TdHJpbmcoKS5pc051bGwoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZVZhbHVlKHN0eWxlLT5oeXBoZW5hdGlvblN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRIeXBoZW5hdGVMaW1p
dEFmdGVyOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSA8
IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKENTU1ZhbHVlQXV0byk7CkBAIC0xNzYwLDQ0ICsxNzUxLDQ0IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShzdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZUJvcmRlcik7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVMaW5lcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvcmRlcik7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
TGluZXMpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5SW1hZ2VSZW5kZXJpbmc6CiAgICAgICAg
ICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+aW1hZ2VSZW5kZXJp
bmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMZWZ0OgotICAgICAgICAgICAgcmV0dXJu
IGdldFBvc2l0aW9uT2Zmc2V0VmFsdWUoc3R5bGUuZ2V0KCksIENTU1Byb3BlcnR5TGVmdCwgY3Nz
VmFsdWVQb29sLCBtX25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAg
ICByZXR1cm4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlM
ZWZ0LCBtX25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CiAgICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlMZXR0ZXJTcGFjaW5nOgogICAgICAgICAgICAgaWYgKCFzdHlsZS0+bGV0dGVyU3Bh
Y2luZygpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZShzdHlsZS0+bGV0dGVyU3BhY2luZygpLCBzdHlsZS5nZXQoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5sZXR0ZXJTcGFjaW5nKCksIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVDbGFtcDoKICAgICAgICAgICAgIGlmIChz
dHlsZS0+bGluZUNsYW1wKCkuaXNOb25lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bGluZUNsYW1wKCkudmFs
dWUoKSwgc3R5bGUtPmxpbmVDbGFtcCgpLmlzUGVyY2VudGFnZSgpID8gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFIDogQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+bGluZUNsYW1wKCkudmFsdWUoKSwgc3R5bGUtPmxpbmVDbGFtcCgpLmlzUGVy
Y2VudGFnZSgpID8gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFIDogQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TGluZUhlaWdo
dDoKLSAgICAgICAgICAgIHJldHVybiBsaW5lSGVpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wsIG1fbm9kZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAg
ICAgIHJldHVybiBsaW5lSGVpZ2h0RnJvbVN0eWxlKHN0eWxlLmdldCgpLCBtX25vZGUtPmRvY3Vt
ZW50KCktPnJlbmRlclZpZXcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlMaXN0U3R5bGVJ
bWFnZToKICAgICAgICAgICAgIGlmIChzdHlsZS0+bGlzdFN0eWxlSW1hZ2UoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc3R5bGUtPmxpc3RTdHlsZUltYWdlKCktPmNzc1ZhbHVlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHls
ZVBvc2l0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmxpc3RTdHlsZVBvc2l0aW9uKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5saXN0U3R5bGVQb3NpdGlvbigpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUxpc3RTdHlsZVR5cGU6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bGlzdFN0eWxlVHlwZSgpKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bGlzdFN0eWxlVHlwZSgp
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExvY2FsZToKICAgICAgICAgICAgIGlm
IChzdHlsZS0+bG9jYWxlKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bG9jYWxlKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmxvY2FsZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlNYXJn
aW5Ub3A6IHsKICAgICAgICAgICAgIExlbmd0aCBtYXJnaW5Ub3AgPSBzdHlsZS0+bWFyZ2luVG9w
KCk7CiAgICAgICAgICAgICBpZiAobWFyZ2luVG9wLmlzRml4ZWQoKSB8fCAhcmVuZGVyZXIgfHwg
IXJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpblRvcCwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7
Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh0b1JlbmRlckJveChy
ZW5kZXJlciktPm1hcmdpblRvcCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJnaW5U
b3AsIHN0eWxlLmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZh
bHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+bWFyZ2luVG9wKCksIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luUmlnaHQ6IHsKICAgICAgICAg
ICAgIExlbmd0aCBtYXJnaW5SaWdodCA9IHN0eWxlLT5tYXJnaW5SaWdodCgpOwogICAgICAgICAg
ICAgaWYgKG1hcmdpblJpZ2h0LmlzRml4ZWQoKSB8fCAhcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5p
c0JveCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9y
TGVuZ3RoKG1hcmdpblJpZ2h0LCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJnaW5SaWdo
dCwgc3R5bGUuZ2V0KCkpOwogICAgICAgICAgICAgaW50IHZhbHVlOwogICAgICAgICAgICAgaWYg
KG1hcmdpblJpZ2h0LmlzUGVyY2VudCgpIHx8IG1hcmdpblJpZ2h0LmlzVmlld3BvcnRQZXJjZW50
YWdlKCkpCiAgICAgICAgICAgICAgICAgLy8gUmVuZGVyQm94IGdpdmVzIGEgbWFyZ2luUmlnaHQo
KSB0aGF0IGlzIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSByaWdodC1lZGdlIG9mIHRoZSBjaGls
ZCBib3gKQEAgLTE4MDYsMTE5ICsxNzk3LDExOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAog
ICAgICAgICAgICAgICAgIHZhbHVlID0gbWluaW11bVZhbHVlRm9yTGVuZ3RoKG1hcmdpblJpZ2h0
LCB0b1JlbmRlckJveChyZW5kZXJlciktPmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNv
bnRlbnQoKSwgbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHZhbHVlID0gdG9SZW5kZXJCb3gocmVuZGVyZXIpLT5tYXJn
aW5SaWdodCgpOwotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodmFs
dWUsIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUodmFsdWUsIHN0eWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5TWFyZ2luQm90dG9tOiB7CiAgICAgICAgICAgICBMZW5ndGggbWFy
Z2luQm90dG9tID0gc3R5bGUtPm1hcmdpbkJvdHRvbSgpOwogICAgICAgICAgICAgaWYgKG1hcmdp
bkJvdHRvbS5pc0ZpeGVkKCkgfHwgIXJlbmRlcmVyIHx8ICFyZW5kZXJlci0+aXNCb3goKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChtYXJn
aW5Cb3R0b20sIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAgICAgcmV0dXJu
IHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5tYXJnaW5Cb3R0
b20oKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgobWFyZ2luQm90dG9tLCBzdHlsZS5nZXQo
KSk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZSh0b1JlbmRlckJv
eChyZW5kZXJlciktPm1hcmdpbkJvdHRvbSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1hcmdpbkxlZnQ6IHsKICAgICAgICAgICAgIExlbmd0aCBt
YXJnaW5MZWZ0ID0gc3R5bGUtPm1hcmdpbkxlZnQoKTsKICAgICAgICAgICAgIGlmIChtYXJnaW5M
ZWZ0LmlzRml4ZWQoKSB8fCAhcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5pc0JveCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpbkxl
ZnQsIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAgICAgcmV0dXJuIHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5tYXJnaW5MZWZ0KCksIHN0
eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKG1hcmdpbkxlZnQsIHN0eWxlLmdldCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVy
KS0+bWFyZ2luTGVmdCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVEaXJlY3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bWFycXVlZURpcmVjdGlvbigpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+bWFycXVlZURp
cmVjdGlvbigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVJbmNyZW1l
bnQ6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+
bWFycXVlZUluY3JlbWVudCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+bWFycXVlZUluY3JlbWVudCgpKTsKICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hcnF1ZWVSZXBldGl0aW9uOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5t
YXJxdWVlTG9vcENvdW50KCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluZmluaXRlKTsKLSAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXJxdWVlTG9vcENvdW50
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5maW5pdGUp
OworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5t
YXJxdWVlTG9vcENvdW50KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcnF1ZWVTdHlsZToKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXJxdWVlQmVoYXZpb3IoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcnF1
ZWVCZWhhdmlvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnk6
Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+dXNl
ck1vZGlmeSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+dXNlck1vZGlmeSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU1heEhlaWdo
dDogewogICAgICAgICAgICAgY29uc3QgTGVuZ3RoJiBtYXhIZWlnaHQgPSBzdHlsZS0+bWF4SGVp
Z2h0KCk7CiAgICAgICAgICAgICBpZiAobWF4SGVpZ2h0LmlzVW5kZWZpbmVkKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxl
bmd0aChtYXhIZWlnaHQsIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3Ro
KG1heEhlaWdodCwgc3R5bGUuZ2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlNYXhXaWR0aDogewogICAgICAgICAgICAgY29uc3QgTGVuZ3RoJiBtYXhXaWR0aCA9IHN0
eWxlLT5tYXhXaWR0aCgpOwogICAgICAgICAgICAgaWYgKG1heFdpZHRoLmlzVW5kZWZpbmVkKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZUZvckxlbmd0aChtYXhXaWR0aCwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVG
b3JMZW5ndGgobWF4V2lkdGgsIHN0eWxlLmdldCgpKTsKICAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5TWluSGVpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPm1pbkhlaWdodCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFs
dWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVu
Z3RoKHN0eWxlLT5taW5IZWlnaHQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1By
b3BlcnR5TWluV2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1
ZUZvckxlbmd0aChzdHlsZS0+bWluV2lkdGgoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7
CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHls
ZS0+bWluV2lkdGgoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5T3Bh
Y2l0eToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxl
LT5vcGFjaXR5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+b3BhY2l0eSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPcnBo
YW5zOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUt
Pm9ycGhhbnMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vcnBoYW5zKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91dGxp
bmVDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBtX2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFs
dWVQb29sLT5jcmVhdGVDb2xvclZhbHVlKHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlPdXRsaW5lQ29sb3IpLnJnYigpKSA6IGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihz
dHlsZS5nZXQoKSwgc3R5bGUtPm91dGxpbmVDb2xvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBt
X2FsbG93VmlzaXRlZFN0eWxlID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlQ29sb3JWYWx1ZShzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKS5yZ2IoKSkg
OiBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT5vdXRsaW5lQ29s
b3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0OgotICAgICAgICAg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPm91dGxpbmVPZmZzZXQoKSwg
c3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVz
dGVkUGl4ZWxWYWx1ZShzdHlsZS0+b3V0bGluZU9mZnNldCgpLCBzdHlsZS5nZXQoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlPdXRsaW5lU3R5bGU6CiAgICAgICAgICAgICBpZiAoc3R5bGUt
Pm91dGxpbmVTdHlsZUlzQXV0bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlQXV0byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoc3R5bGUtPm91dGxpbmVTdHlsZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU91
dGxpbmVXaWR0aDoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0
eWxlLT5vdXRsaW5lV2lkdGgoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAg
ICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+b3V0bGluZVdpZHRoKCks
IHN0eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eU92ZXJmbG93OgotICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUobWF4KHN0eWxlLT5vdmVyZmxv
d1goKSwgc3R5bGUtPm92ZXJmbG93WSgpKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUobWF4KHN0eWxlLT5vdmVyZmxvd1goKSwgc3R5bGUtPm92ZXJmbG93
WSgpKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1g6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dYKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1goKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlPdmVyZmxvd1k6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+b3ZlcmZsb3dZKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5vdmVyZmxv
d1koKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nVG9wOgogICAgICAgICAgICAg
aWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ1Rv
cChFeGNsdWRlSW50cmluc2ljUGFkZGluZyksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwot
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUt
PnBhZGRpbmdUb3AoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5w
YWRkaW5nVG9wKEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSwgc3R5bGUuZ2V0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRp
bmdUb3AoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1Jp
Z2h0OgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JveCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJl
bmRlcmVyKS0+cGFkZGluZ1JpZ2h0KEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSwgc3R5bGUuZ2V0
KCksIGNzc1ZhbHVlUG9vbCk7Ci0gICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxW
YWx1ZUZvckxlbmd0aChzdHlsZS0+cGFkZGluZ1JpZ2h0KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1
ZVBvb2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRv
UmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ1JpZ2h0KEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5n
KSwgc3R5bGUuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRpbmdSaWdodCgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tOgogICAgICAgICAgICAgaWYgKHJlbmRlcmVy
ICYmIHJlbmRlcmVyLT5pc0JveCgpKQotICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0
ZWRQaXhlbFZhbHVlKHRvUmVuZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ0JvdHRvbShFeGNsdWRl
SW50cmluc2ljUGFkZGluZyksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRpbmdC
b3R0b20oKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVuZGVyZXIpLT5wYWRkaW5n
Qm90dG9tKEV4Y2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSwgc3R5bGUuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRpbmdC
b3R0b20oKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ0xl
ZnQ6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQm94KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFsdWUodG9SZW5kZXJCb3gocmVu
ZGVyZXIpLT5wYWRkaW5nTGVmdChFeGNsdWRlSW50cmluc2ljUGFkZGluZyksIHN0eWxlLmdldCgp
LCBjc3NWYWx1ZVBvb2wpOwotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBpeGVsVmFs
dWVGb3JMZW5ndGgoc3R5bGUtPnBhZGRpbmdMZWZ0KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBv
b2wpOworICAgICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHRvUmVu
ZGVyQm94KHJlbmRlcmVyKS0+cGFkZGluZ0xlZnQoRXhjbHVkZUludHJpbnNpY1BhZGRpbmcpLCBz
dHlsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZv
ckxlbmd0aChzdHlsZS0+cGFkZGluZ0xlZnQoKSwgc3R5bGUuZ2V0KCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5UGFnZUJyZWFrQWZ0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cGFnZUJyZWFrQWZ0ZXIoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnBhZ2VCcmVha0FmdGVyKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrQmVmb3JlOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnBhZ2VCcmVha0JlZm9yZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
cGFnZUJyZWFrQmVmb3JlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFnZUJyZWFrSW5z
aWRlOiB7CiAgICAgICAgICAgICBFUGFnZUJyZWFrIHBhZ2VCcmVhayA9IHN0eWxlLT5wYWdlQnJl
YWtJbnNpZGUoKTsKICAgICAgICAgICAgIEFTU0VSVChwYWdlQnJlYWsgIT0gUEJBTFdBWVMpOwog
ICAgICAgICAgICAgaWYgKHBhZ2VCcmVhayA9PSBQQkFMV0FZUykKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT5wYWdlQnJlYWtJbnNpZGUoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoc3R5bGUtPnBhZ2VCcmVha0luc2lkZSgpKTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5UG9zaXRpb246Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cG9zaXRpb24oKSk7CisgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnBvc2l0aW9uKCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5UmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0UG9zaXRpb25P
ZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlSaWdodCwgY3NzVmFsdWVQb29sLCBt
X25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0
UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQoKSwgQ1NTUHJvcGVydHlSaWdodCwgbV9ub2Rl
LT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGFi
bGVMYXlvdXQ6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShz
dHlsZS0+dGFibGVMYXlvdXQoKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoc3R5bGUtPnRhYmxlTGF5b3V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dEFsaWduOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPnRleHRBbGlnbigpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEFsaWduKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5VGV4dERlY29yYXRpb246Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERlY29yYXRp
b25GbGFnc1RvQ1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uKCksIGNzc1ZhbHVlUG9vbCk7
CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERlY29yYXRpb25GbGFnc1RvQ1NTVmFsdWUo
c3R5bGUtPnRleHREZWNvcmF0aW9uKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VGV4dERlY29yYXRpb25zSW5FZmZlY3Q6Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERl
Y29yYXRpb25GbGFnc1RvQ1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCks
IGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gcmVuZGVyVGV4dERlY29yYXRpb25G
bGFnc1RvQ1NTVmFsdWUoc3R5bGUtPnRleHREZWNvcmF0aW9uc0luRWZmZWN0KCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvcjoKICAgICAgICAgICAgIHJldHVy
biBjdXJyZW50Q29sb3JPclZhbGlkQ29sb3Ioc3R5bGUuZ2V0KCksIHN0eWxlLT50ZXh0RmlsbENv
bG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzQ29sb3I6
CiAgICAgICAgICAgICByZXR1cm4gY3VycmVudENvbG9yT3JWYWxpZENvbG9yKHN0eWxlLmdldCgp
LCBzdHlsZS0+dGV4dEVtcGhhc2lzQ29sb3IoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0RW1waGFzaXNQb3NpdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0RW1waGFzaXNQb3NpdGlvbigpKTsKKyAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEVtcGhhc2lz
UG9zaXRpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNT
dHlsZToKICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUtPnRleHRFbXBoYXNpc01hcmsoKSkgewog
ICAgICAgICAgICAgY2FzZSBUZXh0RW1waGFzaXNNYXJrTm9uZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICBjYXNlIFRleHRFbXBoYXNpc01hcmtDdXN0
b206Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5
bGUtPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpOworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORyk7CiAgICAgICAgICAgICBjYXNlIFRleHRFbXBoYXNpc01hcmtBdXRvOgogICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIC8vIEZhbGwgdGhy
b3VnaApAQCAtMTkyOCwxMjkgKzE5MTksMTI5IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAg
ICAgICAgICAgICBjYXNlIFRleHRFbXBoYXNpc01hcmtUcmlhbmdsZToKICAgICAgICAgICAgIGNh
c2UgVGV4dEVtcGhhc2lzTWFya1Nlc2FtZTogewogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5
bGUtPnRleHRFbXBoYXNpc0ZpbGwoKSkpOwotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0RW1waGFzaXNNYXJrKCkpKTsKKyAg
ICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5
bGUtPnRleHRFbXBoYXNpc0ZpbGwoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dEVtcGhhc2lzTWFyaygpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dEluZGVudDoKLSAgICAgICAg
ICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50ZXh0SW5k
ZW50KCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHpv
b21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRleHRJbmRlbnQoKSwgc3R5bGUu
Z2V0KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5VGV4dFNoYWRvdzoKICAgICAgICAgICAg
IHJldHVybiB2YWx1ZUZvclNoYWRvdyhzdHlsZS0+dGV4dFNoYWRvdygpLCBwcm9wZXJ0eUlELCBz
dHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlUZXh0UmVuZGVyaW5nOgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpLnRleHRSZW5kZXJpbmdNb2RlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS50ZXh0UmVuZGVy
aW5nTW9kZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRPdmVyZmxvdzoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+dGV4dE92ZXJmbG93KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRWxsaXBzaXMpOwot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQ2xpcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUVsbGlwc2lzKTsKKyAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVDbGlwKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eToKLSAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0U2VjdXJpdHkoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnRleHRTZWN1
cml0eSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTaXplQWRqdXN0Ogog
ICAgICAgICAgICAgaWYgKHN0eWxlLT50ZXh0U2l6ZUFkanVzdCgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8p
OwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yOgogICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRDb2xvck9yVmFsaWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPnRleHRTdHJv
a2VDb2xvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0
aDoKLSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT50ZXh0
U3Ryb2tlV2lkdGgoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICBy
ZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dGV4dFN0cm9rZVdpZHRoKCksIHN0
eWxlLmdldCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRUcmFuc2Zvcm06Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+dGV4dFRyYW5z
Zm9ybSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShz
dHlsZS0+dGV4dFRyYW5zZm9ybSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRvcDoKLSAg
ICAgICAgICAgIHJldHVybiBnZXRQb3NpdGlvbk9mZnNldFZhbHVlKHN0eWxlLmdldCgpLCBDU1NQ
cm9wZXJ0eVRvcCwgY3NzVmFsdWVQb29sLCBtX25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXco
KSk7CisgICAgICAgICAgICByZXR1cm4gZ2V0UG9zaXRpb25PZmZzZXRWYWx1ZShzdHlsZS5nZXQo
KSwgQ1NTUHJvcGVydHlUb3AsIG1fbm9kZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpOgotICAgICAgICAgICAgcmV0dXJuIHJl
bmRlclVuaWNvZGVCaWRpRmxhZ3NUb0NTU1ZhbHVlKHN0eWxlLT51bmljb2RlQmlkaSgpLCBjc3NW
YWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHJlbmRlclVuaWNvZGVCaWRpRmxhZ3NUb0NT
U1ZhbHVlKHN0eWxlLT51bmljb2RlQmlkaSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVZl
cnRpY2FsQWxpZ246CiAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLT52ZXJ0aWNhbEFsaWduKCkp
IHsKICAgICAgICAgICAgICAgICBjYXNlIEJBU0VMSU5FOgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCYXNlbGlu
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVCYXNlbGluZSk7CiAgICAgICAgICAgICAgICAgY2FzZSBNSURE
TEU6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZU1pZGRsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVNaWRkbGUpOwogICAg
ICAgICAgICAgICAgIGNhc2UgU1VCOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdWIpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlU3ViKTsKICAgICAgICAgICAgICAgICBjYXNlIFNVUEVSOgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVTdXBl
cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVTdXBlcik7CiAgICAgICAgICAgICAgICAgY2FzZSBURVhUX1RP
UDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlVGV4dFRvcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUZXh0VG9wKTsKICAg
ICAgICAgICAgICAgICBjYXNlIFRFWFRfQk9UVE9NOgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUZXh0Qm90dG9t
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZVRleHRCb3R0b20pOwogICAgICAgICAgICAgICAgIGNhc2UgVE9Q
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVUb3ApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsKICAgICAgICAgICAg
ICAgICBjYXNlIEJPVFRPTToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQm90dG9tKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUJvdHRvbSk7CiAgICAgICAgICAgICAgICAgY2FzZSBCQVNFTElORV9NSURETEU6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZVdlYmtpdEJhc2VsaW5lTWlkZGxlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVdlYmtpdEJhc2Vs
aW5lTWlkZGxlKTsKICAgICAgICAgICAgICAgICBjYXNlIExFTkdUSDoKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnZlcnRpY2FsQWxp
Z25MZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+dmVydGljYWxBbGlnbkxlbmd0aCgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlWaXNpYmlsaXR5OgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnZpc2liaWxpdHkoKSk7CisgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnZpc2liaWxpdHko
KSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlOgotICAgICAgICAgICAgcmV0
dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndoaXRlU3BhY2UoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPndoaXRlU3Bh
Y2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXaWRvd3M6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+d2lkb3dzKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+d2lkb3dzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVS
KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdpZHRoOgogICAgICAgICAgICAgaWYgKHJlbmRl
cmVyKSB7CiAgICAgICAgICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3Jn
L1RSL0NTUzIvdmlzdWRldC5odG1sI3RoZS13aWR0aC1wcm9wZXJ0eSwKICAgICAgICAgICAgICAg
ICAvLyB0aGUgIndpZHRoIiBwcm9wZXJ0eSBkb2VzIG5vdCBhcHBseSBmb3Igbm9uLXJlcGxhY2Vk
IGlubGluZSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcmVyLT5pc1JlcGxh
Y2VkKCkgJiYgcmVuZGVyZXItPmlzSW5saW5lKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAg
ICAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHNpemluZ0JveChyZW5k
ZXJlcikud2lkdGgoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBdXRvKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShz
aXppbmdCb3gocmVuZGVyZXIpLndpZHRoKCksIHN0eWxlLmdldCgpKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxl
LT53aWR0aCgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVy
biB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT53aWR0aCgpLCBzdHlsZS5n
ZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkQnJlYWs6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+d29yZEJyZWFrKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkQnJl
YWsoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXb3JkU3BhY2luZzoKLSAgICAgICAgICAg
IHJldHVybiB6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT53b3JkU3BhY2luZygpLCBzdHls
ZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlKHN0eWxlLT53b3JkU3BhY2luZygpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXb3JkV3JhcDoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKHN0eWxlLT53b3JkV3JhcCgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+d29yZFdyYXAoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRMaW5lQnJlYWs6Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+a2h0bWxMaW5lQnJlYWsoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPmtodG1sTGluZUJyZWFrKCkp
OwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TmJzcE1vZGU6Ci0gICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+bmJzcE1vZGUoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm5ic3BNb2Rl
KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWF0Y2hOZWFyZXN0TWFpbEJsb2Nr
cXVvdGVDb2xvcjoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVl
KHN0eWxlLT5tYXRjaE5lYXJlc3RNYWlsQmxvY2txdW90ZUNvbG9yKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXRjaE5lYXJlc3RNYWls
QmxvY2txdW90ZUNvbG9yKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UmVzaXplOgotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnJlc2l6ZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
cmVzaXplKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmc6Ci0g
ICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkua2VybmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkua2VybmluZygpKTsKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTbW9vdGhpbmc6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZm9u
dFNtb290aGluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFNtb290aGluZygpKTsKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRWYXJpYW50TGlnYXR1cmVzOiB7CiAgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGNvbW1vbkxpZ2F0dXJlc1N0YXRlID0g
c3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbW1vbkxpZ2F0dXJlc1N0YXRlKCk7CiAgICAgICAg
ICAgICBGb250RGVzY3JpcHRpb246OkxpZ2F0dXJlc1N0YXRlIGRpc2NyZXRpb25hcnlMaWdhdHVy
ZXNTdGF0ZSA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
U3RhdGUoKTsKICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbjo6TGlnYXR1cmVzU3RhdGUgaGlz
dG9yaWNhbExpZ2F0dXJlc1N0YXRlID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmhpc3Rvcmlj
YWxMaWdhdHVyZXNTdGF0ZSgpOwogICAgICAgICAgICAgaWYgKGNvbW1vbkxpZ2F0dXJlc1N0YXRl
ID09IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUgJiYgZGlzY3JldGlvbmFy
eUxpZ2F0dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlvbjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUK
ICAgICAgICAgICAgICAgICAmJiBoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2Ny
aXB0aW9uOjpOb3JtYWxMaWdhdHVyZXNTdGF0ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVOb3JtYWwpOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiB2YWx1ZUxp
c3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7CiAgICAgICAgICAgICBp
ZiAoY29tbW9uTGlnYXR1cmVzU3RhdGUgIT0gRm9udERlc2NyaXB0aW9uOjpOb3JtYWxMaWdhdHVy
ZXNTdGF0ZSkKLSAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShjb21tb25MaWdhdHVyZXNTdGF0ZSA9PSBGb250RGVzY3Jp
cHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vQ29tbW9uTGlnYXR1cmVz
IDogQ1NTVmFsdWVDb21tb25MaWdhdHVyZXMpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3Qt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoY29tbW9uTGlnYXR1
cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9uOjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NT
VmFsdWVOb0NvbW1vbkxpZ2F0dXJlcyA6IENTU1ZhbHVlQ29tbW9uTGlnYXR1cmVzKSk7CiAgICAg
ICAgICAgICBpZiAoZGlzY3JldGlvbmFyeUxpZ2F0dXJlc1N0YXRlICE9IEZvbnREZXNjcmlwdGlv
bjo6Tm9ybWFsTGlnYXR1cmVzU3RhdGUpCi0gICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBl
bmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoZGlzY3JldGlvbmFyeUxpZ2F0
dXJlc1N0YXRlID09IEZvbnREZXNjcmlwdGlvbjo6RGlzYWJsZWRMaWdhdHVyZXNTdGF0ZSA/IENT
U1ZhbHVlTm9EaXNjcmV0aW9uYXJ5TGlnYXR1cmVzIDogQ1NTVmFsdWVEaXNjcmV0aW9uYXJ5TGln
YXR1cmVzKSk7CisgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGRpc2NyZXRpb25hcnlMaWdhdHVyZXNTdGF0ZSA9PSBG
b250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1ZU5vRGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlcyA6IENTU1ZhbHVlRGlzY3JldGlvbmFyeUxpZ2F0dXJlcykpOwogICAg
ICAgICAgICAgaWYgKGhpc3RvcmljYWxMaWdhdHVyZXNTdGF0ZSAhPSBGb250RGVzY3JpcHRpb246
Ok5vcm1hbExpZ2F0dXJlc1N0YXRlKQotICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGhpc3RvcmljYWxMaWdhdHVyZXNT
dGF0ZSA9PSBGb250RGVzY3JpcHRpb246OkRpc2FibGVkTGlnYXR1cmVzU3RhdGUgPyBDU1NWYWx1
ZU5vSGlzdG9yaWNhbExpZ2F0dXJlcyA6IENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlcykpOwor
ICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShoaXN0b3JpY2FsTGlnYXR1cmVzU3RhdGUgPT0gRm9udERlc2NyaXB0aW9u
OjpEaXNhYmxlZExpZ2F0dXJlc1N0YXRlID8gQ1NTVmFsdWVOb0hpc3RvcmljYWxMaWdhdHVyZXMg
OiBDU1NWYWx1ZUhpc3RvcmljYWxMaWdhdHVyZXMpKTsKICAgICAgICAgICAgIHJldHVybiB2YWx1
ZUxpc3Q7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVpJbmRleDoKICAgICAg
ICAgICAgIGlmIChzdHlsZS0+aGFzQXV0b1pJbmRleCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnpJbmRleCgp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAg
ICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT56SW5kZXgo
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Wm9vbToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT56b29tKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
IHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+em9vbSgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3hTaXpp
bmc6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPmJveFNpemluZygpID09IENPTlRFTlRfQk9YKQot
ICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZUNvbnRlbnRCb3gpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQm9yZGVyQm94KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQ29u
dGVudEJveCk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQm9yZGVyQm94KTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXREYXNoYm9hcmRSZWdpb246CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHlsZURhc2hib2FyZFJlZ2lvbj4mIHJl
Z2lvbnMgPSBzdHlsZS0+ZGFzaGJvYXJkUmVnaW9ucygpOwogICAgICAgICAgICAgdW5zaWduZWQg
Y291bnQgPSByZWdpb25zLnNpemUoKTsKICAgICAgICAgICAgIGlmIChjb3VudCA9PSAxICYmIHJl
Z2lvbnNbMF0udHlwZSA9PSBTdHlsZURhc2hib2FyZFJlZ2lvbjo6Tm9uZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAKICAgICAgICAgICAgIFJlZlB0cjxEYXNoYm9hcmRS
ZWdpb24+IGZpcnN0UmVnaW9uOwogICAgICAgICAgICAgRGFzaGJvYXJkUmVnaW9uKiBwcmV2aW91
c1JlZ2lvbiA9IDA7CkBAIC0yMDYwLDEwICsyMDUxLDEwIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0CiAKICAgICAgICAgICAgICAgICByZWdpb24tPm1fbGFiZWwgPSBzdHlsZVJlZ2lvbi5sYWJl
bDsKICAgICAgICAgICAgICAgICBMZW5ndGhCb3ggb2Zmc2V0ID0gc3R5bGVSZWdpb24ub2Zmc2V0
OwotICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
b2Zmc2V0LnRvcCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAg
ICAgICAgICAgICByZWdpb24tPnNldFJpZ2h0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0
LnJpZ2h0KCkudmFsdWUoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOwotICAgICAgICAg
ICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmJv
dHRvbSgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAg
ICAgICByZWdpb24tPnNldExlZnQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShvZmZzZXQubGVmdCgp
LnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICBy
ZWdpb24tPnNldFRvcCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG9mZnNldC50b3AoKS52YWx1ZSgp
LCBzdHlsZS5nZXQoKSkpOworICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0UmlnaHQoem9vbUFk
anVzdGVkUGl4ZWxWYWx1ZShvZmZzZXQucmlnaHQoKS52YWx1ZSgpLCBzdHlsZS5nZXQoKSkpOwor
ICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUo
b2Zmc2V0LmJvdHRvbSgpLnZhbHVlKCksIHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICAgICAg
cmVnaW9uLT5zZXRMZWZ0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUob2Zmc2V0LmxlZnQoKS52YWx1
ZSgpLCBzdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+bV9pc1JlY3Rhbmds
ZSA9IChzdHlsZVJlZ2lvbi50eXBlID09IFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpSZWN0YW5nbGUp
OwogICAgICAgICAgICAgICAgIHJlZ2lvbi0+bV9pc0NpcmNsZSA9IChzdHlsZVJlZ2lvbi50eXBl
ID09IFN0eWxlRGFzaGJvYXJkUmVnaW9uOjpDaXJjbGUpOwogCkBAIC0yMDczLDI3ICsyMDY0LDI3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVn
aW9uID0gcmVnaW9uOwogICAgICAgICAgICAgICAgIHByZXZpb3VzUmVnaW9uID0gcmVnaW9uLmdl
dCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoZmlyc3RSZWdpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpOwogICAgICAgICB9
CiAjZW5kaWYKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5Ogot
ICAgICAgICAgICAgcmV0dXJuIGdldERlbGF5VmFsdWUoc3R5bGUtPmFuaW1hdGlvbnMoKSwgY3Nz
VmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiBnZXREZWxheVZhbHVlKHN0eWxlLT5hbmlt
YXRpb25zKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0
aW9uOiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVM
aXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9u
TGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CiAgICAgICAgICAgICBpZiAodCkgewogICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+c2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHQtPmFuaW1hdGlvbihpKS0+ZGlyZWN0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVBbHRlcm5hdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVBbHRlcm5hdGUpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9ybWFsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9y
bWFsKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCkpOwogICAgICAgICAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgIHJldHVybiBnZXREdXJhdGlvblZhbHVlKHN0
eWxlLT5hbmltYXRpb25zKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0
RHVyYXRpb25WYWx1ZShzdHlsZS0+YW5pbWF0aW9ucygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkZpbGxNb2RlOiB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0ID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAg
ICAgICAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CkBA
IC0yMTAxLDIxICsyMDkyLDIxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0LT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHQtPmFuaW1hdGlvbihpKS0+ZmlsbE1vZGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlTm9uZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBbmlt
YXRpb25GaWxsTW9kZUZvcndhcmRzOgotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlRm9yd2FyZHMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVGb3J3YXJkcykpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQW5pbWF0aW9uRmlsbE1v
ZGVCYWNrd2FyZHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVCYWNrd2FyZHMpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoQ1NTVmFsdWVCYWNrd2FyZHMpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFuaW1hdGlvbkZpbGxNb2RlQm90aDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUJvdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVCb3RoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSkpOwogICAgICAgICAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDogewpAQCAtMjEyNSwxMiArMjExNiwxMiBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdC0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGl0ZXJh
dGlvbkNvdW50ID0gdC0+YW5pbWF0aW9uKGkpLT5pdGVyYXRpb25Db3VudCgpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXRlcmF0aW9uQ291bnQgPT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3Vu
dEluZmluaXRlKQotICAgICAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlSW5maW5pdGUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVJbmZpbml0ZSkpOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVW
YWx1ZShpdGVyYXRpb25Db3VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShpdGVyYXRpb25Db3VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShBbmltYXRpb246OmluaXRpYWxBbmlt
YXRpb25JdGVyYXRpb25Db3VudCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShB
bmltYXRpb246OmluaXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikpOwogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOiB7
CkBAIC0yMTM4LDkgKzIxMjksOSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb246OmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydAogICAgICAgICAg
ICAgY29uc3QgQW5pbWF0aW9uTGlzdCogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CiAgICAgICAg
ICAgICBpZiAodCkgewogICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdC0+
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKHQtPmFuaW1hdGlvbihpKS0+bmFtZSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sKCkuY3JlYXRlVmFsdWUodC0+YW5pbWF0aW9uKGkpLT5uYW1lKCksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb25lKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgICAgIHJldHVybiBs
aXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uUGxheVN0YXRlOiB7CkBAIC0yMTUwLDEzNyArMjE0MSwxMzcgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnQKICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHQt
PnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+YW5pbWF0
aW9uKGkpLT5wbGF5U3RhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3AgPT0gQW5p
bVBsYXlTdGF0ZVBsYXlpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
Y3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVSdW5uaW5nKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUnVubmluZykpOwogICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQYXVzZWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVQYXVzZWQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoQ1NTVmFsdWVSdW5uaW5nKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJ1bm5pbmcpKTsK
ICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgICAgICAg
ICByZXR1cm4gZ2V0VGltaW5nRnVuY3Rpb25WYWx1ZShzdHlsZS0+YW5pbWF0aW9ucygpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+YXBwZWFyYW5jZSgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+YXBwZWFyYW5j
ZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJhdGlvOgogICAgICAg
ICAgICAgaWYgKCFzdHlsZS0+aGFzQXNwZWN0UmF0aW8oKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4gQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6
Y3JlYXRlKHN0eWxlLT5hc3BlY3RSYXRpb051bWVyYXRvcigpLCBzdHlsZS0+YXNwZWN0UmF0aW9E
ZW5vbWluYXRvcigpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tmYWNlVmlz
aWJpbGl0eToKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSgoc3R5bGUtPmJhY2tmYWNlVmlzaWJpbGl0eSgpID09IEJhY2tmYWNlVmlzaWJpbGl0
eUhpZGRlbikgPyBDU1NWYWx1ZUhpZGRlbiA6IENTU1ZhbHVlVmlzaWJsZSk7CisgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKChzdHlsZS0+YmFj
a2ZhY2VWaXNpYmlsaXR5KCkgPT0gQmFja2ZhY2VWaXNpYmlsaXR5SGlkZGVuKSA/IENTU1ZhbHVl
SGlkZGVuIDogQ1NTVmFsdWVWaXNpYmxlKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEJvcmRlckltYWdlOgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2Uo
c3R5bGUtPmJvcmRlckltYWdlKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4g
dmFsdWVGb3JOaW5lUGllY2VJbWFnZShzdHlsZS0+Ym9yZGVySW1hZ2UoKSk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1
ZUZvck5pbmVQaWVjZUltYWdlUXVhZChzdHlsZS0+Ym9yZGVySW1hZ2UoKS5vdXRzZXQoKSwgY3Nz
VmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVh
ZChzdHlsZS0+Ym9yZGVySW1hZ2UoKS5vdXRzZXQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZVJlcGVhdDoKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVj
ZUltYWdlUmVwZWF0KHN0eWxlLT5ib3JkZXJJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VSZXBlYXQoc3R5bGUtPmJvcmRlcklt
YWdlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZToKLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlU2xpY2Uoc3R5bGUtPmJvcmRlcklt
YWdlKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZVNsaWNlKHN0eWxlLT5ib3JkZXJJbWFnZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlV2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGll
Y2VJbWFnZVF1YWQoc3R5bGUtPmJvcmRlckltYWdlKCkuYm9yZGVyU2xpY2VzKCksIGNzc1ZhbHVl
UG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQoc3R5
bGUtPmJvcmRlckltYWdlKCkuYm9yZGVyU2xpY2VzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0TWFza0JveEltYWdlOgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBp
ZWNlSW1hZ2Uoc3R5bGUtPm1hc2tCb3hJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2Uoc3R5bGUtPm1hc2tCb3hJbWFnZSgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldDoKLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUXVhZChzdHlsZS0+bWFza0JveElt
YWdlKCkub3V0c2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWVG
b3JOaW5lUGllY2VJbWFnZVF1YWQoc3R5bGUtPm1hc2tCb3hJbWFnZSgpLm91dHNldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVJlcGVhdDoKLSAgICAgICAg
ICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlUmVwZWF0KHN0eWxlLT5tYXNrQm94SW1h
Z2UoKSwgY3NzVmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVj
ZUltYWdlUmVwZWF0KHN0eWxlLT5tYXNrQm94SW1hZ2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrQm94SW1hZ2VTbGljZToKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZv
ck5pbmVQaWVjZUltYWdlU2xpY2Uoc3R5bGUtPm1hc2tCb3hJbWFnZSgpLCBjc3NWYWx1ZVBvb2wp
OworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VTbGljZShzdHlsZS0+
bWFza0JveEltYWdlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveElt
YWdlV2lkdGg6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVGb3JOaW5lUGllY2VJbWFnZVF1YWQo
c3R5bGUtPm1hc2tCb3hJbWFnZSgpLmJvcmRlclNsaWNlcygpLCBjc3NWYWx1ZVBvb2wpOworICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmluZVBpZWNlSW1hZ2VRdWFkKHN0eWxlLT5tYXNrQm94
SW1hZ2UoKS5ib3JkZXJTbGljZXMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRN
YXNrQm94SW1hZ2VTb3VyY2U6CiAgICAgICAgICAgICBpZiAoc3R5bGUtPm1hc2tCb3hJbWFnZVNv
dXJjZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZS0+bWFza0JveEltYWdlU291cmNl
KCktPmNzc1ZhbHVlKCk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1
ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6CiAgICAgICAgICAgICAvLyBOb3QgYSBy
ZWFsIHN0eWxlIHByb3BlcnR5IC0tIHVzZWQgYnkgdGhlIGVkaXRpbmcgZW5naW5lIC0tIHNvIGhh
cyBubyBjb21wdXRlZCB2YWx1ZS4KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2U6CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXJnaW5BZnRlckNvbGxhcHNlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPm1hcmdpbkFmdGVyQ29sbGFwc2UoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPm1hcmdpbkFm
dGVyQ29sbGFwc2UoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BD
b2xsYXBzZToKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJlZm9yZUNvbGxh
cHNlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUt
Pm1hcmdpbkJlZm9yZUNvbGxhcHNlKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5tYXJnaW5CZWZvcmVDb2xsYXBzZSgpKTsKICNpZiBFTkFC
TEUoT1ZFUkZMT1dfU0NST0xMSU5HKQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0T3Zl
cmZsb3dTY3JvbGxpbmc6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT51c2VUb3VjaE92ZXJmbG93
U2Nyb2xsaW5nKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFs
dWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVUb3VjaCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZUF1dG8pOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZVRvdWNoKTsKICNlbmRpZgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0UGVyc3BlY3RpdmU6CiAgICAgICAgICAgICBpZiAoIXN0eWxlLT5oYXNQZXJzcGVjdGl2
ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIHpvb21BZGp1c3RlZFBp
eGVsVmFsdWUoc3R5bGUtPnBlcnNwZWN0aXZlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wp
OworICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiB6b29tQWRqdXN0ZWRQaXhl
bFZhbHVlKHN0eWxlLT5wZXJzcGVjdGl2ZSgpLCBzdHlsZS5nZXQoKSk7CiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRQZXJzcGVjdGl2ZU9yaWdpbjogewogICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VTZXBhcmF0ZWQo
KTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICAgICAgICAgIExheW91dFJl
Y3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBSZW5kZXJWaWV3
KiByZW5kZXJWaWV3ID0gbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCk7Ci0gICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVl
Rm9yTGVuZ3RoKHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblgoKSwgYm94LndpZHRoKCksIHJlbmRl
clZpZXcpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7Ci0gICAgICAgICAgICAgICAgbGlz
dC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0
eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblkoKSwgYm94LmhlaWdodCgpLCByZW5kZXJWaWV3KSwgc3R5
bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6
b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZS0+cGVyc3Bl
Y3RpdmVPcmlnaW5YKCksIGJveC53aWR0aCgpLCByZW5kZXJWaWV3KSwgc3R5bGUuZ2V0KCkpKTsK
KyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWSgpLCBib3guaGVpZ2h0
KCksIHJlbmRlclZpZXcpLCBzdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVs
VmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLCBzdHlsZS5nZXQoKSwg
Y3NzVmFsdWVQb29sKSk7Ci0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3Rl
ZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWSgpLCBzdHlsZS5n
ZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21B
ZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnBlcnNwZWN0aXZlT3JpZ2luWCgpLCBz
dHlsZS5nZXQoKSkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQ
aXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT5wZXJzcGVjdGl2ZU9yaWdpblkoKSwgc3R5bGUuZ2V0
KCkpKTsKIAogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgp
OwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRSdGxPcmRlcmluZzoK
LSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShz
dHlsZS0+cnRsT3JkZXJpbmcoKSA/IENTU1ZhbHVlVmlzdWFsIDogQ1NTVmFsdWVMb2dpY2FsKTsK
KyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
c3R5bGUtPnJ0bE9yZGVyaW5nKCkgPyBDU1NWYWx1ZVZpc3VhbCA6IENTU1ZhbHVlTG9naWNhbCk7
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRhcEhpZ2hsaWdodENvbG9yOgogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2xvck9yVmFs
aWRDb2xvcihzdHlsZS5nZXQoKSwgc3R5bGUtPnRhcEhpZ2hsaWdodENvbG9yKCkpOwogI2VuZGlm
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZzoKLSAgICAgICAgICAgIHJl
dHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT51c2VyRHJhZygpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+dXNlckRyYWco
KSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0OgotICAgICAgICAg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnVzZXJTZWxlY3QoKSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnVz
ZXJTZWxlY3QoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzOgotICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxl
LT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wsIG1f
bm9kZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRC
b3JkZXJSYWRpdXNDb3JuZXJWYWx1ZShzdHlsZS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBz
dHlsZS5nZXQoKSwgbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICBj
YXNlIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoc3R5bGUtPmJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wsIG1fbm9kZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyVmlldygpKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1
ZShzdHlsZS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSwgc3R5bGUuZ2V0KCksIG1fbm9kZS0+
ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRl
clRvcExlZnRSYWRpdXM6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVy
VmFsdWUoc3R5bGUtPmJvcmRlclRvcExlZnRSYWRpdXMoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVl
UG9vbCwgbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOworICAgICAgICAgICAgcmV0
dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVz
KCksIHN0eWxlLmdldCgpLCBtX25vZGUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1czoKLSAgICAgICAgICAgIHJl
dHVybiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZShzdHlsZS0+Ym9yZGVyVG9wUmlnaHRSYWRp
dXMoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCwgbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5k
ZXJWaWV3KCkpOworICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVl
KHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLCBzdHlsZS5nZXQoKSwgbV9ub2RlLT5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q2xpcDogewog
ICAgICAgICAgICAgaWYgKCFzdHlsZS0+aGFzQ2xpcCgpKQotICAgICAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOworICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBdXRvKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWN0PiByZWN0ID0gUmVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgICAgICByZWN0LT5zZXRUb3Aoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShz
dHlsZS0+Y2xpcCgpLnRvcCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsK
LSAgICAgICAgICAgIHJlY3QtPnNldFJpZ2h0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUt
PmNsaXAoKS5yaWdodCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAg
ICAgICAgICAgIHJlY3QtPnNldEJvdHRvbSh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5j
bGlwKCkuYm90dG9tKCkudmFsdWUoKSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOwotICAg
ICAgICAgICAgcmVjdC0+c2V0TGVmdCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5jbGlw
KCkubGVmdCgpLnZhbHVlKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHJlY3QucmVsZWFzZSgpKTsKKyAg
ICAgICAgICAgIHJlY3QtPnNldFRvcCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT5jbGlw
KCkudG9wKCkudmFsdWUoKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJlY3QtPnNldFJp
Z2h0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUtPmNsaXAoKS5yaWdodCgpLnZhbHVlKCks
IHN0eWxlLmdldCgpKSk7CisgICAgICAgICAgICByZWN0LT5zZXRCb3R0b20oem9vbUFkanVzdGVk
UGl4ZWxWYWx1ZShzdHlsZS0+Y2xpcCgpLmJvdHRvbSgpLnZhbHVlKCksIHN0eWxlLmdldCgpKSk7
CisgICAgICAgICAgICByZWN0LT5zZXRMZWZ0KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUoc3R5bGUt
PmNsaXAoKS5sZWZ0KCkudmFsdWUoKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVy
biBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZWN0LnJlbGVhc2UoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVNwZWFrOgotICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnNwZWFrKCkpOworICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT5zcGVhaygpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybToKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRl
ZFRyYW5zZm9ybShyZW5kZXJlciwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAg
ICAgICByZXR1cm4gY29tcHV0ZWRUcmFuc2Zvcm0ocmVuZGVyZXIsIHN0eWxlLmdldCgpKTsKICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjogewogICAgICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlU3BhY2VT
ZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewogICAgICAgICAgICAgICAg
IEludFJlY3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsKICAgICAgICAgICAgICAgICBSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCk7Ci0g
ICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11
bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCksIGJveC53aWR0aCgpLCBy
ZW5kZXJWaWV3KSwgc3R5bGUuZ2V0KCksIGNzc1ZhbHVlUG9vbCkpOwotICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKG1pbmltdW1WYWx1ZUZvckxlbmd0
aChzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWSgpLCBib3guaGVpZ2h0KCksIHJlbmRlclZpZXcpLCBz
dHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5k
KHpvb21BZGp1c3RlZFBpeGVsVmFsdWUobWluaW11bVZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50cmFu
c2Zvcm1PcmlnaW5YKCksIGJveC53aWR0aCgpLCByZW5kZXJWaWV3KSwgc3R5bGUuZ2V0KCkpKTsK
KyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShtaW5p
bXVtVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKSwgYm94LmhlaWdodCgp
LCByZW5kZXJWaWV3KSwgc3R5bGUuZ2V0KCkpKTsKICAgICAgICAgICAgICAgICBpZiAoc3R5bGUt
PnRyYW5zZm9ybU9yaWdpblooKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZShzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWigpLCBzdHls
ZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCksIHN0eWxl
LmdldCgpKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZCh6b29tQWRqdXN0ZWRQaXhlbFZhbHVlRm9yTGVuZ3RoKHN0eWxlLT50cmFuc2Zvcm1Pcmln
aW5YKCksIHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wpKTsKLSAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+dHJhbnNmb3Jt
T3JpZ2luWSgpLCBzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKSk7CisgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKHpvb21BZGp1c3RlZFBpeGVsVmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRyYW5z
Zm9ybU9yaWdpblgoKSwgc3R5bGUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBl
bmQoem9vbUFkanVzdGVkUGl4ZWxWYWx1ZUZvckxlbmd0aChzdHlsZS0+dHJhbnNmb3JtT3JpZ2lu
WSgpLCBzdHlsZS5nZXQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNmb3Jt
T3JpZ2luWigpICE9IDApCi0gICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZCh6b29tQWRq
dXN0ZWRQaXhlbFZhbHVlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5aKCksIHN0eWxlLmdldCgpLCBj
c3NWYWx1ZVBvb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKHpvb21BZGp1
c3RlZFBpeGVsVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblooKSwgc3R5bGUuZ2V0KCkpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtU3R5bGU6Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKHN0eWxl
LT50cmFuc2Zvcm1TdHlsZTNEKCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QpID8gQ1NT
VmFsdWVQcmVzZXJ2ZTNkIDogQ1NTVmFsdWVGbGF0KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoKHN0eWxlLT50cmFuc2Zvcm1TdHlsZTNE
KCkgPT0gVHJhbnNmb3JtU3R5bGUzRFByZXNlcnZlM0QpID8gQ1NTVmFsdWVQcmVzZXJ2ZTNkIDog
Q1NTVmFsdWVGbGF0KTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25E
ZWxheToKLSAgICAgICAgICAgIHJldHVybiBnZXREZWxheVZhbHVlKHN0eWxlLT50cmFuc2l0aW9u
cygpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIGdldERlbGF5VmFsdWUoc3R5
bGUtPnRyYW5zaXRpb25zKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvbkR1cmF0aW9uOgotICAgICAgICAgICAgcmV0dXJuIGdldER1cmF0aW9uVmFsdWUoc3R5bGUt
PnRyYW5zaXRpb25zKCksIGNzc1ZhbHVlUG9vbCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0RHVy
YXRpb25WYWx1ZShzdHlsZS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6IHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IGxpc3QgPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZUNvbW1hU2VwYXJhdGVkKCk7CiAgICAg
ICAgICAgICBjb25zdCBBbmltYXRpb25MaXN0KiB0ID0gc3R5bGUtPnRyYW5zaXRpb25zKCk7CkBA
IC0yMjg5LDcxICsyMjgwLDcxIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbjo6Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0CiAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcHJvcGVydHlWYWx1ZTsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24gPSB0LT5hbmltYXRpb24oaSk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChhbmltYXRpb24tPmFuaW1hdGlvbk1vZGUoKSA9PSBBbmltYXRp
b246OkFuaW1hdGVOb25lKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZSA9
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGFuaW1hdGlvbi0+YW5pbWF0aW9uTW9kZSgpID09IEFuaW1hdGlvbjo6QW5pbWF0ZUFsbCkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBjc3NWYWx1ZVBvb2wtPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlQWxsKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlWYWx1ZSA9IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoZ2V0UHJvcGVy
dHlOYW1lKGFuaW1hdGlvbi0+cHJvcGVydHkoKSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5VmFsdWUgPSBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShnZXRQcm9wZXJ0eU5hbWUoYW5pbWF0aW9uLT5wcm9wZXJ0eSgpKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwogICAgICAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQocHJvcGVydHlWYWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbC0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQWxsKSk7CisgICAgICAgICAgICAgICAgbGlzdC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAgICAgICAgICAg
ICByZXR1cm4gZ2V0VGltaW5nRnVuY3Rpb25WYWx1ZShzdHlsZS0+dHJhbnNpdGlvbnMoKSk7CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlQb2ludGVyRXZlbnRzOgotICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnBvaW50ZXJFdmVudHMoKSk7CisgICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnBvaW50ZXJF
dmVudHMoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2xvckNvcnJlY3Rpb246
Ci0gICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+Y29s
b3JTcGFjZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1
ZShzdHlsZS0+Y29sb3JTcGFjZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExp
bmVHcmlkOgogICAgICAgICAgICAgaWYgKHN0eWxlLT5saW5lR3JpZCgpLmlzTnVsbCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShD
U1NWYWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFs
dWUoc3R5bGUtPmxpbmVHcmlkKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRl
VmFsdWUoc3R5bGUtPmxpbmVHcmlkKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdExpbmVTbmFwOgogICAgICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmxpbmVTbmFwKCkpOwogICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TGluZUFsaWduOgogICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPmxpbmVBbGlnbigpKTsKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlOgotICAgICAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyaXRpbmdNb2RlKCkpOworICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT53cml0aW5nTW9kZSgpKTsK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRDb21iaW5lOgotICAgICAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPnRleHRDb21iaW5lKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHN0eWxlLT50ZXh0
Q29tYmluZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRleHRPcmllbnRhdGlv
bjoKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKS50ZXh0T3JpZW50YXRpb24oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRMaW5lQm94Q29udGFpbjoKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaW5l
Qm94Q29udGFpblZhbHVlKGNzc1ZhbHVlUG9vbCwgc3R5bGUtPmxpbmVCb3hDb250YWluKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxpbmVCb3hDb250YWluVmFsdWUoc3R5bGUtPmxpbmVC
b3hDb250YWluKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Q29udGVudDoKLSAgICAgICAg
ICAgIHJldHVybiBjb250ZW50VG9DU1NWYWx1ZShzdHlsZS5nZXQoKSwgY3NzVmFsdWVQb29sKTsK
KyAgICAgICAgICAgIHJldHVybiBjb250ZW50VG9DU1NWYWx1ZShzdHlsZS5nZXQoKSk7CiAgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlDb3VudGVySW5jcmVtZW50OgotICAgICAgICAgICAgcmV0dXJu
IGNvdW50ZXJUb0NTU1ZhbHVlKHN0eWxlLmdldCgpLCBwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2wp
OworICAgICAgICAgICAgcmV0dXJuIGNvdW50ZXJUb0NTU1ZhbHVlKHN0eWxlLmdldCgpLCBwcm9w
ZXJ0eUlEKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUNvdW50ZXJSZXNldDoKLSAgICAgICAg
ICAgIHJldHVybiBjb3VudGVyVG9DU1NWYWx1ZShzdHlsZS5nZXQoKSwgcHJvcGVydHlJRCwgY3Nz
VmFsdWVQb29sKTsKKyAgICAgICAgICAgIHJldHVybiBjb3VudGVyVG9DU1NWYWx1ZShzdHlsZS5n
ZXQoKSwgcHJvcGVydHlJRCk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93SW50
bzoKICAgICAgICAgICAgIGlmIChzdHlsZS0+Zmxvd1RocmVhZCgpLmlzTnVsbCgpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUo
c3R5bGUtPmZsb3dUaHJlYWQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAg
ICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVOb25lKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVW
YWx1ZShzdHlsZS0+Zmxvd1RocmVhZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7
CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGbG93RnJvbToKICAgICAgICAgICAgIGlm
IChzdHlsZS0+cmVnaW9uVGhyZWFkKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNzc1ZhbHVlUG9vbC0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uVGhy
ZWFkKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7
CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUtPnJl
Z2lvblRocmVhZCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRSZWdpb25PdmVyZmxvdzoKLSAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT5yZWdpb25PdmVyZmxvdygpKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+cmVnaW9uT3Zl
cmZsb3coKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwRmxvdzoKLSAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0eWxlLT53cmFwRmxvdygp
KTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+
d3JhcEZsb3coKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFwTWFyZ2luOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyYXBN
YXJnaW4oKSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
c3R5bGUtPndyYXBNYXJnaW4oKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRXcmFw
UGFkZGluZzoKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZhbHVlKHN0
eWxlLT53cmFwUGFkZGluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVWYWx1ZShzdHlsZS0+d3JhcFBhZGRpbmcoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRTaGFwZUluc2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPndyYXBTaGFwZUlu
c2lkZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwotICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9v
bC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyYXBTaGFwZUluc2lkZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0
byk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoc3R5bGUt
PndyYXBTaGFwZUluc2lkZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBl
T3V0c2lkZToKICAgICAgICAgICAgIGlmICghc3R5bGUtPndyYXBTaGFwZU91dHNpZGUoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
Q1NTVmFsdWVBdXRvKTsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZVZh
bHVlKHN0eWxlLT53cmFwU2hhcGVPdXRzaWRlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKTsKKyAgICAg
ICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdHlsZS0+d3JhcFNoYXBl
T3V0c2lkZSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFdyYXBUaHJvdWdoOgot
ICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoc3R5bGUtPndyYXBU
aHJvdWdoKCkpOworICAgICAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0eWxlLT53cmFwVGhyb3VnaCgpKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRGaWx0ZXI6CiAgICAgICAgICAgICByZXR1cm4gdmFsdWVG
b3JGaWx0ZXIoc3R5bGUuZ2V0KCkpOwpAQCAtMjM4MSw5ICsyMzcyLDkgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9wZXJ0eUNTU1ZhbHVl
KENTU1Byb3BlcnQKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckxlZnQ6CiAgICAgICAg
ICAgICByZXR1cm4gZ2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhhbmRQcm9wZXJ0aWVzKGJv
cmRlckxlZnRTaG9ydGhhbmQoKSk7CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJJbWFn
ZToKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZUZvck5pbmVQaWVjZUltYWdlKHN0eWxlLT5ib3Jk
ZXJJbWFnZSgpLCBjc3NWYWx1ZVBvb2wpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlRm9yTmlu
ZVBpZWNlSW1hZ2Uoc3R5bGUtPmJvcmRlckltYWdlKCkpOwogICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5Qm9yZGVyUmFkaXVzOgotICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c1Nob3J0
aGFuZFZhbHVlKHN0eWxlLmdldCgpLCBjc3NWYWx1ZVBvb2wsIG1fbm9kZS0+ZG9jdW1lbnQoKS0+
cmVuZGVyVmlldygpKTsKKyAgICAgICAgICAgIHJldHVybiBnZXRCb3JkZXJSYWRpdXNTaG9ydGhh
bmRWYWx1ZShzdHlsZS5nZXQoKSwgbV9ub2RlLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpOwog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQ6CiAgICAgICAgICAgICByZXR1cm4g
Z2V0Q1NTUHJvcGVydHlWYWx1ZXNGb3JTaG9ydGhhbmRQcm9wZXJ0aWVzKGJvcmRlclJpZ2h0U2hv
cnRoYW5kKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgKaW5kZXggZjY0
ZDIzYi4uZGNhY2NhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uaApAQCAtMzAsNyArMzAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOwogY2xhc3MgQ1NTVmFsdWVMaXN0OwotY2xhc3MgQ1NT
VmFsdWVQb29sOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUmVuZGVyU3R5bGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDdhYzM5ZDYuLjEyNWU0NGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNzMsMTIgKzE3Myw2IEBAIHN0YXRpYyBib29sIGhhc1By
ZWZpeChjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgY2hhciogcHJl
Zml4KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotaW5saW5lIHZvaWQgQ1NTUGFyc2VyOjplbnN1
cmVDU1NWYWx1ZVBvb2woKQotewotICAgIGlmICghbV9jc3NWYWx1ZVBvb2wpCi0gICAgICAgIG1f
Y3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpjcmVhdGUoKTsKLX0KLQogQ1NTUGFyc2VyOjpD
U1NQYXJzZXIoQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlKQogICAgIDogbV9jc3NQYXJzZXJN
b2RlKGNzc1BhcnNlck1vZGUpCiAgICAgLCBtX2ltcG9ydGFudChmYWxzZSkKQEAgLTMyMCw3ICsz
MTQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNDb2xvclByb3BlcnR5SUQoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkKQogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgcGFyc2VDb2xvclZhbHVlKFN0
eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJz
ZXJNb2RlLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3N0YXRpYyBib29sIHBh
cnNlQ29sb3JWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBvcnRhbnQsIENTU1Bh
cnNlck1vZGUgY3NzUGFyc2VyTW9kZSkKIHsKICAgICBib29sIHN0cmljdCA9IGlzU3RyaWN0UGFy
c2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKICAgICBpZiAoIXN0cmluZy5sZW5ndGgoKSkKQEAgLTM0
MSwyNCArMzM1LDE1IEBAIHN0YXRpYyBib29sIHBhcnNlQ29sb3JWYWx1ZShTdHlsZVByb3BlcnR5
U2V0KiBkZWNsYXJhdGlvbiwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0CiAgICAgICAgIHZhbGlkUHJp
bWl0aXZlID0gdHJ1ZTsKICAgICB9CiAKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250ZXh0
U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCk7CiAgICAgaWYgKHZhbGlkUHJpbWl0aXZlKSB7Ci0g
ICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmIChkb2N1bWVudCkKLSAg
ICAgICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWVJRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWVJRCk7CisgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWVJRCk7CiAgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eShwcm9wZXJ0eUlkLCB2YWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgUkdCQTMyIGNvbG9yOwogICAgIGlmICghQ1NTUGFyc2Vy
OjpmYXN0UGFyc2VDb2xvcihjb2xvciwgc3RyaW5nLCBzdHJpY3QgJiYgc3RyaW5nWzBdICE9ICcj
JykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwot
ICAgIGlmIChkb2N1bWVudCkKLSAgICAgICAgdmFsdWUgPSBkb2N1bWVudC0+Y3NzVmFsdWVQb29s
KCktPmNyZWF0ZUNvbG9yVmFsdWUoY29sb3IpOwotICAgIGVsc2UKLSAgICAgICAgdmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlQ29sb3IoY29sb3IpOworICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKGNvbG9yKTsKICAgICBk
ZWNsYXJhdGlvbi0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHlJZCwgdmFs
dWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQwNyw3
ICszOTIsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0eUlEKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgYm9vbCYgYWNjZQogICAgIH0KIH0KIAotc3RhdGljIGJv
b2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNsYXJhdGlvbiwg
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBTdHJpbmcmIHN0cmluZywgYm9vbCBpbXBv
cnRhbnQsIENTU1BhcnNlck1vZGUgY3NzUGFyc2VyTW9kZSwgQ1NTU3R5bGVTaGVldCogY29udGV4
dFN0eWxlU2hlZXQpCitzdGF0aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKFN0eWxlUHJv
cGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBjc3NQYXJzZXJNb2Rl
KQogewogICAgIGJvb2wgYWNjZXB0c05lZ2F0aXZlTnVtYmVyczsKICAgICBib29sIHN0cmljdCA9
IGlzU3RyaWN0UGFyc2VyTW9kZShjc3NQYXJzZXJNb2RlKTsKQEAgLTQ3MiwxMiArNDU3LDcgQEAg
c3RhdGljIGJvb2wgcGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShTdHlsZVByb3BlcnR5U2V0KiBkZWNs
YXJhdGlvbiwgQ1NTUHJvcGVydHlJRAogICAgIGlmIChudW1iZXIgPCAwICYmICFhY2NlcHRzTmVn
YXRpdmVOdW1iZXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb250ZXh0U3R5bGVTaGVldC0+ZmluZERvY3VtZW50KCk7Ci0gICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoZG9jdW1lbnQpCi0gICAgICAgIHZhbHVlID0gZG9jdW1l
bnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShudW1iZXIsIHVuaXQpOwotICAgIGVsc2UK
LSAgICAgICAgdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG51bWJlciwgdW5pdCk7
CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KG51bWJlciwgdW5pdCk7CiAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnR5KENTU1By
b3BlcnR5KHByb3BlcnR5SWQsIHZhbHVlLnJlbGVhc2UoKSwgaW1wb3J0YW50KSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC04OTksNyArODc5LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzS2V5
d29yZFByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQogICAgIH0KIH0KIAotc3Rh
dGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24s
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1w
b3J0YW50LCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKK3N0YXRpYyBib29sIHBh
cnNlS2V5d29yZFZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCkKIHsK
ICAgICBpZiAoc3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtOTE1
LDE1ICs4OTUsMTMgQEAgc3RhdGljIGJvb2wgcGFyc2VLZXl3b3JkVmFsdWUoU3R5bGVQcm9wZXJ0
eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGUKICAgICBpZiAoIXZhbHVlSUQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvbnRl
eHRTdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKTsKICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVl
OwotICAgIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+
Y3NzVmFsdWVQb29sKCkuZ2V0KCkgOiAwOwogICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW5o
ZXJpdCkKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wgPyBjc3NWYWx1ZVBvb2wtPmNyZWF0
ZUluaGVyaXRlZFZhbHVlKCkgOiBDU1NJbmhlcml0ZWRWYWx1ZTo6Y3JlYXRlKCk7CisgICAgICAg
IHZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSW5oZXJpdGVkVmFsdWUoKTsKICAgICBlbHNl
IGlmICh2YWx1ZUlEID09IENTU1ZhbHVlSW5pdGlhbCkKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1
ZVBvb2wgPyBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCkgOiBDU1NJ
bml0aWFsVmFsdWU6OmNyZWF0ZUV4cGxpY2l0KCk7CisgICAgICAgIHZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlRXhwbGljaXRJbml0aWFsVmFsdWUoKTsKICAgICBlbHNlIGlmIChpc1ZhbGlk
S2V5d29yZFByb3BlcnR5QW5kVmFsdWUocHJvcGVydHlJZCwgdmFsdWVJRCkpCi0gICAgICAgIHZh
bHVlID0gY3NzVmFsdWVQb29sID8gY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUo
dmFsdWVJRCkgOiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZUlEKTsK
KyAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWVJRCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTk0MSwxMSArOTE5
LDExIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VW
YWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0cmluCiAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVTaGVldCkKIHsKLSAgICBp
ZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5n
LCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUsIGNvbnRleHRTdHlsZVNoZWV0KSkKKyAgICBpZiAo
cGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBp
bXBvcnRhbnQsIGNzc1BhcnNlck1vZGUpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
cGFyc2VDb2xvclZhbHVlKGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFu
dCwgY3NzUGFyc2VyTW9kZSwgY29udGV4dFN0eWxlU2hlZXQpKQorICAgIGlmIChwYXJzZUNvbG9y
VmFsdWUoZGVjbGFyYXRpb24sIHByb3BlcnR5SUQsIHN0cmluZywgaW1wb3J0YW50LCBjc3NQYXJz
ZXJNb2RlKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKHBhcnNlS2V5d29yZFZhbHVl
KGRlY2xhcmF0aW9uLCBwcm9wZXJ0eUlELCBzdHJpbmcsIGltcG9ydGFudCwgY29udGV4dFN0eWxl
U2hlZXQpKQorICAgIGlmIChwYXJzZUtleXdvcmRWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJ
RCwgc3RyaW5nLCBpbXBvcnRhbnQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBDU1NQYXJz
ZXIgcGFyc2VyKGNzc1BhcnNlck1vZGUpOwogICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZShk
ZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNo
ZWV0KTsKQEAgLTEwMDQsMTAgKzk4Miw2IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKFJH
QkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIHN0cmljdCkKIAogYm9vbCBD
U1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHdpdGhvdXQgYSBzdHlsZXNoZWV0IHNldCBvbiB0aGUg
cGFyc2VyLCBzbyB3ZSBuZWVkIHRvCi0gICAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIENT
U1ZhbHVlUG9vbCBvciB3ZSdsbCBjcmFzaCBiZWxvdyBjc3N5eXBhcnNlKCkuCi0gICAgZW5zdXJl
Q1NTVmFsdWVQb29sKCk7Ci0KICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7Y29sb3I6
Iiwgc3RyaW5nLCAifSAiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMpOwogICAgIG1fcnVsZSA9IDA7
CkBAIC0xMTI4LDggKzExMDIsNiBAQCB2b2lkIENTU1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKCkK
IHZvaWQgQ1NTUGFyc2VyOjpzZXRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQp
CiB7CiAgICAgbV9zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDsKLSAgICBEb2N1bWVudCogZG9jdW1l
bnQgPSBmaW5kRG9jdW1lbnQoKTsKLSAgICBtX2Nzc1ZhbHVlUG9vbCA9IGRvY3VtZW50ID8gZG9j
dW1lbnQtPmNzc1ZhbHVlUG9vbCgpIDogQ1NTVmFsdWVQb29sOjpjcmVhdGUoKTsKIH0KIAogRG9j
dW1lbnQqIENTU1BhcnNlcjo6ZmluZERvY3VtZW50KCkgY29uc3QKQEAgLTEyNDksMTMgKzEyMjEs
MTMgQEAgaW5saW5lIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6Y3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1AKICAgICBBU1NFUlQoKHZhbHVlLT51bml0ID49
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfS0haKQogICAgICAgICAgICB8fCAodmFsdWUtPnVuaXQgPj0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUkVNUykKICAgICAgICAgICAgfHwgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfVlcgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19WTUlO
KSk7Ci0gICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVl
LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS0+dW5pdCkp
OworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS0+dW5pdCkpOwog
fQogCiBpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpjcmVh
dGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgQVNT
RVJUKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HIHx8IHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpOwotICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpOworICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1
ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CiB9CiAKIHN0YXRpYyBp
bnQgdW5pdEZyb21TdHJpbmcoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQpAQCAtMTM0Nyw3ICsxMzE5
LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmNoZWNrRm9yT3JwaGFuZWRVbml0cygpCiBpbmxpbmUgUGFz
c1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZl
KGludCBpZGVudGlmaWVyLCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKGlkZW50
aWZpZXIpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKGlkZW50aWZpZXIpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKGlkZW50aWZpZXIpOwogICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0
cmluZ1ZhbHVlKHZhbHVlKTsKICAgICBpZiAodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19L
SFopCkBAIC0xMzg5LDEzICsxMzYxLDEzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENT
U1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVJbmhlcml0KSB7CiAgICAgICAgIGlmIChudW0gIT0gMSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SW5oZXJpdGVkVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVJbml0
aWFsKSB7CiAgICAgICAgIGlmIChudW0gIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlRXhwbGlj
aXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE0MDQsNyArMTM3Niw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9y
dGFudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKG1fdmFsdWVMaXN0
LT5uZXh0KCkgJiYgIWluU2hvcnRoYW5kKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShpZCksIGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKSwgaW1wb3J0YW50KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNDQyLDcgKzE0MTQsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+aWQpIHsKICAgICAgICAgICAgICAgICBjYXNl
IENTU1ZhbHVlQmlkaU92ZXJyaWRlOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJr
aXRJc29sYXRlOgotICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29s
KCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1
ZS0+aWQpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwpAQCAtMTYxMSw5ICsx
NTgzLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAgIGlmIChsaXN0LT5sZW5ndGgoKSAhPSAx
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGluUXVpcmtzTW9kZSgpICYmIHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUhhbmQpIC8vIE1TSUUg
NSBjb21wYXRpYmlsaXR5IDovCi0gICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVQb2ludGVyKSk7CisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVBvaW50ZXIpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlICYmICgodmFs
dWUtPmlkID49IENTU1ZhbHVlQXV0byAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVXZWJraXRHcmFi
YmluZykgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQ29weSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVOb25lKSkKLSAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgICAgICBsaXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwog
ICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgIHBhcnNlZFZhbHVl
ID0gbGlzdC5yZWxlYXNlKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2NzgsNyArMTY1MCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2U6CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZToKICAgICAgICAgaWYgKGlk
ID09IENTU1ZhbHVlTm9uZSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBjc3NWYWx1ZVBv
b2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICBw
YXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vbmUpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgewogICAgICAg
ICAgICAgaWYgKG1fc3R5bGVTaGVldCkgewpAQCAtMTg2Miw3ICsxODM0LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVVbmRlcmxpbmU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDU1NWYWx1ZU92ZXJsaW5lOgogICAgICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5l
VGhyb3VnaDoKLSAgICAgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgp
LT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICAgICAgICAg
IGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUt
PmlkKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKQEAgLTE5NjEsNyArMTkz
Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKICAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsK
IAogICAgICAgICBSZWZQdHI8UGFpcj4gcGFpciA9IFBhaXI6OmNyZWF0ZShwYXJzZWRWYWx1ZTEu
cmVsZWFzZSgpLCBwYXJzZWRWYWx1ZTIucmVsZWFzZSgpKTsKLSAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiB2YWwgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUocGFpci5yZWxl
YXNlKCkpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHZhbCA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKHBhaXIucmVsZWFzZSgpKTsKICAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0yMDI3LDcgKzE5OTksNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEZsZXhPcmRlcjoKICAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIs
IENTU1N0cmljdE1vZGUpKSB7CiAgICAgICAgICAgICAvLyBXZSByZXN0cmljdCB0aGUgc21hbGxl
c3QgdmFsdWUgdG8gaW50IG1pbiArIDIgYmVjYXVzZSB3ZSB1c2UgaW50IG1pbiBhbmQgaW50IG1p
biArIDEgYXMgc3BlY2lhbCB2YWx1ZXMgaW4gYSBoYXNoIHNldC4KLSAgICAgICAgICAgIHBhcnNl
ZFZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKG1heChzdGF0aWNfY2FzdDxkb3Vi
bGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAyKSwgdmFsdWUtPmZWYWx1ZSks
CisgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKG1h
eChzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgKyAy
KSwgdmFsdWUtPmZWYWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcz4odmFsdWUtPnVuaXQpKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgIH0KQEAgLTIyNDcsNyArMjIxOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgZWxzZSBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAg
ICAgICAgU3RyaW5nIGxpbmVHcmlkVmFsdWUgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CiAgICAg
ICAgICAgICBpZiAoIWxpbmVHcmlkVmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUobGluZUdyaWRW
YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOworICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
bGluZUdyaWRWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQp
OwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0yMzAwLDcgKzIyNzIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChwYXJzZVNob3J0aGFu
ZChwcm9wSWQsIGJvcmRlckFicmlkZ2VkU2hvcnRoYW5kKCksIGltcG9ydGFudCkpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBDU1MzIEJvcmRlcnMgYW5kIEJhY2tncm91bmRzIHNwZWNpZmljYXRpb24g
c2F5cyB0aGF0IGJvcmRlciBhbHNvIHJlc2V0cyBib3JkZXItaW1hZ2UuIEl0J3MgYXMKICAgICAg
ICAgICAgIC8vIHRob3VnaCBhIHZhbHVlIG9mIG5vbmUgd2FzIHNwZWNpZmllZCBmb3IgdGhlIGlt
YWdlLgotICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwgY3Nz
VmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7Cisg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlLCBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU0
NywxMSArMjUxOSwxMSBAQCB2b2lkIENTU1BhcnNlcjo6YWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NW
YWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpCiAgICAgICAgIGx2YWwgPSBy
dmFsOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUJhY2tncm91bmRDbGlwKENTU1BhcnNlclZhbHVl
KiBwYXJzZXJWYWx1ZSwgUmVmUHRyPENTU1ZhbHVlPiYgY3NzVmFsdWUsIENTU1ZhbHVlUG9vbCog
Y3NzVmFsdWVQb29sKQorc3RhdGljIGJvb2wgcGFyc2VCYWNrZ3JvdW5kQ2xpcChDU1NQYXJzZXJW
YWx1ZSogcGFyc2VyVmFsdWUsIFJlZlB0cjxDU1NWYWx1ZT4mIGNzc1ZhbHVlKQogewogICAgIGlm
IChwYXJzZXJWYWx1ZS0+aWQgPT0gQ1NTVmFsdWVCb3JkZXJCb3ggfHwgcGFyc2VyVmFsdWUtPmlk
ID09IENTU1ZhbHVlUGFkZGluZ0JveAogICAgICAgICB8fCBwYXJzZXJWYWx1ZS0+aWQgPT0gQ1NT
VmFsdWVDb250ZW50Qm94IHx8IHBhcnNlclZhbHVlLT5pZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQp
IHsKLSAgICAgICAgY3NzVmFsdWUgPSBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShwYXJzZXJWYWx1ZS0+aWQpOworICAgICAgICBjc3NWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShwYXJzZXJWYWx1ZS0+aWQpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU4NywxNCArMjU1OSwxNCBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25z
dCBDU1NQcm9wZXJ0eUlEKiBwcgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldICYmIHByb3BlcnRpZXNbaV0g
IT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgYWRk
RmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlh
bFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUodmFsdWVzW2ldLCBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b24gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkRmlsbFZhbHVlKHBvc2l0aW9uWVZhbHVlLCBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3Bl
cnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUmVwZWF0IHx8IHByb3BlcnRpZXNbaV0g
PT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUmVwZWF0KQotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0
SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJl
cGVhdFlWYWx1ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJh
Y2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tP
cmlnaW4pICYmICFwYXJzZWRQcm9wZXJ0eVtpXSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgYmFja2dyb3VuZC1vcmlnaW4gd2Fzbid0IHByZXNlbnQsIHRoZW4gcmVzZXQgYmFja2dy
b3VuZC1jbGlwIGFsc28uCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xp
cFZhbHVlLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBv
b2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0eVtpXSA9
IGZhbHNlOwpAQCAtMjYxOSwxMCArMjU5MSwxMCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxs
U2hvcnRoYW5kKENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEKiBwcgog
ICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1ZSwgdmFsMi5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRPcmlnaW4gfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tPcmlnaW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGFyc2UgdGhl
IHZhbHVlIGFzIGEgY2xpcCwgYW5kIHNlZSBpZiB3ZSBzdWNjZWVkLgotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHBhcnNlQmFja2dyb3VuZENsaXAocGFyc2VyVmFsdWUsIHZhbDEsIGNzc1Zh
bHVlUG9vbCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRD
bGlwKHBhcnNlclZhbHVlLCB2YWwxKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRG
aWxsVmFsdWUoY2xpcFZhbHVlLCB2YWwxLnJlbGVhc2UoKSk7IC8vIFRoZSBwcm9wZXJ0eSBwYXJz
ZWQgc3VjY2Vzc2Z1bGx5LgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShjbGlwVmFsdWUsIGNzc1ZhbHVlUG9vbCgp
LT5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsgLy8gU29tZSB2YWx1ZSB3YXMgdXNlZCBm
b3Igb3JpZ2luIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBjbGlwLiBKdXN0IHJlc2V0IGNsaXAg
aW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZh
bHVlLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNpdEluaXRpYWxWYWx1ZSgpKTsgLy8gU29t
ZSB2YWx1ZSB3YXMgdXNlZCBmb3Igb3JpZ2luIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBieSBjbGlw
LiBKdXN0IHJlc2V0IGNsaXAgaW5zdGVhZC4KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
bGlwIHx8IHByb3BlcnRpZXNbaV0gPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrQ2xpcCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNsaXBWYWx1ZQpAQCAtMjY0MywxNCArMjYx
NSwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKENTU1Byb3BlcnR5SUQg
cHJvcElkLCBjb25zdCBDU1NQcm9wZXJ0eUlEKiBwcgogICAgIGZvciAoaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyBpKyspIHsKICAgICAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3Bl
cnRpZXMgd2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0
eVtpXSkgewotICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29s
KCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgYWRkRmlsbFZh
bHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUo
KSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eUJhY2tncm91
bmRQb3NpdGlvbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uKQotICAgICAgICAgICAgICAgIGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAg
IGFkZEZpbGxWYWx1ZShwb3NpdGlvbllWYWx1ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGlj
aXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRSZXBlYXQgfHwgcHJvcGVydGllc1tpXSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tSZXBlYXQpCi0gICAgICAgICAgICAgICAgYWRkRmlsbFZhbHVlKHJlcGVhdFlWYWx1
ZSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIGFkZEZpbGxWYWx1ZShyZXBlYXRZVmFsdWUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0
ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKChwcm9wZXJ0aWVzW2ld
ID09IENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiB8fCBwcm9wZXJ0aWVzW2ldID09IENTU1By
b3BlcnR5V2Via2l0TWFza09yaWdpbikpIHsKICAgICAgICAgICAgICAgICAvLyBJZiBiYWNrZ3Jv
dW5kLW9yaWdpbiB3YXNuJ3QgcHJlc2VudCwgdGhlbiByZXNldCBiYWNrZ3JvdW5kLWNsaXAgYWxz
by4KLSAgICAgICAgICAgICAgICBhZGRGaWxsVmFsdWUoY2xpcFZhbHVlLCBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYWRkRmls
bFZhbHVlKGNsaXBWYWx1ZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFs
dWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb3BlcnRpZXNb
aV0gPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24pIHsKQEAgLTI3MjAsNyArMjY5Miw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9ydGFu
dCkKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFs
dWVzW2ldLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgcGFy
c2VkUHJvcGVydHlbaV0gPSBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgh
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKQEAgLTI3NDgsNyArMjcyMCw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKICAgICAvLyBGaWxs
IGluIGFueSByZW1haW5pbmcgcHJvcGVydGllcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgogICAg
IGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKICAgICAgICAgaWYgKCFwYXJz
ZWRQcm9wZXJ0eVtpXSkKLSAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwg
Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAg
ICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBs
aWNpdEluaXRpYWxWYWx1ZSgpKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIGFsbCBvZiB0aGUg
cHJvcGVydGllcyB3ZSBmb3VuZC4KQEAgLTI3NzUsNyArMjc0Nyw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBt
X3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3Bl
cnRpZXM7ICsraSkgewogICAgICAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCi0g
ICAgICAgICAgICAgICAgICAgIGFkZEFuaW1hdGlvblZhbHVlKHZhbHVlc1tpXSwgY3NzVmFsdWVQ
b29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICBhZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxp
Y2l0SW5pdGlhbFZhbHVlKCkpOwogICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0g
ZmFsc2U7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpCkBAIC0yODAyLDcgKzI3NzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VUcmFuc2l0
aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KQogICAgIC8vIEZpbGwgaW4gYW55IHJlbWFpbmlu
ZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgZm9yIChpID0gMDsgaSA8
IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKQot
ICAgICAgICAgICAgYWRkQW5pbWF0aW9uVmFsdWUodmFsdWVzW2ldLCBjc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSk7CisgICAgICAgICAgICBhZGRBbmltYXRpb25W
YWx1ZSh2YWx1ZXNbaV0sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVl
KCkpOwogICAgIH0KIAogICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZv
dW5kLgpAQCAtMjg1MSw5ICsyODIzLDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5k
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBjb25zdCBTdHlsZVByb3BlcnR5U2hvcnRoYW4KICAgICAg
ICAgaWYgKHByb3BlcnRpZXNGb3JJbml0aWFsaXphdGlvbikgewogICAgICAgICAgICAgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgaW5pdFByb3BlcnRpZXMgPSAqKHByb3BlcnRpZXNGb3JJ
bml0aWFsaXphdGlvbltpXSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHByb3BJbmRleCA9
IDA7IHByb3BJbmRleCA8IGluaXRQcm9wZXJ0aWVzLmxlbmd0aCgpOyArK3Byb3BJbmRleCkKLSAg
ICAgICAgICAgICAgICBhZGRQcm9wZXJ0eShpbml0UHJvcGVydGllcy5wcm9wZXJ0aWVzKClbcHJv
cEluZGV4XSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUltcGxpY2l0SW5pdGlhbFZhbHVlKCksIGlt
cG9ydGFudCk7CisgICAgICAgICAgICAgICAgYWRkUHJvcGVydHkoaW5pdFByb3BlcnRpZXMucHJv
cGVydGllcygpW3Byb3BJbmRleF0sIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUltcGxpY2l0SW5pdGlh
bFZhbHVlKCksIGltcG9ydGFudCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkUHJv
cGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlt
cGxpY2l0SW5pdGlhbFZhbHVlKCksIGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0
eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVlOwpA
QCAtMjkzMCw3ICsyOTAyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUGFnZShDU1NQcm9wZXJ0
eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBdXRvKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHBy
b3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBp
bXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT5pZCA9PSAwICYmIHZhbHVlLT51bml0ID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsKICAgICAgICAgYWRkUHJvcGVydHkocHJv
cElkLCBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWx1ZSksIGltcG9ydGFudCk7CkBAIC0y
OTc1LDE0ICsyOTQ3LDE0IEBAIENTU1BhcnNlcjo6U2l6ZVBhcmFtZXRlclR5cGUgQ1NTUGFyc2Vy
OjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFsdWVMaXN0KiBwYXJzZWRWCiAgICAgc3dpdGNoICh2
YWx1ZS0+aWQpIHsKICAgICBjYXNlIENTU1ZhbHVlQXV0bzoKICAgICAgICAgaWYgKHByZXZQYXJh
bVR5cGUgPT0gTm9uZSkgewotICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAg
IHBhcnNlZFZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZSh2YWx1ZS0+aWQpKTsKICAgICAgICAgICAgIHJldHVybiBBdXRvOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBOb25lOwogICAgIGNhc2UgQ1NTVmFsdWVMYW5kc2NhcGU6CiAgICAgY2FzZSBD
U1NWYWx1ZVBvcnRyYWl0OgogICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHBy
ZXZQYXJhbVR5cGUgPT0gUGFnZVNpemUpIHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7Cisg
ICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICByZXR1cm4gT3JpZW50YXRpb247
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE5vbmU7CkBAIC0yOTk3LDcgKzI5NjksNyBAQCBD
U1NQYXJzZXI6OlNpemVQYXJhbWV0ZXJUeXBlIENTU1BhcnNlcjo6cGFyc2VTaXplUGFyYW1ldGVy
KENTU1ZhbHVlTGlzdCogcGFyc2VkVgogICAgICAgICBpZiAocHJldlBhcmFtVHlwZSA9PSBOb25l
IHx8IHByZXZQYXJhbVR5cGUgPT0gT3JpZW50YXRpb24pIHsKICAgICAgICAgICAgIC8vIE5vcm1h
bGl6ZSB0byBQYWdlIFNpemUgdGhlbiBPcmllbnRhdGlvbiBvcmRlciBieSBwcmVwZW5kaW5nLgog
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qgc3BlY2lmaWVkIGJ5IHRoZSBDU1MzIFBhZ2VkIE1l
ZGlhIHNwZWNpZmljYXRpb24sIGJ1dCBmb3Igc2ltcGxlciBwcm9jZXNzaW5nIGxhdGVyIChDU1NT
dHlsZVNlbGVjdG9yOjphcHBseVBhZ2VTaXplUHJvcGVydHkpLgotICAgICAgICAgICAgcGFyc2Vk
VmFsdWVzLT5wcmVwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFs
dWUtPmlkKSk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZXMtPnByZXBlbmQoY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOwogICAgICAgICAgICAgcmV0dXJu
IFBhZ2VTaXplOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOwpAQCAtMzA5Miw3ICsz
MDY0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9DbG9zZVF1b3Rl
OgogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vbmU6CiAgICAgICAgICAgICBjYXNlIENTU1Zh
bHVlTm9ybWFsOgotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICBwYXJzZWRW
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19TVFJJTkcpIHsKICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3JlYXRlUHJp
bWl0aXZlU3RyaW5nVmFsdWUodmFsKTsKQEAgLTMxMzMsNyArMzEwNSw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBdHRyKENTU1BhcnNlclZhbHVlTGlzdCogYXJncykK
ICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAg
IGF0dHJOYW1lID0gYXR0ck5hbWUubG93ZXIoKTsKIAotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlVmFsdWUoYXR0ck5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfQVRUUik7Cisg
ICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGF0dHJOYW1lLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX0FUVFIpOwogfQogCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQmFja2dyb3VuZENvbG9yKCkKQEAgLTMxNDEsMTQgKzMxMTMsMTQgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhY2tncm91bmRDb2xvcigpCiAgICAgaW50IGlk
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7CiAgICAgaWYgKGlkID09IENTU1ZhbHVlV2Vi
a2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1ZhbHVlV2luZG93dGV4
dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yIHx8
CiAgICAgICAgIChpZCA+PSBDU1NWYWx1ZUdyZXkgJiYgaWQgPCBDU1NWYWx1ZVdlYmtpdFRleHQg
JiYgaW5RdWlya3NNb2RlKCkpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoaWQpOwogICAgIHJldHVybiBwYXJzZUNvbG9yKCk7CiB9CiAKIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlz
dCwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlTGlzdC0+Y3VycmVu
dCgpLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIHZhbHVlID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodmFsdWVMaXN0LT5jdXJyZW50KCktPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKQEAgLTMxODIsNyArMzE1NCw3IEBA
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25YKENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVMaXN0CiAgICAgICAgICAgICBwZXJjZW50ID0gMTAwOwogICAg
ICAgICBlbHNlIGlmIChpZCA9PSBDU1NWYWx1ZUNlbnRlcikKICAgICAgICAgICAgIHBlcmNlbnQg
PSA1MDsKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShwZXJjZW50
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19Q
RVJDRU5UQUdFKTsKICAgICB9CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZUxpc3QtPmN1cnJlbnQo
KSwgRlBlcmNlbnQgfCBGTGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CkBAIC0zMTk4LDcgKzMxNzAsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uWShDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdAogICAgICAgICAgICAgcGVyY2VudCA9IDEwMDsKICAgICAg
ICAgZWxzZSBpZiAoaWQgPT0gQ1NTVmFsdWVDZW50ZXIpCiAgICAgICAgICAgICBwZXJjZW50ID0g
NTA7Ci0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUocGVyY2VudCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgcmV0dXJuIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSk7CiAgICAgfQogICAgIGlmICh2YWxpZFVuaXQodmFsdWVMaXN0LT5jdXJyZW50KCks
IEZQZXJjZW50IHwgRkxlbmd0aCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsdWVMaXN0LT5jdXJyZW50KCkpOwpAQCAtMzIzMSw3ICszMjAzLDcgQEAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudChD
U1NQYXJzZXJWYWx1ZUxpc3QqIHYKICAgICAgICAgICAgIGN1bXVsYXRpdmVGbGFncyB8PSBBbWJp
Z3VvdXNGaWxsUG9zaXRpb247CiAgICAgICAgICAgICBpbmRpdmlkdWFsRmxhZyA9IEFtYmlndW91
c0ZpbGxQb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkt
PmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7
CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShwZXJjZW50LCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0KICAgICBpZiAodmFsaWRVbml0
KHZhbHVlTGlzdC0+Y3VycmVudCgpLCBGUGVyY2VudCB8IEZMZW5ndGgpKSB7CiAgICAgICAgIGlm
ICghY3VtdWxhdGl2ZUZsYWdzKSB7CkBAIC0zMjg4LDcgKzMyNjAsNyBAQCB2b2lkIENTU1BhcnNl
cjo6cGFyc2VGaWxsUG9zaXRpb24oQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0
cjxDU1NWYWx1ZQogICAgICAgICAvLyBpcyBzaW1wbHkgNTAlLiAgVGhpcyBpcyBvdXIgZGVmYXVs
dC4KICAgICAgICAgLy8gRm9yIGtleXdvcmRzLCB0aGUga2V5d29yZCB3YXMgZWl0aGVyIGFuIHgt
a2V5d29yZCAobGVmdC9yaWdodCksIGEgeS1rZXl3b3JkICh0b3AvYm90dG9tKSwgb3IgYW4gYW1i
aWd1b3VzIGtleXdvcmQgKGNlbnRlcikuCiAgICAgICAgIC8vIEZvciBsZWZ0L3JpZ2h0L2NlbnRl
ciwgdGhlIGRlZmF1bHQgb2YgNTAlIGluIHRoZSB5IGlzIHN0aWxsIGNvcnJlY3QuCi0gICAgICAg
IHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSg1MCwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgdmFsdWUyID0gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoNTAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAKICAgICBp
ZiAodmFsdWUxRmxhZyA9PSBZRmlsbFBvc2l0aW9uIHx8IHZhbHVlMkZsYWcgPT0gWEZpbGxQb3Np
dGlvbikKICAgICAgICAgdmFsdWUxLnN3YXAodmFsdWUyKTsKQEAgLTMzMDEsMjAgKzMyNzMsMjAg
QEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNlRmlsbFJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHUKICAgICBpbnQgaWQgPSBtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpLT5pZDsKICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVSZXBlYXRYKSB7CiAgICAgICAgIG1f
aW1wbGljaXRTaG9ydGhhbmQgPSB0cnVlOwotICAgICAgICB2YWx1ZTEgPSBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlUmVwZWF0KTsKLSAgICAgICAgdmFsdWUy
ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vUmVwZWF0
KTsKKyAgICAgICAgdmFsdWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KENTU1ZhbHVlUmVwZWF0KTsKKyAgICAgICAgdmFsdWUyID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9SZXBlYXQpOwogICAgICAgICBtX3ZhbHVlTGlzdC0+
bmV4dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVJl
cGVhdFkpIHsKICAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7Ci0gICAgICAgIHZh
bHVlMSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb1Jl
cGVhdCk7Ci0gICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVSZXBlYXQpOworICAgICAgICB2YWx1ZTEgPSBjc3NWYWx1ZVBvb2woKS5j
cmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb1JlcGVhdCk7CisgICAgICAgIHZhbHVlMiA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVJlcGVhdCk7CiAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
aWYgKGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwgaWQg
PT0gQ1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKQotICAgICAgICB2YWx1ZTEg
PSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKKyAgICAgICAgdmFs
dWUxID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKICAgICBlbHNl
IHsKICAgICAgICAgdmFsdWUxID0gMDsKICAgICAgICAgcmV0dXJuOwpAQCAtMzMzMCwxMiArMzMw
MiwxMiBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4m
IHZhbHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgdmFsdQogICAgICAgICBpZCA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCktPmlkOwogCiAgICAgaWYgKHZhbHVlICYmIChpZCA9PSBDU1NWYWx1ZVJlcGVh
dCB8fCBpZCA9PSBDU1NWYWx1ZU5vUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlUm91bmQgfHwgaWQg
PT0gQ1NTVmFsdWVTcGFjZSkpIHsKLSAgICAgICAgdmFsdWUyID0gY3NzVmFsdWVQb29sKCktPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CisgICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gSWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmll
ZCwgdmFsdWUyIGlzIHRoZSBzYW1lIGFzIHZhbHVlMS4KICAgICAgICAgbV9pbXBsaWNpdFNob3J0
aGFuZCA9IHRydWU7Ci0gICAgICAgIHZhbHVlMiA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZTEuZ2V0KCkp
LT5nZXRJZGVudCgpKTsKKyAgICAgICAgdmFsdWUyID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUxLmdldCgp
KS0+Z2V0SWRlbnQoKSk7CiAgICAgfQogfQogCkBAIC0zMzQ1LDEyICszMzE3LDEyIEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgYm9vbCYgYWxsb3dDCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKIAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVDb250YWluIHx8
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUNvdmVyKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29s
KCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOworICAgICAgICByZXR1cm4gY3Nz
VmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAKICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMTsKIAogICAgIGlmICh2YWx1ZS0+aWQg
PT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBwYXJzZWRWYWx1ZTEgPSBjc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0byk7CisgICAgICAgIHBhcnNlZFZhbHVl
MSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pOwog
ICAgIGVsc2UgewogICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJj
ZW50KSkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzM3NSw3ICszMzQ3LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZpbGxTaXplKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sJiBhbGxvd0MKIAogICAgIGlmICghcGFyc2VkVmFsdWUyKQogICAgICAgICByZXR1
cm4gcGFyc2VkVmFsdWUxOwotICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUo
UGFpcjo6Y3JlYXRlKHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNl
KCkpKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRl
KHBhcnNlZFZhbHVlMS5yZWxlYXNlKCksIHBhcnNlZFZhbHVlMi5yZWxlYXNlKCkpKTsKIH0KIAog
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBD
U1NQcm9wZXJ0eUlEJiBwcm9wSWQxLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQyLApAQCAtMzQyNiw3
ICszMzk4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcElkLCBDU1NQcm9wZXJ0eUlEJiBwcm9wSWQxLAogICAgICAgICAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudDoKICAgICAgICAgICAgICAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0TWFza0F0dGFjaG1lbnQ6CiAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWwtPmlkID09IENTU1ZhbHVlU2Nyb2xsIHx8IHZhbC0+aWQgPT0gQ1NTVmFsdWVGaXhlZCB8fCB2
YWwtPmlkID09IENTU1ZhbHVlTG9jYWwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJW
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsLT5pZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzQ0NSwxNyArMzQxNywxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxs
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENTU1Byb3BlcnR5SUQmIHByb3BJZDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWwtPmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IHZh
bC0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nQm94IHx8IHZhbC0+aWQgPT0gQ1NTVmFsdWVDb250ZW50
Qm94IHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAoKHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdEJhY2tncm91bmRDbGlwIHx8IHByb3BJZCA9PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tDbGlw
KSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICh2YWwtPmlkID09IENTU1ZhbHVlVGV4dCB8
fCB2YWwtPmlkID09IENTU1ZhbHVlV2Via2l0VGV4dCkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjdXJyVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bC0+aWQpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dy
b3VuZENsaXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUJhY2tncm91bmRDbGlwKHZh
bCwgY3VyclZhbHVlLCBjc3NWYWx1ZVBvb2woKSkpCisgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZUJhY2tncm91bmRDbGlwKHZhbCwgY3VyclZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kT3JpZ2luOgogICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsLT5pZCA9PSBDU1NWYWx1ZUJvcmRlckJveCB8fCB2YWwtPmlkID09
IENTU1ZhbHVlUGFkZGluZ0JveCB8fCB2YWwtPmlkID09IENTU1ZhbHVlQ29udGVudEJveCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJW
YWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNDgxLDcgKzM0NTMsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQs
IENTU1Byb3BlcnR5SUQmIHByb3BJZDEsCiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tDb21wb3NpdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmICgodmFsLT5p
ZCA+PSBDU1NWYWx1ZUNsZWFyICYmIHZhbC0+aWQgPD0gQ1NTVmFsdWVQbHVzTGlnaHRlcikgfHwg
dmFsLT5pZCA9PSBDU1NWYWx1ZUhpZ2hsaWdodCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y3VyclZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0zNTU4LDcgKzM1MzAsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVOb3JtYWwgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQWx0ZXJuYXRlIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZVJldmVyc2UgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQWx0ZXJuYXRl
UmV2ZXJzZSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zNTc0LDcg
KzM1NDYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
RmlsbE1vZGUoKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5j
dXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWUtPmlk
ID09IENTU1ZhbHVlRm9yd2FyZHMgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlQmFja3dhcmRzIHx8
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUJvdGgpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgIHJldHVybiBjc3NW
YWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICByZXR1cm4g
MDsKIH0KIApAQCAtMzU4Miw3ICszNTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKIHsKICAgICBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKLSAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgIGlmICh2YWxpZFVuaXQodmFs
dWUsIEZOdW1iZXIgfCBGTm9uTmVnKSkKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51
bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgcmV0dXJuIDA7CkBAIC0zNTkzLDcgKzM1NjUsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCiAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAo
dmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewogICAgICAgICBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0cmluZywgIm5vbmUiKSkp
IHsKLSAgICAgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZh
bHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpOwogICAgICAg
ICB9CkBAIC0zNjA1LDcgKzM1NzcsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCkKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVS
dW5uaW5nIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVBhdXNlZCkKLSAgICAgICAgcmV0dXJuIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKKyAgICAgICAg
cmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwog
ICAgIHJldHVybiAwOwogfQogCkBAIC0zNjE2LDExICszNTg4LDExIEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSgpCiAgICAgICAgIHJldHVy
biAwOwogICAgIGludCByZXN1bHQgPSBjc3NQcm9wZXJ0eUlEKHZhbHVlLT5zdHJpbmcpOwogICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUocmVzdWx0KTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUt
PnN0cmluZywgImFsbCIpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUFsbCk7CisgICAgICAgIHJldHVybiBjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBbGwpOwogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZSh2YWx1ZS0+c3RyaW5nLCAibm9uZSIpKQotICAgICAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICByZXR1
cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSk7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM2NjEsNyArMzYzMyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFs
dWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25UaW1pbmdGdW5jdGlvbigpCiAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUt
PmlkID09IENTU1ZhbHVlRWFzZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVMaW5lYXIgfHwgdmFs
dWUtPmlkID09IENTU1ZhbHVlRWFzZUluIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VPdXQK
ICAgICAgICAgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZUluT3V0IHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZVN0ZXBTdGFydCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVTdGVwRW5kKQotICAg
ICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+
aWQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7CiAKICAgICAvLyBXZSBtdXN0IGJlIGEgZnVuY3Rpb24uCiAgICAgaWYgKHZh
bHVlLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKQEAgLTM4MzUsNyArMzgwNyw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRUcmFja0xpc3QoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAobV92YWx1ZUxpc3QtPm5leHQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50
KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVu
dGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkBAIC0zODQ1LDcgKzM4MTcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmlk
VHJhY2tMaXN0KENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
aWYgKCF2YWxpZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHByaW1pdGl2ZVZhbHVlID0gdmFsdWUtPmlkID09IENTU1ZhbHVl
QXV0byA/IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRv
KSA6IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CisgICAgICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gcHJpbWl0aXZlVmFsdWUgPSB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVB
dXRvID8gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlQXV0bykg
OiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwogICAgICAgICB2YWx1ZXMtPmFw
cGVuZChwcmltaXRpdmVWYWx1ZS5yZWxlYXNlKCkpOwogICAgICAgICB2YWx1ZSA9IG1fdmFsdWVM
aXN0LT5uZXh0KCk7CiAgICAgfQpAQCAtMzg4MSw3ICszODUzLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRh
bnQpCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgaWYgKG1f
dmFsdWVMaXN0LT5uZXh0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFk
ZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwog
ICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICAgfQogCkBAIC0zOTUxLDcgKzM5MjMsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKENTU1Byb3BlcnR5SUQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKIAogICAgICAgICBpZiAobnVtQXJncyA9PSBEQVNIQk9BUkRfUkVHSU9O
X1NIT1JUX05VTV9QQVJBTUVURVJTIHx8IG51bUFyZ3MgPT0gKERBU0hCT0FSRF9SRUdJT05fU0hP
UlRfTlVNX1BBUkFNRVRFUlMqMi0xKSkgewogICAgICAgICAgICAgLy8gVGhpcyBvcmlnaW5hbGx5
IHVzZWQgQ1NTVmFsdWVJbnZhbGlkIGJ5IGFjY2lkZW50LiBJdCBtaWdodCBiZSBtb3JlIGxvZ2lj
YWwgdG8gdXNlIHNvbWV0aGluZyBlbHNlLgotICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2
ZVZhbHVlPiBhbW91bnQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENT
U1ZhbHVlSW52YWxpZCk7CisgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFt
b3VudCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUludmFs
aWQpOwogCiAgICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQpOwogICAgICAgICAgICAg
cmVnaW9uLT5zZXRSaWdodChhbW91bnQpOwpAQCAtMzk2OSw3ICszOTQxLDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0
byA/Ci0gICAgICAgICAgICAgICAgICAgIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVBdXRvKSA6CisgICAgICAgICAgICAgICAgICAgIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDoKICAgICAgICAgICAgICAgICAg
ICAgY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGFyZyk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoaSA9PSAwKQpAQCAtMzk5MCw3ICszOTYyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFz
aGJvYXJkUmVnaW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
fQogCiAgICAgaWYgKHZhbGlkKQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVWYWx1ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwor
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGZp
cnN0UmVnaW9uLnJlbGVhc2UoKSksIGltcG9ydGFudCk7CiAKICAgICByZXR1cm4gdmFsaWQ7CiB9
CkBAIC00MDEyLDcgKzM5ODQsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogCiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzZXBhcmF0b3I7CiAgICAgaWYgKCFjb3VudGVycykKLSAg
ICAgICAgc2VwYXJhdG9yID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKFN0cmluZygpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgIHNlcGFyYXRvciA9IGNzc1Zh
bHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFN0cmluZygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORyk7CiAgICAgZWxzZSB7CiAgICAgICAgIGkgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlm
IChpLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBpLT5pVmFsdWUgIT0gJywn
KQpAQCAtNDAyOCw3ICs0MDAwLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCogYXJncywgYm8KICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxpc3RTdHlsZTsKICAgICBpID0gYXJncy0+bmV4dCgpOwog
ICAgIGlmICghaSkgLy8gTWFrZSB0aGUgbGlzdCBzdHlsZSBkZWZhdWx0IGRlY2ltYWwKLSAgICAg
ICAgbGlzdFN0eWxlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZURlY2ltYWwpOworICAgICAgICBsaXN0U3R5bGUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVEZWNpbWFsKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYg
KGktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yIHx8IGktPmlWYWx1ZSAhPSAnLCcp
CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTQwNDMsMTAgKzQwMTUsMTAgQEAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVl
TGlzdCogYXJncywgYm8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICAgICAgbGlzdFN0eWxlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShs
aXN0U3R5bGVJRCk7CisgICAgICAgIGxpc3RTdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZShsaXN0U3R5bGVJRCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVWYWx1ZShDb3VudGVyOjpjcmVhdGUoaWRlbnRpZmllci5yZWxlYXNlKCks
IGxpc3RTdHlsZS5yZWxlYXNlKCksIHNlcGFyYXRvci5yZWxlYXNlKCkpKTsKKyAgICByZXR1cm4g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoQ291bnRlcjo6Y3JlYXRlKGlkZW50aWZpZXIucmVs
ZWFzZSgpLCBsaXN0U3R5bGUucmVsZWFzZSgpLCBzZXBhcmF0b3IucmVsZWFzZSgpKSk7CiB9CiAK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCkBAIC00MDY5LDcgKzQwNDEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VD
bGlwU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBp
ZiAoIXZhbGlkKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gbGVuZ3RoID0gYS0+aWQgPT0gQ1NTVmFsdWVBdXRvID8KLSAgICAgICAgICAgIGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6CisgICAg
ICAgICAgICBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRv
KSA6CiAgICAgICAgICAgICBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSk7CiAgICAgICAg
IGlmIChpID09IDApCiAgICAgICAgICAgICByZWN0LT5zZXRUb3AobGVuZ3RoKTsKQEAgLTQwOTEs
NyArNDA2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNsaXBTaGFwZShDU1NQcm9wZXJ0eUlE
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGkrKzsKICAgICB9CiAgICAgaWYgKHZh
bGlkKSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0
ZVZhbHVlKHJlY3QucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShyZWN0LnJlbGVhc2UoKSksIGltcG9y
dGFudCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTQzMTIsNyArNDI4NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUV4Y2x1
c2lvblNoYXBlKGJvb2wgc2hhcGVJbnNpZGUsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBzaGFw
ZSA9IHBhcnNlRXhjbHVzaW9uU2hhcGVQb2x5Z29uKGFyZ3MpOwogCiAgICAgaWYgKHNoYXBlKSB7
Ci0gICAgICAgIGFkZFByb3BlcnR5KHNoYXBlSW5zaWRlID8gQ1NTUHJvcGVydHlXZWJraXRTaGFw
ZUluc2lkZSA6IENTU1Byb3BlcnR5V2Via2l0U2hhcGVPdXRzaWRlLCBjc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlVmFsdWUoc2hhcGUucmVsZWFzZSgpKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJv
cGVydHkoc2hhcGVJbnNpZGUgPyBDU1NQcm9wZXJ0eVdlYmtpdFNoYXBlSW5zaWRlIDogQ1NTUHJv
cGVydHlXZWJraXRTaGFwZU91dHNpZGUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKHNoYXBl
LnJlbGVhc2UoKSksIGltcG9ydGFudCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTQzNTQsMTcgKzQzMjYsMTcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudCkKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaWQgPT0gQ1NTVmFsdWVJdGFsaWMgfHwgaWQgPT0gQ1NTVmFsdWVPYmxpcXVlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKGZvbnQtPnN0eWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9udC0+c3R5bGUgPSBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKGlkKTsKKyAgICAgICAgICAgICAgICBmb250LT5zdHlsZSA9IGNz
c1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7CiAgICAgICAgICAgICAgICAg
c3R5bGVJbXBsaWNpdCA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpZCA9PSBDU1NW
YWx1ZVNtYWxsQ2FwcykgewogICAgICAgICAgICAgICAgIGlmIChmb250LT52YXJpYW50KQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZm9udC0+dmFy
aWFudCA9IGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAg
ICAgICAgICAgIGZvbnQtPnZhcmlhbnQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWQpOwogICAgICAgICAgICAgICAgIHZhcmlhbnRJbXBsaWNpdCA9IGZhbHNlOwogICAg
ICAgICAgICAgfSBlbHNlIGlmIChpZCA+PSBDU1NWYWx1ZUJvbGQgJiYgaWQgPD0gQ1NTVmFsdWVM
aWdodGVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZvbnQtPndlaWdodCkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZvbnQtPndlaWdodCA9IGNz
c1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOworICAgICAgICAgICAgICAg
IGZvbnQtPndlaWdodCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZCk7
CiAgICAgICAgICAgICAgICAgd2VpZ2h0SW1wbGljaXQgPSBmYWxzZTsKICAgICAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CkBAIC00MzkxLDcgKzQzNjMsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAg
ICAgIHZhbCA9IENTU1ZhbHVlOTAwOwogCiAgICAgICAgICAgICBpZiAodmFsKSB7Ci0gICAgICAg
ICAgICAgICAgZm9udC0+d2VpZ2h0ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZSh2YWwpOworICAgICAgICAgICAgICAgIGZvbnQtPndlaWdodCA9IGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwpOwogICAgICAgICAgICAgICAgIHdlaWdodEltcGxp
Y2l0ID0gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2YWxpZCA9
IGZhbHNlOwpAQCAtNDQxMSwxNiArNDM4MywxNiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250
KGJvb2wgaW1wb3J0YW50KQogCiAgICAgLy8gU2V0IHVuZGVmaW5lZCB2YWx1ZXMgdG8gZGVmYXVs
dC4KICAgICBpZiAoIWZvbnQtPnN0eWxlKQotICAgICAgICBmb250LT5zdHlsZSA9IGNzc1ZhbHVl
UG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb3JtYWwpOworICAgICAgICBm
b250LT5zdHlsZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1
ZU5vcm1hbCk7CiAgICAgaWYgKCFmb250LT52YXJpYW50KQotICAgICAgICBmb250LT52YXJpYW50
ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7
CisgICAgICAgIGZvbnQtPnZhcmlhbnQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoQ1NTVmFsdWVOb3JtYWwpOwogICAgIGlmICghZm9udC0+d2VpZ2h0KQotICAgICAgICBm
b250LT53ZWlnaHQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1Zh
bHVlTm9ybWFsKTsKKyAgICAgICAgZm9udC0+d2VpZ2h0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKIAogICAgIC8vIE5vdyBhIGZvbnQgc2l6
ZSBfbXVzdF8gY29tZS4KICAgICAvLyA8YWJzb2x1dGUtc2l6ZT4gfCA8cmVsYXRpdmUtc2l6ZT4g
fCA8bGVuZ3RoPiB8IDxwZXJjZW50YWdlPiB8IGluaGVyaXQKICAgICBpZiAodmFsdWUtPmlkID49
IENTU1ZhbHVlWHhTbWFsbCAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVMYXJnZXIpCi0gICAgICAg
IGZvbnQtPnNpemUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVl
LT5pZCk7CisgICAgICAgIGZvbnQtPnNpemUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICBlbHNlIGlmICh2YWxpZFVuaXQodmFsdWUsIEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcpKQogICAgICAgICBmb250LT5zaXplID0gY3JlYXRlUHJp
bWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5uZXh0
KCk7CkBAIC00NDUyLDcgKzQ0MjQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wg
aW1wb3J0YW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWZvbnQtPmxpbmVI
ZWlnaHQpCi0gICAgICAgIGZvbnQtPmxpbmVIZWlnaHQgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgZm9udC0+bGluZUhlaWdo
dCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7
CiAKICAgICAvLyBGb250IGZhbWlseSBtdXN0IGNvbWUgbm93LgogICAgIGZvbnQtPmZhbWlseSA9
IHBhcnNlRm9udEZhbWlseSgpOwpAQCAtNDQ3Nyw5ICs0NDQ5LDggQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRm9udChib29sIGltcG9ydGFudCkKIAogY2xhc3MgRm9udEZhbWlseVZhbHVlQnVpbGRl
ciB7CiBwdWJsaWM6Ci0gICAgRm9udEZhbWlseVZhbHVlQnVpbGRlcihDU1NWYWx1ZUxpc3QqIGxp
c3QsIENTU1ZhbHVlUG9vbCogcG9vbCkKKyAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyKENTU1Zh
bHVlTGlzdCogbGlzdCkKICAgICAgICAgOiBtX2xpc3QobGlzdCkKLSAgICAgICAgLCBtX2Nzc1Zh
bHVlUG9vbChwb29sKQogICAgIHsKICAgICB9CiAKQEAgLTQ0OTQsMTQgKzQ0NjUsMTMgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgaWYgKG1fYnVpbGRlci5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fbGlzdC0+YXBwZW5kKG1fY3NzVmFsdWVQb29sLT5jcmVhdGVG
b250RmFtaWx5VmFsdWUobV9idWlsZGVyLnRvU3RyaW5nKCkpKTsKKyAgICAgICAgbV9saXN0LT5h
cHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKG1fYnVpbGRlci50b1N0
cmluZygpKSk7CiAgICAgICAgIG1fYnVpbGRlci5jbGVhcigpOwogICAgIH0KIAogcHJpdmF0ZToK
ICAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKICAgICBDU1NWYWx1ZUxpc3QqIG1fbGlzdDsK
LSAgICBDU1NWYWx1ZVBvb2wqIG1fY3NzVmFsdWVQb29sOwogfTsKIAogUGFzc1JlZlB0cjxDU1NW
YWx1ZUxpc3Q+IENTU1BhcnNlcjo6cGFyc2VGb250RmFtaWx5KCkKQEAgLTQ1MDksNyArNDQ3OSw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRm9udEZhbWlseSgp
CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+
Y3VycmVudCgpOwogCi0gICAgRm9udEZhbWlseVZhbHVlQnVpbGRlciBmYW1pbHlCdWlsZGVyKGxp
c3QuZ2V0KCksIGNzc1ZhbHVlUG9vbCgpKTsKKyAgICBGb250RmFtaWx5VmFsdWVCdWlsZGVyIGZh
bWlseUJ1aWxkZXIobGlzdC5nZXQoKSk7CiAgICAgYm9vbCBpbkZhbWlseSA9IGZhbHNlOwogCiAg
ICAgd2hpbGUgKHZhbHVlKSB7CkBAIC00NTI2LDcgKzQ0OTYsNyBAQCBQYXNzUmVmUHRyPENTU1Zh
bHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogICAgICAgICAgICAgaWYgKGlu
RmFtaWx5KQogICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZhbHVlLT5zdHJpbmcp
OwogICAgICAgICAgICAgZWxzZSBpZiAobmV4dFZhbEJyZWFrc0ZvbnQgfHwgIW5leHRWYWxJc0Zv
bnROYW1lKQotICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkpOworICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmNvbW1pdCgp
OwogICAgICAgICAgICAgICAgIGZhbWlseUJ1aWxkZXIuYWRkKHZhbHVlLT5zdHJpbmcpOwpAQCAt
NDUzNiwxMiArNDUwNiwxMiBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpw
YXJzZUZvbnRGYW1pbHkoKQogICAgICAgICAgICAgLy8gU3RyaW5ncyBuZXZlciBzaGFyZSBpbiBh
IGZhbWlseSBuYW1lLgogICAgICAgICAgICAgaW5GYW1pbHkgPSBmYWxzZTsKICAgICAgICAgICAg
IGZhbWlseUJ1aWxkZXIuY29tbWl0KCk7Ci0gICAgICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUZvbnRGYW1pbHlWYWx1ZSh2YWx1ZS0+c3RyaW5nKSk7CisgICAgICAg
ICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlRm9udEZhbWlseVZhbHVlKHZh
bHVlLT5zdHJpbmcpKTsKICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7CiAgICAgICAgICAgICBpZiAoaW5GYW1pbHkpCiAgICAg
ICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5hZGQodmFsdWUtPnN0cmluZyk7CiAgICAgICAgICAg
ICBlbHNlIGlmIChuZXh0VmFsQnJlYWtzRm9udCB8fCAhbmV4dFZhbElzRm9udE5hbWUpCi0gICAg
ICAgICAgICAgICAgbGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVGb250RmFtaWx5
VmFsdWUodmFsdWUtPnN0cmluZykpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChjc3NW
YWx1ZVBvb2woKS5jcmVhdGVGb250RmFtaWx5VmFsdWUodmFsdWUtPnN0cmluZykpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZmFtaWx5QnVpbGRlci5jb21taXQoKTsKICAg
ICAgICAgICAgICAgICBmYW1pbHlCdWlsZGVyLmFkZCh2YWx1ZS0+c3RyaW5nKTsKQEAgLTQ1ODMs
MTIgKzQ1NTMsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnQoYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmICghZXhwZWN0Q29tbWEpIHsKICAgICAgICAgICAgIGV4cGVjdENv
bW1hID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICh2YWwtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8
IHZhbC0+aWQgPT0gQ1NTVmFsdWVTbWFsbENhcHMpCi0gICAgICAgICAgICAgICAgcGFyc2VkVmFs
dWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAg
ICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgZWxzZSBpZiAodmFsLT5pZCA9PSBDU1NWYWx1
ZUFsbCAmJiAhdmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgLy8gJ2FsbCcgaXMgb25seSBhbGxv
d2VkIGluIEBmb250LWZhY2UgYW5kIHdpdGggbm8gb3RoZXIgdmFsdWVzLiBNYWtlIGEgdmFsdWUg
bGlzdCB0bwogICAgICAgICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgd2UgYXJlIGluIHRoZSBA
Zm9udC1mYWNlIGNhc2UuCiAgICAgICAgICAgICAgICAgdmFsdWVzID0gQ1NTVmFsdWVMaXN0Ojpj
cmVhdGVDb21tYVNlcGFyYXRlZCgpOwotICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gY3Nz
VmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2
YWwtPmlkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0g
Q1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbC0+aVZhbHVlID09ICcsJykgewogICAgICAg
ICAgICAgZXhwZWN0Q29tbWEgPSBmYWxzZTsKQEAgLTQ2MjUsMTMgKzQ1OTUsMTMgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRm9udFdlaWdodChib29sIGltcG9ydGFudCkKIAogICAgIENTU1BhcnNl
clZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKCh2YWx1ZS0+
aWQgPj0gQ1NTVmFsdWVOb3JtYWwpICYmICh2YWx1ZS0+aWQgPD0gQ1NTVmFsdWU5MDApKSB7Ci0g
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgY3NzVmFsdWVQb29sKCkt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOworICAgICAgICBh
ZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkludGVnZXIgfCBGTm9uTmVnLCBD
U1NRdWlya3NNb2RlKSkgewogICAgICAgICBpbnQgd2VpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pih2
YWx1ZS0+ZlZhbHVlKTsKICAgICAgICAgaWYgKCEod2VpZ2h0ICUgMTAwKSAmJiB3ZWlnaHQgPj0g
MTAwICYmIHdlaWdodCA8PSA5MDApCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWUxMDAgKyB3ZWlnaHQgLyAxMDAgLSAxKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5Rm9udFdlaWdodCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlMTAwICsgd2VpZ2h0IC8gMTAwIC0gMSksIGltcG9ydGFudCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC01MjE5LDcg
KzUxODksNyBAQCBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
Q29sb3IoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQogICAgIFJHQkEzMiBjID0gQ29sb3I6OnRyYW5z
cGFyZW50OwogICAgIGlmICghcGFyc2VDb2xvckZyb21WYWx1ZSh2YWx1ZSA/IHZhbHVlIDogbV92
YWx1ZUxpc3QtPmN1cnJlbnQoKSwgYykpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
c3NWYWx1ZVBvb2woKS0+Y3JlYXRlQ29sb3JWYWx1ZShjKTsKKyAgICByZXR1cm4gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlQ29sb3JWYWx1ZShjKTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29s
b3JGcm9tVmFsdWUoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBSR0JBMzImIGMpCkBAIC01MzY1LDcg
KzUzMzUsNyBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKIAogICAgIHZvaWQgY29tbWl0
U3R5bGUoQ1NTUGFyc2VyVmFsdWUqIHYpCiAgICAgewotICAgICAgICBzdHlsZSA9IG1fcGFyc2Vy
LT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHYtPmlkKTsKKyAgICAgICAg
c3R5bGUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUodi0+aWQpOwogICAg
ICAgICBhbGxvd1N0eWxlID0gZmFsc2U7CiAgICAgICAgIGlmIChhbGxvd1gpCiAgICAgICAgICAg
ICBhbGxvd0JyZWFrID0gZmFsc2U7CkBAIC01NDM1LDcgKzU0MDUsNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhDU1NQYXJzZXJWYWx1ZUxpc3QqIHZh
bHVlTGlzdCwgQwogICAgICAgICAgICAgaWYgKGlzQ29sb3IpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIWNvbnRleHQuYWxsb3dDb2xvcikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VkQ29sb3IgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICAgICAgICAgIHBhcnNlZENvbG9yID0gY3NzVmFs
dWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBpZiAoIXBhcnNlZENvbG9yKQpAQCAtNTQ4OSw3ICs1NDU5LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgdmFsID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IG9mZnNldDsKICAgICBpZiAoIXZhbCkKLSAgICAgICAgb2Zmc2V0ID0gY3Nz
VmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwor
ICAgICAgICBvZmZzZXQgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1BYKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKCF2YWxpZFVuaXQodmFs
LCBGTGVuZ3RoIHwgRlBlcmNlbnQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUy
Nyw3ICs1NDk3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZsZXgo
Q1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQogICAgICAgICAgICAgICAgIG5lZ2F0aXZlRmxleCA9
IGFyZy0+ZlZhbHVlOwogICAgICAgICAgICAgZWxzZSBpZiAoIWFyZy0+ZlZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgLy8gZmxleCgpIG9ubHkgYWxsb3dzIGEgcHJlZmVycmVkIHNpemUgb2YgMCAo
c2FucyB1bml0cykgaWYgdGhlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBmbGV4IHZhbHVlcyBoYXZl
IGFscmVhZHkgYmVlbiBzZXQuCi0gICAgICAgICAgICAgICAgcHJlZmVycmVkU2l6ZSA9IGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSgwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAg
ICAgICAgICAgICAgICBwcmVmZXJyZWRTaXplID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUo
MCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIFdlIG9ubHkgYWxsb3cgMyBudW1iZXJzIHdpdGhvdXQgdW5pdHMgaWYg
dGhlIGxhc3QgdmFsdWUgaXMgMC4gRS5nLiwgZmxleCgxIDEgMSkgaXMgaW52YWxpZC4KICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKQEAgLTU1NDYsMTEgKzU1MTYsMTEgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZsZXgoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzKQog
ICAgIGlmIChuZWdhdGl2ZUZsZXggPT0gdW5zZXRWYWx1ZSkKICAgICAgICAgbmVnYXRpdmVGbGV4
ID0gMDsKICAgICBpZiAoIXByZWZlcnJlZFNpemUpCi0gICAgICAgIHByZWZlcnJlZFNpemUgPSBj
c3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoMCwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7
CisgICAgICAgIHByZWZlcnJlZFNpemUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSgwLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKIAogICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGZs
ZXggPSBDU1NWYWx1ZUxpc3Q6OmNyZWF0ZVNwYWNlU2VwYXJhdGVkKCk7Ci0gICAgZmxleC0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShjbGFtcFRvRmxvYXQocG9zaXRpdmVGbGV4
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKLSAgICBmbGV4LT5hcHBlbmQoY3Nz
VmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGNsYW1wVG9GbG9hdChuZWdhdGl2ZUZsZXgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIGZsZXgtPmFwcGVuZChjc3NWYWx1ZVBv
b2woKS5jcmVhdGVWYWx1ZShjbGFtcFRvRmxvYXQocG9zaXRpdmVGbGV4KSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICBmbGV4LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoY2xhbXBUb0Zsb2F0KG5lZ2F0aXZlRmxleCksIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CiAgICAgZmxleC0+YXBwZW5kKHByZWZlcnJlZFNpemUpOwogICAgIHJldHVy
biBmbGV4OwogfQpAQCAtNTY1Niw3ICs1NjI2LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VD
b250ZXh0IHsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcGFyc2VyLT5hZGRQcm9w
ZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBwYXJzZXItPmFkZFByb3BlcnR5KHByb3BJZCwgcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKKyAgICAgICAgICAg
IHBhcnNlci0+YWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbXBsaWNp
dEluaXRpYWxWYWx1ZSgpLCBpbXBvcnRhbnQsIHRydWUpOwogICAgIH0KIAogICAgIGJvb2wgbV9j
YW5BZHZhbmNlOwpAQCAtNTcwOCw3ICs1Njc4LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9y
ZGVySW1hZ2UoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiAgICAgICAgICAgICB9
IGVsc2UgaWYgKHZhbC0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICAgICAgICAgIGNvbnRl
eHQuY29tbWl0SW1hZ2UoY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NW
YWx1ZU5vbmUpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd0ltYWdl
U2xpY2UoKSkgewpAQCAtNTc2NCwxNCArNTczNCwxNCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VC
b3JkZXJJbWFnZVJlcGVhdChSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiAgICAgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBzZWNvbmRWYWx1ZTsKICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsID0g
bV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAoaXNCb3JkZXJJbWFnZVJlcGVhdEtleXdv
cmQodmFsLT5pZCkpCi0gICAgICAgIGZpcnN0VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
SWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOworICAgICAgICBmaXJzdFZhbHVlID0gY3NzVmFsdWVQ
b29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgIGVsc2UKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgdmFsID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICBpZiAo
dmFsKSB7CiAgICAgICAgIGlmIChpc0JvcmRlckltYWdlUmVwZWF0S2V5d29yZCh2YWwtPmlkKSkK
LSAgICAgICAgICAgIHNlY29uZFZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZSh2YWwtPmlkKTsKKyAgICAgICAgICAgIHNlY29uZFZhbHVlID0gY3NzVmFsdWVQb29s
KCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICBlbHNlIGlmICghaW5T
aG9ydGhhbmQoKSkgewogICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IHBhcnNpbmcgYSBzaG9y
dGhhbmQgdGhlbiB3ZSBhcmUgaW52YWxpZC4KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTU3ODMsNyArNTc1Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlUmVwZWF0
KFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKICAgICB9IGVsc2UKICAgICAgICAgc2Vjb25kVmFs
dWUgPSBmaXJzdFZhbHVlOwogCi0gICAgcmVzdWx0ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZh
bHVlKFBhaXI6OmNyZWF0ZShmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZSkpOworICAgIHJlc3VsdCA9
IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShmaXJzdFZhbHVlLCBzZWNv
bmRWYWx1ZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01ODUwLDcgKzU4MjAsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHF1YWQtPnNldExlZnQobV9sZWZ0KTsKIAogICAgICAgICAvLyBNYWtl
IG91ciBuZXcgYm9yZGVyIGltYWdlIHZhbHVlIG5vdy4KLSAgICAgICAgcmV0dXJuIENTU0JvcmRl
ckltYWdlU2xpY2VWYWx1ZTo6Y3JlYXRlKG1fcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRl
VmFsdWUocXVhZC5yZWxlYXNlKCkpLCBtX2ZpbGwpOworICAgICAgICByZXR1cm4gQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlOjpjcmVhdGUoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUocXVhZC5y
ZWxlYXNlKCkpLCBtX2ZpbGwpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTU5MjEsNyArNTg5MSw3
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFs
OwogICAgICAgICBpZiAodi0+aWQgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICAgICAgdmFsID0g
bV9wYXJzZXItPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodi0+aWQpOwor
ICAgICAgICAgICAgdmFsID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHYt
PmlkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdmFsID0gbV9wYXJzZXItPmNyZWF0ZVBy
aW1pdGl2ZU51bWVyaWNWYWx1ZSh2KTsKIApAQCAtNTk2Nyw3ICs1OTM3LDcgQEAgcHVibGljOgog
ICAgICAgICBxdWFkLT5zZXRMZWZ0KG1fbGVmdCk7CiAKICAgICAgICAgLy8gTWFrZSBvdXIgbmV3
IHZhbHVlIG5vdy4KLSAgICAgICAgcmV0dXJuIG1fcGFyc2VyLT5jc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUocXVhZC5yZWxlYXNlKCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTYwODIs
MTAgKzYwNTIsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgY29tcGxldGVCb3JkZXJSYWRp
aShyYWRpaVsxXSk7CiAKICAgICBJbXBsaWNpdFNjb3BlIGltcGxpY2l0U2NvcGUodGhpcywgUHJv
cGVydHlJbXBsaWNpdCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0
UmFkaXVzLCBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHJhZGlpWzBd
WzBdLnJlbGVhc2UoKSwgcmFkaWlbMV1bMF0ucmVsZWFzZSgpKSksIGltcG9ydGFudCk7Ci0gICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgY3NzVmFsdWVQb29s
KCktPmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShyYWRpaVswXVsxXS5yZWxlYXNlKCksIHJhZGlp
WzFdWzFdLnJlbGVhc2UoKSkpLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShQ
YWlyOjpjcmVhdGUocmFkaWlbMF1bMl0ucmVsZWFzZSgpLCByYWRpaVsxXVsyXS5yZWxlYXNlKCkp
KSwgaW1wb3J0YW50KTsKLSAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxl
ZnRSYWRpdXMsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShQYWlyOjpjcmVhdGUocmFkaWlb
MF1bM10ucmVsZWFzZSgpLCByYWRpaVsxXVszXS5yZWxlYXNlKCkpKSwgaW1wb3J0YW50KTsKKyAg
ICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShyYWRpaVswXVswXS5yZWxlYXNlKCksIHJhZGlp
WzFdWzBdLnJlbGVhc2UoKSkpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6
OmNyZWF0ZShyYWRpaVswXVsxXS5yZWxlYXNlKCksIHJhZGlpWzFdWzFdLnJlbGVhc2UoKSkpLCBp
bXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRS
YWRpdXMsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKFBhaXI6OmNyZWF0ZShyYWRpaVswXVsy
XS5yZWxlYXNlKCksIHJhZGlpWzFdWzJdLnJlbGVhc2UoKSkpLCBpbXBvcnRhbnQpOworICAgIGFk
ZFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgY3NzVmFsdWVQb29s
KCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKHJhZGlpWzBdWzNdLnJlbGVhc2UoKSwgcmFkaWlb
MV1bM10ucmVsZWFzZSgpKSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTYwOTMsNyArNjA2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFzcGVjdFJhdGlvKGJvb2wg
aW1wb3J0YW50KQogewogICAgIHVuc2lnbmVkIG51bSA9IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAg
ICAgaWYgKG51bSA9PSAxICYmIG1fdmFsdWVMaXN0LT52YWx1ZUF0KDApLT5pZCA9PSBDU1NWYWx1
ZU5vbmUpIHsKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRBc3BlY3RSYXRp
bywgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBp
bXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEFzcGVjdFJh
dGlvLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwg
aW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02MTQzLDggKzYx
MTMsOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBpbnQgZGVmYXVsdFZhbHVlLCBib29sIGltcG9ydAogICAgICAgICAgICAgICAgICAgICBtX3Zh
bHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGxp
c3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoUGFpcjo6Y3JlYXRlKGNvdW50
ZXJOYW1lLnJlbGVhc2UoKSwKLSAgICAgICAgICAgICAgICAgICAgY3NzVmFsdWVQb29sKCktPmNy
ZWF0ZVZhbHVlKGksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSkpKTsKKyAgICAgICAg
ICAgICAgICBsaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoUGFpcjo6Y3Jl
YXRlKGNvdW50ZXJOYW1lLnJlbGVhc2UoKSwKKyAgICAgICAgICAgICAgICAgICAgY3NzVmFsdWVQ
b29sKCkuY3JlYXRlVmFsdWUoaSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKSkpOwog
ICAgICAgICAgICAgICAgIHN0YXRlID0gSUQ7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CkBAIC02MTYxLDIwICs2MTMxLDIwIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUNvdW50ZXIoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wgaW1w
b3J0CiB9CiAKIC8vIFRoaXMgc2hvdWxkIGdvIGF3YXkgb25jZSB3ZSBkcm9wIHN1cHBvcnQgZm9y
IC13ZWJraXQtZ3JhZGllbnQKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBw
YXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KENTU1BhcnNlclZhbHVlKiBhLCBib29sIGhvcml6
b250YWwsIENTU1ZhbHVlUG9vbCogY3NzVmFsdWVQb29sKQorc3RhdGljIFBhc3NSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFyc2VyVmFs
dWUqIGEsIGJvb2wgaG9yaXpvbnRhbCkKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJlc3VsdDsKICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KSB7CiAgICAgICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAibGVmdCIpICYm
IGhvcml6b250YWwpCiAgICAgICAgICAgICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5n
LCAidG9wIikgJiYgIWhvcml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQ
b29sLT5jcmVhdGVWYWx1ZSgwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAuLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgICAgICBlbHNlIGlmICgoZXF1YWxJ
Z25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAicmlnaHQiKSAmJiBob3Jpem9udGFsKQogICAgICAgICAg
ICAgICAgICB8fCAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAiYm90dG9tIikgJiYgIWhv
cml6b250YWwpKQotICAgICAgICAgICAgcmVzdWx0ID0gY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1
ZSgxMDAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICAgICAg
cmVzdWx0ID0gY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMTAwLiwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
YS0+c3RyaW5nLCAiY2VudGVyIikpCi0gICAgICAgICAgICByZXN1bHQgPSBjc3NWYWx1ZVBvb2wt
PmNyZWF0ZVZhbHVlKDUwLiwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDUwLiwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9IGVsc2UgaWYgKGEtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAgIHJlc3VsdCA9IGNzc1ZhbHVlUG9vbC0+Y3Jl
YXRlVmFsdWUoYS0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzPihhLT51bml0KSk7CisgICAgICAgIHJlc3VsdCA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZh
bHVlKGEtPmZWYWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4o
YS0+dW5pdCkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTYxOTksMTMgKzYxNjksMTMg
QEAgc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2Vy
KiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1MKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIp
KQotICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gcC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0
ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHN0
b3AubV9wb3NpdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RvcC5tX3Bv
c2l0aW9uID0gcC0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNzc1ZhbHVl
UG9vbCgpLmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIAog
ICAgICAgICBpbnQgaWQgPSBhcmdzLT5jdXJyZW50KCktPmlkOwogICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVXZWJraXRUZXh0IHx8IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFs
dWVXaW5kb3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1f
Y29sb3IgPSBwLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKKyAg
ICAgICAgICAgIHN0b3AubV9jb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShpZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHAtPnBh
cnNlQ29sb3IoYXJncy0+Y3VycmVudCgpKTsKICAgICAgICAgaWYgKCFzdG9wLm1fY29sb3IpCkBA
IC02MjE5LDkgKzYxODksOSBAQCBzdGF0aWMgYm9vbCBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudENv
bG9yU3RvcChDU1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDUwogCiAgICAgICAgIENT
U1BhcnNlclZhbHVlKiBzdG9wQXJnID0gYXJncy0+Y3VycmVudCgpOwogICAgICAgICBpZiAoc3Rv
cEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpCi0gICAgICAg
ICAgICBzdG9wLm1fcG9zaXRpb24gPSBwLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoc3Rv
cEFyZy0+ZlZhbHVlIC8gMTAwLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAg
ICAgICAgICBzdG9wLm1fcG9zaXRpb24gPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShzdG9w
QXJnLT5mVmFsdWUgLyAxMDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKICAgICAg
ICAgZWxzZSBpZiAoc3RvcEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJF
UikKLSAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IHAtPmNzc1ZhbHVlUG9vbCgpLT5jcmVh
dGVWYWx1ZShzdG9wQXJnLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsK
KyAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KHN0b3BBcmctPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTYyMzIsNyArNjIwMiw3IEBA
IHN0YXRpYyBib29sIHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50Q29sb3JTdG9wKENTU1BhcnNlciog
cCwgQ1NTUGFyc2VyVmFsdWUqIGEsIENTCiAgICAgICAgIHN0b3BBcmcgPSBhcmdzLT5uZXh0KCk7
CiAgICAgICAgIGludCBpZCA9IHN0b3BBcmctPmlkOwogICAgICAgICBpZiAoaWQgPT0gQ1NTVmFs
dWVXZWJraXRUZXh0IHx8IChpZCA+PSBDU1NWYWx1ZUFxdWEgJiYgaWQgPD0gQ1NTVmFsdWVXaW5k
b3d0ZXh0KSB8fCBpZCA9PSBDU1NWYWx1ZU1lbnUpCi0gICAgICAgICAgICBzdG9wLm1fY29sb3Ig
PSBwLT5jc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGlkKTsKKyAgICAgICAg
ICAgIHN0b3AubV9jb2xvciA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShp
ZCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0b3AubV9jb2xvciA9IHAtPnBhcnNlQ29s
b3Ioc3RvcEFyZyk7CiAgICAgICAgIGlmICghc3RvcC5tX2NvbG9yKQpAQCAtNjI4Miw3ICs2MjUy
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZh
bHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1MKICAgICBhID0gYXJncy0+bmV4dCgpOwogICAg
IGlmICghYSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFkaWVudFBvaW50KGEsIHRydWUsIGNzc1Zh
bHVlUG9vbCgpKTsKKyAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBvaW50ID0gcGFyc2VE
ZXByZWNhdGVkR3JhZGllbnRQb2ludChhLCB0cnVlKTsKICAgICBpZiAoIXBvaW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZSgpKTsK
QEAgLTYyOTEsNyArNjI2MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgYSA9IGFy
Z3MtPm5leHQoKTsKICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2lu
dCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UsIGNzc1ZhbHVlUG9vbCgp
KTsKKyAgICBwb2ludCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UpOwog
ICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldEZp
cnN0WShwb2ludC5yZWxlYXNlKCkpOwpAQCAtNjMxOSw3ICs2Mjg5LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50KENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0
LCBSZWZQdHI8Q1MKICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIGlmICghYSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHBvaW50ID0gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChh
LCB0cnVlLCBjc3NWYWx1ZVBvb2woKSk7CisgICAgcG9pbnQgPSBwYXJzZURlcHJlY2F0ZWRHcmFk
aWVudFBvaW50KGEsIHRydWUpOwogICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICByZXN1bHQtPnNldFNlY29uZFgocG9pbnQucmVsZWFzZSgpKTsKQEAgLTYzMjgsNyAr
NjI5OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChDU1NQYXJz
ZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENTCiAgICAgYSA9IGFyZ3MtPm5leHQoKTsK
ICAgICBpZiAoIWEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBwb2ludCA9IHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UsIGNzc1ZhbHVlUG9vbCgpKTsKKyAgICBwb2lu
dCA9IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoYSwgZmFsc2UpOwogICAgIGlmICghcG9p
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldFNlY29uZFkocG9pbnQu
cmVsZWFzZSgpKTsKQEAgLTYzNzIsNyArNjM0Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURl
cHJlY2F0ZWRHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENT
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSogYSwgYm9vbCYgaXNIb3Jp
em9udGFsLCBDU1NWYWx1ZVBvb2wqIGNzc1ZhbHVlUG9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSogYSwg
Ym9vbCYgaXNIb3Jpem9udGFsKQogewogICAgIGlmIChhLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfSURFTlQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjM4OSwxNCArNjM1OSwxNCBA
QCBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGcm9tU2lkZUtleXdv
cmQoQ1NTUGFyc2VyVmFsdWUqIGEsIGJvbwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiBjc3NWYWx1ZVBvb2wtPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShhLT5pZCk7CisgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShhLT5pZCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZUdyYWRpZW50Q29sb3JPcktleXdvcmQoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1
ZSogdmFsdWUpCiB7CiAgICAgaW50IGlkID0gdmFsdWUtPmlkOwogICAgIGlmIChpZCA9PSBDU1NW
YWx1ZVdlYmtpdFRleHQgfHwgKGlkID49IENTU1ZhbHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdp
bmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVudSB8fCBpZCA9PSBDU1NWYWx1ZUN1cnJlbnRj
b2xvcikKLSAgICAgICAgcmV0dXJuIHAtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWQpOworICAgICAgICByZXR1cm4gY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGlkKTsKIAogICAgIHJldHVybiBwLT5wYXJzZUNvbG9yKHZhbHVlKTsKIH0KQEAgLTY0
MjcsNyArNjM5Nyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KENTU1Bh
cnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8Q1NTVmFsCiAKICAgICAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBsb2NhdGlvbjsKICAgICAgICAgYm9vbCBpc0hvcml6b250YWwg
PSBmYWxzZTsKLSAgICAgICAgaWYgKChsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEs
IGlzSG9yaXpvbnRhbCwgY3NzVmFsdWVQb29sKCkpKSkgeworICAgICAgICBpZiAoKGxvY2F0aW9u
ID0gdmFsdWVGcm9tU2lkZUtleXdvcmQoYSwgaXNIb3Jpem9udGFsKSkpIHsKICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWwpCiAgICAgICAgICAgICAgICAgc3RhcnRYID0gbG9jYXRpb247CiAg
ICAgICAgICAgICBlbHNlCkBAIC02NDM1LDcgKzY0MDUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VMaW5lYXJHcmFkaWVudChDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCwgUmVmUHRyPENT
U1ZhbAogCiAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKGEp
IHsKLSAgICAgICAgICAgICAgICBpZiAoKGxvY2F0aW9uID0gdmFsdWVGcm9tU2lkZUtleXdvcmQo
YSwgaXNIb3Jpem9udGFsLCBjc3NWYWx1ZVBvb2woKSkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KChsb2NhdGlvbiA9IHZhbHVlRnJvbVNpZGVLZXl3b3JkKGEsIGlzSG9yaXpvbnRhbCkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdGFydFgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtNjQ1NCw3ICs2NDI0LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3Jh
ZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAg
ICAgfQogCiAgICAgICAgIGlmICghc3RhcnRYICYmICFzdGFydFkpCi0gICAgICAgICAgICBzdGFy
dFkgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlVG9wKTsK
KyAgICAgICAgICAgIHN0YXJ0WSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1
ZShDU1NWYWx1ZVRvcCk7CiAKICAgICAgICAgcmVzdWx0LT5zZXRGaXJzdFgoc3RhcnRYLnJlbGVh
c2UoKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0Rmlyc3RZKHN0YXJ0WS5yZWxlYXNlKCkpOwpAQCAt
NjUyNiw3ICs2NDk2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoQ1NT
UGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxDU1NWYWwKICAgICAgICAgc3dpdGNo
IChhLT5pZCkgewogICAgICAgICBjYXNlIENTU1ZhbHVlQ2lyY2xlOgogICAgICAgICBjYXNlIENT
U1ZhbHVlRWxsaXBzZToKLSAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKGEtPmlkKTsKKyAgICAgICAgICAgIHNoYXBlVmFsdWUgPSBj
c3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYS0+aWQpOwogICAgICAgICAgICAg
Zm91bmRWYWx1ZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NW
YWx1ZUNsb3Nlc3RTaWRlOgpAQCAtNjUzNSw3ICs2NTA1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlUmFkaWFsR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIFJlZlB0cjxD
U1NWYWwKICAgICAgICAgY2FzZSBDU1NWYWx1ZUZhcnRoZXN0Q29ybmVyOgogICAgICAgICBjYXNl
IENTU1ZhbHVlQ29udGFpbjoKICAgICAgICAgY2FzZSBDU1NWYWx1ZUNvdmVyOgotICAgICAgICAg
ICAgc2l6ZVZhbHVlID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShhLT5p
ZCk7CisgICAgICAgICAgICBzaXplVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUoYS0+aWQpOwogICAgICAgICAgICAgZm91bmRWYWx1ZSA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNjcxMSw5ICs2NjgxLDkgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ3Jvc3NmYWRlKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0LCBSZWZQdHI8
Q1NTVmFsdWU+JgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgaWYgKGEtPnVuaXQg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICBwZXJjZW50YWdl
ID0gY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGNsYW1wVG88ZG91YmxlPihhLT5mVmFsdWUg
LyAxMDAsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CisgICAgICAgIHBl
cmNlbnRhZ2UgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShjbGFtcFRvPGRvdWJsZT4oYS0+
ZlZhbHVlIC8gMTAwLCAwLCAxKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogICAg
IGVsc2UgaWYgKGEtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCi0gICAg
ICAgIHBlcmNlbnRhZ2UgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlVmFsdWUoY2xhbXBUbzxkb3Vi
bGU+KGEtPmZWYWx1ZSwgMCwgMSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgcGVyY2VudGFnZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVlKGNsYW1wVG88ZG91
YmxlPihhLT5mVmFsdWUsIDAsIDEpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTY3NzMsNyArNjc0Myw3IEBAIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VJbWFnZVNldChDU1NQYXJzZXJWYWx1
ZUxpc3QqIHZhbHVlTGlzdCkKICAgICAgICAgcGFyc2VEb3VibGUoY3VycmVudCwgZW5kLCAneCcs
IGltYWdlU2NhbGVGYWN0b3IpOwogICAgICAgICBpZiAoaW1hZ2VTY2FsZUZhY3RvciA8PSAwKQog
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGltYWdlU2V0LT5hcHBlbmQoY3NzVmFsdWVQ
b29sKCktPmNyZWF0ZVZhbHVlKGltYWdlU2NhbGVGYWN0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfTlVNQkVSKSk7CisgICAgICAgIGltYWdlU2V0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3Jl
YXRlVmFsdWUoaW1hZ2VTY2FsZUZhY3RvciwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKIAogICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBhcmd1bWVudHMsIHdlJ3JlIGRv
bmUuCiAgICAgICAgIGFyZyA9IGZ1bmN0aW9uQXJncy0+bmV4dCgpOwpAQCAtNzA0MCw3ICs3MDEw
LDcgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUN1
c3RvbUZpbHRlcihDU1NQYXJzZXJWYWx1ZSogdmEKICAgICB3aGlsZSAoKGFyZyA9IGFyZ3NMaXN0
LT5jdXJyZW50KCkpKSB7CiAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CiAgICAgICAg
IGlmIChhcmctPmlkID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgICAgIHZhbHVlID0gY3NzVmFs
dWVQb29sKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOworICAgICAgICAg
ICAgdmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVO
b25lKTsKICAgICAgICAgZWxzZSBpZiAoYXJnLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfVVJJKSB7CiAgICAgICAgICAgICBLVVJMIHNoYWRlclVSTCA9IG1fc3R5bGVTaGVldCA/IG1f
c3R5bGVTaGVldC0+Y29tcGxldGVVUkwoYXJnLT5zdHJpbmcpIDogS1VSTCgpOwogICAgICAgICAg
ICAgdmFsdWUgPSBXZWJLaXRDU1NTaGFkZXJWYWx1ZTo6Y3JlYXRlKHNoYWRlclVSTC5zdHJpbmco
KSk7CkBAIC03MDY3LDcgKzcwMzcsNyBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQ3VzdG9tRmlsdGVyKENTU1BhcnNlclZhbHVlKiB2YQogICAgICAg
ICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gd2UgY2FuIG9ubHkgYWNjZXB0IHBv
c2l0aXZlIG5vbi16ZXJvIHZhbHVlcy4KICAgICAgICAgaWYgKGludGVnZXJWYWx1ZSA8IDEpCiAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgbWVzaFNpemVMaXN0LT5hcHBlbmQoY3NzVmFs
dWVQb29sKCktPmNyZWF0ZVZhbHVlKGludGVnZXJWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpKTsKKyAgICAgICAgbWVzaFNpemVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCku
Y3JlYXRlVmFsdWUoaW50ZWdlclZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikp
OwogICAgICAgICBhcmdzTGlzdC0+bmV4dCgpOwogICAgIH0KICAgICAKQEAgLTcwNzYsMTIgKzcw
NDYsMTIgQEAgUGFzc1JlZlB0cjxXZWJLaXRDU1NGaWx0ZXJWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJz
ZUN1c3RvbUZpbHRlcihDU1NQYXJzZXJWYWx1ZSogdmEKICAgICAKICAgICBpZiAoKGFyZyA9IGFy
Z3NMaXN0LT5jdXJyZW50KCkpICYmIChhcmctPmlkID09IENTU1ZhbHVlQm9yZGVyQm94IHx8IGFy
Zy0+aWQgPT0gQ1NTVmFsdWVQYWRkaW5nQm94CiAgICAgICAgIHx8IGFyZy0+aWQgPT0gQ1NTVmFs
dWVDb250ZW50Qm94IHx8IGFyZy0+aWQgPT0gQ1NTVmFsdWVGaWx0ZXJCb3gpKSB7Ci0gICAgICAg
IG1lc2hTaXplTGlzdC0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFs
dWUoYXJnLT5pZCkpOworICAgICAgICBtZXNoU2l6ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2wo
KS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoYXJnLT5pZCkpOwogICAgICAgICBhcmdzTGlzdC0+bmV4
dCgpOwogICAgIH0KICAgICAKICAgICBpZiAoKGFyZyA9IGFyZ3NMaXN0LT5jdXJyZW50KCkpICYm
IGFyZy0+aWQgPT0gQ1NTVmFsdWVEZXRhY2hlZCkgewotICAgICAgICBtZXNoU2l6ZUxpc3QtPmFw
cGVuZChjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKGFyZy0+aWQpKTsKKyAg
ICAgICAgbWVzaFNpemVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmll
clZhbHVlKGFyZy0+aWQpKTsKICAgICAgICAgYXJnc0xpc3QtPm5leHQoKTsKICAgICB9CiAgICAg
CkBAIC03MTE2LDcgKzcwODYsNyBAQCBQYXNzUmVmUHRyPFdlYktpdENTU0ZpbHRlclZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlQ3VzdG9tRmlsdGVyKENTU1BhcnNlclZhbHVlKiB2YQogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKCF2YWxpZFVuaXQoYXJnLCBGTnVtYmVyLCBD
U1NTdHJpY3RNb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIHBh
cmFtVmFsdWVMaXN0LT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGFyZy0+ZlZh
bHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgcGFyYW1W
YWx1ZUxpc3QtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhcmctPmZWYWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKICAgICAgICAgICAgIGFyZ3NMaXN0LT5u
ZXh0KCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwYXJhbVZhbHVlTGlzdC0+bGVuZ3RoKCkg
fHwgcGFyYW1WYWx1ZUxpc3QtPmxlbmd0aCgpID4gNCkKQEAgLTcxNjUsNyArNzEzNSw3IEBAIFBh
c3NSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmls
dGVyQXJndW1lbnRzKENTU1BhcnNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBmaWx0ZXJWYWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9v
bCgpLT5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXM+KHZhbHVlLT51bml0KSkpOworICAgICAgICAgICAgZmlsdGVyVmFsdWUtPmFwcGVu
ZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KQEAgLTcxODUsNyArNzE1NSw3IEBAIFBhc3NSZWZQdHI8V2ViS2l0Q1NT
RmlsdGVyVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VCdWlsdGluRmlsdGVyQXJndW1lbnRzKENTU1Bh
cnNlCiAgICAgICAgICAgICBpZiAoYW1vdW50IDwgbWluQWxsb3dlZCB8fCBhbW91bnQgPiBtYXhB
bGxvd2VkKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBmaWx0ZXJW
YWx1ZS0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShhbW91bnQsIHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0KSkpOworICAgICAg
ICAgICAgZmlsdGVyVmFsdWUtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShhbW91
bnQsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLT51bml0
KSkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTcyNDksNyArNzIxOSw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlRmlsdGVyKCkKICAg
ICAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAg
ICAgICAgICAgICBSZWZQdHI8V2ViS2l0Q1NTRmlsdGVyVmFsdWU+IHJlZmVyZW5jZUZpbHRlclZh
bHVlID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmNyZWF0ZShXZWJLaXRDU1NGaWx0ZXJWYWx1ZTo6
UmVmZXJlbmNlRmlsdGVyT3BlcmF0aW9uKTsKICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChyZWZl
cmVuY2VGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICByZWZlcmVuY2VGaWx0ZXJWYWx1ZS0+YXBw
ZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgcmVmZXJlbmNlRmlsdGVyVmFsdWUt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nIG5hbWUgPSB2YWx1ZS0+ZnVuY3Rpb24tPm5hbWU7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBtYXhpbXVtQXJndW1lbnRDb3VudCA9IDE7CkBAIC03MzQxLDcgKzcz
MTEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGbG93VGhyZWFkKENTU1Byb3BlcnR5SUQgcHJv
cElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHZh
bHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBj
c3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFu
dCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRl
bnRpZmllclZhbHVlKHZhbHVlLT5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIApAQCAtNzM0OSw5ICs3MzE5LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRmxv
d1RocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKCFp
bnB1dFByb3BlcnR5LmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoIXZhbGlkRmxvd05hbWUoaW5w
dXRQcm9wZXJ0eSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGFkZFByb3Bl
cnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZVZhbHVlKGlucHV0UHJvcGVydHksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVWYWx1ZShpbnB1dFByb3BlcnR5LCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCktPmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUp
LCBpbXBvcnRhbnQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC03MzczLDE1ICs3MzQzLDE1
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZ2lvblRocmVhZChDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICh2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsK
KyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSwgaW1wb3J0YW50KTsKICAgICBlbHNlIHsKICAgICAgICAgU3Ry
aW5nIGlucHV0UHJvcGVydHkgPSBTdHJpbmcodmFsdWUtPnN0cmluZyk7CiAgICAgICAgIGlmICgh
aW5wdXRQcm9wZXJ0eS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmICghdmFsaWRGbG93TmFt
ZShpbnB1dFByb3BlcnR5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZShpbnB1
dFByb3BlcnR5LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyksIGltcG9ydGFudCk7Cisg
ICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZVZhbHVl
KGlucHV0UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1wb3J0YW50
KTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGNzc1Zh
bHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVOb25lKSwgaW1wb3J0YW50
KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3NzVmFsdWVQb29sKCkuY3JlYXRl
SWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9uZSksIGltcG9ydGFudCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHRydWU7CkBAIC03NDgzLDcgKzc0NTMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VU
ZXh0RW1waGFzaXNTdHlsZShib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZU5vbmUpIHsKICAgICAgICAgICAgIGlmIChmaWxsIHx8IHNoYXBlIHx8ICh2YWx1
ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVt
cGhhc2lzU3R5bGUsIGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFs
dWVOb25lKSwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZU5vbmUpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC03NDkxLDEx
ICs3NDYxLDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlT3BlbiB8fCB2YWx1
ZS0+aWQgPT0gQ1NTVmFsdWVGaWxsZWQpIHsKICAgICAgICAgICAgIGlmIChmaWxsKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGZpbGwgPSBjc3NWYWx1ZVBvb2wo
KS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CisgICAgICAgICAgICBmaWxsID0g
Y3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCk7CiAgICAgICAg
IH0gZWxzZSBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlRG90IHx8IHZhbHVlLT5pZCA9PSBDU1NW
YWx1ZUNpcmNsZSB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVEb3VibGVDaXJjbGUgfHwgdmFsdWUt
PmlkID09IENTU1ZhbHVlVHJpYW5nbGUgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlU2VzYW1lKSB7
CiAgICAgICAgICAgICBpZiAoc2hhcGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgc2hhcGUgPSBjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVl
KHZhbHVlLT5pZCk7CisgICAgICAgICAgICBzaGFwZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlk
ZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgICAgICB9IGVsc2UgaWYgKCFpblNob3J0aGFu
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBlbHNlCkBAIC03NjAxLDcg
Kzc1NzEsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250RmVhdHVyZVRhZyhDU1NWYWx1ZUxp
c3QqIHNldHRpbmdzKQogYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZlYXR1cmVTZXR0aW5ncyhi
b29sIGltcG9ydGFudCkKIHsKICAgICBpZiAobV92YWx1ZUxpc3QtPnNpemUoKSA9PSAxICYmIG1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPmlkID09IENTU1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbm9ybWFsVmFsdWUgPSBjc3NWYWx1ZVBvb2woKS0+Y3Jl
YXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVlTm9ybWFsKTsKKyAgICAgICAgUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiBub3JtYWxWYWx1ZSA9IGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZp
ZXJWYWx1ZShDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0Rm9udEZlYXR1cmVTZXR0aW5ncywg
bm9ybWFsVmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTc2NDEsMjEgKzc2MTEsMjEgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udFZhcmlhbnRM
aWdhdHVyZXMoYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBpZiAoc2F3Q29tbW9uTGlnYXR1
cmVzVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgc2F3
Q29tbW9uTGlnYXR1cmVzVmFsdWUgPSB0cnVlOwotICAgICAgICAgICAgbGlnYXR1cmVWYWx1ZXMt
PmFwcGVuZChjc3NWYWx1ZVBvb2woKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkp
OworICAgICAgICAgICAgbGlnYXR1cmVWYWx1ZXMtPmFwcGVuZChjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZU5vRGlzY3JldGlvbmFyeUxpZ2F0dXJlczoKICAgICAgICAgY2FzZSBD
U1NWYWx1ZURpc2NyZXRpb25hcnlMaWdhdHVyZXM6CiAgICAgICAgICAgICBpZiAoc2F3RGlzY3Jl
dGlvbmFyeUxpZ2F0dXJlc1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHNhd0Rpc2NyZXRpb25hcnlMaWdhdHVyZXNWYWx1ZSA9IHRydWU7Ci0gICAgICAg
ICAgICBsaWdhdHVyZVZhbHVlcy0+YXBwZW5kKGNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlm
aWVyVmFsdWUodmFsdWUtPmlkKSk7CisgICAgICAgICAgICBsaWdhdHVyZVZhbHVlcy0+YXBwZW5k
KGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlTm9IaXN0b3JpY2FsTGlnYXR1cmVz
OgogICAgICAgICBjYXNlIENTU1ZhbHVlSGlzdG9yaWNhbExpZ2F0dXJlczoKICAgICAgICAgICAg
IGlmIChzYXdIaXN0b3JpY2FsTGlnYXR1cmVzVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgc2F3SGlzdG9yaWNhbExpZ2F0dXJlc1ZhbHVlID0gdHJ1ZTsK
LSAgICAgICAgICAgIGxpZ2F0dXJlVmFsdWVzLT5hcHBlbmQoY3NzVmFsdWVQb29sKCktPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpKTsKKyAgICAgICAgICAgIGxpZ2F0dXJlVmFsdWVz
LT5hcHBlbmQoY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLT5pZCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggODY3ZTJjNy4uOTA1MjY3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZTsKIGNsYXNzIENTU1ByaW1pdGl2ZVZh
bHVlOwotY2xhc3MgQ1NTVmFsdWVQb29sOwogY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NT
ZWxlY3Rvckxpc3Q7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwpAQCAtODQsOCArODMsNiBAQCBwdWJs
aWM6CiAKICAgICBEb2N1bWVudCogZmluZERvY3VtZW50KCkgY29uc3Q7CiAKLSAgICBDU1NWYWx1
ZVBvb2wqIGNzc1ZhbHVlUG9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzVmFsdWVQb29sLmdldCgp
OyB9Ci0KICAgICB2b2lkIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+LCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCA9IGZhbHNlKTsKICAgICB2b2lk
IHJvbGxiYWNrTGFzdFByb3BlcnRpZXMoaW50IG51bSk7CiAgICAgYm9vbCBoYXNQcm9wZXJ0aWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fcGFyc2VkUHJvcGVydGllcy5pc0VtcHR5KCk7IH0KQEAgLTI5
Nyw3ICsyOTQsNiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+IG1fcGFy
c2VkUHJvcGVydGllczsKICAgICBDU1NTZWxlY3Rvckxpc3QqIG1fc2VsZWN0b3JMaXN0Rm9yUGFy
c2VTZWxlY3RvcjsKIAotICAgIFJlZlB0cjxDU1NWYWx1ZVBvb2w+IG1fY3NzVmFsdWVQb29sOwog
ICAgIHVuc2lnbmVkIG1fbnVtUGFyc2VkUHJvcGVydGllc0JlZm9yZU1hcmdpbkJveDsKIAogICAg
IGludCBtX2luUGFyc2VTaG9ydGhhbmQ7CkBAIC0zNTAsNyArMzQ2LDYgQEAgcHJpdmF0ZToKICAg
ICBpbmxpbmUgdm9pZCBkZXRlY3RBdFRva2VuKGludCwgYm9vbCk7CiAKICAgICB2b2lkIHNldFN0
eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAgIHZvaWQgZW5zdXJlQ1NTVmFsdWVQb29sKCk7
CiAKICAgICBpbmxpbmUgYm9vbCBpblN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc1Bh
cnNlck1vZGUgPT0gQ1NTU3RyaWN0TW9kZSB8fCBtX2Nzc1BhcnNlck1vZGUgPT0gU1ZHQXR0cmli
dXRlTW9kZTsgfQogICAgIGlubGluZSBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3NzUGFyc2VyTW9kZSA9PSBDU1NRdWlya3NNb2RlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCmluZGV4IDA1YmE1NDkuLjZiNGU5MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZVBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1
ZVBvb2wuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMiw2ICszMiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0NTU1Zh
bHVlUG9vbCYgY3NzVmFsdWVQb29sKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKENTU1Zh
bHVlUG9vbCwgcG9vbCwgKCkpOworICAgIHJldHVybiBwb29sOworfQorCiBDU1NWYWx1ZVBvb2w6
OkNTU1ZhbHVlUG9vbCgpCiAgICAgOiBtX2luaGVyaXRlZFZhbHVlKENTU0luaGVyaXRlZFZhbHVl
OjpjcmVhdGUoKSkKICAgICAsIG1faW1wbGljaXRJbml0aWFsVmFsdWUoQ1NTSW5pdGlhbFZhbHVl
OjpjcmVhdGVJbXBsaWNpdCgpKQpAQCAtNDUsMTAgKzUxLDYgQEAgQ1NTVmFsdWVQb29sOjpDU1NW
YWx1ZVBvb2woKQogewogfQogCi1DU1NWYWx1ZVBvb2w6On5DU1NWYWx1ZVBvb2woKQotewotfQot
CiBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBDU1NWYWx1ZVBvb2w6OmNyZWF0ZUlkZW50
aWZpZXJWYWx1ZShpbnQgaWRlbnQpCiB7CiAgICAgaWYgKGlkZW50IDw9IDAgfHwgaWRlbnQgPj0g
bnVtQ1NTVmFsdWVLZXl3b3JkcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YWx1ZVBvb2wuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZVBvb2wuaAppbmRleCBhZGU5
ZmUwLi41NzcwMDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVQb29s
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlUG9vbC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywxMSArMzcsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1ZhbHVlTGlzdDsKIAotY2xhc3MgQ1NT
VmFsdWVQb29sIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTVmFsdWVQb29sPiB7CitjbGFzcyBDU1NW
YWx1ZVBvb2wgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ZhbHVlUG9vbD4g
Y3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU1ZhbHVlUG9vbCk7IH0KLSAgICB+Q1NT
VmFsdWVQb29sKCk7Ci0KICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4gY3JlYXRlRm9udEZh
Y2VWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmLCBDU1NTdHlsZVNoZWV0KiBjb250ZXh0U3R5bGVT
aGVldCk7CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlRm9udEZhbWls
eVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIFBhc3NSZWZQdHI8Q1NTSW5oZXJpdGVkVmFsdWU+
IGNyZWF0ZUluaGVyaXRlZFZhbHVlKCkgeyByZXR1cm4gbV9pbmhlcml0ZWRWYWx1ZTsgfQpAQCAt
ODIsOCArNzksMTIgQEAgcHJpdmF0ZToKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gPiBGb250RmFtaWx5VmFsdWVDYWNoZTsKICAgICBGb250
RmFtaWx5VmFsdWVDYWNoZSBtX2ZvbnRGYW1pbHlWYWx1ZUNhY2hlOworCisgICAgZnJpZW5kIENT
U1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sKCk7CiB9OwogCitDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVl
UG9vbCgpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUHJvcGVydHlTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQu
Y3BwCmluZGV4IDlkY2M3MTIuLjU4ZTRhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVByb3BlcnR5U2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0eVNldC5jcHAKQEAgLTUyNSwxNSArNTI1LDkgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpz
ZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYgcHJvcGVydHksIENTU1Byb3BlcnR5KiBzbG8K
ICAgICBtX3Byb3BlcnRpZXMuYXBwZW5kKHByb3BlcnR5KTsKIH0KIAotYm9vbCBTdHlsZVByb3Bl
cnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlm
aWVyLCBib29sIGltcG9ydGFudCwgQ1NTU3R5bGVTaGVldCogY29udGV4dFN0eWxlU2hlZXQpCiti
b29sIFN0eWxlUHJvcGVydHlTZXQ6OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgaW50IGlkZW50aWZpZXIsIGJvb2wgaW1wb3J0YW50KQogewotICAgIFJlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gdmFsdWU7ICAgIAotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0U3R5bGVTaGVldCA/IGNvbnRleHRTdHlsZVNoZWV0LT5maW5kRG9jdW1lbnQoKSA6IDApCi0g
ICAgICAgIHZhbHVlID0gZG9jdW1lbnQtPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVJZGVudGlmaWVy
VmFsdWUoaWRlbnRpZmllcik7Ci0gICAgZWxzZQotICAgICAgICB2YWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKGlkZW50aWZpZXIpOwotCi0gICAgc2V0UHJvcGVydHko
Q1NTUHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUucmVsZWFzZSgpLCBpbXBvcnRhbnQpKTsKKyAg
ICBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eShwcm9wZXJ0eUlELCBjc3NWYWx1ZVBvb2woKS5jcmVh
dGVJZGVudGlmaWVyVmFsdWUoaWRlbnRpZmllciksIGltcG9ydGFudCkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNl
dC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAppbmRleCA1ODg3OWE4
Li43ZTQ2Y2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmgKQEAgLTcyLDcg
KzcyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UpOwogCiAgICAgLy8gVGhl
c2UgZG8gbm90LiBGSVhNRTogVGhpcyBpcyB0b28gbWVzc3ksIHdlIGNhbiBkbyBiZXR0ZXIuCi0g
ICAgYm9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBpbnQgdmFsdWUsIGJvb2wgaW1wb3J0
YW50ID0gZmFsc2UsIENTU1N0eWxlU2hlZXQqIGNvbnRleHRTdHlsZVNoZWV0ID0gMCk7CisgICAg
Ym9vbCBzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllciwgYm9vbCBpbXBv
cnRhbnQgPSBmYWxzZSk7CiAgICAgdm9pZCBzZXRQcm9wZXJ0eShjb25zdCBDU1NQcm9wZXJ0eSYs
IENTU1Byb3BlcnR5KiBzbG90ID0gMCk7CiAgICAgCiAgICAgYm9vbCByZW1vdmVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBTdHJpbmcqIHJldHVyblRleHQgPSAwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IGVjNWVmZmMuLjk4YzU3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
MzgsNyArMzgsNiBAQAogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJD
U1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUg
IkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKICNpbmNs
dWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtMTg1
NywxMyArMTg1Niw2IEBAIHZvaWQgRG9jdW1lbnQ6OnBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxz
KGludCBwYWdlSW5kZXgsIEludFNpemUmIHBhZ2VTaXplLCBpbnQmCiAgICAgbWFyZ2luTGVmdCA9
IHN0eWxlLT5tYXJnaW5MZWZ0KCkuaXNBdXRvKCkgPyBtYXJnaW5MZWZ0IDogdmFsdWVGb3JMZW5n
dGgoc3R5bGUtPm1hcmdpbkxlZnQoKSwgd2lkdGgsIHZpZXcpOwogfQogCi1QYXNzUmVmUHRyPENT
U1ZhbHVlUG9vbD4gRG9jdW1lbnQ6OmNzc1ZhbHVlUG9vbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2Nzc1ZhbHVlUG9vbCkKLSAgICAgICAgbV9jc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OmNy
ZWF0ZSgpOwotICAgIHJldHVybiBtX2Nzc1ZhbHVlUG9vbDsKLX0KLQogdm9pZCBEb2N1bWVudDo6
c2V0SXNWaWV3U291cmNlKGJvb2wgaXNWaWV3U291cmNlKQogewogICAgIG1faXNWaWV3U291cmNl
ID0gaXNWaWV3U291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCA0ZTc2NDc4Li5kNjYyNDFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtNjMsNyArNjMsNiBAQCBjbGFzcyBDREFUQVNlY3Rp
b247CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVTZWxlY3RvcjsK
IGNsYXNzIENTU1N0eWxlU2hlZXQ7Ci1jbGFzcyBDU1NWYWx1ZVBvb2w7CiBjbGFzcyBDYWNoZWRD
U1NTdHlsZVNoZWV0OwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VMb2FkZXI7CiBjbGFzcyBDYWNoZWRT
Y3JpcHQ7CkBAIC00NDUsOCArNDQ0LDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1NyY2RvY0Rv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1NyY2RvY0RvY3VtZW50OyB9CiAKLSAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlUG9vbD4gY3NzVmFsdWVQb29sKCkgY29uc3Q7Ci0gICAgCiAgICAgQ1NT
U3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcklmRXhpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9z
dHlsZVNlbGVjdG9yLmdldCgpOyB9CiAKICAgICBib29sIGlzVmlld1NvdXJjZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNWaWV3U291cmNlOyB9CkBAIC0xMjE3LDggKzEyMTQsNiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9oYXNEaXJ0eVN0eWxlU2VsZWN0b3I7CiAgICAgVmVjdG9yPE93blB0cjxGb250
RGF0YT4gPiBtX2N1c3RvbUZvbnRzOwogCi0gICAgbXV0YWJsZSBSZWZQdHI8Q1NTVmFsdWVQb29s
PiBtX2Nzc1ZhbHVlUG9vbDsKLQogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIE93blB0cjxDYWNo
ZWRSZXNvdXJjZUxvYWRlcj4gbV9jYWNoZWRSZXNvdXJjZUxvYWRlcjsKICAgICBSZWZQdHI8RG9j
dW1lbnRQYXJzZXI+IG1fcGFyc2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0
eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmlu
ZGV4IDE5NDg4NzIuLjhkZTY5ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHls
ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAK
QEAgLTE5MiwxNCArMTkyLDE0IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFu
Z2VkKCkKICAgICAKIGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBpZGVudGlmaWVyLCBib29sIGltcG9ydGFudCkK
IHsKLSAgICBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0
aGlzKS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCkt
PmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSwgaW1wb3J0YW50KTsKKyAgICBlbnN1
cmVBdHRyaWJ1dGVEYXRhKCktPmVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSh0aGlzKS0+c2V0UHJv
cGVydHkocHJvcGVydHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKGlk
ZW50aWZpZXIpLCBpbXBvcnRhbnQpOwogICAgIGlubGluZVN0eWxlQ2hhbmdlZCgpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMgdW5pdCwgYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAgZW5zdXJlQXR0cmli
dXRlRGF0YSgpLT5lbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHBy
b3BlcnR5SUQsIGRvY3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVWYWx1ZSh2YWx1ZSwg
dW5pdCksIGltcG9ydGFudCk7CisgICAgZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVNdXRh
YmxlSW5saW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZVZhbHVlKHZhbHVlLCB1bml0KSwgaW1wb3J0YW50KTsKICAgICBpbmxpbmVTdHls
ZUNoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTMyNiwxMiArMzI2LDEyIEBAIHZv
aWQgU3R5bGVkRWxlbWVudDo6dXBkYXRlQXR0cmlidXRlU3R5bGUoKQogCiB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHls
ZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBpbnQgaWRlbnRpZmllcikKIHsKLSAgICBzdHls
ZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlmaWVyKSk7CisgICAgc3R5bGUtPnNldFByb3BlcnR5
KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShpZGVudGlm
aWVyKSk7CiB9CiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkUHJvcGVydHlUb0F0dHJpYnV0ZVN0
eWxlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGRv
dWJsZSB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB1bml0KQogewotICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS0+
Y3JlYXRlVmFsdWUodmFsdWUsIHVuaXQpKTsKKyAgICBzdHlsZS0+c2V0UHJvcGVydHkocHJvcGVy
dHlJRCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUodmFsdWUsIHVuaXQpKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCAzOTg5N2QwLi41ZjhiMjIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMTEwNyw3ICsxMTA3LDcgQEAgdm9pZCBI
VE1MRWxlbWVudDo6YWRkSFRNTENvbG9yVG9TdHlsZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwg
Q1NTUHJvcGVydHlJRCBwcm8KICAgICBpZiAoIXBhcnNlZENvbG9yLmlzVmFsaWQoKSkKICAgICAg
ICAgcGFyc2VkQ29sb3Iuc2V0UkdCKHBhcnNlQ29sb3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxl
cyhjb2xvclN0cmluZykpOwogCi0gICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGRv
Y3VtZW50KCktPmNzc1ZhbHVlUG9vbCgpLT5jcmVhdGVDb2xvclZhbHVlKHBhcnNlZENvbG9yLnJn
YigpKSk7CisgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZUNvbG9yVmFsdWUocGFyc2VkQ29sb3IucmdiKCkpKTsKIH0KIAogdm9pZCBTdHlsZWRF
bGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcyhjb25zdCBFbGVtZW50KiBzb3VyY2VF
bGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCmluZGV4IDljMTI3
NDEuLjM4YTU5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKQEAg
LTE3Niw3ICsxNzYsNyBAQCB2b2lkIEhUTUxGb250RWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yQXR0
cmlidXRlKEF0dHJpYnV0ZSogYXR0ciwgU3R5bGVQcm9wZXJ0eVNldAogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGNvbG9yQXR0cikKICAgICAgICAgYWRkSFRNTENvbG9yVG9TdHlsZShz
dHlsZSwgQ1NTUHJvcGVydHlDb2xvciwgYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGZhY2VBdHRyKSB7Ci0gICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBmb250RmFjZVZhbHVlID0gZG9jdW1lbnQoKS0+Y3NzVmFsdWVQb29sKCktPmNyZWF0ZUZvbnRG
YWNlVmFsdWUoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCkpKQorICAg
ICAgICBpZiAoUmVmUHRyPENTU1ZhbHVlTGlzdD4gZm9udEZhY2VWYWx1ZSA9IGNzc1ZhbHVlUG9v
bCgpLmNyZWF0ZUZvbnRGYWNlVmFsdWUoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKS0+ZWxlbWVu
dFNoZWV0KCkpKQogICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5KENT
U1Byb3BlcnR5Rm9udEZhbWlseSwgZm9udEZhY2VWYWx1ZS5yZWxlYXNlKCkpKTsKICAgICB9IGVs
c2UKICAgICAgICAgSFRNTEVsZW1lbnQ6OmNvbGxlY3RTdHlsZUZvckF0dHJpYnV0ZShhdHRyLCBz
dHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmNwcAppbmRleCBhYWFhNTZlLi5k
NDE3Zjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5jcHAKQEAgLTgzLDcgKzgz
LDcgQEAgdm9pZCBIVE1MSFJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JBdHRyaWJ1dGUoQXR0cmli
dXRlKiBhdHRyLCBTdHlsZVByb3BlcnR5U2V0KgogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IG5vc2hhZGVBdHRyKSB7CiAgICAgICAgIGFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShz
dHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJTdHlsZSwgQ1NTVmFsdWVTb2xpZCk7CiAKLSAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkYXJrR3JheVZhbHVlID0gZG9jdW1lbnQoKS0+Y3Nz
VmFsdWVQb29sKCktPmNyZWF0ZUNvbG9yVmFsdWUoQ29sb3I6OmRhcmtHcmF5KTsKKyAgICAgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBkYXJrR3JheVZhbHVlID0gY3NzVmFsdWVQb29sKCku
Y3JlYXRlQ29sb3JWYWx1ZShDb2xvcjo6ZGFya0dyYXkpOwogICAgICAgICBzdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgZGFya0dyYXlWYWx1ZSk7CiAgICAgICAgIHN0
eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgZGFya0dyYXlWYWx1
ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2l6ZUF0dHIpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCmluZGV4IGNmNjRiMzcuLmZiNDM3N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtNDY0LDQwICs0NjQs
MzggQEAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBIVE1MVGFibGVFbGVtZW50OjpjcmVh
dGVTaGFyZWRDZWxsU3R5bGUoKQogewogICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHls
ZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogCi0gICAgQ1NTVmFsdWVQb29sKiBjc3NW
YWx1ZVBvb2wgPSBkb2N1bWVudCgpLT5jc3NWYWx1ZVBvb2woKS5nZXQoKTsKLQogICAgIHN3aXRj
aCAoY2VsbEJvcmRlcnMoKSkgewogICAgIGNhc2UgU29saWRCb3JkZXJzQ29sc09ubHk6CiAgICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgQ1NTVmFs
dWVUaGluKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyUmln
aHRXaWR0aCwgQ1NTVmFsdWVUaGluKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1By
b3BlcnR5Qm9yZGVyTGVmdFN0eWxlLCBDU1NWYWx1ZVNvbGlkKTsKICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRTdHlsZSwgQ1NTVmFsdWVTb2xpZCk7Ci0g
ICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCBjc3NWYWx1
ZVBvb2wtPmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkpOworICAgICAgICBzdHlsZS0+c2V0UHJvcGVy
dHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW5oZXJpdGVk
VmFsdWUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29saWRCb3JkZXJzUm93c09ubHk6
CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCBD
U1NWYWx1ZVRoaW4pOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21XaWR0aCwgQ1NTVmFsdWVUaGluKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGUsIENTU1ZhbHVlU29saWQpOwogICAgICAgICBzdHls
ZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21TdHlsZSwgQ1NTVmFsdWVTb2xp
ZCk7Ci0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCBj
c3NWYWx1ZVBvb2wtPmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkpOworICAgICAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSW5o
ZXJpdGVkVmFsdWUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU29saWRCb3JkZXJzOgot
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCwgY3NzVmFs
dWVQb29sLT5jcmVhdGVWYWx1ZSgxLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7Ci0gICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlclN0eWxlLCBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZVNvbGlkKSk7Ci0gICAgICAgIHN0eWxl
LT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCBjc3NWYWx1ZVBvb2wtPmNyZWF0
ZUluaGVyaXRlZFZhbHVlKCkpOworICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVy
dHlCb3JkZXJXaWR0aCwgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUoMSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QWCkpOworICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlC
b3JkZXJTdHlsZSwgY3NzVmFsdWVQb29sKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKENTU1ZhbHVl
U29saWQpKTsKKyAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyQ29s
b3IsIGNzc1ZhbHVlUG9vbCgpLmNyZWF0ZUluaGVyaXRlZFZhbHVlKCkpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEluc2V0Qm9yZGVyczoKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVyV2lkdGgsIGNzc1ZhbHVlUG9vbC0+Y3JlYXRlVmFsdWUoMSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCkpOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCb3JkZXJTdHlsZSwgY3NzVmFsdWVQb29sLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVJbnNldCkpOwotICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCb3Jk
ZXJDb2xvciwgY3NzVmFsdWVQb29sLT5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpKTsKKyAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKDEsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIGNzc1ZhbHVlUG9vbCgpLmNy
ZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUluc2V0KSk7CisgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckNvbG9yLCBjc3NWYWx1ZVBvb2woKS5jcmVhdGVJbmhl
cml0ZWRWYWx1ZSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb0JvcmRlcnM6Ci0gICAg
ICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLCBjc3NWYWx1ZVBv
b2wtPmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAg
c3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsIGNzc1ZhbHVlUG9vbCgp
LmNyZWF0ZVZhbHVlKDAsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCiAgICAgaWYgKG1fcGFkZGluZykKLSAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5UGFkZGluZywgY3NzVmFsdWVQb29sLT5jcmVhdGVWYWx1ZShtX3BhZGRp
bmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpKTsKKyAgICAgICAgc3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5UGFkZGluZywgY3NzVmFsdWVQb29sKCkuY3JlYXRlVmFsdWUobV9wYWRk
aW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSk7CiAKICAgICByZXR1cm4gc3R5bGUucmVs
ZWFzZSgpOwogfQo=
</data>
<flag name="review"
          id="141103"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>