<?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>205264</bug_id>
          
          <creation_ts>2019-12-16 04:35:19 -0800</creation_ts>
          <short_desc>Resolve dynamic media queries without reconstructing RuleSets</short_desc>
          <delta_ts>2020-06-12 09:15:36 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>212757</dependson>
          <blocked>204448</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>emilio</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1598836</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 04:35:19 -0800</bug_when>
    <thetext>Switch media query affected rules on and off dynamically.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598851</commentid>
    <comment_count>1</comment_count>
      <attachid>385758</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 06:18:11 -0800</bug_when>
    <thetext>Created attachment 385758
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598868</commentid>
    <comment_count>2</comment_count>
      <attachid>385758</attachid>
    <who name="Emilio Cobos Álvarez (:emilio)">emilio</who>
    <bug_when>2019-12-16 07:07:16 -0800</bug_when>
    <thetext>Comment on attachment 385758
patch

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

This looks fancy to me (I took the CC as an invitation to take a look, but please let me know if I took it wrong).

I can&apos;t r+ it myself as I&apos;m not 100% sure of the above and I&apos;m not technically a reviewer, but this looks good otherwise.

The only thing I haven&apos;t double-checked and would take me more to check is whether this causes WebKit to overinvalidate for class/id/attribute changes for stuff that doesn&apos;t apply. So like whether:

@media (width: 0) {
  .myclass * { ... }
}

Causes &quot;myclass&quot; changes to restyle the whole subtree even if the feature doesn&apos;t match. Seems it probably would, but it might be ok.

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:149
&gt;  {

Probably assert that if mode is AlwaysMatchDynamic, then dynamicResults is not null?

&gt; Source/WebCore/style/RuleSet.cpp:308
&gt; +            mediaQueryCollector.didMutateResolver();

There&apos;s nothing preventing you in the future to take the same approach for keyframes and font-face and such, right? (as in, track them in the dynamic results, and enable / disable them on demand).

But this seems fine for now, and it is certainly hard to handle.

&gt; Source/WebCore/style/RuleSet.cpp:335
&gt; +        auto mediaQueryCollector = MediaQueryCollector { evaluator, true };

nit: May be worth to make collectDynamic an enum class, so this reads like CollectDynamic::Yes or such. But if it makes the surrounding code too ugly then probably never mind.

&gt; Source/WebCore/style/RuleSet.h:80
&gt; +            Vector&lt;size_t&gt; affectedRulePositions { };

nit: I think you can just use Vector&lt;size_t&gt; affectedRulePositions; and same with the other vectors here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598874</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 07:31:25 -0800</bug_when>
    <thetext>&gt; @media (width: 0) {
&gt;   .myclass * { ... }
&gt; }
&gt; 
&gt; Causes &quot;myclass&quot; changes to restyle the whole subtree even if the feature
&gt; doesn&apos;t match. Seems it probably would, but it might be ok.

With this patch we still just re-resolve everything. I have a followup that will construct invalidation rulesets for each query. We&apos;ll only invalidate the associated elements and only when the query result changes.

&gt; There&apos;s nothing preventing you in the future to take the same approach for
&gt; keyframes and font-face and such, right? (as in, track them in the dynamic
&gt; results, and enable / disable them on demand).

Absolutely. This is just a shortcut to get the common case covered (none of the sites I tried hit this case).

&gt; &gt; Source/WebCore/style/RuleSet.h:80
&gt; &gt; +            Vector&lt;size_t&gt; affectedRulePositions { };
&gt; 
&gt; nit: I think you can just use Vector&lt;size_t&gt; affectedRulePositions; and same
&gt; with the other vectors here.

Explicit { } here allows compact struct initialisation

auto mediaQueryCollector = MediaQueryCollector { evaluator, canUseDynamicMediaQueryResolution };

without providing explicit constructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598876</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 07:33:48 -0800</bug_when>
    <thetext>&gt; This looks fancy to me (I took the CC as an invitation to take a look, but
&gt; please let me know if I took it wrong).

And yes, I CC&apos;d to get comments :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598881</commentid>
    <comment_count>5</comment_count>
    <who name="Emilio Cobos Álvarez (:emilio)">emilio</who>
    <bug_when>2019-12-16 07:44:48 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; &gt; @media (width: 0) {
&gt; &gt;   .myclass * { ... }
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Causes &quot;myclass&quot; changes to restyle the whole subtree even if the feature
&gt; &gt; doesn&apos;t match. Seems it probably would, but it might be ok.
&gt; 
&gt; With this patch we still just re-resolve everything. I have a followup that
&gt; will construct invalidation rulesets for each query. We&apos;ll only invalidate
&gt; the associated elements and only when the query result changes.

Sure, when media queries change we just re-resolve everything, and the rulesets for each query would fix that indeed.

My question was more about whether this patch changes the RuleFeatures that end up being used for class / id / etc invalidations. Which it would, but your followup would address that as well. So that sounds great.

&gt; Explicit { } here allows compact struct initialisation
&gt; 
&gt; auto mediaQueryCollector = MediaQueryCollector { evaluator,
&gt; canUseDynamicMediaQueryResolution };
&gt; 
&gt; without providing explicit constructor.

Fancy, TIL, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598898</commentid>
    <comment_count>6</comment_count>
      <attachid>385758</attachid>
    <who name="Emilio Cobos Álvarez (:emilio)">emilio</who>
    <bug_when>2019-12-16 08:10:19 -0800</bug_when>
    <thetext>Comment on attachment 385758
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598904</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 08:26:56 -0800</bug_when>
    <thetext>&gt; My question was more about whether this patch changes the RuleFeatures that
&gt; end up being used for class / id / etc invalidations. Which it would, but
&gt; your followup would address that as well. So that sounds great.

Right, yes. These rules end up in class etc invalidation rulesets. I don&apos;t think that is a major concern in practice (requires costly and unique selectors inside non-matching queries) but you can certainly construct a case where it would be significant. I&apos;ll address it later if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598979</commentid>
    <comment_count>8</comment_count>
      <attachid>385758</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-16 10:58:45 -0800</bug_when>
    <thetext>Comment on attachment 385758
patch

Oh sorry, I thought you were reviewer already when I told to set the r+. Lets find someone else for formal review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598998</commentid>
    <comment_count>9</comment_count>
      <attachid>385758</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-16 11:23:20 -0800</bug_when>
    <thetext>Comment on attachment 385758
patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        to re-resolve full document style. This may happen frequently, for example when resizing window on a reponsive

&quot;reponsive&quot; -&gt; &quot;responsive&quot;

&gt; Source/WebCore/ChangeLog:11
&gt; +        we site.

&quot;we site&quot; -&gt; &quot;web site&quot;

&gt; Source/WebCore/ChangeLog:15
&gt; +        (like view resize). This allows us to avoid throwing away anything during common screnarios.

&quot;screnarios&quot; -&gt; &quot;scenarios&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599311</commentid>
    <comment_count>10</comment_count>
      <attachid>385864</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-17 01:00:02 -0800</bug_when>
    <thetext>Created attachment 385864
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599325</commentid>
    <comment_count>11</comment_count>
      <attachid>385864</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-17 01:52:02 -0800</bug_when>
    <thetext>Comment on attachment 385864
patch

Clearing flags on attachment: 385864

Committed r253616: &lt;https://trac.webkit.org/changeset/253616&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599326</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-12-17 01:52:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599328</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-17 01:53:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/58000763&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385758</attachid>
            <date>2019-12-16 06:18:11 -0800</date>
            <delta_ts>2019-12-17 01:00:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>media-query-dynamic-resolve.patch</filename>
            <type>text/plain</type>
            <size>42189</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjg4NDBmM2NmMS4uMThkNTg5NDc2ZmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOS0xMi0xNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzb2x2ZSBkeW5hbWljIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCByZWNvbnN0cnVjdGluZyBSdWxl
U2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
MjY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGEgdGVzdCB2ZXJpZnlpbmcgdGhhdCBAZm9udC1mYWNlIGluc2lkZSBAbWVkaWEgd29ya3MgaW4g
ZHluYW1pYyBzY2VuYXJpb3MuCisKKyAgICAgICAgKiBmYXN0L21lZGlhL21lZGlhLXF1ZXJ5LWR5
bmFtaWMtd2l0aC1mb250LWZhY2UtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9tZWRpYS9tZWRpYS1xdWVyeS1keW5hbWljLXdpdGgtZm9udC1mYWNlLmh0bWw6IEFkZGVkLgor
CiAyMDE5LTEyLTEwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAg
Q3JlYXRlIGEgVGVzdEV4cGVjdGF0aW9ucyBmaWxlIGZvciB0aGUgR1BVIHByb2Nlc3MgcmVsYXRl
ZCB3b3JrCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L21lZGlhL21lZGlhLXF1ZXJ5LWR5
bmFtaWMtd2l0aC1mb250LWZhY2UtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvbWVk
aWEvbWVkaWEtcXVlcnktZHluYW1pYy13aXRoLWZvbnQtZmFjZS1leHBlY3RlZC5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZDlhYzNlZDJmMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvbWVkaWEvbWVkaWEtcXVlcnktZHluYW1pYy13aXRo
LWZvbnQtZmFjZS1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsMTEgQEAKKzxpZnJhbWUgd2lkdGg9
MTAwIHNyY2RvYz0iCis8c3R5bGU+CitAZm9udC1mYWNlIHsKKyAgICBmb250LWZhbWlseTogZmFt
aWx5MTsKKyAgICBzcmM6IGxvY2FsKGNvdXJpZXIpOworfQorYm9keSB7IGJhY2tncm91bmQtY29s
b3I6IGdyZWVuIH0KK2JvZHkgeyBmb250LWZhbWlseTpmYW1pbHkxIH0KKzwvc3R5bGU+CitUZXN0
IGZyYW1lCisiPjwvaWZyYW1lPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYS9t
ZWRpYS1xdWVyeS1keW5hbWljLXdpdGgtZm9udC1mYWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L21lZGlhL21lZGlhLXF1ZXJ5LWR5bmFtaWMtd2l0aC1mb250LWZhY2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDA4M2FhNjg3OGUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhL21lZGlhLXF1ZXJ5LWR5bmFtaWMtd2l0aC1mb250
LWZhY2UuaHRtbApAQCAtMCwwICsxLDI3IEBACis8aWZyYW1lIGlkPWZyYW1lIHNyY2RvYz0iCis8
c3R5bGU+CitAbWVkaWEgKG1pbi13aWR0aDoyMDBweCkgeworICAgIEBmb250LWZhY2UgeworICAg
ICAgICBmb250LWZhbWlseTogZmFtaWx5MTsKKyAgICAgICAgc3JjOiBsb2NhbCh0aW1lcyk7Cisg
ICAgfQorICAgIGJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZWQgfQorfQorCitAbWVkaWEgKG1h
eC13aWR0aDoyMDBweCkgeworICAgIEBmb250LWZhY2UgeworICAgICAgICBmb250LWZhbWlseTog
ZmFtaWx5MTsKKyAgICAgICAgc3JjOiBsb2NhbChjb3VyaWVyKTsKKyAgICB9CisgICAgYm9keSB7
IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIH0KK30KK2JvZHkgeyBmb250LWZhbWlseTpmYW1pbHkx
IH0KKzwvc3R5bGU+CitUZXN0IGZyYW1lCisiPjwvaWZyYW1lPgorPHNjcmlwdD4KK2ZyYW1lLm9u
bG9hZCA9ICgpID0+IHsKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQub2Zmc2V0V2lkdGg7Cisg
ICAgZnJhbWUud2lkdGggPSAxMDA7Cit9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiYTE2YjQ0
MGFkNC4uODk5ODg3NzkzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMDQgQEAKKzIwMTktMTIt
MTYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlc29sdmUg
ZHluYW1pYyBtZWRpYSBxdWVyaWVzIHdpdGhvdXQgcmVjb25zdHJ1Y3RpbmcgUnVsZVNldHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTI2NAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIGN1cnJlbnRs
eSBkbyBhIGZ1bGwgc3R5bGUgcmVzb2x2ZXIgcmVzZXQgd2hlbmV2ZXIgYSBtZWRpYSBxdWVyeSBy
ZXN1bHQgY2hhbmdlcy4gVGhpcyBpcyB2ZXJ5IGluZWZmaWNpZW50CisgICAgICAgIGFzIHdlIG5l
ZWQgdG8gcmVjb25zdHVjdCBhbGwgUnVsZVNldHMgYW5kIG9wdGltaXphdGlvbiBzdHJ1Y3R1cmVz
LiBXZSBhbHNvIGxvc2UgcmVsYXRlZCBjYWNoZXMgYW5kIGFyZSBmb3JjZWQKKyAgICAgICAgdG8g
cmUtcmVzb2x2ZSBmdWxsIGRvY3VtZW50IHN0eWxlLiBUaGlzIG1heSBoYXBwZW4gZnJlcXVlbnRs
eSwgZm9yIGV4YW1wbGUgd2hlbiByZXNpemluZyB3aW5kb3cgb24gYSByZXBvbnNpdmUKKyAgICAg
ICAgd2Ugc2l0ZS4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggd2UgY29uc3RydWN0IFJ1bGVE
YXRhcyBhbHNvIGZvciBub24tbWF0Y2hpbmcgZHluYW1pYyBtZWRpYSBxdWVyaWVzIGFuZCBzaW1w
bHkgbWFyayB0aGVtIGRpc2FibGVkLgorICAgICAgICBXZSBjcmVhdGUgYSBkYXRhIHN0cnVjdHVy
ZSB0aGF0IGFsbG93cyBlbmFibGluZyBhbmQgZGlzYWJsaW5nIHRoZW0gZWZmaWNpZW50bHkgYXMg
YSByZXNwb25zZSB0byBlbnZpcm9ubWVudCBjaGFuZ2VzCisgICAgICAgIChsaWtlIHZpZXcgcmVz
aXplKS4gVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgdGhyb3dpbmcgYXdheSBhbnl0aGluZyBkdXJp
bmcgY29tbW9uIHNjcmVuYXJpb3MuCisKKyAgICAgICAgVGVzdDogZmFzdC9tZWRpYS9tZWRpYS1x
dWVyeS1keW5hbWljLXdpdGgtZm9udC1mYWNlLmh0bWwKKworICAgICAgICAqIGNzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6
OmV2YWx1YXRlIGNvbnN0KToKKworICAgICAgICBBZGQgYSBtb2RlIHdoZXJlIGR5bmFtaWMgbWVk
aWEgcXVlcmllcyBhbGwgZXZhbHVhdGUgdG8gdHJ1ZSBhbmQgb25seSBzdGF0aWMgcHJvcGVydGll
cyBjYW4gY2F1c2UgdGhlIHF1ZXJ5IHRvIGZhaWwuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oOgorICAgICAgICAqIHN0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1h
dGNoaW5nUnVsZXNGb3JMaXN0KToKKworICAgICAgICBTa2lwIGRpc2FibGVkIHJ1bGVzIGR1cmlu
ZyBydWxlIGNvbGxlY3Rpb24uCisKKyAgICAgICAgKiBzdHlsZS9SdWxlRGF0YS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKiBzdHls
ZS9SdWxlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVEYXRhOjppc0VuYWJs
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVEYXRhOjpzZXRFbmFibGVk
KToKKworICAgICAgICBBZGQgYSBiaXQuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRSdWxlKToKKworICAgICAgICBD
b2xsZWN0IHBvc2l0aW9ucyBvZiBydWxlcyBhZmZlY3RlZCBieSBkeW5hbWljIG1lZGlhIHF1ZXJp
ZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRQYWdlUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorCisgICAgICAg
IEZpcnN0IGNoZWNrIGZvciBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBoYXZlIHN0eWxlIHJlc29s
dmVyIG11dGF0aW5nIHJ1bGVzIChsaWtlIEBmb250LWZhY2UpIGluc2lkZSBhIG1lZGlhIHF1ZXJ5
LgorICAgICAgICBJbiB0aGlzIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHN0YXRpYyByZXNvbHV0aW9u
LgorCisgICAgICAgIFRoZW4gY29sbGVjdCB0aGUgcnVsZXMuIFN0YXRpYyBtZWRpYSBxdWVyaWVz
IChwcmludCBldGMpIGFyZSBldmFsdWF0ZWQgcmlnaHQgYXdheSwgZHluYW1pYyBvbmVzIGFyZSBj
b2xsZWN0ZWQgYnkgTWVkaWFRdWVyeUNvbGxlY3Rvci4KKworICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVs
ZVNldDo6dHJhdmVyc2VSdWxlRGF0YXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVT
ZXQ6OmV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKToKKworICAgICAgICBFdmFsdWF0ZSBt
ZWRpYSBxdWVyaWVzIGZvciBjaGFuZ2VzIGFuZCBmbGlwIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRo
ZSBydWxlcyBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpN
ZWRpYVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0
b3I6OmFkZFJ1bGVQb3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6aGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNWaWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcmllcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6OmV2
YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVz
b2x2ZXI6OmFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9y
dENoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2
ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2Ug
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNN
ZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisK
KyAgICAgICAgUHJvZmlsaW5nIGRvZXNuJ3Qgc2hvdyBhbnkgbmVlZCB0byBoYW5kbGUgdGhlIGNh
c2VzIHNlcGFyYXRlbHkuIFJlcGxhY2Ugd2l0aCBzaW5nbGUgZXZhbHVhdGVEeW5hbWljTWVkaWFR
dWVyaWVzIHBhdGguCisgICAgICAgIFdlIGNhbiBicmluZyB0eXBlIHNwZWNpZmljIHBhdGhzIGJh
Y2sgZWFzaWx5IGlmIG5lZWRlZC4KKworICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZXNvbHZlcjo6aGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJl
c29sdmVyOjpoYXNBY2Nlc3NpYmlsaXR5U2V0dGluZ3NEZXBlbmRlbnRNZWRpYVF1ZXJpZXMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNBcHBl
YXJhbmNlRGVwZW5kZW50TWVkaWFRdWVyaWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBz
dHlsZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZXZh
bHVhdGVNZWRpYVF1ZXJpZXNGb3JWaWV3cG9ydENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6U2NvcGU6OmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yQWNjZXNzaWJpbGl0eVNldHRpbmdz
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZXZhbHVhdGVNZWRpYVF1
ZXJpZXNGb3JBcHBlYXJhbmNlQ2hhbmdlKToKKworICAgICAgICBDYWxsIGludG8gZ2VuZXJhbCBl
dmFsdWF0ZUR5bmFtaWNNZWRpYVF1ZXJpZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpT
Y29wZTo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXMpOgorCisgICAgICAgIEluIG5vcm1hbCBjYXNlIHdl
IGNhbiBqdXN0IGludmFsaWRhdGUgc3R5bGUsIG5vdCB0aHJvdyBldmVyeXRoaW5nIGF3YXkuCisg
ICAgICAgIFRoaXMgY2FuIGJlIGZ1cnRoZXIgaW1wcm92ZWQgYnkgYWRkaW5nIG9wdGltaXphdGlv
biBydWxlIHNldHMuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1l
ZGlhUXVlcnlTdHlsZUlmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpT
Y29wZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlOjpTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6U2NvcGVSdWxlU2V0czo6aGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmV2YWx1dGVEeW5h
bWljTWVkaWFRdWVyeVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZVJ1bGVT
ZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6
ZW5zdXJlSW52YWxpZGF0aW9uUnVsZVNldHMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlU2NvcGVS
dWxlU2V0cy5oOgorCiAyMDE5LTEyLTEwICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlh
LmNvbT4KIAogICAgICAgICBGaXhlZCBQYXR0ZXJuLmggY29tcGlsZSBlcnJvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IDA2OTQ1NDkyZTA2Li4zMjg3
MGYyYjczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcApA
QCAtMTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBib29sIGFwcGx5UmVzdHJpY3RvcihNZWRpYVF1ZXJ5
OjpSZXN0cmljdG9yIHIsIGJvb2wgdmFsdWUpCiAgICAgcmV0dXJuIHIgPT0gTWVkaWFRdWVyeTo6
Tm90ID8gIXZhbHVlIDogdmFsdWU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZh
bHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIE1lZGlhUXVlcnlEeW5hbWljUmVz
dWx0cyogZHluYW1pY1Jlc3VsdHMpIGNvbnN0Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2
YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBNZWRpYVF1ZXJ5RHluYW1pY1Jl
c3VsdHMqIGR5bmFtaWNSZXN1bHRzLCBNb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgTE9HX1dJVEhf
U1RSRUFNKE1lZGlhUXVlcmllcywgc3RyZWFtIDw8ICJNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFs
dWF0ZSBvbiAiIDw8IChtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBl
bXB0eVN0cmluZygpKSk7CiAKQEAgLTE2NiwyMiArMTY2LDM2IEBAIGJvb2wgTWVkaWFRdWVyeUV2
YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIE1lZGlhUXVl
cnlEeW5hCiAgICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS5tZWRpYVR5cGUoKSkpIHsK
ICAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKICAg
ICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBleHByZXNzaW9ucywgc3RvcCBpZiBhbnkgb2Yg
dGhlbSBldmFsIHRvIGZhbHNlIChBTkQgc2VtYW50aWNzKS4KKyAgICAgICAgICAgIGJvb2wgaXNE
eW5hbWljID0gZmFsc2U7CiAgICAgICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgICAgICBm
b3IgKDsgaiA8IGV4cHJlc3Npb25zLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgYm9v
bCBleHByZXNzaW9uUmVzdWx0ID0gZXZhbHVhdGUoZXhwcmVzc2lvbnNbal0pOwogICAgICAgICAg
ICAgICAgIGlmIChkeW5hbWljUmVzdWx0cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNW
aWV3cG9ydERlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlh
RmVhdHVyZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNSZXN1bHRzLT52aWV3cG9ydC5hcHBlbmQo
eyBleHByZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzQXBwZWFyYW5jZURlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUo
KSkpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXBw
ZWFyYW5jZURlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkeW5hbWljUmVzdWx0cy0+YXBwZWFyYW5jZS5hcHBlbmQoeyBleHByZXNzaW9uc1tqXSwg
ZXhwcmVzc2lvblJlc3VsdCB9KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWNjZXNzaWJp
bGl0eVNldHRpbmdzRGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NpYmls
aXR5U2V0dGluZ3NEZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJlKCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZHluYW1pY1Jlc3VsdHMtPmFjY2Vzc2liaWxpdHlTZXR0aW5ncy5hcHBlbmQoeyBl
eHByZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCB9KTsKKyAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpB
bHdheXNNYXRjaER5bmFtaWMgJiYgaXNEeW5hbWljKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvblJlc3VsdCkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChtb2Rl
ID09IE1vZGU6OkFsd2F5c01hdGNoRHluYW1pYyAmJiBpc0R5bmFtaWMpIHsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAvLyBBc3N1bWUgdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBv
ZiB0aGUgbGlzdCwgb3RoZXJ3aXNlIGFzc3VtZSBmYWxzZS4KICAgICAgICAgICAgIHJlc3VsdCA9
IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUoKSA9
PSBqKTsKICAgICAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeUV2YWx1YXRvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0
b3IuaAppbmRleCAzYWQ5OThjYmFjZC4uNWRlODVjN2NjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFdmFsdWF0b3IuaApAQCAtODMsNyArODMsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYpIGNvbnN0OwogICAgIGJvb2wg
ZXZhbHVhdGVGb3JDaGFuZ2VzKGNvbnN0IE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyYpIGNvbnN0
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0
JiwgTWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKiA9IG51bGxwdHIpIGNvbnN0OworICAgIGVudW0g
Y2xhc3MgTW9kZSB7IE5vcm1hbCwgQWx3YXlzTWF0Y2hEeW5hbWljIH07CisgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiwgTWVkaWFRdWVyeUR5bmFt
aWNSZXN1bHRzKiA9IG51bGxwdHIsIE1vZGUgPSBNb2RlOjpOb3JtYWwpIGNvbnN0OwogCiAgICAg
c3RhdGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKERvY3VtZW50JiwgY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGVWYWx1ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcAppbmRleCBkNzA2OGQ1OWE5Yy4uODEyN2MyZjNjNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTUyNCw2ICs1MjQs
OSBAQCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxp
c3QoY29uc3QgUnVsZVNldDo6UnVsZURhdGFWZQogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBydWxlcy0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8m
IHJ1bGVEYXRhID0gcnVsZXMtPmRhdGEoKVtpXTsKIAorICAgICAgICBpZiAoVU5MSUtFTFkoIXJ1
bGVEYXRhLmlzRW5hYmxlZCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlm
ICghcnVsZURhdGEuY2FuTWF0Y2hQc2V1ZG9FbGVtZW50KCkgJiYgbV9wc2V1ZG9FbGVtZW50UmVx
dWVzdC5wc2V1ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKaW5kZXggZjM0NGRiOTk2MTYuLjZhMzAxZGY4ZjI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgUnVsZURh
dGE6OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5z
aWduZWQgc2VsZWN0b3JMaXMKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVj
dG9yKGNvbXB1dGVDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKnNlbGVjdG9yKCkp
KQogICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01h
dGNoVHlwZShzZWxlY3RvcigpKSkKICAgICAsIG1fcHJvcGVydHlXaGl0ZWxpc3RUeXBlKGRldGVy
bWluZVByb3BlcnR5V2hpdGVsaXN0VHlwZShzZWxlY3RvcigpKSkKKyAgICAsIG1faXNFbmFibGVk
KHRydWUpCiAgICAgLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoU2VsZWN0
b3JGaWx0ZXI6OmNvbGxlY3RIYXNoZXMoKnNlbGVjdG9yKCkpKQogewogICAgIEFTU0VSVChtX3Bv
c2l0aW9uID09IHBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1
bGVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCmluZGV4IDFmYjZhNzFl
OTUyLi5hM2E2MDEwMmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCkBAIC02MCw2ICs2MCw5
IEBAIHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CiAg
ICAgdW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlw
ZTsgfQogICAgIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1fcHJvcGVy
dHlXaGl0ZWxpc3RUeXBlKTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9pc0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCB2YWx1ZSkgeyBtX2lzRW5h
YmxlZCA9IHZhbHVlOyB9CisKICAgICBjb25zdCBTZWxlY3RvckZpbHRlcjo6SGFzaGVzJiBkZXNj
ZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CiAKICAgICB2b2lkIGRpc2FibGVTZWxlY3Rv
ckZpbHRlcmluZygpIHsgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzWzBdID0g
MDsgfQpAQCAtNzYsNiArNzksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY29udGFpbnNV
bmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKICAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5
cGUgOiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCiAgICAgdW5zaWduZWQg
bV9wcm9wZXJ0eVdoaXRlbGlzdFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faXNFbmFibGVkIDog
MTsKICAgICBTZWxlY3RvckZpbHRlcjo6SGFzaGVzIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRp
Zmllckhhc2hlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVT
ZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggOTcwMmEzZWM2
ZDUuLjE0ODdjMWE2MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcApAQCAtODgsMTEgKzg4
LDE1IEBAIHN0YXRpYyBib29sIGlzSG9zdFNlbGVjdG9yTWF0Y2hpbmdJblNoYWRvd1RyZWUoY29u
c3QgQ1NTU2VsZWN0b3ImIHN0YXJ0U2VsZWN0b3IpCiAgICAgcmV0dXJuIGxlZnRtb3N0U2VsZWN0
b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIGxlZnRtb3N0U2VsZWN0
b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvc3Q7CiB9
CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVj
dG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KQordm9pZCBSdWxlU2V0OjphZGRS
dWxlKFN0eWxlUnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2Vs
ZWN0b3JMaXN0SW5kZXgsIE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0b3Ip
CiB7Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JM
aXN0SW5kZXgsIG1fcnVsZUNvdW50KyspOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKCZydWxlLCBz
ZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9ydWxlQ291bnQrKyk7CisKICAgICBt
X2ZlYXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKKyAgICBpZiAobWVkaWFRdWVy
eUNvbGxlY3RvcikKKyAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZVBvc2l0aW9u
SWZOZWVkZWQocnVsZURhdGEucG9zaXRpb24oKSk7CisKICAgICB1bnNpZ25lZCBjbGFzc0J1Y2tl
dFNpemUgPSAwOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBpZFNlbGVjdG9yID0gbnVsbHB0cjsK
ICAgICBjb25zdCBDU1NTZWxlY3RvciogdGFnU2VsZWN0b3IgPSBudWxscHRyOwpAQCAtMjYwLDYz
ICsyNjQsMTc0IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2ln
bmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yCiAgICAgbV91bml2ZXJzYWxSdWxl
cy5hcHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxl
UnVsZVBhZ2UqIHJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2Um
IHJ1bGUpCiB7Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgIG1fcGFnZVJ1bGVz
LmFwcGVuZCgmcnVsZSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIG1lZGl1bSwgUmVzb2x2ZXIqIHJlc29sdmVyLCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3Vs
dHMmIG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cykKK3ZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxl
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIE1lZGlhUXVlcnlD
b2xsZWN0b3ImIG1lZGlhUXVlcnlDb2xsZWN0b3IsIFJlc29sdmVyKiByZXNvbHZlciwgQWRkUnVs
ZXNNb2RlIG1vZGUpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsKLSAgICAgICAg
aWYgKGlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKGRvd25j
YXN0PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1
bGVQYWdlPigqcnVsZSkpCi0gICAgICAgICAgICBhZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1
bGVQYWdlPihydWxlLmdldCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVsZU1lZGlh
PigqcnVsZSkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gQWRkUnVsZXNNb2RlOjpSZXNvbHZlck11
dGF0aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGlu
RHluYW1pY01lZGlhUXVlcnkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXM8
U3R5bGVSdWxlPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEFkZFJ1bGVzTW9k
ZTo6Tm9ybWFsKQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxTdHlsZVJ1
bGU+KCpydWxlKSwgbWVkaWFRdWVyeUNvbGxlY3Rvcik7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKSB7CisgICAg
ICAgICAgICBpZiAobW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgICAg
ICBhZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQYWdlPigqcnVsZSkpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigq
cnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1lZGlhUnVsZSA9IGRvd25jYXN0PFN0eWxlUnVs
ZU1lZGlhPigqcnVsZSk7Ci0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVz
KCkgfHwgbWVkaXVtLmV2YWx1YXRlKCptZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksICZtZWRpYVF1
ZXJ5RHluYW1pY1Jlc3VsdHMpKSkKLSAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlh
UnVsZS5jaGlsZFJ1bGVzKCksIG1lZGl1bSwgcmVzb2x2ZXIsIG1lZGlhUXVlcnlEeW5hbWljUmVz
dWx0cyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAm
JiByZXNvbHZlcikgeworICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFu
ZEV2YWx1YXRlKG1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgICAgICBh
ZGRDaGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCksIG1lZGlhUXVlcnlDb2xsZWN0b3Is
IHJlc29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBv
cChtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigq
cnVsZSkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0Lgot
ICAgICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZh
Y2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZhbHNlKTsK
LSAgICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hl
KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgJiYg
cmVzb2x2ZXIpCi0gICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShkb3duY2Fz
dDxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxl
UnVsZVN1cHBvcnRzPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxl
KS5jb25kaXRpb25Jc1N1cHBvcnRlZCgpKQotICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3du
Y2FzdDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNv
bHZlciwgbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZl
cikgeworICAgICAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3Rvcigp
LmFkZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUuZ2V0KCkp
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVj
bGFyYXRpb25zQ2FjaGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lZGlhUXVlcnlD
b2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgeworICAg
ICAgICAgICAgaWYgKHJlc29sdmVyKQorICAgICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlm
cmFtZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpKTsKKyAgICAgICAg
ICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVTdXBwb3J0cz4o
KnJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkuY29uZGl0aW9uSXNT
dXBwb3J0ZWQoKSkgeworICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3duY2FzdDxTdHlsZVJ1
bGVTdXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUNvbGxlY3RvciwgcmVz
b2x2ZXIsIG1vZGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICNpZiBFTkFC
TEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVW
aWV3cG9ydD4oKnJ1bGUpICYmIHJlc29sdmVyKQotICAgICAgICAgICAgcmVzb2x2ZXItPnZpZXdw
b3J0U3R5bGVSZXNvbHZlcigpLT5hZGRWaWV3cG9ydFJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlVmll
d3BvcnQ+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVZpZXdwb3J0Pigq
cnVsZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikKKyAgICAgICAgICAgICAgICByZXNv
bHZlci0+dmlld3BvcnRTdHlsZVJlc29sdmVyKCktPmFkZFZpZXdwb3J0UnVsZShkb3duY2FzdDxT
dHlsZVJ1bGVWaWV3cG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbWVkaWFRdWVyeUNv
bGxlY3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KICNlbmRpZgogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCit2b2lkIFJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVl
cnlFdmFsdWF0b3ImIGV2YWx1YXRvcikKIHsKLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMg
bWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzOworICAgIGF1dG8gbWVkaWFRdWVyeUNvbGxlY3RvciA9
IE1lZGlhUXVlcnlDb2xsZWN0b3IgeyBldmFsdWF0b3IgfTsKKyAgICBhZGRSdWxlc0Zyb21TaGVl
dChzaGVldCwgbWVkaWFRdWVyeUNvbGxlY3RvciwgbnVsbHB0ciwgQWRkUnVsZXNNb2RlOjpOb3Jt
YWwpOworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250
ZW50cyYgc2hlZXQsIE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnksIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIGV2YWx1YXRvciwgU3R5bGU6OlJlc29sdmVyJiByZXNvbHZlcikKK3sKKyAgICBh
dXRvIGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7CisgICAgICAgIGF1
dG8gbWVkaWFRdWVyeUNvbGxlY3RvciA9IE1lZGlhUXVlcnlDb2xsZWN0b3IgeyBldmFsdWF0b3Is
IHRydWUgfTsKKyAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRl
KHNoZWV0UXVlcnkpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlh
UXVlcnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNj
YW4pOworICAgICAgICByZXR1cm4gIW1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2
ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeTsKKyAgICB9KCk7CisKKyAgICBhdXRvIG1lZGlhUXVl
cnlDb2xsZWN0b3IgPSBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5Vc2VEeW5h
bWljTWVkaWFRdWVyeVJlc29sdXRpb24gfTsKKworICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9y
LnB1c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkgeworICAgICAgICBhZGRSdWxlc0Zyb21TaGVl
dChzaGVldCwgbWVkaWFRdWVyeUNvbGxlY3RvciwgJnJlc29sdmVyLCBBZGRSdWxlc01vZGU6Ok5v
cm1hbCk7CisgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHNoZWV0UXVlcnkpOworICAg
IH0KKworICAgIG1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJ5
Q29sbGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzOworICAgIG1fZHluYW1p
Y01lZGlhUXVlcnlSdWxlcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShtZWRpYVF1ZXJ5Q29sbGVjdG9y
LmR5bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKIAorICAgIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVy
eVJ1bGVzKGV2YWx1YXRvcik7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgTWVkaWFRdWVyeUNvbGxlY3RvciYgbWVkaWFRdWVy
eUNvbGxlY3RvciwgUmVzb2x2ZXIqIHJlc29sdmVyLCBBZGRSdWxlc01vZGUgbW9kZSkKK3sKICAg
ICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7CiAgICAgICAgIGlmICgh
cnVsZS0+c3R5bGVTaGVldCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChy
dWxlLT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZSgqcnVs
ZS0+bWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0
KCksIG1lZGlhUXVlcnlFdmFsdWF0b3IsIHJlc29sdmVyKTsKLSAgICB9CiAKLSAgICBhZGRDaGls
ZFJ1bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgcmVzb2x2ZXIs
IG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk7CisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVj
dG9yLnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAg
IGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCksIG1lZGlhUXVlcnlDb2xsZWN0
b3IsIHJlc29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9w
KHJ1bGUtPm1lZGlhUXVlcmllcygpKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmIChyZXNv
bHZlcikKLSAgICAgICAgcmVzb2x2ZXItPmFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyhtZWRp
YVF1ZXJ5RHluYW1pY1Jlc3VsdHMpOworICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxl
cygpLCBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCByZXNvbHZlciwgbW9kZSk7CiAKLSAgICBpZiAobV9h
dXRvU2hyaW5rVG9GaXRFbmFibGVkKQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQg
JiYgbW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsK
IH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlKQordm9pZCBS
dWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlJiBydWxlLCBNZWRpYVF1ZXJ5Q29sbGVjdG9y
JiBtZWRpYVF1ZXJ5Q29sbGVjdG9yKQogewogICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4
ID0gMDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAh
PSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZO
ZXh0U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBz
ZWxlY3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrKTsKKyAgICBmb3IgKHNpemVfdCBzZWxl
Y3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9
IHJ1bGUuc2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5k
ZXgpKQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIHNlbGVjdG9yTGlzdElu
ZGV4KyssICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb24+Cit2b2lkIFJ1bGVTZXQ6OnRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYgZnVuY3Rp
b24pCit7CisgICAgYXV0byB0cmF2ZXJzZVZlY3RvciA9IFsmXShhdXRvJiB2ZWN0b3IpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBydWxlRGF0YSA6IHZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0aW9u
KHJ1bGVEYXRhKTsKKyAgICB9OworCisgICAgYXV0byB0cmF2ZXJzZU1hcCA9IFsmXShhdXRvJiBt
YXApIHsKKyAgICAgICAgZm9yIChhdXRvJiBydWxlRGF0YXMgOiBtYXAudmFsdWVzKCkpCisgICAg
ICAgICAgICB0cmF2ZXJzZVZlY3RvcigqcnVsZURhdGFzKTsKKyAgICB9OworCisgICAgdHJhdmVy
c2VNYXAobV9pZFJ1bGVzKTsKKyAgICB0cmF2ZXJzZU1hcChtX2NsYXNzUnVsZXMpOworICAgIHRy
YXZlcnNlTWFwKG1fdGFnTG9jYWxOYW1lUnVsZXMpOworICAgIHRyYXZlcnNlTWFwKG1fdGFnTG93
ZXJjYXNlTG9jYWxOYW1lUnVsZXMpOworICAgIHRyYXZlcnNlTWFwKG1fc2hhZG93UHNldWRvRWxl
bWVudFJ1bGVzKTsKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzKTsK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdHJhdmVyc2VWZWN0b3IobV9jdWVQc2V1ZG9S
dWxlcyk7CisjZW5kaWYKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2hvc3RQc2V1ZG9DbGFzc1J1bGVz
KTsKKyAgICB0cmF2ZXJzZVZlY3RvcihtX3Nsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMpOworICAg
IHRyYXZlcnNlVmVjdG9yKG1fcGFydFBzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAgdHJhdmVyc2VW
ZWN0b3IobV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMpOworICAgIHRyYXZlcnNlVmVjdG9yKG1fdW5p
dmVyc2FsUnVsZXMpOworfQorCitSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlIFJ1
bGVTZXQ6OmV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIGV2YWx1YXRvcikKK3sKKyAgICBib29sIGNoYW5nZXMgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIGR5bmFtaWNSdWxlcyA6IG1fZHluYW1pY01lZGlhUXVlcnlSdWxlcykgeworICAgICAg
ICBib29sIHJlc3VsdCA9IHRydWU7CisgICAgICAgIGZvciAoYXV0byYgc2V0IDogZHluYW1pY1J1
bGVzLm1lZGlhUXVlcnlTZXRzKSB7CisgICAgICAgICAgICBpZiAoIWV2YWx1YXRvci5ldmFsdWF0
ZShzZXQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
cmVzdWx0ICE9IGR5bmFtaWNSdWxlcy5yZXN1bHQpIHsKKyAgICAgICAgICAgIGR5bmFtaWNSdWxl
cy5yZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoZHluYW1pY1J1bGVzLnJlcXVpcmVz
RnVsbFJlc2V0KQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVU
eXBlOjpSZXNldDsKKworICAgICAgICAgICAgdHJhdmVyc2VSdWxlRGF0YXMoWyZdKFJ1bGVEYXRh
JiBydWxlRGF0YSkgeworICAgICAgICAgICAgICAgIGlmICghZHluYW1pY1J1bGVzLmFmZmVjdGVk
UnVsZVBvc2l0aW9ucy5jb250YWlucyhydWxlRGF0YS5wb3NpdGlvbigpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJ1bGVEYXRhLnNldEVuYWJsZWQocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNoYW5nZXMgPyBNZWRpYVF1ZXJ5U3R5bGVV
cGRhdGVUeXBlOjpSZXNvbHZlIDogTWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6Tm9uZTsKIH0K
IAogYm9vbCBSdWxlU2V0OjpoYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSBjb25zdApAQCAt
MzU1LDUgKzQ3MCw2NyBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKICAgICBtX2ZlYXR1
cmVzLnNocmlua1RvRml0KCk7CiB9CiAKK1J1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6On5N
ZWRpYVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0OworCitib29sIFJ1bGVTZXQ6Ok1lZGlhUXVl
cnlDb2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShNZWRpYVF1ZXJ5U2V0KiBzZXQpCit7CisgICAg
aWYgKCFzZXQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gT25seSBldmFsdWF0ZSBz
dGF0aWMgZXhwcmVzc2lvbnMgdGhhdCByZXF1aXJlIHN0eWxlIHJlYnVpbGQuCisgICAgTWVkaWFR
dWVyeUR5bmFtaWNSZXN1bHRzIGR5bmFtaWNSZXN1bHRzOworICAgIGF1dG8gbW9kZSA9IGNvbGxl
Y3REeW5hbWljID8gTWVkaWFRdWVyeUV2YWx1YXRvcjo6TW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWlj
IDogTWVkaWFRdWVyeUV2YWx1YXRvcjo6TW9kZTo6Tm9ybWFsOworCisgICAgYm9vbCByZXN1bHQg
PSBldmFsdWF0b3IuZXZhbHVhdGUoKnNldCwgJmR5bmFtaWNSZXN1bHRzLCBtb2RlKTsKKworICAg
IGlmICghZHluYW1pY1Jlc3VsdHMudmlld3BvcnQuaXNFbXB0eSgpKQorICAgICAgICBoYXNWaWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyA9IHRydWU7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkeW5hbWljUmVzdWx0cy5pc0VtcHR5KCkp
CisgICAgICAgIGR5bmFtaWNDb250ZXh0U3RhY2suYXBwZW5kKHsgKnNldCB9KTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChN
ZWRpYVF1ZXJ5U2V0KiBzZXQpCit7CisgICAgaWYgKCFzZXQgfHwgZHluYW1pY0NvbnRleHRTdGFj
ay5pc0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5zZXQuZ2V0
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0
KCkuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBEeW5hbWljTWVk
aWFRdWVyeVJ1bGVzIHJ1bGVzOworICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWlj
Q29udGV4dFN0YWNrKQorICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNv
bnRleHQuc2V0LmdldCgpKTsKKworICAgICAgICBpZiAoY29sbGVjdER5bmFtaWMpIHsKKyAgICAg
ICAgICAgIGF1dG8mIHRvQWRkID0gZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRS
dWxlUG9zaXRpb25zOworICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFk
ZCh0b0FkZC5iZWdpbigpLCB0b0FkZC5lbmQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgcnVsZXMucmVxdWlyZXNGdWxsUmVzZXQgPSB0cnVlOworCisgICAgICAgIGR5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZXMpKTsKKyAgICB9CisKKyAgICBkeW5hbWlj
Q29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5
Q29sbGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcigpCit7CisgICAgaWYgKGR5bmFtaWNDb250ZXh0
U3RhY2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZGlkTXV0YXRlUmVzb2x2ZXJX
aXRoaW5EeW5hbWljTWVkaWFRdWVyeSA9IHRydWU7Cit9CisKK3ZvaWQgUnVsZVNldDo6TWVkaWFR
dWVyeUNvbGxlY3Rvcjo6YWRkUnVsZVBvc2l0aW9uSWZOZWVkZWQoc2l6ZV90IGluZGV4KQorewor
ICAgIGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBl
bmQoaW5kZXgpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFN0eWxlCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKaW5kZXggOGNmZTVjYmI1ZmYuLjg0ZGRmYTZjMTdj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvUnVsZVNldC5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25j
ZQogCisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiUnVsZURhdGEuaCIKICNpbmNs
dWRlICJSdWxlRmVhdHVyZS5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ29tcGlsZXIuaCIKQEAgLTM1
LDcgKzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFz
cyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotc3RydWN0
IE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0czsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIApAQCAtNjIs
MTUgKzYyLDUwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVs
ZURhdGFWZWN0b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVl
X3B0cjxSdWxlRGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgdm9pZCBhZGRSdWxlc0Zy
b21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
U3R5bGU6OlJlc29sdmVyKiA9IG51bGxwdHIpOworICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVy
eVJ1bGVzIHsKKyAgICAgICAgVmVjdG9yPFJlZjxNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNl
dHM7CisgICAgICAgIEhhc2hTZXQ8c2l6ZV90LCBEZWZhdWx0SGFzaDxzaXplX3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHNpemVfdD4+IGFmZmVjdGVkUnVsZVBv
c2l0aW9uczsKKyAgICAgICAgYm9vbCByZXF1aXJlc0Z1bGxSZXNldCB7IGZhbHNlIH07CisgICAg
ICAgIGJvb2wgcmVzdWx0IHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgTWVkaWFRdWVy
eUNvbGxlY3RvciB7CisgICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CisKKyAgICAgICAg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOworICAgICAgICBjb25zdCBib29s
IGNvbGxlY3REeW5hbWljIHsgZmFsc2UgfTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxl
UnVsZSopOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3Rvcklu
ZGV4LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShT
dHlsZVJ1bGVQYWdlKik7CisgICAgICAgIHN0cnVjdCBEeW5hbWljQ29udGV4dCB7CisgICAgICAg
ICAgICBSZWY8TWVkaWFRdWVyeVNldD4gc2V0OworICAgICAgICAgICAgVmVjdG9yPHNpemVfdD4g
YWZmZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPER5
bmFtaWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsgfTsKKworICAgICAgICBWZWN0b3I8
RHluYW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07CisgICAg
ICAgIGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSB7IGZhbHNl
IH07CisgICAgICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgeyBmYWxz
ZSB9OworCisgICAgICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKE1lZGlhUXVlcnlTZXQqKTsKKyAg
ICAgICAgdm9pZCBwb3AoTWVkaWFRdWVyeVNldCopOworICAgICAgICB2b2lkIGRpZE11dGF0ZVJl
c29sdmVyKCk7CisgICAgICAgIHZvaWQgYWRkUnVsZVBvc2l0aW9uSWZOZWVkZWQoc2l6ZV90KTsK
KyAgICB9OworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMm
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVl
dChTdHlsZVNoZWV0Q29udGVudHMmLCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGU6OlJlc29sdmVyJik7CisKKyAgICB2b2lkIGFkZFN0
eWxlUnVsZShTdHlsZVJ1bGUmLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJik7CisgICAgdm9pZCBhZGRS
dWxlKFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9y
TGlzdEluZGV4LCBNZWRpYVF1ZXJ5Q29sbGVjdG9yKiA9IG51bGxwdHIpOworICAgIHZvaWQgYWRk
UGFnZVJ1bGUoU3R5bGVSdWxlUGFnZSYpOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0IEF0
b21TdHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAgIHZvaWQg
c2hyaW5rVG9GaXQoKTsKICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0
b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CiAKKyAgICBib29sIGhhc1ZpZXdwb3J0RGVw
ZW5kZW50TWVkaWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllczsgfQorCisgICAgZW51bSBjbGFzcyBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVU
eXBlIHsgTm9uZSwgUmVzb2x2ZSwgUmVzZXQgfTsKKyAgICBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVU
eXBlIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImKTsKKwogICAgIGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmVhdHVyZXM7IH0KIAogICAgIGNvbnN0IFJ1bGVEYXRhVmVjdG9yKiBpZFJ1bGVzKGNv
bnN0IEF0b21TdHJpbmcmIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9
CkBAIC05NSw3ICsxMzAsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSG9zdFBzZXVkb0NsYXNz
UnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSG9zdFBzZXVk
b0NsYXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQg
YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYsIGNvbnN0
IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGU6OlJlc29sdmVyKiwgTWVkaWFRdWVy
eUR5bmFtaWNSZXN1bHRzJik7CisgICAgZW51bSBjbGFzcyBBZGRSdWxlc01vZGUgeyBOb3JtYWws
IFJlc29sdmVyTXV0YXRpb25TY2FuIH07CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHls
ZVNoZWV0Q29udGVudHMmLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiwgU3R5bGU6OlJlc29sdmVyKiwg
QWRkUnVsZXNNb2RlKTsKKyAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGVCYXNlPj4mLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiwgU3R5bGU6OlJlc29sdmVy
KiwgQWRkUnVsZXNNb2RlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lk
IHRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYpOwogCiAgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1
bGVzOwogICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsKQEAgLTExNiw2ICsxNTUsOCBAQCBw
cml2YXRlOgogICAgIGJvb2wgbV9oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFk
b3dUcmVlIHsgZmFsc2UgfTsKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCB7IHRy
dWUgfTsKICAgICBSdWxlRmVhdHVyZVNldCBtX2ZlYXR1cmVzOworICAgIGJvb2wgbV9oYXNWaWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcyB7IGZhbHNlIH07CisgICAgVmVjdG9yPER5bmFtaWNN
ZWRpYVF1ZXJ5UnVsZXM+IG1fZHluYW1pY01lZGlhUXVlcnlSdWxlczsKIH07CiAKIGlubGluZSBj
b25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlY3RvciogUnVsZVNldDo6dGFnUnVsZXMoY29uc3QgQXRv
bVN0cmluZyYga2V5LCBib29sIGlzSFRNTE5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDg4ZDRkMWQzZjU0Li4zNTk0NGQxODY4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTYwMiwzOSArNjAyLDE0IEBAIHZvaWQg
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRj
aFJlc3VsdCYgbWF0Y2hSZXN1CiAgICAgICAgIG1fbWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmFk
ZChzdHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCi12b2lk
IFJlc29sdmVyOjphZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMoY29uc3QgTWVkaWFRdWVyeUR5
bmFtaWNSZXN1bHRzJiByZXN1bHRzKQorYm9vbCBSZXNvbHZlcjo6aGFzVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJpZXMoKSBjb25zdAogewotICAgIG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRz
LmFwcGVuZChyZXN1bHRzKTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5oYXNWaWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcmllcygpOwogfQogCi1ib29sIFJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNB
ZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAorUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxl
VXBkYXRlVHlwZSBSZXNvbHZlcjo6ZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyaWVzKCkKIHsKLSAg
ICBMT0coTWVkaWFRdWVyaWVzLCAiU3R5bGU6OlJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZl
Y3RlZEJ5Vmlld3BvcnRDaGFuZ2UgZXZhbHVhdGluZyBxdWVyaWVzIik7Ci0gICAgZm9yIChhdXRv
JiByZXN1bHQgOiBtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy52aWV3cG9ydCkgewotICAgICAg
ICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAh
PSByZXN1bHQucmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRC
eUFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgpIGNvbnN0Ci17Ci0gICAgTE9HKE1lZGlhUXVl
cmllcywgIlN0eWxlOjpSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2li
aWxpdHlTZXR0aW5nc0NoYW5nZSBldmFsdWF0aW5nIHF1ZXJpZXMiKTsKLSAgICBmb3IgKGF1dG8m
IHJlc3VsdCA6IG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFjY2Vzc2liaWxpdHlTZXR0aW5n
cykgewotICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5l
eHByZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVy
aWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKSBjb25zdAotewotICAgIExPRyhNZWRpYVF1
ZXJpZXMsICJTdHlsZTo6UmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJh
bmNlQ2hhbmdlIGV2YWx1YXRpbmcgcXVlcmllcyIpOwotICAgIGZvciAoYXV0byYgcmVzdWx0IDog
bV9tZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMuYXBwZWFyYW5jZSkgewotICAgICAgICBpZiAobV9t
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQu
cmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyht
X21lZGlhUXVlcnlFdmFsdWF0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBTdHlsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlci5oCmluZGV4IGU3ZTNmNzcwMWU1Li4yZWQ1ZmU4NWM5MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuaApAQCAtMTMxLDE1ICsxMzEsOCBAQCBw
dWJsaWM6CiAgICAgVmlld3BvcnRTdHlsZVJlc29sdmVyKiB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIo
KSB7IHJldHVybiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlci5nZXQoKTsgfQogI2VuZGlmCiAKLSAg
ICB2b2lkIGFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyhjb25zdCBNZWRpYVF1ZXJ5RHluYW1p
Y1Jlc3VsdHMmKTsKLSAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkg
Y29uc3QgeyByZXR1cm4gIW1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLnZpZXdwb3J0LmlzRW1w
dHkoKTsgfQotICAgIGJvb2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdl
KCkgY29uc3Q7Ci0KLSAgICBib29sIGhhc0FjY2Vzc2liaWxpdHlTZXR0aW5nc0RlcGVuZGVudE1l
ZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuICFtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy5h
Y2Nlc3NpYmlsaXR5U2V0dGluZ3MuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNNZWRpYVF1ZXJp
ZXNBZmZlY3RlZEJ5QWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlKCkgY29uc3Q7Ci0KLSAgICBi
b29sIGhhc0FwcGVhcmFuY2VEZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiAh
bV9tZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMuYXBwZWFyYW5jZS5pc0VtcHR5KCk7IH0KLSAgICBi
b29sIGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJhbmNlQ2hhbmdlKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0OworICAgIFJ1
bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGUgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVy
aWVzKCk7CiAKICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUmVmPFN0eWxlUnVsZUtleWZyYW1l
cz4mJik7CiAKQEAgLTIwMCw4ICsxOTMsNiBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyU3R5bGUq
IG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKIAotICAgIE1lZGlh
UXVlcnlEeW5hbWljUmVzdWx0cyBtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0czsKLQogI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNv
bHZlcj4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVTY29wZS5jcHAKaW5kZXggM2M5ZmQ4OGEyY2IuLmE5MzQ4MTE4MDZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlLmNwcApAQCAtNjIyLDIxICs2MjIsMjEgQEAgdm9pZCBTY29wZTo6c2No
ZWR1bGVVcGRhdGUoVXBkYXRlVHlwZSB1cGRhdGUpCiB2b2lkIFNjb3BlOjpldmFsdWF0ZU1lZGlh
UXVlcmllc0ZvclZpZXdwb3J0Q2hhbmdlKCkKIHsKICAgICBldmFsdWF0ZU1lZGlhUXVlcmllcyhb
XSAoUmVzb2x2ZXImIHJlc29sdmVyKSB7Ci0gICAgICAgIHJldHVybiByZXNvbHZlci5oYXNNZWRp
YVF1ZXJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHJlc29s
dmVyLmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogICAgIH0pOwogfQogCiB2b2lkIFNj
b3BlOjpldmFsdWF0ZU1lZGlhUXVlcmllc0ZvckFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgp
CiB7CiAgICAgZXZhbHVhdGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewot
ICAgICAgICByZXR1cm4gcmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2li
aWxpdHlTZXR0aW5nc0NoYW5nZSgpOworICAgICAgICByZXR1cm4gcmVzb2x2ZXIuZXZhbHVhdGVE
eW5hbWljTWVkaWFRdWVyaWVzKCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU2NvcGU6OmV2YWx1YXRl
TWVkaWFRdWVyaWVzRm9yQXBwZWFyYW5jZUNoYW5nZSgpCiB7CiAgICAgZXZhbHVhdGVNZWRpYVF1
ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAgICAgICByZXR1cm4gcmVzb2x2ZXIu
aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKTsKKyAgICAgICAgcmV0
dXJuIHJlc29sdmVyLmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogICAgIH0pOwogfQog
CkBAIC02NTAsOSArNjUwLDIyIEBAIHZvaWQgU2NvcGU6OmV2YWx1YXRlTWVkaWFRdWVyaWVzKFRl
c3RGdW5jdGlvbiYmIHRlc3RGdW5jdGlvbikKICAgICBhdXRvKiByZXNvbHZlciA9IHJlc29sdmVy
SWZFeGlzdHMoKTsKICAgICBpZiAoIXJlc29sdmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF0ZXN0RnVuY3Rpb24oKnJlc29sdmVyKSkKKworICAgIGF1dG8gdXBkYXRlVHlwZSA9IHRlc3RG
dW5jdGlvbigqcmVzb2x2ZXIpOworCisgICAgc3dpdGNoICh1cGRhdGVUeXBlKSB7CisgICAgY2Fz
ZSBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlOjpOb25lOgogICAgICAgICByZXR1
cm47Ci0gICAgc2NoZWR1bGVVcGRhdGUoVXBkYXRlVHlwZTo6Q29udGVudHNPckludGVycHJldGF0
aW9uKTsKKyAgICBjYXNlIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGU6OlJlc29s
dmU6CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIGFuIGludmFsaWRhdGlvbiBydWxl
c2V0IGZvciBydWxlcyBpbnNpZGUgZHluYW1pYyBtZWRpYSBxdWVyaWVzLgorICAgICAgICBpZiAo
YXV0byogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAg
ICAgICAgICAgIGRvY3VtZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5
cGU6OlJlc2V0OgorICAgICAgICBzY2hlZHVsZVVwZGF0ZShVcGRhdGVUeXBlOjpDb250ZW50c09y
SW50ZXJwcmV0YXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb246Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKG1fZG9jdW1lbnQpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAppbmRleCA4ZTA0
ZDcwZjY4Mi4uMDExYzc5NjFhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlU2NvcGVSdWxlU2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29w
ZVJ1bGVTZXRzLmNwcApAQCAtNzAsMTggKzcwLDExIEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6dXBk
YXRlVXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQoKSBjb25zdAogICAgICAgICByZXR1
cm47CiAgICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5UnVsZUNvdW50T25VcGRhdGUgPSBydWxlQ291
bnQ7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYm9vbCBoYWRWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllcyA9IG1fc3R5bGVSZXNvbHZlci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcmllcygpOwotI2VuZGlmCi0KICAgICAvLyBNZWRpYSBxdWVyaWVzIG9uIHVzZXIgYWdlbnQg
c2hlZXQgbmVlZCB0byBldmFsdWF0ZWQgaW4gZG9jdW1lbnQgY29udGV4dC4gVGhleSBiZWhhdmUg
bGlrZSBhdXRob3Igc2hlZXRzIGluIHRoaXMgcmVzcGVjdC4KICAgICBhdXRvJiBtZWRpYVF1ZXJ5
RXZhbHVhdG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKICAgICBt
X3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSA9IG1ha2VVbmlxdWU8UnVsZVNldD4oKTsKICAgICAK
LSAgICBtX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJB
Z2VudFN0eWxlOjptZWRpYVF1ZXJ5U3R5bGVTaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1f
c3R5bGVSZXNvbHZlcik7Ci0KLSAgICAvLyBWaWV3cG9ydCBkZXBlbmRlbnQgcXVlcmllcyBhcmUg
Y3VycmVudGx5IHRvbyBpbmVmZmljaWVudCB0byBhbGxvdyBvbiBVQSBzaGVldC4KLSAgICBBU1NF
UlQoIW1fc3R5bGVSZXNvbHZlci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIHx8
IGhhZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKTsKKyAgICBtX3VzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1ZXJ5
U3R5bGVTaGVldCwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVy
KTsKIH0KIAogUnVsZVNldCogU2NvcGVSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKQEAgLTk3
LDcgKzkwLDcgQEAgdm9pZCBTY29wZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKCkKICAg
ICBhdXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlF
dmFsdWF0b3IoKTsKICAgICBhdXRvIHRlbXBVc2VyU3R5bGUgPSBtYWtlVW5pcXVlPFJ1bGVTZXQ+
KCk7CiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHls
ZVNoZWV0cy5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVz
RnJvbVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGlhUXVlcnlFdmFsdWF0b3Is
ICZtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChwYWdlVXNlclNoZWV0LT5jb250ZW50cygpLCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVh
dG9yLCBtX3N0eWxlUmVzb2x2ZXIpOwogICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVl
dHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBV
c2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2Vy
U3R5bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMo
KSwgKnRlbXBVc2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGlmICh0ZW1wVXNl
clN0eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6
ZSgpID4gMCkKQEAgLTEwOCw3ICsxMDEsNyBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxlY3RS
dWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZQogewog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytpKSB7CiAg
ICAgICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLmlzVXNlclN0eWxlU2hlZXQo
KSk7Ci0gICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldCh1c2VyU2hlZXRzW2ldLT5j
b250ZW50cygpLCBtZWRpdW0sICZtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICB1c2VyU3R5bGUu
YWRkUnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbnVsbHB0ciwgbWVk
aXVtLCBtX3N0eWxlUmVzb2x2ZXIpOwogICAgIH0KIH0KIApAQCAtMTE5LDcgKzExMiw3IEBAIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFJ1
bGVGZWF0dXJlPiYgcnVsZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8gcnVs
ZVNldCA9IG1ha2VVbmlxdWU8UnVsZVNldD4oKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxl
c1tpXS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5zZWxlY3Rvckxpc3RJbmRleCk7CisgICAgICAg
IHJ1bGVTZXQtPmFkZFJ1bGUoKnJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgs
IHJ1bGVzW2ldLnNlbGVjdG9yTGlzdEluZGV4KTsKICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgp
OwogICAgIHJldHVybiBydWxlU2V0OwogfQpAQCAtMTM2LDIyICsxMjksNDkgQEAgdm9pZCBTY29w
ZVJ1bGVTZXRzOjpyZXNldFVzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSgpCiAgICAgbV91c2VyQWdl
bnRNZWRpYVF1ZXJ5U3R5bGUgPSBudWxscHRyOwogfQogCi12b2lkIFNjb3BlUnVsZVNldHM6OmFw
cGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+
JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciogbWVkaXVtLCBJbnNwZWN0b3JDU1NP
TVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKQorYm9vbCBTY29wZVJ1bGVTZXRzOjpo
YXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0Cit7CisgICAgaWYgKG1fYXV0
aG9yU3R5bGUtPmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGlmIChtX3VzZXJTdHlsZSAmJiBtX3VzZXJTdHlsZS0+aGFzVmlld3Bv
cnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlICYmIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxl
LT5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBk
YXRlVHlwZSBTY29wZVJ1bGVTZXRzOjpldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhjb25z
dCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IpCiB7Ci0gICAgLy8gVGhpcyBoYW5kbGVz
IHNoZWV0cyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4g
b3RoZXIgY2FzZXMgdGhlIHN0eWxlIHJlc29sdmVyCi0gICAgLy8gbmVlZHMgdG8gYmUgcmVjb25z
dHJ1Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMg
d291bGQgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyBt
ZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHM7CisgICAgYXV0byB1cGRhdGVUeXBlID0gUnVsZVNldDo6
TWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6Tm9uZTsKKworICAgIGF1dG8gZXZhbHVhdGUgPSBb
Jl0oYXV0byYgcnVsZVNldCkgeworICAgICAgICBpZiAoIXJ1bGVTZXQpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gbmV3VXBkYXRlVHlwZSA9IHJ1bGVTZXQtPmV2YWx1
dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGV2YWx1YXRvcik7CisgICAgICAgIGlmIChuZXdVcGRh
dGVUeXBlID4gdXBkYXRlVHlwZSkKKyAgICAgICAgICAgIHVwZGF0ZVR5cGUgPSBuZXdVcGRhdGVU
eXBlOworICAgICAgICByZXR1cm4gdXBkYXRlVHlwZSA9PSBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5
bGVVcGRhdGVUeXBlOjpSZXNldDsKKyAgICB9OworCisgICAgaWYgKGV2YWx1YXRlKG1fYXV0aG9y
U3R5bGUpKQorICAgICAgICByZXR1cm4gdXBkYXRlVHlwZTsKKworICAgIGlmIChldmFsdWF0ZSht
X3VzZXJTdHlsZSkpCisgICAgICAgIHJldHVybiB1cGRhdGVUeXBlOworCisgICAgZXZhbHVhdGUo
bV91c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUpOworICAgIHJldHVybiB1cGRhdGVUeXBlOworfQog
Cit2b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRv
ciogbWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJz
KQorewogICAgIGZvciAoYXV0byYgY3NzU2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBB
U1NFUlQoIWNzc1NoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRp
YVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFsdWF0ZSgqY3NzU2hlZXQtPm1lZGlhUXVlcmllcygp
LCAmbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldC0+Y29udGVudHMo
KSwgKm1lZGl1bSwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVy
aWVzKCksICptZWRpdW0sIG1fc3R5bGVSZXNvbHZlcik7CiAgICAgICAgIGluc3BlY3RvckNTU09N
V3JhcHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQuZ2V0KCkpOwog
ICAgIH0KIAotICAgIG1fc3R5bGVSZXNvbHZlci5hZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMo
bWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKTsKLQogICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1Rv
Rml0KCk7CiAgICAgY29sbGVjdEZlYXR1cmVzKCk7CiB9CkBAIC0yMDAsNyArMjIwLDcgQEAgc3Rh
dGljIFZlY3RvcjxJbnZhbGlkYXRpb25SdWxlU2V0PiogZW5zdXJlSW52YWxpZGF0aW9uUnVsZVNl
dHMoY29uc3QgQXRvbVN0cmluZyYKICAgICAgICAgICAgIGF1dG8mIHJ1bGVTZXQgPSBtYXRjaEVs
ZW1lbnRBcnJheVthcnJheUluZGV4XTsKICAgICAgICAgICAgIGlmICghcnVsZVNldCkKICAgICAg
ICAgICAgICAgICBydWxlU2V0ID0gbWFrZVVuaXF1ZTxSdWxlU2V0PigpOwotICAgICAgICAgICAg
cnVsZVNldC0+YWRkUnVsZShmZWF0dXJlLnJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVh
dHVyZS5zZWxlY3Rvckxpc3RJbmRleCk7CisgICAgICAgICAgICBydWxlU2V0LT5hZGRSdWxlKCpm
ZWF0dXJlLnJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVhdHVyZS5zZWxlY3Rvckxpc3RJ
bmRleCk7CiAgICAgICAgICAgICBpZiAoZmVhdHVyZS5pbnZhbGlkYXRpb25TZWxlY3RvcikKICAg
ICAgICAgICAgICAgICBpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5W2FycmF5SW5kZXhdLmFwcGVu
ZChmZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaAppbmRleCA0YjdhYTdmMjE3My4uNDRiNWM1OTYy
NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oCkBAIC03OCw2
ICs3OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5
bGUoKTsKIAorICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25z
dDsKKyAgICBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlIGV2YWx1dGVEeW5hbWlj
TWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImKTsKKwogICAgIFJ1bGVG
ZWF0dXJlU2V0JiBtdXRhYmxlRmVhdHVyZXMoKTsKIAogICAgIGJvb2wmIGlzSW52YWxpZGF0aW5n
U3R5bGVXaXRoUnVsZVNldHMoKSB7IHJldHVybiBtX2lzSW52YWxpZGF0aW5nU3R5bGVXaXRoUnVs
ZVNldHM7IH0K
</data>
<flag name="review"
          id="401543"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385864</attachid>
            <date>2019-12-17 01:00:02 -0800</date>
            <delta_ts>2019-12-17 01:52:02 -0800</delta_ts>
            <desc>patch</desc>
            <filename>media-query-dynamic-resolve-2.patch</filename>
            <type>text/plain</type>
            <size>42186</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjNjg4NDBmM2NmMS4uMjE2ZDI5NzI5ZWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAor
MjAxOS0xMi0xNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVzb2x2ZSBkeW5hbWljIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCByZWNvbnN0cnVjdGluZyBSdWxl
U2V0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1
MjY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWmFsYW4gQnVqdGFzLgorCisgICAgICAgIEFkZCBh
IHRlc3QgdmVyaWZ5aW5nIHRoYXQgQGZvbnQtZmFjZSBpbnNpZGUgQG1lZGlhIHdvcmtzIGluIGR5
bmFtaWMgc2NlbmFyaW9zLgorCisgICAgICAgICogZmFzdC9tZWRpYS9tZWRpYS1xdWVyeS1keW5h
bWljLXdpdGgtZm9udC1mYWNlLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
bWVkaWEvbWVkaWEtcXVlcnktZHluYW1pYy13aXRoLWZvbnQtZmFjZS5odG1sOiBBZGRlZC4KKwog
MjAxOS0xMi0xMCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIENy
ZWF0ZSBhIFRlc3RFeHBlY3RhdGlvbnMgZmlsZSBmb3IgdGhlIEdQVSBwcm9jZXNzIHJlbGF0ZWQg
d29yawpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYS9tZWRpYS1xdWVyeS1keW5h
bWljLXdpdGgtZm9udC1mYWNlLWV4cGVjdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlh
L21lZGlhLXF1ZXJ5LWR5bmFtaWMtd2l0aC1mb250LWZhY2UtZXhwZWN0ZWQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2Q5YWMzZWQyZjIKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L21lZGlhL21lZGlhLXF1ZXJ5LWR5bmFtaWMtd2l0aC1m
b250LWZhY2UtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDExIEBACis8aWZyYW1lIHdpZHRoPTEw
MCBzcmNkb2M9IgorPHN0eWxlPgorQGZvbnQtZmFjZSB7CisgICAgZm9udC1mYW1pbHk6IGZhbWls
eTE7CisgICAgc3JjOiBsb2NhbChjb3VyaWVyKTsKK30KK2JvZHkgeyBiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbiB9Citib2R5IHsgZm9udC1mYW1pbHk6ZmFtaWx5MSB9Cis8L3N0eWxlPgorVGVzdCBm
cmFtZQorIj48L2lmcmFtZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvbWVkaWEvbWVk
aWEtcXVlcnktZHluYW1pYy13aXRoLWZvbnQtZmFjZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9t
ZWRpYS9tZWRpYS1xdWVyeS1keW5hbWljLXdpdGgtZm9udC1mYWNlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjAwODNhYTY4NzhlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9tZWRpYS9tZWRpYS1xdWVyeS1keW5hbWljLXdpdGgtZm9udC1m
YWNlLmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPGlmcmFtZSBpZD1mcmFtZSBzcmNkb2M9IgorPHN0
eWxlPgorQG1lZGlhIChtaW4td2lkdGg6MjAwcHgpIHsKKyAgICBAZm9udC1mYWNlIHsKKyAgICAg
ICAgZm9udC1mYW1pbHk6IGZhbWlseTE7CisgICAgICAgIHNyYzogbG9jYWwodGltZXMpOworICAg
IH0KKyAgICBib2R5IHsgYmFja2dyb3VuZC1jb2xvcjogcmVkIH0KK30KKworQG1lZGlhIChtYXgt
d2lkdGg6MjAwcHgpIHsKKyAgICBAZm9udC1mYWNlIHsKKyAgICAgICAgZm9udC1mYW1pbHk6IGZh
bWlseTE7CisgICAgICAgIHNyYzogbG9jYWwoY291cmllcik7CisgICAgfQorICAgIGJvZHkgeyBi
YWNrZ3JvdW5kLWNvbG9yOiBncmVlbiB9Cit9Citib2R5IHsgZm9udC1mYW1pbHk6ZmFtaWx5MSB9
Cis8L3N0eWxlPgorVGVzdCBmcmFtZQorIj48L2lmcmFtZT4KKzxzY3JpcHQ+CitmcmFtZS5vbmxv
YWQgPSAoKSA9PiB7CisgICAgZnJhbWUuY29udGVudERvY3VtZW50Lm9mZnNldFdpZHRoOworICAg
IGZyYW1lLndpZHRoID0gMTAwOworfQorPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmExNmI0NDBh
ZDQuLjg3YTJkNGY2NGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA0IEBACisyMDE5LTEyLTE2
ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZXNvbHZlIGR5
bmFtaWMgbWVkaWEgcXVlcmllcyB3aXRob3V0IHJlY29uc3RydWN0aW5nIFJ1bGVTZXRzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDUyNjQKKworICAg
ICAgICBSZXZpZXdlZCBieSBaYWxhbiBCdWp0YXMuCisKKyAgICAgICAgV2UgY3VycmVudGx5IGRv
IGEgZnVsbCBzdHlsZSByZXNvbHZlciByZXNldCB3aGVuZXZlciBhIG1lZGlhIHF1ZXJ5IHJlc3Vs
dCBjaGFuZ2VzLiBUaGlzIGlzIHZlcnkgaW5lZmZpY2llbnQKKyAgICAgICAgYXMgd2UgbmVlZCB0
byByZWNvbnN0dWN0IGFsbCBSdWxlU2V0cyBhbmQgb3B0aW1pemF0aW9uIHN0cnVjdHVyZXMuIFdl
IGFsc28gbG9zZSByZWxhdGVkIGNhY2hlcyBhbmQgYXJlIGZvcmNlZAorICAgICAgICB0byByZS1y
ZXNvbHZlIGZ1bGwgZG9jdW1lbnQgc3R5bGUuIFRoaXMgbWF5IGhhcHBlbiBmcmVxdWVudGx5LCBm
b3IgZXhhbXBsZSB3aGVuIHJlc2l6aW5nIHdpbmRvdyBvbiBhIHJlc3BvbnNpdmUKKyAgICAgICAg
d2ViIHNpdGUuCisKKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoIHdlIGNvbnN0cnVjdCBSdWxlRGF0
YXMgYWxzbyBmb3Igbm9uLW1hdGNoaW5nIGR5bmFtaWMgbWVkaWEgcXVlcmllcyBhbmQgc2ltcGx5
IG1hcmsgdGhlbSBkaXNhYmxlZC4KKyAgICAgICAgV2UgY3JlYXRlIGEgZGF0YSBzdHJ1Y3R1cmUg
dGhhdCBhbGxvd3MgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGVtIGVmZmljaWVudGx5IGFzIGEg
cmVzcG9uc2UgdG8gZW52aXJvbm1lbnQgY2hhbmdlcworICAgICAgICAobGlrZSB2aWV3IHJlc2l6
ZSkuIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIHRocm93aW5nIGF3YXkgYW55dGhpbmcgZHVyaW5n
IGNvbW1vbiBzY2VuYXJpb3MuCisKKyAgICAgICAgVGVzdDogZmFzdC9tZWRpYS9tZWRpYS1xdWVy
eS1keW5hbWljLXdpdGgtZm9udC1mYWNlLmh0bWwKKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5
RXZhbHVhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2
YWx1YXRlIGNvbnN0KToKKworICAgICAgICBBZGQgYSBtb2RlIHdoZXJlIGR5bmFtaWMgbWVkaWEg
cXVlcmllcyBhbGwgZXZhbHVhdGUgdG8gdHJ1ZSBhbmQgb25seSBzdGF0aWMgcHJvcGVydGllcyBj
YW4gY2F1c2UgdGhlIHF1ZXJ5IHRvIGZhaWwuCisKKyAgICAgICAgKiBjc3MvTWVkaWFRdWVyeUV2
YWx1YXRvci5oOgorICAgICAgICAqIHN0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNo
aW5nUnVsZXNGb3JMaXN0KToKKworICAgICAgICBTa2lwIGRpc2FibGVkIHJ1bGVzIGR1cmluZyBy
dWxlIGNvbGxlY3Rpb24uCisKKyAgICAgICAgKiBzdHlsZS9SdWxlRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKiBzdHlsZS9S
dWxlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVEYXRhOjppc0VuYWJsZWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVEYXRhOjpzZXRFbmFibGVkKToK
KworICAgICAgICBBZGQgYSBiaXQuCisKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRSdWxlKToKKworICAgICAgICBDb2xs
ZWN0IHBvc2l0aW9ucyBvZiBydWxlcyBhZmZlY3RlZCBieSBkeW5hbWljIG1lZGlhIHF1ZXJpZXMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjphZGRQYWdlUnVsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkQ2hpbGRSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorCisgICAgICAgIEZp
cnN0IGNoZWNrIGZvciBhIHNwZWNpYWwgY2FzZSB3aGVyZSB3ZSBoYXZlIHN0eWxlIHJlc29sdmVy
IG11dGF0aW5nIHJ1bGVzIChsaWtlIEBmb250LWZhY2UpIGluc2lkZSBhIG1lZGlhIHF1ZXJ5Lgor
ICAgICAgICBJbiB0aGlzIGNhc2Ugd2UgZmFsbCBiYWNrIHRvIHN0YXRpYyByZXNvbHV0aW9uLgor
CisgICAgICAgIFRoZW4gY29sbGVjdCB0aGUgcnVsZXMuIFN0YXRpYyBtZWRpYSBxdWVyaWVzIChw
cmludCBldGMpIGFyZSBldmFsdWF0ZWQgcmlnaHQgYXdheSwgZHluYW1pYyBvbmVzIGFyZSBjb2xs
ZWN0ZWQgYnkgTWVkaWFRdWVyeUNvbGxlY3Rvci4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGU6
OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNl
dDo6dHJhdmVyc2VSdWxlRGF0YXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6
OmV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKToKKworICAgICAgICBFdmFsdWF0ZSBtZWRp
YSBxdWVyaWVzIGZvciBjaGFuZ2VzIGFuZCBmbGlwIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBy
dWxlcyBpZiBuZWVkZWQuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSdWxlU2V0OjpNZWRp
YVF1ZXJ5Q29sbGVjdG9yOjpwdXNoQW5kRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZTo6UnVsZVNldDo6TWVkaWFRdWVyeUNvbGxlY3Rvcjo6ZGlkTXV0YXRlUmVzb2x2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6
OmFkZFJ1bGVQb3NpdGlvbklmTmVlZGVkKToKKyAgICAgICAgKiBzdHlsZS9SdWxlU2V0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UnVsZVNldDo6aGFzVmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJpZXMgY29uc3QpOgorICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcmllcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6OmV2YWx1
YXRlRHluYW1pY01lZGlhUXVlcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2
ZXI6OmFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENo
YW5nZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UmVzb2x2ZXI6
Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBY2Nlc3NpYmlsaXR5U2V0dGluZ3NDaGFuZ2UgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNNZWRp
YVF1ZXJpZXNBZmZlY3RlZEJ5QXBwZWFyYW5jZUNoYW5nZSBjb25zdCk6IERlbGV0ZWQuCisKKyAg
ICAgICAgUHJvZmlsaW5nIGRvZXNuJ3Qgc2hvdyBhbnkgbmVlZCB0byBoYW5kbGUgdGhlIGNhc2Vz
IHNlcGFyYXRlbHkuIFJlcGxhY2Ugd2l0aCBzaW5nbGUgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVy
aWVzIHBhdGguCisgICAgICAgIFdlIGNhbiBicmluZyB0eXBlIHNwZWNpZmljIHBhdGhzIGJhY2sg
ZWFzaWx5IGlmIG5lZWRlZC4KKworICAgICAgICAqIHN0eWxlL1N0eWxlUmVzb2x2ZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZXNvbHZlcjo6aGFzVmlld3BvcnREZXBlbmRlbnRNZWRp
YVF1ZXJpZXMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29s
dmVyOjpoYXNBY2Nlc3NpYmlsaXR5U2V0dGluZ3NEZXBlbmRlbnRNZWRpYVF1ZXJpZXMgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlJlc29sdmVyOjpoYXNBcHBlYXJh
bmNlRGVwZW5kZW50TWVkaWFRdWVyaWVzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBzdHls
ZS9TdHlsZVNjb3BlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZXZhbHVh
dGVNZWRpYVF1ZXJpZXNGb3JWaWV3cG9ydENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6U2NvcGU6OmV2YWx1YXRlTWVkaWFRdWVyaWVzRm9yQWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hh
bmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZTo6ZXZhbHVhdGVNZWRpYVF1ZXJp
ZXNGb3JBcHBlYXJhbmNlQ2hhbmdlKToKKworICAgICAgICBDYWxsIGludG8gZ2VuZXJhbCBldmFs
dWF0ZUR5bmFtaWNNZWRpYVF1ZXJpZXMuCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29w
ZTo6ZXZhbHVhdGVNZWRpYVF1ZXJpZXMpOgorCisgICAgICAgIEluIG5vcm1hbCBjYXNlIHdlIGNh
biBqdXN0IGludmFsaWRhdGUgc3R5bGUsIG5vdCB0aHJvdyBldmVyeXRoaW5nIGF3YXkuCisgICAg
ICAgIFRoaXMgY2FuIGJlIGZ1cnRoZXIgaW1wcm92ZWQgYnkgYWRkaW5nIG9wdGltaXphdGlvbiBy
dWxlIHNldHMuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OnVwZGF0ZVVzZXJBZ2VudE1lZGlh
UXVlcnlTdHlsZUlmTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29w
ZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpTY29wZVJ1bGVTZXRzOjpjb2xsZWN0UnVsZXNGcm9tVXNlclN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjptYWtlUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6U2NvcGVSdWxlU2V0czo6aGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlNjb3BlUnVsZVNldHM6OmV2YWx1dGVEeW5hbWlj
TWVkaWFRdWVyeVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTY29wZVJ1bGVTZXRz
OjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6ZW5z
dXJlSW52YWxpZGF0aW9uUnVsZVNldHMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlU2NvcGVSdWxl
U2V0cy5oOgorCiAyMDE5LTEyLTEwICBDYXRoaWUgQ2hlbiAgPGNhdGhpZWNoZW5AaWdhbGlhLmNv
bT4KIAogICAgICAgICBGaXhlZCBQYXR0ZXJuLmggY29tcGlsZSBlcnJvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IDA2OTQ1NDkyZTA2Li4zMjg3MGYy
YjczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcApAQCAt
MTQ1LDcgKzE0NSw3IEBAIHN0YXRpYyBib29sIGFwcGx5UmVzdHJpY3RvcihNZWRpYVF1ZXJ5OjpS
ZXN0cmljdG9yIHIsIGJvb2wgdmFsdWUpCiAgICAgcmV0dXJuIHIgPT0gTWVkaWFRdWVyeTo6Tm90
ID8gIXZhbHVlIDogdmFsdWU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbHVh
dGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0
cyogZHluYW1pY1Jlc3VsdHMpIGNvbnN0Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1
YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3Vs
dHMqIGR5bmFtaWNSZXN1bHRzLCBNb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgTE9HX1dJVEhfU1RS
RUFNKE1lZGlhUXVlcmllcywgc3RyZWFtIDw8ICJNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsdWF0
ZSBvbiAiIDw8IChtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+dXJsKCkuc3RyaW5nKCkgOiBlbXB0
eVN0cmluZygpKSk7CiAKQEAgLTE2NiwyMiArMTY2LDM2IEBAIGJvb2wgTWVkaWFRdWVyeUV2YWx1
YXRvcjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIE1lZGlhUXVlcnlE
eW5hCiAgICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS5tZWRpYVR5cGUoKSkpIHsKICAg
ICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKICAgICAg
ICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCBleHByZXNzaW9ucywgc3RvcCBpZiBhbnkgb2YgdGhl
bSBldmFsIHRvIGZhbHNlIChBTkQgc2VtYW50aWNzKS4KKyAgICAgICAgICAgIGJvb2wgaXNEeW5h
bWljID0gZmFsc2U7CiAgICAgICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgICAgICBmb3Ig
KDsgaiA8IGV4cHJlc3Npb25zLnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBl
eHByZXNzaW9uUmVzdWx0ID0gZXZhbHVhdGUoZXhwcmVzc2lvbnNbal0pOwogICAgICAgICAgICAg
ICAgIGlmIChkeW5hbWljUmVzdWx0cykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNWaWV3
cG9ydERlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVh
dHVyZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaXNEeW5hbWljID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWNSZXN1bHRzLT52aWV3cG9ydC5hcHBlbmQoeyBl
eHByZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCB9KTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGlzQXBwZWFyYW5jZURlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkp
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXBwZWFy
YW5jZURlcGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlzRHluYW1pYyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBkeW5hbWljUmVzdWx0cy0+YXBwZWFyYW5jZS5hcHBlbmQoeyBleHByZXNzaW9uc1tqXSwgZXhw
cmVzc2lvblJlc3VsdCB9KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWNjZXNzaWJpbGl0
eVNldHRpbmdzRGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY2Nlc3NpYmlsaXR5
U2V0dGluZ3NEZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFGZWF0dXJlKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpc0R5bmFtaWMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgZHluYW1pY1Jlc3VsdHMtPmFjY2Vzc2liaWxpdHlTZXR0aW5ncy5hcHBlbmQoeyBleHBy
ZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobW9kZSA9PSBNb2RlOjpBbHdh
eXNNYXRjaER5bmFtaWMgJiYgaXNEeW5hbWljKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvblJlc3VsdCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChtb2RlID09
IE1vZGU6OkFsd2F5c01hdGNoRHluYW1pYyAmJiBpc0R5bmFtaWMpIHsKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorCiAgICAgICAgICAgICAvLyBBc3N1bWUgdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0
aGUgbGlzdCwgb3RoZXJ3aXNlIGFzc3VtZSBmYWxzZS4KICAgICAgICAgICAgIHJlc3VsdCA9IGFw
cGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUoKSA9PSBq
KTsKICAgICAgICAgfSBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUV2YWx1YXRvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3Iu
aAppbmRleCAzYWQ5OThjYmFjZC4uNWRlODVjN2NjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuaApAQCAtODMsNyArODMsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBl
dmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYpIGNvbnN0OwogICAgIGJvb2wgZXZh
bHVhdGVGb3JDaGFuZ2VzKGNvbnN0IE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyYpIGNvbnN0Owog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0Jiwg
TWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKiA9IG51bGxwdHIpIGNvbnN0OworICAgIGVudW0gY2xh
c3MgTW9kZSB7IE5vcm1hbCwgQWx3YXlzTWF0Y2hEeW5hbWljIH07CisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiwgTWVkaWFRdWVyeUR5bmFtaWNS
ZXN1bHRzKiA9IG51bGxwdHIsIE1vZGUgPSBNb2RlOjpOb3JtYWwpIGNvbnN0OwogCiAgICAgc3Rh
dGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBh
dHRyaWJ1dGVWYWx1ZSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1l
bnRSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29s
bGVjdG9yLmNwcAppbmRleCBkNzA2OGQ1OWE5Yy4uODEyN2MyZjNjNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTUyNCw2ICs1MjQsOSBA
QCB2b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3Qo
Y29uc3QgUnVsZVNldDo6UnVsZURhdGFWZQogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBydWxlcy0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8mIHJ1
bGVEYXRhID0gcnVsZXMtPmRhdGEoKVtpXTsKIAorICAgICAgICBpZiAoVU5MSUtFTFkoIXJ1bGVE
YXRhLmlzRW5hYmxlZCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIGlmICgh
cnVsZURhdGEuY2FuTWF0Y2hQc2V1ZG9FbGVtZW50KCkgJiYgbV9wc2V1ZG9FbGVtZW50UmVxdWVz
dC5wc2V1ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKaW5kZXggZjM0NGRiOTk2MTYuLjZhMzAxZGY4ZjI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvUnVsZURhdGEuY3BwCkBAIC0xNjksNiArMTY5LDcgQEAgUnVsZURhdGE6
OlJ1bGVEYXRhKFN0eWxlUnVsZSogcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWdu
ZWQgc2VsZWN0b3JMaXMKICAgICAsIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9y
KGNvbXB1dGVDb250YWluc1VuY29tbW9uQXR0cmlidXRlU2VsZWN0b3IoKnNlbGVjdG9yKCkpKQog
ICAgICwgbV9saW5rTWF0Y2hUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua01hdGNo
VHlwZShzZWxlY3RvcigpKSkKICAgICAsIG1fcHJvcGVydHlXaGl0ZWxpc3RUeXBlKGRldGVybWlu
ZVByb3BlcnR5V2hpdGVsaXN0VHlwZShzZWxlY3RvcigpKSkKKyAgICAsIG1faXNFbmFibGVkKHRy
dWUpCiAgICAgLCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoU2VsZWN0b3JG
aWx0ZXI6OmNvbGxlY3RIYXNoZXMoKnNlbGVjdG9yKCkpKQogewogICAgIEFTU0VSVChtX3Bvc2l0
aW9uID09IHBvc2l0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCmluZGV4IDFmYjZhNzFlOTUy
Li5hM2E2MDEwMmVlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZURhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlRGF0YS5oCkBAIC02MCw2ICs2MCw5IEBA
IHB1YmxpYzoKICAgICBib29sIGNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yOyB9CiAgICAg
dW5zaWduZWQgbGlua01hdGNoVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoVHlwZTsg
fQogICAgIFByb3BlcnR5V2hpdGVsaXN0VHlwZSBwcm9wZXJ0eVdoaXRlbGlzdFR5cGUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxQcm9wZXJ0eVdoaXRlbGlzdFR5cGU+KG1fcHJvcGVydHlX
aGl0ZWxpc3RUeXBlKTsgfQorICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9p
c0VuYWJsZWQ7IH0KKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCB2YWx1ZSkgeyBtX2lzRW5hYmxl
ZCA9IHZhbHVlOyB9CisKICAgICBjb25zdCBTZWxlY3RvckZpbHRlcjo6SGFzaGVzJiBkZXNjZW5k
YW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCkgY29uc3QgeyByZXR1cm4gbV9kZXNjZW5kYW50
U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzOyB9CiAKICAgICB2b2lkIGRpc2FibGVTZWxlY3RvckZp
bHRlcmluZygpIHsgbV9kZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzWzBdID0gMDsg
fQpAQCAtNzYsNiArNzksNyBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY29udGFpbnNVbmNv
bW1vbkF0dHJpYnV0ZVNlbGVjdG9yIDogMTsKICAgICB1bnNpZ25lZCBtX2xpbmtNYXRjaFR5cGUg
OiAyOyAvLyAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrCiAgICAgdW5zaWduZWQgbV9w
cm9wZXJ0eVdoaXRlbGlzdFR5cGUgOiAyOworICAgIHVuc2lnbmVkIG1faXNFbmFibGVkIDogMTsK
ICAgICBTZWxlY3RvckZpbHRlcjo6SGFzaGVzIG1fZGVzY2VuZGFudFNlbGVjdG9ySWRlbnRpZmll
ckhhc2hlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUnVsZVNldC5jcHAKaW5kZXggOTcwMmEzZWM2ZDUu
LjE0ODdjMWE2MjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmNwcApAQCAtODgsMTEgKzg4LDE1
IEBAIHN0YXRpYyBib29sIGlzSG9zdFNlbGVjdG9yTWF0Y2hpbmdJblNoYWRvd1RyZWUoY29uc3Qg
Q1NTU2VsZWN0b3ImIHN0YXJ0U2VsZWN0b3IpCiAgICAgcmV0dXJuIGxlZnRtb3N0U2VsZWN0b3It
Pm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIGxlZnRtb3N0U2VsZWN0b3It
PnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvc3Q7CiB9CiAK
LXZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVkIHNlbGVjdG9y
SW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4KQordm9pZCBSdWxlU2V0OjphZGRSdWxl
KFN0eWxlUnVsZSYgcnVsZSwgdW5zaWduZWQgc2VsZWN0b3JJbmRleCwgdW5zaWduZWQgc2VsZWN0
b3JMaXN0SW5kZXgsIE1lZGlhUXVlcnlDb2xsZWN0b3IqIG1lZGlhUXVlcnlDb2xsZWN0b3IpCiB7
Ci0gICAgUnVsZURhdGEgcnVsZURhdGEocnVsZSwgc2VsZWN0b3JJbmRleCwgc2VsZWN0b3JMaXN0
SW5kZXgsIG1fcnVsZUNvdW50KyspOworICAgIFJ1bGVEYXRhIHJ1bGVEYXRhKCZydWxlLCBzZWxl
Y3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCwgbV9ydWxlQ291bnQrKyk7CisKICAgICBtX2Zl
YXR1cmVzLmNvbGxlY3RGZWF0dXJlcyhydWxlRGF0YSk7CiAKKyAgICBpZiAobWVkaWFRdWVyeUNv
bGxlY3RvcikKKyAgICAgICAgbWVkaWFRdWVyeUNvbGxlY3Rvci0+YWRkUnVsZVBvc2l0aW9uSWZO
ZWVkZWQocnVsZURhdGEucG9zaXRpb24oKSk7CisKICAgICB1bnNpZ25lZCBjbGFzc0J1Y2tldFNp
emUgPSAwOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBpZFNlbGVjdG9yID0gbnVsbHB0cjsKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogdGFnU2VsZWN0b3IgPSBudWxscHRyOwpAQCAtMjYwLDYzICsy
NjQsMTc0IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZShTdHlsZVJ1bGUqIHJ1bGUsIHVuc2lnbmVk
IHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yCiAgICAgbV91bml2ZXJzYWxSdWxlcy5h
cHBlbmQocnVsZURhdGEpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVs
ZVBhZ2UqIHJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKFN0eWxlUnVsZVBhZ2UmIHJ1
bGUpCiB7Ci0gICAgbV9wYWdlUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgIG1fcGFnZVJ1bGVzLmFw
cGVuZCgmcnVsZSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0
b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIG1lZGl1bSwgUmVzb2x2ZXIqIHJlc29sdmVyLCBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMm
IG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cykKK3ZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhj
b25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIE1lZGlhUXVlcnlDb2xs
ZWN0b3ImIG1lZGlhUXVlcnlDb2xsZWN0b3IsIFJlc29sdmVyKiByZXNvbHZlciwgQWRkUnVsZXNN
b2RlIG1vZGUpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsKLSAgICAgICAgaWYg
KGlzPFN0eWxlUnVsZT4oKnJ1bGUpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKGRvd25jYXN0
PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkpOwotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVQ
YWdlPigqcnVsZSkpCi0gICAgICAgICAgICBhZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQ
YWdlPihydWxlLmdldCgpKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigq
cnVsZSkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gQWRkUnVsZXNNb2RlOjpSZXNvbHZlck11dGF0
aW9uU2NhbiAmJiBtZWRpYVF1ZXJ5Q29sbGVjdG9yLmRpZE11dGF0ZVJlc29sdmVyV2l0aGluRHlu
YW1pY01lZGlhUXVlcnkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoaXM8U3R5
bGVSdWxlPigqcnVsZSkpIHsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEFkZFJ1bGVzTW9kZTo6
Tm9ybWFsKQorICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGU+
KCpydWxlKSwgbWVkaWFRdWVyeUNvbGxlY3Rvcik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXM8U3R5bGVSdWxlUGFnZT4oKnJ1bGUpKSB7CisgICAgICAg
ICAgICBpZiAobW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKKyAgICAgICAgICAgICAgICBh
ZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQYWdlPigqcnVsZSkpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVs
ZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1lZGlhUnVsZSA9IGRvd25jYXN0PFN0eWxlUnVsZU1l
ZGlhPigqcnVsZSk7Ci0gICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkg
fHwgbWVkaXVtLmV2YWx1YXRlKCptZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5
RHluYW1pY1Jlc3VsdHMpKSkKLSAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVs
ZS5jaGlsZFJ1bGVzKCksIG1lZGl1bSwgcmVzb2x2ZXIsIG1lZGlhUXVlcnlEeW5hbWljUmVzdWx0
cyk7Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAmJiBy
ZXNvbHZlcikgeworICAgICAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2
YWx1YXRlKG1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgICAgICBhZGRD
aGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCksIG1lZGlhUXVlcnlDb2xsZWN0b3IsIHJl
c29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgICAgICBtZWRpYVF1ZXJ5Q29sbGVjdG9yLnBvcCht
ZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVs
ZSkpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAg
ICAgICAgICAgcmVzb2x2ZXItPmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkuYWRkRm9udEZhY2VS
dWxlKGRvd25jYXN0PFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZS5nZXQoKSksIGZhbHNlKTsKLSAg
ICAgICAgICAgIHJlc29sdmVyLT5pbnZhbGlkYXRlTWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlKCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlS2V5ZnJhbWVzPigqcnVsZSkgJiYgcmVz
b2x2ZXIpCi0gICAgICAgICAgICByZXNvbHZlci0+YWRkS2V5ZnJhbWVTdHlsZShkb3duY2FzdDxT
dHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVs
ZVN1cHBvcnRzPigqcnVsZSkgJiYgZG93bmNhc3Q8U3R5bGVSdWxlU3VwcG9ydHM+KCpydWxlKS5j
b25kaXRpb25Jc1N1cHBvcnRlZCgpKQotICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3duY2Fz
dDxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZl
ciwgbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikg
eworICAgICAgICAgICAgICAgIHJlc29sdmVyLT5kb2N1bWVudCgpLmZvbnRTZWxlY3RvcigpLmFk
ZEZvbnRGYWNlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUuZ2V0KCkpLCBm
YWxzZSk7CisgICAgICAgICAgICAgICAgcmVzb2x2ZXItPmludmFsaWRhdGVNYXRjaGVkRGVjbGFy
YXRpb25zQ2FjaGUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xs
ZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVLZXlmcmFtZXM+KCpydWxlKSkgeworICAgICAg
ICAgICAgaWYgKHJlc29sdmVyKQorICAgICAgICAgICAgICAgIHJlc29sdmVyLT5hZGRLZXlmcmFt
ZVN0eWxlKGRvd25jYXN0PFN0eWxlUnVsZUtleWZyYW1lcz4oKnJ1bGUpKTsKKyAgICAgICAgICAg
IG1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXIoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChpczxTdHlsZVJ1bGVTdXBwb3J0cz4oKnJ1
bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZVN1cHBvcnRzPigqcnVsZSkuY29uZGl0aW9uSXNTdXBw
b3J0ZWQoKSkgeworICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhkb3duY2FzdDxTdHlsZVJ1bGVT
dXBwb3J0cz4oKnJ1bGUpLmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUNvbGxlY3RvciwgcmVzb2x2
ZXIsIG1vZGUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KICNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVWaWV3
cG9ydD4oKnJ1bGUpICYmIHJlc29sdmVyKQotICAgICAgICAgICAgcmVzb2x2ZXItPnZpZXdwb3J0
U3R5bGVSZXNvbHZlcigpLT5hZGRWaWV3cG9ydFJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlVmlld3Bv
cnQ+KHJ1bGUuZ2V0KCkpKTsKKyAgICAgICAgaWYgKGlzPFN0eWxlUnVsZVZpZXdwb3J0PigqcnVs
ZSkpIHsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlcikKKyAgICAgICAgICAgICAgICByZXNvbHZl
ci0+dmlld3BvcnRTdHlsZVJlc29sdmVyKCktPmFkZFZpZXdwb3J0UnVsZShkb3duY2FzdDxTdHls
ZVJ1bGVWaWV3cG9ydD4ocnVsZS5nZXQoKSkpOworICAgICAgICAgICAgbWVkaWFRdWVyeUNvbGxl
Y3Rvci5kaWRNdXRhdGVSZXNvbHZlcigpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KICNlbmRpZgogICAgIH0KIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChT
dHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRp
YVF1ZXJ5RXZhbHVhdG9yLCBSZXNvbHZlciogcmVzb2x2ZXIpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIGV2YWx1YXRvcikKIHsKLSAgICBNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMgbWVk
aWFRdWVyeUR5bmFtaWNSZXN1bHRzOworICAgIGF1dG8gbWVkaWFRdWVyeUNvbGxlY3RvciA9IE1l
ZGlhUXVlcnlDb2xsZWN0b3IgeyBldmFsdWF0b3IgfTsKKyAgICBhZGRSdWxlc0Zyb21TaGVldChz
aGVldCwgbWVkaWFRdWVyeUNvbGxlY3RvciwgbnVsbHB0ciwgQWRkUnVsZXNNb2RlOjpOb3JtYWwp
OworfQorCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
cyYgc2hlZXQsIE1lZGlhUXVlcnlTZXQqIHNoZWV0UXVlcnksIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIGV2YWx1YXRvciwgU3R5bGU6OlJlc29sdmVyJiByZXNvbHZlcikKK3sKKyAgICBhdXRv
IGNhblVzZUR5bmFtaWNNZWRpYVF1ZXJ5UmVzb2x1dGlvbiA9IFsmXSB7CisgICAgICAgIGF1dG8g
bWVkaWFRdWVyeUNvbGxlY3RvciA9IE1lZGlhUXVlcnlDb2xsZWN0b3IgeyBldmFsdWF0b3IsIHRy
dWUgfTsKKyAgICAgICAgaWYgKG1lZGlhUXVlcnlDb2xsZWN0b3IucHVzaEFuZEV2YWx1YXRlKHNo
ZWV0UXVlcnkpKQorICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoc2hlZXQsIG1lZGlhUXVl
cnlDb2xsZWN0b3IsIG51bGxwdHIsIEFkZFJ1bGVzTW9kZTo6UmVzb2x2ZXJNdXRhdGlvblNjYW4p
OworICAgICAgICByZXR1cm4gIW1lZGlhUXVlcnlDb2xsZWN0b3IuZGlkTXV0YXRlUmVzb2x2ZXJX
aXRoaW5EeW5hbWljTWVkaWFRdWVyeTsKKyAgICB9KCk7CisKKyAgICBhdXRvIG1lZGlhUXVlcnlD
b2xsZWN0b3IgPSBNZWRpYVF1ZXJ5Q29sbGVjdG9yIHsgZXZhbHVhdG9yLCBjYW5Vc2VEeW5hbWlj
TWVkaWFRdWVyeVJlc29sdXRpb24gfTsKKworICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9yLnB1
c2hBbmRFdmFsdWF0ZShzaGVldFF1ZXJ5KSkgeworICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChz
aGVldCwgbWVkaWFRdWVyeUNvbGxlY3RvciwgJnJlc29sdmVyLCBBZGRSdWxlc01vZGU6Ok5vcm1h
bCk7CisgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHNoZWV0UXVlcnkpOworICAgIH0K
KworICAgIG1faGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJ5Q29s
bGVjdG9yLmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzOworICAgIG1fZHluYW1pY01l
ZGlhUXVlcnlSdWxlcy5hcHBlbmRWZWN0b3IoV1RGTW92ZShtZWRpYVF1ZXJ5Q29sbGVjdG9yLmR5
bmFtaWNNZWRpYVF1ZXJ5UnVsZXMpKTsKIAorICAgIGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1
bGVzKGV2YWx1YXRvcik7Cit9CisKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5
bGVTaGVldENvbnRlbnRzJiBzaGVldCwgTWVkaWFRdWVyeUNvbGxlY3RvciYgbWVkaWFRdWVyeUNv
bGxlY3RvciwgUmVzb2x2ZXIqIHJlc29sdmVyLCBBZGRSdWxlc01vZGUgbW9kZSkKK3sKICAgICBm
b3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7CiAgICAgICAgIGlmICghcnVs
ZS0+c3R5bGVTaGVldCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChydWxl
LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZSgqcnVsZS0+
bWVkaWFRdWVyaWVzKCksICZtZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCks
IG1lZGlhUXVlcnlFdmFsdWF0b3IsIHJlc29sdmVyKTsKLSAgICB9CiAKLSAgICBhZGRDaGlsZFJ1
bGVzKHNoZWV0LmNoaWxkUnVsZXMoKSwgbWVkaWFRdWVyeUV2YWx1YXRvciwgcmVzb2x2ZXIsIG1l
ZGlhUXVlcnlEeW5hbWljUmVzdWx0cyk7CisgICAgICAgIGlmIChtZWRpYVF1ZXJ5Q29sbGVjdG9y
LnB1c2hBbmRFdmFsdWF0ZShydWxlLT5tZWRpYVF1ZXJpZXMoKSkpIHsKKyAgICAgICAgICAgIGFk
ZFJ1bGVzRnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCksIG1lZGlhUXVlcnlDb2xsZWN0b3Is
IHJlc29sdmVyLCBtb2RlKTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlDb2xsZWN0b3IucG9wKHJ1
bGUtPm1lZGlhUXVlcmllcygpKTsKKyAgICAgICAgfQorICAgIH0KIAotICAgIGlmIChyZXNvbHZl
cikKLSAgICAgICAgcmVzb2x2ZXItPmFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyhtZWRpYVF1
ZXJ5RHluYW1pY1Jlc3VsdHMpOworICAgIGFkZENoaWxkUnVsZXMoc2hlZXQuY2hpbGRSdWxlcygp
LCBtZWRpYVF1ZXJ5Q29sbGVjdG9yLCByZXNvbHZlciwgbW9kZSk7CiAKLSAgICBpZiAobV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkKQorICAgIGlmIChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgJiYg
bW9kZSA9PSBBZGRSdWxlc01vZGU6Ok5vcm1hbCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0K
IAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxl
U2V0OjphZGRTdHlsZVJ1bGUoU3R5bGVSdWxlJiBydWxlLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiBt
ZWRpYVF1ZXJ5Q29sbGVjdG9yKQogewogICAgIHVuc2lnbmVkIHNlbGVjdG9yTGlzdEluZGV4ID0g
MDsKLSAgICBmb3IgKHNpemVfdCBzZWxlY3RvckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBu
b3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmluZGV4T2ZOZXh0
U2VsZWN0b3JBZnRlcihzZWxlY3RvckluZGV4KSkKLSAgICAgICAgYWRkUnVsZShydWxlLCBzZWxl
Y3RvckluZGV4LCBzZWxlY3Rvckxpc3RJbmRleCsrKTsKKyAgICBmb3IgKHNpemVfdCBzZWxlY3Rv
ckluZGV4ID0gMDsgc2VsZWN0b3JJbmRleCAhPSBub3RGb3VuZDsgc2VsZWN0b3JJbmRleCA9IHJ1
bGUuc2VsZWN0b3JMaXN0KCkuaW5kZXhPZk5leHRTZWxlY3RvckFmdGVyKHNlbGVjdG9ySW5kZXgp
KQorICAgICAgICBhZGRSdWxlKHJ1bGUsIHNlbGVjdG9ySW5kZXgsIHNlbGVjdG9yTGlzdEluZGV4
KyssICZtZWRpYVF1ZXJ5Q29sbGVjdG9yKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b24+Cit2b2lkIFJ1bGVTZXQ6OnRyYXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYgZnVuY3Rpb24p
Cit7CisgICAgYXV0byB0cmF2ZXJzZVZlY3RvciA9IFsmXShhdXRvJiB2ZWN0b3IpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBydWxlRGF0YSA6IHZlY3RvcikKKyAgICAgICAgICAgIGZ1bmN0aW9uKHJ1
bGVEYXRhKTsKKyAgICB9OworCisgICAgYXV0byB0cmF2ZXJzZU1hcCA9IFsmXShhdXRvJiBtYXAp
IHsKKyAgICAgICAgZm9yIChhdXRvJiBydWxlRGF0YXMgOiBtYXAudmFsdWVzKCkpCisgICAgICAg
ICAgICB0cmF2ZXJzZVZlY3RvcigqcnVsZURhdGFzKTsKKyAgICB9OworCisgICAgdHJhdmVyc2VN
YXAobV9pZFJ1bGVzKTsKKyAgICB0cmF2ZXJzZU1hcChtX2NsYXNzUnVsZXMpOworICAgIHRyYXZl
cnNlTWFwKG1fdGFnTG9jYWxOYW1lUnVsZXMpOworICAgIHRyYXZlcnNlTWFwKG1fdGFnTG93ZXJj
YXNlTG9jYWxOYW1lUnVsZXMpOworICAgIHRyYXZlcnNlTWFwKG1fc2hhZG93UHNldWRvRWxlbWVu
dFJ1bGVzKTsKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2xpbmtQc2V1ZG9DbGFzc1J1bGVzKTsKKyNp
ZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdHJhdmVyc2VWZWN0b3IobV9jdWVQc2V1ZG9SdWxl
cyk7CisjZW5kaWYKKyAgICB0cmF2ZXJzZVZlY3RvcihtX2hvc3RQc2V1ZG9DbGFzc1J1bGVzKTsK
KyAgICB0cmF2ZXJzZVZlY3RvcihtX3Nsb3R0ZWRQc2V1ZG9FbGVtZW50UnVsZXMpOworICAgIHRy
YXZlcnNlVmVjdG9yKG1fcGFydFBzZXVkb0VsZW1lbnRSdWxlcyk7CisgICAgdHJhdmVyc2VWZWN0
b3IobV9mb2N1c1BzZXVkb0NsYXNzUnVsZXMpOworICAgIHRyYXZlcnNlVmVjdG9yKG1fdW5pdmVy
c2FsUnVsZXMpOworfQorCitSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlIFJ1bGVT
ZXQ6OmV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImIGV2YWx1YXRvcikKK3sKKyAgICBib29sIGNoYW5nZXMgPSBmYWxzZTsKKyAgICBmb3IgKGF1
dG8mIGR5bmFtaWNSdWxlcyA6IG1fZHluYW1pY01lZGlhUXVlcnlSdWxlcykgeworICAgICAgICBi
b29sIHJlc3VsdCA9IHRydWU7CisgICAgICAgIGZvciAoYXV0byYgc2V0IDogZHluYW1pY1J1bGVz
Lm1lZGlhUXVlcnlTZXRzKSB7CisgICAgICAgICAgICBpZiAoIWV2YWx1YXRvci5ldmFsdWF0ZShz
ZXQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVz
dWx0ICE9IGR5bmFtaWNSdWxlcy5yZXN1bHQpIHsKKyAgICAgICAgICAgIGR5bmFtaWNSdWxlcy5y
ZXN1bHQgPSByZXN1bHQ7CisgICAgICAgICAgICBpZiAoZHluYW1pY1J1bGVzLnJlcXVpcmVzRnVs
bFJlc2V0KQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBl
OjpSZXNldDsKKworICAgICAgICAgICAgdHJhdmVyc2VSdWxlRGF0YXMoWyZdKFJ1bGVEYXRhJiBy
dWxlRGF0YSkgeworICAgICAgICAgICAgICAgIGlmICghZHluYW1pY1J1bGVzLmFmZmVjdGVkUnVs
ZVBvc2l0aW9ucy5jb250YWlucyhydWxlRGF0YS5wb3NpdGlvbigpKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJ1bGVEYXRhLnNldEVuYWJsZWQocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNoYW5nZXMgPyBNZWRpYVF1ZXJ5U3R5bGVVcGRh
dGVUeXBlOjpSZXNvbHZlIDogTWVkaWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6Tm9uZTsKIH0KIAog
Ym9vbCBSdWxlU2V0OjpoYXNTaGFkb3dQc2V1ZG9FbGVtZW50UnVsZXMoKSBjb25zdApAQCAtMzU1
LDUgKzQ3MCw2NyBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1RvRml0KCkKICAgICBtX2ZlYXR1cmVz
LnNocmlua1RvRml0KCk7CiB9CiAKK1J1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6On5NZWRp
YVF1ZXJ5Q29sbGVjdG9yKCkgPSBkZWZhdWx0OworCitib29sIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlD
b2xsZWN0b3I6OnB1c2hBbmRFdmFsdWF0ZShNZWRpYVF1ZXJ5U2V0KiBzZXQpCit7CisgICAgaWYg
KCFzZXQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gT25seSBldmFsdWF0ZSBzdGF0
aWMgZXhwcmVzc2lvbnMgdGhhdCByZXF1aXJlIHN0eWxlIHJlYnVpbGQuCisgICAgTWVkaWFRdWVy
eUR5bmFtaWNSZXN1bHRzIGR5bmFtaWNSZXN1bHRzOworICAgIGF1dG8gbW9kZSA9IGNvbGxlY3RE
eW5hbWljID8gTWVkaWFRdWVyeUV2YWx1YXRvcjo6TW9kZTo6QWx3YXlzTWF0Y2hEeW5hbWljIDog
TWVkaWFRdWVyeUV2YWx1YXRvcjo6TW9kZTo6Tm9ybWFsOworCisgICAgYm9vbCByZXN1bHQgPSBl
dmFsdWF0b3IuZXZhbHVhdGUoKnNldCwgJmR5bmFtaWNSZXN1bHRzLCBtb2RlKTsKKworICAgIGlm
ICghZHluYW1pY1Jlc3VsdHMudmlld3BvcnQuaXNFbXB0eSgpKQorICAgICAgICBoYXNWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcmllcyA9IHRydWU7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFkeW5hbWljUmVzdWx0cy5pc0VtcHR5KCkpCisg
ICAgICAgIGR5bmFtaWNDb250ZXh0U3RhY2suYXBwZW5kKHsgKnNldCB9KTsKKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlDb2xsZWN0b3I6OnBvcChNZWRp
YVF1ZXJ5U2V0KiBzZXQpCit7CisgICAgaWYgKCFzZXQgfHwgZHluYW1pY0NvbnRleHRTdGFjay5p
c0VtcHR5KCkgfHwgc2V0ICE9ICZkeW5hbWljQ29udGV4dFN0YWNrLmxhc3QoKS5zZXQuZ2V0KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCku
YWZmZWN0ZWRSdWxlUG9zaXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICBEeW5hbWljTWVkaWFR
dWVyeVJ1bGVzIHJ1bGVzOworICAgICAgICBmb3IgKGF1dG8mIGNvbnRleHQgOiBkeW5hbWljQ29u
dGV4dFN0YWNrKQorICAgICAgICAgICAgcnVsZXMubWVkaWFRdWVyeVNldHMuYXBwZW5kKGNvbnRl
eHQuc2V0LmdldCgpKTsKKworICAgICAgICBpZiAoY29sbGVjdER5bmFtaWMpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHRvQWRkID0gZHluYW1pY0NvbnRleHRTdGFjay5sYXN0KCkuYWZmZWN0ZWRSdWxl
UG9zaXRpb25zOworICAgICAgICAgICAgcnVsZXMuYWZmZWN0ZWRSdWxlUG9zaXRpb25zLmFkZCh0
b0FkZC5iZWdpbigpLCB0b0FkZC5lbmQoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cnVsZXMucmVxdWlyZXNGdWxsUmVzZXQgPSB0cnVlOworCisgICAgICAgIGR5bmFtaWNNZWRpYVF1
ZXJ5UnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZXMpKTsKKyAgICB9CisKKyAgICBkeW5hbWljQ29u
dGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKK30KKwordm9pZCBSdWxlU2V0OjpNZWRpYVF1ZXJ5Q29s
bGVjdG9yOjpkaWRNdXRhdGVSZXNvbHZlcigpCit7CisgICAgaWYgKGR5bmFtaWNDb250ZXh0U3Rh
Y2suaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisgICAgZGlkTXV0YXRlUmVzb2x2ZXJXaXRo
aW5EeW5hbWljTWVkaWFRdWVyeSA9IHRydWU7Cit9CisKK3ZvaWQgUnVsZVNldDo6TWVkaWFRdWVy
eUNvbGxlY3Rvcjo6YWRkUnVsZVBvc2l0aW9uSWZOZWVkZWQoc2l6ZV90IGluZGV4KQoreworICAg
IGlmIChkeW5hbWljQ29udGV4dFN0YWNrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGR5bmFtaWNDb250ZXh0U3RhY2subGFzdCgpLmFmZmVjdGVkUnVsZVBvc2l0aW9ucy5hcHBlbmQo
aW5kZXgpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFN0eWxlCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKaW5kZXggOGNmZTVjYmI1ZmYuLjg0ZGRmYTZjMTdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9SdWxlU2V0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3R5bGUvUnVsZVNldC5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNwcmFnbWEgb25jZQog
CisjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiUnVsZURhdGEuaCIKICNpbmNsdWRl
ICJSdWxlRmVhdHVyZS5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ29tcGlsZXIuaCIKQEAgLTM1LDcg
KzM2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTU2VsZWN0b3I7CiBjbGFzcyBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotc3RydWN0IE1l
ZGlhUXVlcnlEeW5hbWljUmVzdWx0czsKIAogbmFtZXNwYWNlIFN0eWxlIHsKIApAQCAtNjIsMTUg
KzYyLDUwIEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIFZlY3RvcjxSdWxlRGF0YSwgMT4gUnVsZURh
dGFWZWN0b3I7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmcsIHN0ZDo6dW5pcXVlX3B0
cjxSdWxlRGF0YVZlY3Rvcj4+IEF0b21SdWxlTWFwOwogCi0gICAgdm9pZCBhZGRSdWxlc0Zyb21T
aGVldChTdHlsZVNoZWV0Q29udGVudHMmLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5
bGU6OlJlc29sdmVyKiA9IG51bGxwdHIpOworICAgIHN0cnVjdCBEeW5hbWljTWVkaWFRdWVyeVJ1
bGVzIHsKKyAgICAgICAgVmVjdG9yPFJlZjxNZWRpYVF1ZXJ5U2V0Pj4gbWVkaWFRdWVyeVNldHM7
CisgICAgICAgIEhhc2hTZXQ8c2l6ZV90LCBEZWZhdWx0SGFzaDxzaXplX3Q+OjpIYXNoLCBXVEY6
OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHNpemVfdD4+IGFmZmVjdGVkUnVsZVBvc2l0
aW9uczsKKyAgICAgICAgYm9vbCByZXF1aXJlc0Z1bGxSZXNldCB7IGZhbHNlIH07CisgICAgICAg
IGJvb2wgcmVzdWx0IHsgdHJ1ZSB9OworICAgIH07CisKKyAgICBzdHJ1Y3QgTWVkaWFRdWVyeUNv
bGxlY3RvciB7CisgICAgICAgIH5NZWRpYVF1ZXJ5Q29sbGVjdG9yKCk7CisKKyAgICAgICAgY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yOworICAgICAgICBjb25zdCBib29sIGNv
bGxlY3REeW5hbWljIHsgZmFsc2UgfTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKFN0eWxlUnVs
ZSopOwotICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCB1bnNpZ25lZCBzZWxlY3RvckluZGV4
LCB1bnNpZ25lZCBzZWxlY3Rvckxpc3RJbmRleCk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShTdHls
ZVJ1bGVQYWdlKik7CisgICAgICAgIHN0cnVjdCBEeW5hbWljQ29udGV4dCB7CisgICAgICAgICAg
ICBSZWY8TWVkaWFRdWVyeVNldD4gc2V0OworICAgICAgICAgICAgVmVjdG9yPHNpemVfdD4gYWZm
ZWN0ZWRSdWxlUG9zaXRpb25zIHsgfTsKKyAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPER5bmFt
aWNDb250ZXh0PiBkeW5hbWljQ29udGV4dFN0YWNrIHsgfTsKKworICAgICAgICBWZWN0b3I8RHlu
YW1pY01lZGlhUXVlcnlSdWxlcz4gZHluYW1pY01lZGlhUXVlcnlSdWxlcyB7IH07CisgICAgICAg
IGJvb2wgZGlkTXV0YXRlUmVzb2x2ZXJXaXRoaW5EeW5hbWljTWVkaWFRdWVyeSB7IGZhbHNlIH07
CisgICAgICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMgeyBmYWxzZSB9
OworCisgICAgICAgIGJvb2wgcHVzaEFuZEV2YWx1YXRlKE1lZGlhUXVlcnlTZXQqKTsKKyAgICAg
ICAgdm9pZCBwb3AoTWVkaWFRdWVyeVNldCopOworICAgICAgICB2b2lkIGRpZE11dGF0ZVJlc29s
dmVyKCk7CisgICAgICAgIHZvaWQgYWRkUnVsZVBvc2l0aW9uSWZOZWVkZWQoc2l6ZV90KTsKKyAg
ICB9OworCisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmLCBj
b25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJik7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChT
dHlsZVNoZWV0Q29udGVudHMmLCBNZWRpYVF1ZXJ5U2V0KiBzaGVldFF1ZXJ5LCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGU6OlJlc29sdmVyJik7CisKKyAgICB2b2lkIGFkZFN0eWxl
UnVsZShTdHlsZVJ1bGUmLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJik7CisgICAgdm9pZCBhZGRSdWxl
KFN0eWxlUnVsZSYsIHVuc2lnbmVkIHNlbGVjdG9ySW5kZXgsIHVuc2lnbmVkIHNlbGVjdG9yTGlz
dEluZGV4LCBNZWRpYVF1ZXJ5Q29sbGVjdG9yKiA9IG51bGxwdHIpOworICAgIHZvaWQgYWRkUGFn
ZVJ1bGUoU3R5bGVSdWxlUGFnZSYpOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KGNvbnN0IEF0b21T
dHJpbmcmIGtleSwgQXRvbVJ1bGVNYXAmLCBjb25zdCBSdWxlRGF0YSYpOwogICAgIHZvaWQgc2hy
aW5rVG9GaXQoKTsKICAgICB2b2lkIGRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKSB7IG1fYXV0b1No
cmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CiAKKyAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWaWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcmllczsgfQorCisgICAgZW51bSBjbGFzcyBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBl
IHsgTm9uZSwgUmVzb2x2ZSwgUmVzZXQgfTsKKyAgICBNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBl
IGV2YWx1dGVEeW5hbWljTWVkaWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
KTsKKwogICAgIGNvbnN0IFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZmVhdHVyZXM7IH0KIAogICAgIGNvbnN0IFJ1bGVEYXRhVmVjdG9yKiBpZFJ1bGVzKGNvbnN0
IEF0b21TdHJpbmcmIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9CkBA
IC05NSw3ICsxMzAsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaGFzSG9zdFBzZXVkb0NsYXNzUnVs
ZXNNYXRjaGluZ0luU2hhZG93VHJlZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzSG9zdFBzZXVkb0Ns
YXNzUnVsZXNNYXRjaGluZ0luU2hhZG93VHJlZTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgYWRk
Q2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYsIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGU6OlJlc29sdmVyKiwgTWVkaWFRdWVyeUR5
bmFtaWNSZXN1bHRzJik7CisgICAgZW51bSBjbGFzcyBBZGRSdWxlc01vZGUgeyBOb3JtYWwsIFJl
c29sdmVyTXV0YXRpb25TY2FuIH07CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNo
ZWV0Q29udGVudHMmLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiwgU3R5bGU6OlJlc29sdmVyKiwgQWRk
UnVsZXNNb2RlKTsKKyAgICB2b2lkIGFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVCYXNlPj4mLCBNZWRpYVF1ZXJ5Q29sbGVjdG9yJiwgU3R5bGU6OlJlc29sdmVyKiwg
QWRkUnVsZXNNb2RlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uPiB2b2lkIHRy
YXZlcnNlUnVsZURhdGFzKEZ1bmN0aW9uJiYpOwogCiAgICAgQXRvbVJ1bGVNYXAgbV9pZFJ1bGVz
OwogICAgIEF0b21SdWxlTWFwIG1fY2xhc3NSdWxlczsKQEAgLTExNiw2ICsxNTUsOCBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9oYXNIb3N0UHNldWRvQ2xhc3NSdWxlc01hdGNoaW5nSW5TaGFkb3dU
cmVlIHsgZmFsc2UgfTsKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCB7IHRydWUg
fTsKICAgICBSdWxlRmVhdHVyZVNldCBtX2ZlYXR1cmVzOworICAgIGJvb2wgbV9oYXNWaWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcmllcyB7IGZhbHNlIH07CisgICAgVmVjdG9yPER5bmFtaWNNZWRp
YVF1ZXJ5UnVsZXM+IG1fZHluYW1pY01lZGlhUXVlcnlSdWxlczsKIH07CiAKIGlubGluZSBjb25z
dCBSdWxlU2V0OjpSdWxlRGF0YVZlY3RvciogUnVsZVNldDo6dGFnUnVsZXMoY29uc3QgQXRvbVN0
cmluZyYga2V5LCBib29sIGlzSFRNTE5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDg4ZDRkMWQzZjU0Li4zNTk0NGQxODY4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTYwMiwzOSArNjAyLDE0IEBAIHZvaWQgUmVz
b2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoU3RhdGUmIHN0YXRlLCBjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1CiAgICAgICAgIG1fbWF0Y2hlZERlY2xhcmF0aW9uc0NhY2hlLmFkZChz
dHlsZSwgcGFyZW50U3R5bGUsIGNhY2hlSGFzaCwgbWF0Y2hSZXN1bHQpOwogfQogCi12b2lkIFJl
c29sdmVyOjphZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMoY29uc3QgTWVkaWFRdWVyeUR5bmFt
aWNSZXN1bHRzJiByZXN1bHRzKQorYm9vbCBSZXNvbHZlcjo6aGFzVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJpZXMoKSBjb25zdAogewotICAgIG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFw
cGVuZChyZXN1bHRzKTsKKyAgICByZXR1cm4gbV9ydWxlU2V0cy5oYXNWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllcygpOwogfQogCi1ib29sIFJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZl
Y3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAorUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBk
YXRlVHlwZSBSZXNvbHZlcjo6ZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyaWVzKCkKIHsKLSAgICBM
T0coTWVkaWFRdWVyaWVzLCAiU3R5bGU6OlJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZlY3Rl
ZEJ5Vmlld3BvcnRDaGFuZ2UgZXZhbHVhdGluZyBxdWVyaWVzIik7Ci0gICAgZm9yIChhdXRvJiBy
ZXN1bHQgOiBtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy52aWV3cG9ydCkgewotICAgICAgICBp
ZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSBy
ZXN1bHQucmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFj
Y2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgpIGNvbnN0Ci17Ci0gICAgTE9HKE1lZGlhUXVlcmll
cywgIlN0eWxlOjpSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxp
dHlTZXR0aW5nc0NoYW5nZSBldmFsdWF0aW5nIHF1ZXJpZXMiKTsKLSAgICBmb3IgKGF1dG8mIHJl
c3VsdCA6IG1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLmFjY2Vzc2liaWxpdHlTZXR0aW5ncykg
ewotICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHBy
ZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVz
QWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKSBjb25zdAotewotICAgIExPRyhNZWRpYVF1ZXJp
ZXMsICJTdHlsZTo6UmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJhbmNl
Q2hhbmdlIGV2YWx1YXRpbmcgcXVlcmllcyIpOwotICAgIGZvciAoYXV0byYgcmVzdWx0IDogbV9t
ZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMuYXBwZWFyYW5jZSkgewotICAgICAgICBpZiAobV9tZWRp
YVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQucmVz
dWx0KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gbV9ydWxlU2V0cy5ldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhtX21l
ZGlhUXVlcnlFdmFsdWF0b3IpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBTdHlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVSZXNvbHZlci5oCmluZGV4IGU3ZTNmNzcwMWU1Li4yZWQ1ZmU4NWM5MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZXNvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVzb2x2ZXIuaApAQCAtMTMxLDE1ICsxMzEsOCBAQCBwdWJs
aWM6CiAgICAgVmlld3BvcnRTdHlsZVJlc29sdmVyKiB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKSB7
IHJldHVybiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlci5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICB2
b2lkIGFkZE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyhjb25zdCBNZWRpYVF1ZXJ5RHluYW1pY1Jl
c3VsdHMmKTsKLSAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkgY29u
c3QgeyByZXR1cm4gIW1fbWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzLnZpZXdwb3J0LmlzRW1wdHko
KTsgfQotICAgIGJvb2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkg
Y29uc3Q7Ci0KLSAgICBib29sIGhhc0FjY2Vzc2liaWxpdHlTZXR0aW5nc0RlcGVuZGVudE1lZGlh
UXVlcmllcygpIGNvbnN0IHsgcmV0dXJuICFtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0cy5hY2Nl
c3NpYmlsaXR5U2V0dGluZ3MuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNNZWRpYVF1ZXJpZXNB
ZmZlY3RlZEJ5QWNjZXNzaWJpbGl0eVNldHRpbmdzQ2hhbmdlKCkgY29uc3Q7Ci0KLSAgICBib29s
IGhhc0FwcGVhcmFuY2VEZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiAhbV9t
ZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMuYXBwZWFyYW5jZS5pc0VtcHR5KCk7IH0KLSAgICBib29s
IGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlBcHBlYXJhbmNlQ2hhbmdlKCkgY29uc3Q7CisgICAg
Ym9vbCBoYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0OworICAgIFJ1bGVT
ZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGUgZXZhbHVhdGVEeW5hbWljTWVkaWFRdWVyaWVz
KCk7CiAKICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoUmVmPFN0eWxlUnVsZUtleWZyYW1lcz4m
Jik7CiAKQEAgLTIwMCw4ICsxOTMsNiBAQCBwcml2YXRlOgogCiAgICAgUmVuZGVyU3R5bGUqIG1f
b3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSB7IG51bGxwdHIgfTsKIAotICAgIE1lZGlhUXVl
cnlEeW5hbWljUmVzdWx0cyBtX21lZGlhUXVlcnlEeW5hbWljUmVzdWx0czsKLQogI2lmIEVOQUJM
RShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZl
cj4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
Y29wZS5jcHAKaW5kZXggM2M5ZmQ4OGEyY2IuLmE5MzQ4MTE4MDZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVNjb3BlLmNwcApAQCAtNjIyLDIxICs2MjIsMjEgQEAgdm9pZCBTY29wZTo6c2NoZWR1
bGVVcGRhdGUoVXBkYXRlVHlwZSB1cGRhdGUpCiB2b2lkIFNjb3BlOjpldmFsdWF0ZU1lZGlhUXVl
cmllc0ZvclZpZXdwb3J0Q2hhbmdlKCkKIHsKICAgICBldmFsdWF0ZU1lZGlhUXVlcmllcyhbXSAo
UmVzb2x2ZXImIHJlc29sdmVyKSB7Ci0gICAgICAgIHJldHVybiByZXNvbHZlci5oYXNNZWRpYVF1
ZXJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVy
LmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogICAgIH0pOwogfQogCiB2b2lkIFNjb3Bl
OjpldmFsdWF0ZU1lZGlhUXVlcmllc0ZvckFjY2Vzc2liaWxpdHlTZXR0aW5nc0NoYW5nZSgpCiB7
CiAgICAgZXZhbHVhdGVNZWRpYVF1ZXJpZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAg
ICAgICByZXR1cm4gcmVzb2x2ZXIuaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFjY2Vzc2liaWxp
dHlTZXR0aW5nc0NoYW5nZSgpOworICAgICAgICByZXR1cm4gcmVzb2x2ZXIuZXZhbHVhdGVEeW5h
bWljTWVkaWFRdWVyaWVzKCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU2NvcGU6OmV2YWx1YXRlTWVk
aWFRdWVyaWVzRm9yQXBwZWFyYW5jZUNoYW5nZSgpCiB7CiAgICAgZXZhbHVhdGVNZWRpYVF1ZXJp
ZXMoW10gKFJlc29sdmVyJiByZXNvbHZlcikgewotICAgICAgICByZXR1cm4gcmVzb2x2ZXIuaGFz
TWVkaWFRdWVyaWVzQWZmZWN0ZWRCeUFwcGVhcmFuY2VDaGFuZ2UoKTsKKyAgICAgICAgcmV0dXJu
IHJlc29sdmVyLmV2YWx1YXRlRHluYW1pY01lZGlhUXVlcmllcygpOwogICAgIH0pOwogfQogCkBA
IC02NTAsOSArNjUwLDIyIEBAIHZvaWQgU2NvcGU6OmV2YWx1YXRlTWVkaWFRdWVyaWVzKFRlc3RG
dW5jdGlvbiYmIHRlc3RGdW5jdGlvbikKICAgICBhdXRvKiByZXNvbHZlciA9IHJlc29sdmVySWZF
eGlzdHMoKTsKICAgICBpZiAoIXJlc29sdmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF0
ZXN0RnVuY3Rpb24oKnJlc29sdmVyKSkKKworICAgIGF1dG8gdXBkYXRlVHlwZSA9IHRlc3RGdW5j
dGlvbigqcmVzb2x2ZXIpOworCisgICAgc3dpdGNoICh1cGRhdGVUeXBlKSB7CisgICAgY2FzZSBS
dWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlOjpOb25lOgogICAgICAgICByZXR1cm47
Ci0gICAgc2NoZWR1bGVVcGRhdGUoVXBkYXRlVHlwZTo6Q29udGVudHNPckludGVycHJldGF0aW9u
KTsKKyAgICBjYXNlIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGU6OlJlc29sdmU6
CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIGFuIGludmFsaWRhdGlvbiBydWxlc2V0
IGZvciBydWxlcyBpbnNpZGUgZHluYW1pYyBtZWRpYSBxdWVyaWVzLgorICAgICAgICBpZiAoYXV0
byogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAg
ICAgICAgIGRvY3VtZW50RWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJ1bGVTZXQ6Ok1lZGlhUXVlcnlTdHlsZVVwZGF0ZVR5cGU6
OlJlc2V0OgorICAgICAgICBzY2hlZHVsZVVwZGF0ZShVcGRhdGVUeXBlOjpDb250ZW50c09ySW50
ZXJwcmV0YXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb246Om1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKG1fZG9jdW1lbnQpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmNwcAppbmRleCA4ZTA0ZDcw
ZjY4Mi4uMDExYzc5NjFhNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxl
U2NvcGVSdWxlU2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1
bGVTZXRzLmNwcApAQCAtNzAsMTggKzcwLDExIEBAIHZvaWQgU2NvcGVSdWxlU2V0czo6dXBkYXRl
VXNlckFnZW50TWVkaWFRdWVyeVN0eWxlSWZOZWVkZWQoKSBjb25zdAogICAgICAgICByZXR1cm47
CiAgICAgbV91c2VyQWdlbnRNZWRpYVF1ZXJ5UnVsZUNvdW50T25VcGRhdGUgPSBydWxlQ291bnQ7
CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgYm9vbCBoYWRWaWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcmllcyA9IG1fc3R5bGVSZXNvbHZlci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cmllcygpOwotI2VuZGlmCi0KICAgICAvLyBNZWRpYSBxdWVyaWVzIG9uIHVzZXIgYWdlbnQgc2hl
ZXQgbmVlZCB0byBldmFsdWF0ZWQgaW4gZG9jdW1lbnQgY29udGV4dC4gVGhleSBiZWhhdmUgbGlr
ZSBhdXRob3Igc2hlZXRzIGluIHRoaXMgcmVzcGVjdC4KICAgICBhdXRvJiBtZWRpYVF1ZXJ5RXZh
bHVhdG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKICAgICBtX3Vz
ZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSA9IG1ha2VVbmlxdWU8UnVsZVNldD4oKTsKICAgICAKLSAg
ICBtX3VzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2Vu
dFN0eWxlOjptZWRpYVF1ZXJ5U3R5bGVTaGVldCwgbWVkaWFRdWVyeUV2YWx1YXRvciwgJm1fc3R5
bGVSZXNvbHZlcik7Ci0KLSAgICAvLyBWaWV3cG9ydCBkZXBlbmRlbnQgcXVlcmllcyBhcmUgY3Vy
cmVudGx5IHRvbyBpbmVmZmljaWVudCB0byBhbGxvdyBvbiBVQSBzaGVldC4KLSAgICBBU1NFUlQo
IW1fc3R5bGVSZXNvbHZlci5oYXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIHx8IGhh
ZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKTsKKyAgICBtX3VzZXJBZ2VudE1lZGlhUXVl
cnlTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoKlVzZXJBZ2VudFN0eWxlOjptZWRpYVF1ZXJ5U3R5
bGVTaGVldCwgbnVsbHB0ciwgbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9zdHlsZVJlc29sdmVyKTsK
IH0KIAogUnVsZVNldCogU2NvcGVSdWxlU2V0czo6dXNlclN0eWxlKCkgY29uc3QKQEAgLTk3LDcg
KzkwLDcgQEAgdm9pZCBTY29wZVJ1bGVTZXRzOjppbml0aWFsaXplVXNlclN0eWxlKCkKICAgICBh
dXRvJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yID0gbV9zdHlsZVJlc29sdmVyLm1lZGlhUXVlcnlFdmFs
dWF0b3IoKTsKICAgICBhdXRvIHRlbXBVc2VyU3R5bGUgPSBtYWtlVW5pcXVlPFJ1bGVTZXQ+KCk7
CiAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQgPSBleHRlbnNpb25TdHlsZVNo
ZWV0cy5wYWdlVXNlclNoZWV0KCkpCi0gICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJv
bVNoZWV0KHBhZ2VVc2VyU2hlZXQtPmNvbnRlbnRzKCksIG1lZGlhUXVlcnlFdmFsdWF0b3IsICZt
X3N0eWxlUmVzb2x2ZXIpOworICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVl
dChwYWdlVXNlclNoZWV0LT5jb250ZW50cygpLCBudWxscHRyLCBtZWRpYVF1ZXJ5RXZhbHVhdG9y
LCBtX3N0eWxlUmVzb2x2ZXIpOwogICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5bGVTaGVldHMo
ZXh0ZW5zaW9uU3R5bGVTaGVldHMuaW5qZWN0ZWRVc2VyU3R5bGVTaGVldHMoKSwgKnRlbXBVc2Vy
U3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGNvbGxlY3RSdWxlc0Zyb21Vc2VyU3R5
bGVTaGVldHMoZXh0ZW5zaW9uU3R5bGVTaGVldHMuZG9jdW1lbnRVc2VyU3R5bGVTaGVldHMoKSwg
KnRlbXBVc2VyU3R5bGUsIG1lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGlmICh0ZW1wVXNlclN0
eWxlLT5ydWxlQ291bnQoKSA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+cGFnZVJ1bGVzKCkuc2l6ZSgp
ID4gMCkKQEAgLTEwOCw3ICsxMDEsNyBAQCB2b2lkIFNjb3BlUnVsZVNldHM6OmNvbGxlY3RSdWxl
c0Zyb21Vc2VyU3R5bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZQogewogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1c2VyU2hlZXRzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIEFTU0VSVCh1c2VyU2hlZXRzW2ldLT5jb250ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSk7
Ci0gICAgICAgIHVzZXJTdHlsZS5hZGRSdWxlc0Zyb21TaGVldCh1c2VyU2hlZXRzW2ldLT5jb250
ZW50cygpLCBtZWRpdW0sICZtX3N0eWxlUmVzb2x2ZXIpOworICAgICAgICB1c2VyU3R5bGUuYWRk
UnVsZXNGcm9tU2hlZXQodXNlclNoZWV0c1tpXS0+Y29udGVudHMoKSwgbnVsbHB0ciwgbWVkaXVt
LCBtX3N0eWxlUmVzb2x2ZXIpOwogICAgIH0KIH0KIApAQCAtMTE5LDcgKzExMiw3IEBAIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8UnVsZVNldD4gbWFrZVJ1bGVTZXQoY29uc3QgVmVjdG9yPFJ1bGVG
ZWF0dXJlPiYgcnVsZXMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGF1dG8gcnVsZVNl
dCA9IG1ha2VVbmlxdWU8UnVsZVNldD4oKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkKLSAgICAgICAgcnVsZVNldC0+YWRkUnVsZShydWxlc1tpXS5ydWxlLCBydWxlc1tp
XS5zZWxlY3RvckluZGV4LCBydWxlc1tpXS5zZWxlY3Rvckxpc3RJbmRleCk7CisgICAgICAgIHJ1
bGVTZXQtPmFkZFJ1bGUoKnJ1bGVzW2ldLnJ1bGUsIHJ1bGVzW2ldLnNlbGVjdG9ySW5kZXgsIHJ1
bGVzW2ldLnNlbGVjdG9yTGlzdEluZGV4KTsKICAgICBydWxlU2V0LT5zaHJpbmtUb0ZpdCgpOwog
ICAgIHJldHVybiBydWxlU2V0OwogfQpAQCAtMTM2LDIyICsxMjksNDkgQEAgdm9pZCBTY29wZVJ1
bGVTZXRzOjpyZXNldFVzZXJBZ2VudE1lZGlhUXVlcnlTdHlsZSgpCiAgICAgbV91c2VyQWdlbnRN
ZWRpYVF1ZXJ5U3R5bGUgPSBudWxscHRyOwogfQogCi12b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVu
ZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBz
dHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciogbWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdy
YXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKQorYm9vbCBTY29wZVJ1bGVTZXRzOjpoYXNW
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpIGNvbnN0Cit7CisgICAgaWYgKG1fYXV0aG9y
U3R5bGUtPmhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChtX3VzZXJTdHlsZSAmJiBtX3VzZXJTdHlsZS0+aGFzVmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG1f
dXNlckFnZW50TWVkaWFRdWVyeVN0eWxlICYmIG1fdXNlckFnZW50TWVkaWFRdWVyeVN0eWxlLT5o
YXNWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcmllcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworUnVsZVNldDo6TWVkaWFRdWVyeVN0eWxlVXBkYXRl
VHlwZSBTY29wZVJ1bGVTZXRzOjpldmFsdXRlRHluYW1pY01lZGlhUXVlcnlSdWxlcyhjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IpCiB7Ci0gICAgLy8gVGhpcyBoYW5kbGVzIHNo
ZWV0cyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzdHlsZXNoZWV0IGxpc3Qgb25seS4gSW4gb3Ro
ZXIgY2FzZXMgdGhlIHN0eWxlIHJlc29sdmVyCi0gICAgLy8gbmVlZHMgdG8gYmUgcmVjb25zdHJ1
Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9yZGVyIG51bWJlcnMgd291
bGQgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIE1lZGlhUXVlcnlEeW5hbWljUmVzdWx0cyBtZWRp
YVF1ZXJ5RHluYW1pY1Jlc3VsdHM7CisgICAgYXV0byB1cGRhdGVUeXBlID0gUnVsZVNldDo6TWVk
aWFRdWVyeVN0eWxlVXBkYXRlVHlwZTo6Tm9uZTsKKworICAgIGF1dG8gZXZhbHVhdGUgPSBbJl0o
YXV0byYgcnVsZVNldCkgeworICAgICAgICBpZiAoIXJ1bGVTZXQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8gbmV3VXBkYXRlVHlwZSA9IHJ1bGVTZXQtPmV2YWx1dGVE
eW5hbWljTWVkaWFRdWVyeVJ1bGVzKGV2YWx1YXRvcik7CisgICAgICAgIGlmIChuZXdVcGRhdGVU
eXBlID4gdXBkYXRlVHlwZSkKKyAgICAgICAgICAgIHVwZGF0ZVR5cGUgPSBuZXdVcGRhdGVUeXBl
OworICAgICAgICByZXR1cm4gdXBkYXRlVHlwZSA9PSBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVV
cGRhdGVUeXBlOjpSZXNldDsKKyAgICB9OworCisgICAgaWYgKGV2YWx1YXRlKG1fYXV0aG9yU3R5
bGUpKQorICAgICAgICByZXR1cm4gdXBkYXRlVHlwZTsKKworICAgIGlmIChldmFsdWF0ZShtX3Vz
ZXJTdHlsZSkpCisgICAgICAgIHJldHVybiB1cGRhdGVUeXBlOworCisgICAgZXZhbHVhdGUobV91
c2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUpOworICAgIHJldHVybiB1cGRhdGVUeXBlOworfQogCit2
b2lkIFNjb3BlUnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cywgTWVkaWFRdWVyeUV2YWx1YXRvciog
bWVkaXVtLCBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzKQor
ewogICAgIGZvciAoYXV0byYgY3NzU2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NF
UlQoIWNzc1NoZWV0LT5kaXNhYmxlZCgpKTsKLSAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1
ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFsdWF0ZSgqY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCAm
bWVkaWFRdWVyeUR5bmFtaWNSZXN1bHRzKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldC0+Y29udGVudHMoKSwg
Km1lZGl1bSwgJm1fc3R5bGVSZXNvbHZlcik7CisgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1
bGVzRnJvbVNoZWV0KGNzc1NoZWV0LT5jb250ZW50cygpLCBjc3NTaGVldC0+bWVkaWFRdWVyaWVz
KCksICptZWRpdW0sIG1fc3R5bGVSZXNvbHZlcik7CiAgICAgICAgIGluc3BlY3RvckNTU09NV3Jh
cHBlcnMuY29sbGVjdEZyb21TdHlsZVNoZWV0SWZOZWVkZWQoY3NzU2hlZXQuZ2V0KCkpOwogICAg
IH0KIAotICAgIG1fc3R5bGVSZXNvbHZlci5hZGRNZWRpYVF1ZXJ5RHluYW1pY1Jlc3VsdHMobWVk
aWFRdWVyeUR5bmFtaWNSZXN1bHRzKTsKLQogICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0
KCk7CiAgICAgY29sbGVjdEZlYXR1cmVzKCk7CiB9CkBAIC0yMDAsNyArMjIwLDcgQEAgc3RhdGlj
IFZlY3RvcjxJbnZhbGlkYXRpb25SdWxlU2V0PiogZW5zdXJlSW52YWxpZGF0aW9uUnVsZVNldHMo
Y29uc3QgQXRvbVN0cmluZyYKICAgICAgICAgICAgIGF1dG8mIHJ1bGVTZXQgPSBtYXRjaEVsZW1l
bnRBcnJheVthcnJheUluZGV4XTsKICAgICAgICAgICAgIGlmICghcnVsZVNldCkKICAgICAgICAg
ICAgICAgICBydWxlU2V0ID0gbWFrZVVuaXF1ZTxSdWxlU2V0PigpOwotICAgICAgICAgICAgcnVs
ZVNldC0+YWRkUnVsZShmZWF0dXJlLnJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVhdHVy
ZS5zZWxlY3Rvckxpc3RJbmRleCk7CisgICAgICAgICAgICBydWxlU2V0LT5hZGRSdWxlKCpmZWF0
dXJlLnJ1bGUsIGZlYXR1cmUuc2VsZWN0b3JJbmRleCwgZmVhdHVyZS5zZWxlY3Rvckxpc3RJbmRl
eCk7CiAgICAgICAgICAgICBpZiAoZmVhdHVyZS5pbnZhbGlkYXRpb25TZWxlY3RvcikKICAgICAg
ICAgICAgICAgICBpbnZhbGlkYXRpb25TZWxlY3RvckFycmF5W2FycmF5SW5kZXhdLmFwcGVuZChm
ZWF0dXJlLmludmFsaWRhdGlvblNlbGVjdG9yKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTY29wZVJ1bGVTZXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNjb3BlUnVsZVNldHMuaAppbmRleCA0YjdhYTdmMjE3My4uNDRiNWM1OTYyNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2NvcGVSdWxlU2V0cy5oCkBAIC03OCw2ICs3
OCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRVc2VyQWdlbnRNZWRpYVF1ZXJ5U3R5bGUo
KTsKIAorICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdDsK
KyAgICBSdWxlU2V0OjpNZWRpYVF1ZXJ5U3R5bGVVcGRhdGVUeXBlIGV2YWx1dGVEeW5hbWljTWVk
aWFRdWVyeVJ1bGVzKGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImKTsKKwogICAgIFJ1bGVGZWF0
dXJlU2V0JiBtdXRhYmxlRmVhdHVyZXMoKTsKIAogICAgIGJvb2wmIGlzSW52YWxpZGF0aW5nU3R5
bGVXaXRoUnVsZVNldHMoKSB7IHJldHVybiBtX2lzSW52YWxpZGF0aW5nU3R5bGVXaXRoUnVsZVNl
dHM7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>