<?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>234097</bug_id>
          
          <creation_ts>2021-12-09 11:42:13 -0800</creation_ts>
          <short_desc>Teach the sampling profiler how to display origin data for B3 Wasm</short_desc>
          <delta_ts>2021-12-11 16:42:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1822241</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-09 11:42:13 -0800</bug_when>
    <thetext>So we can start to dig into where in a function we&apos;re spending time, not just which functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1822484</commentid>
    <comment_count>1</comment_count>
      <attachid>446653</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-09 19:05:26 -0800</bug_when>
    <thetext>Created attachment 446653
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823241</commentid>
    <comment_count>2</comment_count>
      <attachid>446895</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-11 12:16:11 -0800</bug_when>
    <thetext>Created attachment 446895
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823242</commentid>
    <comment_count>3</comment_count>
      <attachid>446895</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-11 12:22:26 -0800</bug_when>
    <thetext>Comment on attachment 446895
patch

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

&gt; Source/JavaScriptCore/wasm/WasmCalleeRegistry.h:88
&gt; +    void addPCToCodeOriginMap(Callee* callee, Box&lt;PCToCodeOriginMap&gt; originMap)
&gt; +    {
&gt; +        Locker locker { m_lock };
&gt; +        ASSERT(isValidCallee(callee));
&gt; +        auto addResult = m_pcToCodeOriginMaps.add(callee, WTFMove(originMap));
&gt; +        RELEASE_ASSERT(addResult.isNewEntry);
&gt; +    }
&gt; +
&gt; +    Box&lt;PCToCodeOriginMap&gt; codeOriginMap(Callee* callee)  WTF_REQUIRES_LOCK(m_lock)
&gt; +    {
&gt; +        ASSERT(isValidCallee(callee));
&gt; +        auto iter = m_pcToCodeOriginMaps.find(callee);
&gt; +        if (iter != m_pcToCodeOriginMaps.end())
&gt; +            return iter-&gt;value;
&gt; +        return nullptr;
&gt; +    }

Why don&apos;t we put m_codeOriginMap to the Callee instead of holding it in this hashmap?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823243</commentid>
    <comment_count>4</comment_count>
      <attachid>446895</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-11 12:27:18 -0800</bug_when>
    <thetext>Comment on attachment 446895
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/WasmCalleeRegistry.h:88
&gt;&gt; +    }
&gt; 
&gt; Why don&apos;t we put m_codeOriginMap to the Callee instead of holding it in this hashmap?

I didn&apos;t want to grow Callee by one pointer for a field that&apos;s non null only for debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823245</commentid>
    <comment_count>5</comment_count>
      <attachid>446895</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-11 12:29:38 -0800</bug_when>
    <thetext>Comment on attachment 446895
patch

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

r=me if EWS gets green.

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmCalleeRegistry.h:88
&gt;&gt;&gt; +    }
&gt;&gt; 
&gt;&gt; Why don&apos;t we put m_codeOriginMap to the Callee instead of holding it in this hashmap?
&gt; 
&gt; I didn&apos;t want to grow Callee by one pointer for a field that&apos;s non null only for debugging.

I think, if it is once enabled, it consumes significant amount of memory instead (HashTable is super large, it typically allocates 2x-4x more memory to maintain O(1) access. And we need to hold pair of Callee*, Box&lt;&gt;, which is 2x more than just having a pointer to Box&lt;&gt;), but so long as it is enabled in a certain case, I&apos;m OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823246</commentid>
    <comment_count>6</comment_count>
      <attachid>446897</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-11 12:30:40 -0800</bug_when>
    <thetext>Created attachment 446897
patch

try to fix some builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823247</commentid>
    <comment_count>7</comment_count>
      <attachid>446897</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-12-11 12:39:59 -0800</bug_when>
    <thetext>Comment on attachment 446897
patch

r=me if EWS gets green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823248</commentid>
    <comment_count>8</comment_count>
      <attachid>446898</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-12-11 12:45:57 -0800</bug_when>
    <thetext>Created attachment 446898
patch for landing

Trying to fix build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823281</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-11 16:41:09 -0800</bug_when>
    <thetext>Committed r286920 (245146@main): &lt;https://commits.webkit.org/245146@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 446898.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1823282</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-11 16:42:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/86370914&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446653</attachid>
            <date>2021-12-09 19:05:26 -0800</date>
            <delta_ts>2021-12-11 12:16:11 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>21245</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2NzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBA
CisyMDIxLTEyLTA5ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFByb2NlZHVyZTo6c2V0TmVlZHNQQ1RvT3JpZ2luTWFwIHNob3VsZCBjYWxsIENvZGU6OmZvcmNl
UHJlc2VydmF0aW9uT2ZCM09yaWdpbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNDA5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlIG5lZWQgdG8gZG8gdGhpcyB0byBlbnN1cmUgdGhlIHNhbXBsaW5n
IHByb2ZpbGVyIHdvcmtzIGluIEZUTC4KKyAgICAgICAgVGhlIHJlYXNvbiB0aGlzIHdhcyBzb21l
dGltZXMgd29ya2luZyB3YXMgQWlyOjpDb2RlJ3MgY29uc3RydWN0b3IKKyAgICAgICAgd2FzIGxv
b2tpbmcgYXQgUHJvY2VkdXJlJ3MgbV9uZWVkc1BDVG9PcmlnaW5NYXAgYmVmb3JlIGl0IHdhcyBp
bml0aWFsaXplZCwKKyAgICAgICAgaW4gaXRzIGNvbnN0cnVjdG9yLiBUaGlzIGlzIGJlY2F1c2Ug
UHJvY2VkdXJlIHdhcyBjb25zdHJ1Y3RpbmcgQ29kZQorICAgICAgICBiZWZvcmUgYWxsIGl0cyBm
aWVsZHMgd2VyZSBpbml0aWFsaXplZC4gVGhpcyBwYXRjaCBmaXhlcyB0aGF0IGJ1ZyB0bworICAg
ICAgICBjb25zdHJ1Y3QgQ29kZSBhZnRlciBQcm9jZWR1cmUgaGFzIGFsbCBpdHMgZmllbGRzIGlu
aXRpYWxpemVkLgorCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUuY3BwOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjpzZXROZWVkc1BDVG9PcmlnaW5NYXApOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNldE5lZWRzUENUb09yaWdpbk1hcCk6IERlbGV0
ZWQuCisKIDIwMjEtMTItMDkgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIGFuIG9wdGlvbiB0byBkdW1wIHRoZSBCMyBJUiBmb3IgYW4gYWxsb3dsaXN0IG9m
IFdhc20gZnVuY3Rpb24gaW5kaWNlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2
aXNpb24gMjg2NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29t
bW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsMTAgKzE0NCwxNCBA
QCBzdHJ1Y3QgSW1wdXJlQmxvY2tEYXRhIHsKIAogICAgIFJhbmdlU2V0PEhlYXBSYW5nZT4gcmVh
ZHM7IC8vIFRoaXMgb25seSBnZXRzIHVzZWQgZm9yIGZvcndhcmQgc3RvcmUgZWxpbWluYXRpb24u
CiAgICAgUmFuZ2VTZXQ8SGVhcFJhbmdlPiB3cml0ZXM7IC8vIFRoaXMgZ2V0cyB1c2VkIGZvciBi
b3RoIGxvYWQgYW5kIHN0b3JlIGVsaW1pbmF0aW9uLgotICAgIGJvb2wgZmVuY2U7CisgICAgYm9v
bCBmZW5jZSB7IGZhbHNlIH07CisgICAgYm9vbCB3cml0ZXNQaW5uZWQgeyBmYWxzZSB9OwogCiAg
ICAgTWVtb3J5VmFsdWVNYXAgc3RvcmVzQXRIZWFkOwogICAgIE1lbW9yeVZhbHVlTWFwIG1lbW9y
eVZhbHVlc0F0VGFpbDsKKworICAgIC8vIFRoaXMgTWFwcyB4LT55IGluICJ5ID0gV2FzbUFkZHJl
c3MoQHgpIgorICAgIEhhc2hNYXA8VmFsdWUqLCBWYWx1ZSo+IG1fd2FzbUFkZHJlc3Nlc0F0VGFp
bDsKIH07CiAKIGNsYXNzIENTRSB7CkBAIC0xODgsNiArMTkyLDE0IEBAIHB1YmxpYzoKIAogICAg
ICAgICAgICAgICAgIGlmIChtZW1vcnkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVtb3J5
VmFsdWVzQXRUYWlsLmFkZChtZW1vcnkpOworCisgICAgICAgICAgICAgICAgaWYgKFdhc21BZGRy
ZXNzVmFsdWUqIHdhc21BZGRyZXNzID0gdmFsdWUtPmFzPFdhc21BZGRyZXNzVmFsdWU+KCkpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGEubV93YXNtQWRkcmVzc2VzQXRUYWlsLmFkZCh3YXNtQWRk
cmVzcy0+Y2hpbGQoMCksIHdhc21BZGRyZXNzKTsKKworICAgICAgICAgICAgICAgIGlmIChlZmZl
Y3RzLndyaXRlc1Bpbm5lZCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhLndyaXRlc1Bpbm5l
ZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGRhdGEubV93YXNtQWRkcmVzc2VzQXRUYWls
LmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9uc0ludGVybmFsOjp2ZXJib3NlKQpA
QCAtMjM3LDE1ICsyNDksMjggQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAobV9wdXJlQ1NFLnBy
b2Nlc3MobV92YWx1ZSwgbV9kb21pbmF0b3JzKSkgewogICAgICAgICAgICAgQVNTRVJUKCFtX3Zh
bHVlLT5lZmZlY3RzKCkud3JpdGVzKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS0+ZWZm
ZWN0cygpLndyaXRlc1Bpbm5lZCk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKFdhc21BZGRyZXNzVmFs
dWUqIHdhc21BZGRyZXNzID0gbV92YWx1ZS0+YXM8V2FzbUFkZHJlc3NWYWx1ZT4oKSkgeworICAg
ICAgICAgICAgcHJvY2Vzc1dhc21BZGRyZXNzVmFsdWUod2FzbUFkZHJlc3MpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRWZmZWN0cyBlZmZlY3RzID0gbV92YWx1
ZS0+ZWZmZWN0cygpOworCisgICAgICAgIGlmIChlZmZlY3RzLndyaXRlc1Bpbm5lZCkgeworICAg
ICAgICAgICAgbV9kYXRhLndyaXRlc1Bpbm5lZCA9IHRydWU7CisgICAgICAgICAgICBtX2RhdGEu
bV93YXNtQWRkcmVzc2VzQXRUYWlsLmNsZWFyKCk7CisgICAgICAgIH0KKwogICAgICAgICBNZW1v
cnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CiAgICAgICAgIGlm
IChtZW1vcnkgJiYgcHJvY2Vzc01lbW9yeUJlZm9yZUNsb2JiZXIobWVtb3J5KSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBpZiAoSGVhcFJhbmdlIHdyaXRlcyA9IG1fdmFsdWUtPmVm
ZmVjdHMoKS53cml0ZXMpCisgICAgICAgIGlmIChIZWFwUmFuZ2Ugd3JpdGVzID0gZWZmZWN0cy53
cml0ZXMpCiAgICAgICAgICAgICBjbG9iYmVyKG1fZGF0YSwgd3JpdGVzKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChtZW1vcnkpCkBAIC02OTQsNiArNzE5LDYwIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBtYXRjaGVzOwogICAgIH0KIAorICAgIHZvaWQgcHJvY2Vzc1dhc21BZGRyZXNzVmFs
dWUoV2FzbUFkZHJlc3NWYWx1ZSogd2FzbUFkZHJlc3MpCisgICAgeworICAgICAgICBWYWx1ZSog
cHRyID0gd2FzbUFkZHJlc3MtPmNoaWxkKDApOworCisgICAgICAgIGlmIChWYWx1ZSogcmVwbGFj
ZW1lbnQgPSBtX2RhdGEubV93YXNtQWRkcmVzc2VzQXRUYWlsLmdldChwdHIpKSB7CisgICAgICAg
ICAgICB3YXNtQWRkcmVzcy0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7CisgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fZGF0YS53cml0ZXNQaW5uZWQpIHsKKyAgICAgICAgICAgIC8vIFNv
bWVvbmUgYmVmb3JlIHVzIGluIHRoaXMgYmxvY2sgd3JvdGUgdG8gcGlubmVkLiBTbyB3ZSBoYXZl
IG5vCisgICAgICAgICAgICAvLyBob3BlIG9mIGZpbmRpbmcgYSBtYXRjaCBpZiB0aGUgYWJvdmUg
c2VhcmNoIGZhaWxlZC4KKyAgICAgICAgICAgIG1fZGF0YS5tX3dhc21BZGRyZXNzZXNBdFRhaWwu
YWRkKHB0ciwgd2FzbUFkZHJlc3MpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgVmFsdWUqIGNhbmRpZGF0ZVJlcGxhY2VtZW50ID0gbnVsbHB0cjsKKyAgICAgICAg
QmFzaWNCbG9jayogZG9taW5hdG9yID0gbnVsbHB0cjsKKyAgICAgICAgbV9kb21pbmF0b3JzLmZv
ckFsbFN0cmljdERvbWluYXRvcnNPZihtX2Jsb2NrLCBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSB7
CisgICAgICAgICAgICBpZiAoY2FuZGlkYXRlUmVwbGFjZW1lbnQpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBpZiAoVmFsdWUqIHJlcGxhY2VtZW50ID0gbV9pbXB1cmVC
bG9ja0RhdGFbYmxvY2tdLm1fd2FzbUFkZHJlc3Nlc0F0VGFpbC5nZXQocHRyKSkgeworICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZVJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgICAgICAg
ICAgICAgZG9taW5hdG9yID0gYmxvY2s7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg
ICAgICAgIGlmICghY2FuZGlkYXRlUmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgIG1fZGF0YS5t
X3dhc21BZGRyZXNzZXNBdFRhaWwuYWRkKHB0ciwgd2FzbUFkZHJlc3MpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAg
ICAgICAgd29ya2xpc3QucHVzaEFsbChtX2Jsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAg
IHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAg
ICBpZiAoYmxvY2sgPT0gZG9taW5hdG9yKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgaWYgKG1faW1wdXJlQmxvY2tEYXRhW2Jsb2NrXS53cml0ZXNQaW5uZWQpIHsKKyAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVSZXBsYWNlbWVudCA9IG51bGxwdHI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKGJs
b2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2FuZGlkYXRl
UmVwbGFjZW1lbnQpIHsKKyAgICAgICAgICAgIHdhc21BZGRyZXNzLT5yZXBsYWNlV2l0aElkZW50
aXR5KGNhbmRpZGF0ZVJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBtX2RhdGEubV93YXNtQWRkcmVzc2VzQXRUYWlsLmFkZChw
dHIsIHdhc21BZGRyZXNzKTsKKyAgICB9CisKICAgICBQcm9jZWR1cmUmIG1fcHJvYzsKIAogICAg
IERvbWluYXRvcnMmIG1fZG9taW5hdG9yczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMjg2NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsMTAgQEAg
UHJvY2VkdXJlOjpQcm9jZWR1cmUoKQogICAgIDogbV9jZmcobmV3IENGRygqdGhpcykpCiAgICAg
LCBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQogICAgICwgbV9ieXByb2R1Y3RzKG1ha2VVbmlx
dWU8T3BhcXVlQnlwcm9kdWN0cz4oKSkKLSAgICAsIG1fY29kZShuZXcgQWlyOjpDb2RlKCp0aGlz
KSkKIHsKKyAgICAvLyBJbml0aWFsaXplIGFsbCBvdXIgZmllbGRzIGJlZm9yZSBjb25zdHJ1Y3Rp
bmcgQWlyOjpDb2RlIHNpbmNlCisgICAgLy8gaXQgbG9va3MgaW50byBvdXIgZmllbGRzLgorICAg
IG1fY29kZSA9IHN0ZDo6dW5pcXVlX3B0cjxBaXI6OkNvZGU+KG5ldyBBaXI6OkNvZGUoKnRoaXMp
KTsKICAgICBtX2NvZGUtPnNldE51bUVudHJ5cG9pbnRzKG1fbnVtRW50cnlwb2ludHMpOwogfQog
CkBAIC00ODYsNiArNDg4LDEyIEBAIHZvaWQgUHJvY2VkdXJlOjpzZXRTaG91bGREdW1wSVIoKQog
ICAgIG1fY29kZS0+Zm9yY2VQcmVzZXJ2YXRpb25PZkIzT3JpZ2lucygpOwogfQogCit2b2lkIFBy
b2NlZHVyZTo6c2V0TmVlZHNQQ1RvT3JpZ2luTWFwKCkKK3sgCisgICAgbV9uZWVkc1BDVG9Pcmln
aW5NYXAgPSB0cnVlOworICAgIG1fY29kZS0+Zm9yY2VQcmVzZXJ2YXRpb25PZkIzT3JpZ2lucygp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKIAogI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24g
Mjg2NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3NSw3ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUmVnaXN0ZXJTZXQgbXV0YWJsZUdQUnMoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWdp
c3RlclNldCBtdXRhYmxlRlBScygpOwogCi0gICAgdm9pZCBzZXROZWVkc1BDVG9PcmlnaW5NYXAo
KSB7IG1fbmVlZHNQQ1RvT3JpZ2luTWFwID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0TmVlZHNQQ1Rv
T3JpZ2luTWFwKCk7CiAgICAgYm9vbCBuZWVkc1BDVG9PcmlnaW5NYXAoKSB7IHJldHVybiBtX25l
ZWRzUENUb09yaWdpbk1hcDsgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmcmVlVW5u
ZWVkZWRCM1ZhbHVlc0FmdGVyTG93ZXJpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMjg2NzkxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBA
QCBzdGF0aWMgdm9pZCBkZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IoQ0NhCiBDb2RlOjpDb2RlKFBy
b2NlZHVyZSYgcHJvYykKICAgICA6IG1fcHJvYyhwcm9jKQogICAgICwgbV9jZmcobmV3IENGRygq
dGhpcykpCi0gICAgLCBtX3ByZXNlcnZlQjNPcmlnaW5zKHByb2MubmVlZHNQQ1RvT3JpZ2luTWFw
KCkgfHwgT3B0aW9uczo6ZHVtcEFpckdyYXBoQXRFYWNoUGhhc2UoKSB8fCBPcHRpb25zOjpkdW1w
RlRMRGlzYXNzZW1ibHkoKSkKKyAgICAsIG1fcHJlc2VydmVCM09yaWdpbnMoT3B0aW9uczo6ZHVt
cEFpckdyYXBoQXRFYWNoUGhhc2UoKSB8fCBPcHRpb25zOjpkdW1wRlRMRGlzYXNzZW1ibHkoKSkK
ICAgICAsIG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCiAgICAgLCBtX2RlZmF1bHRQcm9sb2d1
ZUdlbmVyYXRvcihjcmVhdGVTaGFyZWRUYXNrPFByb2xvZ3VlR2VuZXJhdG9yRnVuY3Rpb24+KCZk
ZWZhdWx0UHJvbG9ndWVHZW5lcmF0b3IpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDb21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZpc2lvbiAyODY3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcg
QEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZt
LnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENU
b09yaWdpbk1hcCBvcmlnaW5NYXAgPSBzdGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgp
OwotICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1h
a2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwg
V1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7
CisgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFr
ZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcjo6SlNDb2RlT3JpZ2luTWFwLCB2bSwgV1RGTW92ZShvcmlnaW5N
YXApKSwgKnN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAg
Q29kZUxvY2F0aW9uTGFiZWw8SlNFbnRyeVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+
Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgwKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcAkocmV2aXNpb24gMjg2NzkxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIldhc21P
cGNvZGVPcmlnaW4uaCIKIAogI2lmIENPTVBJTEVSKE1TVkMpCiAvLyBTZWUgaHR0cHM6Ly9tc2Ru
Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS80d3owNzI2OC5hc3B4CkBAIC05OSwyMCArMTAw
LDE3IEBAIHByaXZhdGU6CiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtKQotICAgIDogbV92
bSh2bSkKLSAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29k
ZU9yaWdpbk1hcHBpbmcoKSkKKyAgICA6IG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1
aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKIHsgfQogCiBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIm
JiBvdGhlcikKLSAgICA6IG1fdm0ob3RoZXIubV92bSkKLSAgICAsIG1fY29kZVJhbmdlcyhXVEZN
b3ZlKG90aGVyLm1fY29kZVJhbmdlcykpCisgICAgOiBtX2NvZGVSYW5nZXMoV1RGTW92ZShvdGhl
ci5tX2NvZGVSYW5nZXMpKQogICAgICwgbV9zaG91bGRCdWlsZE1hcHBpbmcob3RoZXIubV9zaG91
bGRCdWlsZE1hcHBpbmcpCiB7IH0KIAogI2lmIEVOQUJMRShGVExfSklUKQotUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mIHZtLCBCMzo6UENUb09y
aWdpbk1hcCYmIGIzUENUb09yaWdpbk1hcCkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3Nob3Vs
ZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCitQ
Q1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihKU1RhZywg
Vk0mIHZtLCBCMzo6UENUb09yaWdpbk1hcCBiM1BDVG9PcmlnaW5NYXApCisgICAgOiBtX3Nob3Vs
ZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCiB7
CiAgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTI3
LDYgKzEyNSwyMiBAQCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luCiB9
CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKK1BDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFdhc21UYWcsIEIzOjpQQ1RvT3Jp
Z2luTWFwIGIzUENUb09yaWdpbk1hcCkKKyAgICA6IG1fc2hvdWxkQnVpbGRNYXBwaW5nKHRydWUp
Cit7CisgICAgZm9yIChjb25zdCBCMzo6UENUb09yaWdpbk1hcDo6T3JpZ2luUmFuZ2UmIG9yaWdp
blJhbmdlIDogYjNQQ1RvT3JpZ2luTWFwLnJhbmdlcygpKSB7CisgICAgICAgIEIzOjpPcmlnaW4g
YjNPcmlnaW4gPSBvcmlnaW5SYW5nZS5vcmlnaW47CisgICAgICAgIGlmIChiM09yaWdpbikgewor
ICAgICAgICAgICAgV2FzbTo6T3Bjb2RlT3JpZ2luIHdhc21PcmlnaW4geyBiM09yaWdpbiB9Owor
ICAgICAgICAgICAgLy8gV2Ugc3Rhc2ggdGhlIGxvY2F0aW9uIGludG8gYSBCeXRlY29kZUluZGV4
LgorICAgICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJlbCwgQ29kZU9yaWdpbihC
eXRlY29kZUluZGV4KHdhc21PcmlnaW4ubG9jYXRpb24oKSkpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBhcHBlbmRJdGVtKG9yaWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9yaWdpbk1h
cEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3JpZ2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCiB2b2lk
IFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFi
ZWwgbGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiB7CiAgICAgaWYgKCFtX3No
b3VsZEJ1aWxkTWFwcGluZykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0Nv
ZGVPcmlnaW5NYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BD
VG9Db2RlT3JpZ2luTWFwLmgJKHJldmlzaW9uIDI4Njc5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
MTMgQEAgcHVibGljOgogICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXImJiBvdGhlcik7CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBQQ1RvQ29k
ZU9yaWdpbk1hcEJ1aWxkZXIoVk0mLCBCMzo6UENUb09yaWdpbk1hcCYmKTsKKyAgICBlbnVtIEpT
VGFnIHsgSlNDb2RlT3JpZ2luTWFwIH07CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKEpT
VGFnLCBWTSYsIEIzOjpQQ1RvT3JpZ2luTWFwKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZX0IzSklUKQorICAgIGVudW0gV2FzbVRhZyB7IFdhc21Db2RlT3JpZ2luTWFwIH07Cisg
ICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFdhc21UYWcsIEIzOjpQQ1RvT3JpZ2luTWFwKTsK
ICNlbmRpZgogCiAgICAgdm9pZCBhcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCwgY29u
c3QgQ29kZU9yaWdpbiYpOwpAQCAtNjksNyArNzUsNiBAQCBwcml2YXRlOgogICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW47CiAgICAgfTsKIAotICAgIFZNJiBtX3ZtOwogICAgIFZlY3RvcjxD
b2RlUmFuZ2U+IG1fY29kZVJhbmdlczsKICAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOwog
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5n
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAyODY3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYgKzEy
Niw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgIGFzc2VydElzSGVsZChXYXNtOjpDYWxsZWVS
ZWdpc3RyeTo6c2luZ2xldG9uKCkuZ2V0TG9jaygpKTsKICAgICAgICAgICAgIGF1dG8qIHdhc21D
YWxsZWUgPSB1bnNhZmVDYWxsZWUuYXNXYXNtQ2FsbGVlKCk7CiAgICAgICAgICAgICBpZiAoV2Fz
bTo6Q2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmlzVmFsaWRDYWxsZWUod2FzbUNhbGxlZSkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY29kZU9yaWdpbk1hcCkKICAgICAgICAgICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50LCBXYXNtOjpDYWxsZWUgd291bGQgYmUgZHlpbmcgKHJlZiBj
b3VudCBpcyAwKSwgYnV0IGl0cyBmaWVsZHMgYXJlIHN0aWxsIGxpdmUuCiAgICAgICAgICAgICAg
ICAgLy8gQW5kIHdlIGNhbiBzYWZlbHkgY29weSBXYXNtOjpJbmRleE9yTmFtZSBldmVuIHdoZW4g
YW55IGxvY2sgaXMgaGVsZCBieSBzdXNwZW5kZWQgdGhyZWFkcy4KICAgICAgICAgICAgICAgICBz
dGFja1RyYWNlW21fZGVwdGhdLndhc21JbmRleE9yTmFtZSA9IHdhc21DYWxsZWUtPmluZGV4T3JO
YW1lKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDI4Njc5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OTYsNyAr
MzU5Niw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KIAogICAg
IHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQcmludFN0cmVhbSYgb3V0LCBCMzo6T3Jp
Z2luIG9yaWdpbikgewogICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKLSAgICAgICAgICAgIG91
dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIE9wY29kZU9yaWdpbihvcmlnaW4pKTsKICAg
ICB9KTsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAy
ODY3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNTQsOSArMzI1NCwxNyBAQCBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAKICAgICBjb21waWxhdGlvbkNvbnRleHQud2FzbUVu
dHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVscGVycz4oKTsKIAorICAgIGlmIChPcHRp
b25zOjp1c2VTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBkbyB0aGlzIGJhc2VkIG9uIFZNIHJlbGV2YW50IGluZm8uCisgICAgICAgIC8vIEJ1dCB0aGlz
IGlzIGdvb2QgZW5vdWdoIGZvciBvdXIgb3duIHByb2ZpbGluZyBmb3Igbm93LgorICAgICAgICAv
LyBXaGVuIHdlIHN0YXJ0IHRvIHNob3cgdGhpcyBkYXRhIGluIHdlYiBpbnNwZWN0b3IsIHdlJ2xs
CisgICAgICAgIC8vIG5lZWQgb3RoZXIgaG9va3MgaW50byB0aGlzIGJlc2lkZXMgdGhlIEpTQyBv
cHRpb24uCisgICAgICAgIHByb2NlZHVyZS5zZXROZWVkc1BDVG9PcmlnaW5NYXAoKTsKKyAgICB9
CisKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwg
T3JpZ2luIG9yaWdpbikgewogICAgICAgICBpZiAob3JpZ2luLmRhdGEoKSkKLSAgICAgICAgICAg
IG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7
CisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIE9wY29kZU9yaWdpbihvcmlnaW4pKTsK
ICAgICB9KTsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0
YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVycygpIG9yCkBAIC0zMjk5LDYgKzMz
MDcsMTQgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3RpbwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0
aW9uQ29udGV4dCYgY29tcGlsYXRpb25Db250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQor
eworICAgIGlmIChPcHRpb25zOjp1c2VTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAgICAgICAgQjM6
OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gY29tcGlsYXRpb25Db250ZXh0LnByb2NlZHVyZS0+
cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICAgICAgY29tcGlsYXRpb25Db250ZXh0LnBjVG9D
b2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1hcD4oUENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6V2FzbUNvZGVPcmlnaW5NYXAs
IFdURk1vdmUob3JpZ2luTWFwKSksIGxpbmtCdWZmZXIpOworICAgIH0KK30KKwogdm9pZCBjb21w
dXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhj
ZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24sIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKIHsKICAgICBpZiAoIWNvbnRleHQucHJvY2VkdXJlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAy
ODY3OTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJKSVRPcGFxdWVCeXBy
b2R1Y3RzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKICNpbmNsdWRlICJXYXNt
Q29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2FzbUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAi
V2FzbU1lbW9yeS5oIgpAQCAtNTEsMTIgKzUyLDE0IEBAIHN0cnVjdCBDb21waWxhdGlvbkNvbnRl
eHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVyRW50cnlwb2lu
dEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50cnlwb2ludEpJ
VDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVudHJ5cG9pbnRC
eXByb2R1Y3RzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmUg
eyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+IHByb2NlZHVy
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IHBjVG9Db2RlT3JpZ2lu
TWFwOwogfTsKIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBT
dHJpbmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlv
bkRhdGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4m
LCB1bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3Jt
YXRpb24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5k
ZXgsIHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRy
KTsKIAogdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxv
Y2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50
ZXJuYWxGdW5jdGlvbiosIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsK
K3ZvaWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtC
dWZmZXImKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI4
Njc5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVSZWdpc3RyeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIApAQCAtNTMsNiArNTQsMjMgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OwogICAgICAgICBtX2Nh
bGxlZVNldC5yZW1vdmUoY2FsbGVlKTsKKyAgICAgICAgbV9wY1RvQ29kZU9yaWdpbk1hcHMucmVt
b3ZlKGNhbGxlZSk7CisgICAgfQorCisgICAgdm9pZCBhZGRQQ1RvQ29kZU9yaWdpbk1hcChDYWxs
ZWUqIGNhbGxlZSwgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2RlT3JpZ2luTWFwPiBvcmlnaW5NYXAp
CisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fY2FsbGVlU2V0LmNvbnRhaW5zKGNhbGxlZSkpOworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fcGNUb0NvZGVPcmlnaW5NYXBzLmFkZChjYWxsZWUsIFdURk1vdmUob3JpZ2lu
TWFwKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZFBDVG9Db2RlT3JpZ2luTWFwKENhbGxlZSogY2FsbGVlLCBzdGQ6
OnVuaXF1ZV9wdHI8UENUb0NvZGVPcmlnaW5NYXA+IG9yaWdpbk1hcCkKKyAgICB7CisgICAgICAg
IExvY2tlciBsb2NrZXIgeyBtX2xvY2sgfTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9jYWxs
ZWVTZXQuY29udGFpbnMoY2FsbGVlKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9wY1Rv
Q29kZU9yaWdpbk1hcHMuYWRkKGNhbGxlZSwgV1RGTW92ZShvcmlnaW5NYXApKTsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KIAogICAgIGNvbnN0
IEhhc2hTZXQ8Q2FsbGVlKj4mIGFsbENhbGxlZXMoKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2sp
CkBAIC02NywxMSArODUsMjEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9jYWxsZWVTZXQu
Y29udGFpbnMoY2FsbGVlKTsKICAgICB9CiAKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcCogY29kZU9y
aWdpbk1hcChDYWxsZWUqIGNhbGxlZSkgIFdURl9SRVFVSVJFU19MT0NLKG1fbG9jaykKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzVmFsaWRDYWxsZWUoY2FsbGVlKSk7CisgICAgICAg
IGF1dG8gaXRlciA9IG1fcGNUb0NvZGVPcmlnaW5NYXBzLmZpbmQoY2FsbGVlKTsKKyAgICAgICAg
aWYgKGl0ZXIgIT0gbV9wY1RvQ29kZU9yaWdpbk1hcHMuZW5kKCkpCisgICAgICAgICAgICByZXR1
cm4gaXRlci0+dmFsdWUuZ2V0KCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwog
ICAgIENhbGxlZVJlZ2lzdHJ5KCkgPSBkZWZhdWx0OwogCiBwcml2YXRlOgogICAgIExvY2sgbV9s
b2NrOwogICAgIEhhc2hTZXQ8Q2FsbGVlKj4gbV9jYWxsZWVTZXQgV1RGX0dVQVJERURfQllfTE9D
SyhtX2xvY2spOworICAgIEhhc2hNYXA8Q2FsbGVlKiwgc3RkOjp1bmlxdWVfcHRyPFBDVG9Db2Rl
T3JpZ2luTWFwPj4gbV9wY1RvQ29kZU9yaWdpbk1hcHMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xv
Y2spOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI4Njc5MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNt
QjNJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNt
Q2FsbGVlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKICNpbmNsdWRl
ICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC05
Miw2ICs5Myw4IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBW
ZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlv
bkhhbmRsZXJMb2NhdGlvbnM7CiAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMo
ZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlu
a0J1ZmZlcik7CiAKKyAgICBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1
ZmZlcik7CisKICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21w
aWxhdGlvbj4oCiAgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNo
b3VsZER1bXBJUigpIHx8IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6
Ok9NR01vZGUpLCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5
IE9NRyBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJl
LnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rp
b25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0
aW9uSW5kZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4
dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKQEAgLTEwNiw2ICsxMDksOSBAQCB2b2lkIE9N
R1BsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxv
Y2stPm1fb21nQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKICAgICAgICAgZW50cnlwb2ludCA9
IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCisgICAgICAgIGlmIChjb250ZXh0LnBjVG9Db2RlT3Jp
Z2luTWFwKQorICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9D
b2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShjb250ZXh0LnBjVG9Db2RlT3JpZ2lu
TWFwKSk7CisKICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIg
Y2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVu
YWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0
IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2Rl
IGFuZCB0aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0
ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNl
dCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uaAkocmV2aXNp
b24gMjg2NzkxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFT
U0VSVChzdGF0aWNfY2FzdDx1aW50MzJfdD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgICAgICBw
YWNrZWREYXRhID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvcGNvZGUpIDw8IDMyKSB8IG9mZnNl
dDsKICAgICB9CisgICAgT3Bjb2RlT3JpZ2luKEIzOjpPcmlnaW4gb3JpZ2luKQorICAgICAgICA6
IHBhY2tlZERhdGEoYml0d2lzZV9jYXN0PHVpbnQ2NF90PihvcmlnaW4pKQorICAgIHsKKyAgICB9
CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446895</attachid>
            <date>2021-12-11 12:16:11 -0800</date>
            <delta_ts>2021-12-11 12:30:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>25942</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDIxLTEyLTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRlYWNoIHRoZSBzYW1wbGluZyBwcm9maWxlciBob3cgdG8gZGlzcGxheSBvcmlnaW4gZGF0YSBm
b3IgQjMgV2FzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM0MDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB0ZWFjaGVzIHRoZSBTYW1wbGluZ1Byb2ZpbGVyIGhvdyB0byBnYXRoZXIgb3JpZ2lu
IGRhdGEgZm9yCisgICAgICAgIFdhc20uIFdlIHJldXNlIHRoZSBQQ1RvQ29kZU9yaWdpbk1hcCBm
cm9tIEpTLCBhbmQgc3RvcmUgdGhlIHdhc20KKyAgICAgICAgZnVuY3Rpb24gb2Zmc2V0IGRhdGEg
aW5zaWRlIG9mIENvZGVPcmlnaW4ncyBCeXRlY29kZUluZGV4LgorICAgICAgICAKKyAgICAgICAg
Rm9yIG5vdywgdGhpcyBwYXRjaCBpcyBvbmx5IGRvaW5nIHRoaXMgZm9yIEIzLCBiZWNhdXNlIHRo
ZSBBaXIgYmFja2VuZAorICAgICAgICBkb2Vzbid0IGN1cnJlbnRseSBnZW5lcmF0ZSBmaWxsZWQg
aW4gT3Bjb2RlT3JpZ2luIGRhdGEuIFdlJ2xsIGZpeCB0aGF0CisgICAgICAgIGluOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MTgyCisgICAgICAgIAorICAgICAg
ICBBbHNvLCB0aGlzIGNhcGFiaWxpdHkgaXNuJ3QgeWV0IHN1cHBvcnRlZCBpbiBXZWIgSW5zcGVj
dG9yLiBXZSdsbCB3YW50CisgICAgICAgIHRvIGRvIHRoYXQgaW4gYSBmdXR1cmUgY2hhbmdlIGFz
IHdlIGltcHJvdmUgV2ViIEluc3BlY3RvcidzIGFiaWxpdHkgdG8KKyAgICAgICAgZGVidWcgV2Fz
bSBjb2RlLiBXaGVuIHRoYXQgdGltZSBjb21lcywgd2UnbGwgaGF2ZSB0byBnZW5lcmF0ZSB0aGUK
KyAgICAgICAgUENUb0NvZGVPcmlnaW5NYXAgYmFzZWQgb24gZGVidWdnaW5nIGluZm8sIGFuZCBu
b3QganVzdCAndXNlU2FtcGxpbmdQcm9maWxlcicKKyAgICAgICAgSlNDIG9wdGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBkYXRhIG5vdyBzaG93cyB1cCBsaWtlIHRoaXMgZm9yIGhvdHRlc3Qg
Ynl0ZWNvZGVzOgorICAgICAgICAKKyAgICAgICAgSG90dGVzdCBieXRlY29kZXMgYXMgPG51bVNh
bXBsZXMgICAnZnVuY3Rpb25OYW1lI2hhc2g6SklUVHlwZTpieXRlY29kZUluZGV4Jz4KKyAgICAg
ICAgICAgNTI0ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzczXTpPTUc6MHgyMWEnCisgICAgICAg
ICAgIDQxNCAgICAnPD8+Lndhc20tZnVuY3Rpb25bMjM2M106T01HOjB4MWFlJworICAgICAgICAg
ICAzOTUgICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNzNdOk9NRzoweDQxOCcKKyAgICAgICAgICAg
MzU0ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzczXTpPTUc6MHgzNGYnCisgICAgICAgICAgIDI3
MCAgICAnPD8+Lndhc20tZnVuY3Rpb25bMjM3M106T01HOjB4MzUyJworICAgICAgICAgICAyNTYg
ICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNjNdOk9NRzoweDE1MicKKworCisgICAgICAgICogZnRs
L0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKToKKyAgICAgICAgKiBqaXQvUENU
b0NvZGVPcmlnaW5NYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6cmVjb3JkSklURnJhbWUpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAg
ICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpvcmln
aW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFu
ZENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OndvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0
ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNh
bGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5Lmg6CisgICAgICAgIChK
U0M6Oldhc206OkNhbGxlZVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQ2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OmFkZFBDVG9Db2RlT3JpZ2luTWFwKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OldURl9SRVFVSVJFU19MT0NLKToKKyAgICAgICAg
KiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29y
ayk6CisgICAgICAgICogd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6Oldh
c206Ok9wY29kZU9yaWdpbjo6T3Bjb2RlT3JpZ2luKToKKwogMjAyMS0xMi0xMSAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0b21hdGljYWxseSBmb3JiaWQgSlMg
ZXhlY3V0aW9uIHdoZW4gd2UgdGhyb3cgYSBUZXJtaW5hdGlvbkV4Y2VwdGlvbi4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMjg2ODgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2lu
dDo6UmUKIAogICAgIGlmICh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkp
IHsKICAgICAgICAgQjM6OlBDVG9PcmlnaW5NYXAgb3JpZ2luTWFwID0gc3RhdGUucHJvYy0+cmVs
ZWFzZVBDVG9PcmlnaW5NYXAoKTsKLSAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLm1fcGNU
b0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFwPihQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIodm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXIt
PmIzQ29kZUxpbmtCdWZmZXIpOworICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24ubV9wY1Rv
Q29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5NYXA+KFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OkpTQ29kZU9yaWdpbk1hcCwg
dm0sIFdURk1vdmUob3JpZ2luTWFwKSksICpzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZm
ZXIpOwogICAgIH0KIAogICAgIENvZGVMb2NhdGlvbkxhYmVsPEpTRW50cnlQdHJUYWc+IGxhYmVs
ID0gc3RhdGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mPEpTRW50cnlQ
dHJUYWc+KHN0YXRlLnByb2MtPmNvZGUoKS5lbnRyeXBvaW50TGFiZWwoMCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHAJKHJldmlz
aW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQjNQQ1Rv
T3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKKyNpbmNsdWRlICJXYXNtT3Bjb2RlT3JpZ2luLmgiCiAKICNpZiBDT01QSUxFUihNU1ZDKQog
Ly8gU2VlIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvNHd6MDcyNjgu
YXNweApAQCAtOTksMjAgKzEwMCwxNyBAQCBwcml2YXRlOgogfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCiAKIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KFZNJiB2bSkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5z
aG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCisgICAgOiBtX3Nob3VsZEJ1aWxk
TWFwcGluZyh2bS5zaG91bGRCdWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCiB7IH0KIAog
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyJiYgb3RoZXIpCi0gICAgOiBtX3ZtKG90aGVyLm1fdm0pCi0gICAg
LCBtX2NvZGVSYW5nZXMoV1RGTW92ZShvdGhlci5tX2NvZGVSYW5nZXMpKQorICAgIDogbV9jb2Rl
UmFuZ2VzKFdURk1vdmUob3RoZXIubV9jb2RlUmFuZ2VzKSkKICAgICAsIG1fc2hvdWxkQnVpbGRN
YXBwaW5nKG90aGVyLm1fc2hvdWxkQnVpbGRNYXBwaW5nKQogeyB9CiAKICNpZiBFTkFCTEUoRlRM
X0pJVCkKLVBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
KFZNJiB2bSwgQjM6OlBDVG9PcmlnaW5NYXAmJiBiM1BDVG9PcmlnaW5NYXApCi0gICAgOiBtX3Zt
KHZtKQotICAgICwgbV9zaG91bGRCdWlsZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2Rl
T3JpZ2luTWFwcGluZygpKQorUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIoSlNUYWcsIFZNJiB2bSwgQjM6OlBDVG9PcmlnaW5NYXAgYjNQQ1RvT3JpZ2lu
TWFwKQorICAgIDogbV9zaG91bGRCdWlsZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2Rl
T3JpZ2luTWFwcGluZygpKQogewogICAgIGlmICghbV9zaG91bGRCdWlsZE1hcHBpbmcpCiAgICAg
ICAgIHJldHVybjsKQEAgLTEyNyw2ICsxMjUsMjIgQEAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OjpQQ1RvQ29kZU9yaWdpbgogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNK
SVQpCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihX
YXNtVGFnLCBCMzo6UENUb09yaWdpbk1hcCBiM1BDVG9PcmlnaW5NYXApCisgICAgOiBtX3Nob3Vs
ZEJ1aWxkTWFwcGluZyh0cnVlKQoreworICAgIGZvciAoY29uc3QgQjM6OlBDVG9PcmlnaW5NYXA6
Ok9yaWdpblJhbmdlJiBvcmlnaW5SYW5nZSA6IGIzUENUb09yaWdpbk1hcC5yYW5nZXMoKSkgewor
ICAgICAgICBCMzo6T3JpZ2luIGIzT3JpZ2luID0gb3JpZ2luUmFuZ2Uub3JpZ2luOworICAgICAg
ICBpZiAoYjNPcmlnaW4pIHsKKyAgICAgICAgICAgIFdhc206Ok9wY29kZU9yaWdpbiB3YXNtT3Jp
Z2luIHsgYjNPcmlnaW4gfTsKKyAgICAgICAgICAgIC8vIFdlIHN0YXNoIHRoZSBsb2NhdGlvbiBp
bnRvIGEgQnl0ZWNvZGVJbmRleC4KKyAgICAgICAgICAgIGFwcGVuZEl0ZW0ob3JpZ2luUmFuZ2Uu
bGFiZWwsIENvZGVPcmlnaW4oQnl0ZWNvZGVJbmRleCh3YXNtT3JpZ2luLmxvY2F0aW9uKCkpKSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXBwZW5kSXRlbShvcmlnaW5SYW5nZS5sYWJl
bCwgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpkZWZhdWx0Q29kZU9yaWdpbigpKTsKKyAgICB9
Cit9CisjZW5kaWYKKwogdm9pZCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmFwcGVuZEl0ZW0o
TWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQogewogICAgIGlmICghbV9zaG91bGRCdWlsZE1hcHBpbmcpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCShyZXZpc2lvbiAyODY4ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDcgKzUzLDEzIEBAIHB1YmxpYzoKICAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1
aWxkZXIoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyJiYgb3RoZXIpOwogCiAjaWYgRU5BQkxFKEZU
TF9KSVQpCi0gICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFZNJiwgQjM6OlBDVG9PcmlnaW5N
YXAmJik7CisgICAgZW51bSBKU1RhZyB7IEpTQ29kZU9yaWdpbk1hcCB9OworICAgIFBDVG9Db2Rl
T3JpZ2luTWFwQnVpbGRlcihKU1RhZywgVk0mLCBCMzo6UENUb09yaWdpbk1hcCk7CisjZW5kaWYK
KworI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9CM0pJVCkKKyAgICBlbnVtIFdhc21UYWcgeyBXYXNt
Q29kZU9yaWdpbk1hcCB9OworICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihXYXNtVGFnLCBC
Mzo6UENUb09yaWdpbk1hcCk7CiAjZW5kaWYKIAogICAgIHZvaWQgYXBwZW5kSXRlbShNYWNyb0Fz
c2VtYmxlcjo6TGFiZWwsIGNvbnN0IENvZGVPcmlnaW4mKTsKQEAgLTY5LDcgKzc1LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIH07CiAKLSAgICBWTSYg
bV92bTsKICAgICBWZWN0b3I8Q29kZVJhbmdlPiBtX2NvZGVSYW5nZXM7CiAgICAgYm9vbCBtX3No
b3VsZEJ1aWxkTWFwcGluZzsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gMjg2ODgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMCw2ICsxMzAsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgLy8g
QW5kIHdlIGNhbiBzYWZlbHkgY29weSBXYXNtOjpJbmRleE9yTmFtZSBldmVuIHdoZW4gYW55IGxv
Y2sgaXMgaGVsZCBieSBzdXNwZW5kZWQgdGhyZWFkcy4KICAgICAgICAgICAgICAgICBzdGFja1Ry
YWNlW21fZGVwdGhdLndhc21JbmRleE9yTmFtZSA9IHdhc21DYWxsZWUtPmluZGV4T3JOYW1lKCk7
CiAgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXS53YXNtQ29tcGlsYXRpb25Nb2Rl
ID0gd2FzbUNhbGxlZS0+Y29tcGlsYXRpb25Nb2RlKCk7CisgICAgICAgICAgICAgICAgc3RhY2tU
cmFjZVttX2RlcHRoXS53YXNtUENNYXAgPSBXYXNtOjpDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9u
KCkuY29kZU9yaWdpbk1hcCh3YXNtQ2FsbGVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
I2VuZGlmCkBAIC00OTYsNiArNDk3LDIxIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vz
c1VudmVyaWZpZWQKICAgICAgICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0Zy
YW1lKCkpOwogICAgICAgICB9OwogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBh
dXRvIHN0b3JlV2FzbUNhbGxlZUludG9MYXN0RnJhbWUgPSBbJl0gKFVucHJvY2Vzc2VkU3RhY2tG
cmFtZSYgdW5wcm9jZXNzZWRTdGFja0ZyYW1lLCB2b2lkKiBwYykgeworICAgICAgICAgICAgQ2Fs
bGVlQml0cyBjYWxsZWVCaXRzID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLnVudmVyaWZpZWRDYWxs
ZWU7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGNhbGxlZUJpdHMsIGNhbGxlZUJpdHMuaXNX
YXNtKCkpOworICAgICAgICAgICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2Uu
ZnJhbWVzLmxhc3QoKTsKKyAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVU
eXBlOjpXYXNtOworICAgICAgICAgICAgc3RhY2tGcmFtZS53YXNtSW5kZXhPck5hbWUgPSB1bnBy
b2Nlc3NlZFN0YWNrRnJhbWUud2FzbUluZGV4T3JOYW1lOworICAgICAgICAgICAgc3RhY2tGcmFt
ZS53YXNtQ29tcGlsYXRpb25Nb2RlID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLndhc21Db21waWxh
dGlvbk1vZGU7CisgICAgICAgICAgICBpZiAocGMgJiYgdW5wcm9jZXNzZWRTdGFja0ZyYW1lLndh
c21QQ01hcCkgeworICAgICAgICAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPENvZGVPcmlnaW4+
IGNvZGVPcmlnaW4gPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUud2FzbVBDTWFwLT5maW5kUEMocGMp
KQorICAgICAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLndhc21PZmZzZXQgPSBjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisjZW5kaWYKKwog
ICAgICAgICBhdXRvIHN0b3JlQ2FsbGVlSW50b0xhc3RGcmFtZSA9IFsmXSAoVW5wcm9jZXNzZWRT
dGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0YWNrRnJhbWUpIHsKICAgICAgICAgICAgIGFzc2VydElz
SGVsZChtX2xvY2spOwogICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsZWUgaWYgaXQncyBhIHZh
bGlkIEdDIG9iamVjdC4KQEAgLTUwNCw5ICs1MjAsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6
OnByb2Nlc3NVbnZlcmlmaWVkCiAgICAgICAgICAgICBib29sIGFscmVhZHlIYXNFeGVjdXRhYmxl
ID0gISFzdGFja0ZyYW1lLmV4ZWN1dGFibGU7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAg
ICAgICAgICAgaWYgKGNhbGxlZUJpdHMuaXNXYXNtKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFj
a0ZyYW1lLmZyYW1lVHlwZSA9IEZyYW1lVHlwZTo6V2FzbTsKLSAgICAgICAgICAgICAgICBzdGFj
a0ZyYW1lLndhc21JbmRleE9yTmFtZSA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS53YXNtSW5kZXhP
ck5hbWU7Ci0gICAgICAgICAgICAgICAgc3RhY2tGcmFtZS53YXNtQ29tcGlsYXRpb25Nb2RlID0g
dW5wcm9jZXNzZWRTdGFja0ZyYW1lLndhc21Db21waWxhdGlvbk1vZGU7CisgICAgICAgICAgICAg
ICAgc3RvcmVXYXNtQ2FsbGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrRnJhbWUsIG51
bGxwdHIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICNlbmRpZgpA
QCAtNjMwLDYgKzY0NCwxMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlm
aWVkCiAjZW5kaWYKICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oYXBwZW5kQ29kZU9yaWdp
bik7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIXVucHJvY2Vzc2VkU3RhY2tU
cmFjZS5mcmFtZXMuaXNFbXB0eSgpICYmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0u
dW52ZXJpZmllZENhbGxlZS5pc1dhc20oKSkgeworICAgICAgICAgICAgYXBwZW5kRW1wdHlGcmFt
ZSgpOworICAgICAgICAgICAgc3RvcmVXYXNtQ2FsbGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3Nl
ZFN0YWNrVHJhY2UuZnJhbWVzWzBdLCB1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpOworICAg
ICAgICAgICAgc3RhcnRJbmRleCA9IDE7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHNpemVf
dCBpID0gc3RhcnRJbmRleDsgaSA8IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgp
OyBpKyspIHsKQEAgLTExNjAsNyArMTE3OCwyMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnJl
cG9ydFRvcEJ5dGVjb2RlCiAgICAgICAgIGlmICghc3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbkZvckxvY2F0
aW9uID0gWyZdIChTdGFja0ZyYW1lOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIHN0ZDo6b3B0aW9u
YWw8V2FzbTo6Q29tcGlsYXRpb25Nb2RlPiB3YXNtQ29tcGlsYXRpb25Nb2RlKSAtPiBTdHJpbmcg
eworICAgICAgICBhdXRvIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24gPSBbJl0gKFN0YWNrRnJhbWU6
OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxhdGlvbk1v
ZGU+IHdhc21Db21waWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXggd2FzbU9mZnNldCkgLT4gU3Ry
aW5nIHsKKyAgICAgICAgICAgIGlmICh3YXNtQ29tcGlsYXRpb25Nb2RlKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24ucHJpbnQoIjoiKTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5wcmludChX
YXNtOjptYWtlU3RyaW5nKHdhc21Db21waWxhdGlvbk1vZGUudmFsdWUoKSkpOworICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uLnByaW50KCI6Iik7CisgICAgICAgICAgICAgICAgaWYgKHdhc21P
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IG9mZnNldCA9IHdhc21PZmZz
ZXQub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihvZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KCJuaWwiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgU3RyaW5nIGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBTdHJpbmcg
Y29kZUJsb2NrSGFzaDsKICAgICAgICAgICAgIFN0cmluZyBqaXRUeXBlOwpAQCAtMTE3Niw5ICsx
MjA3LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrSGFzaCA9ICI8bmlsPiJfczsK
IAotICAgICAgICAgICAgaWYgKHdhc21Db21waWxhdGlvbk1vZGUpCi0gICAgICAgICAgICAgICAg
aml0VHlwZSA9IFdhc206Om1ha2VTdHJpbmcod2FzbUNvbXBpbGF0aW9uTW9kZS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uLmlzUmVnRXhwKQorICAgICAgICAgICAgaWYg
KGxvY2F0aW9uLmlzUmVnRXhwKQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSAiUmVnRXhwIl9z
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSBKSVRDb2RlOjp0
eXBlTmFtZShsb2NhdGlvbi5qaXRUeXBlKTsKQEAgLTExODcsMTAgKzEyMTYsMTAgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAgICB9OwogCiAgICAgICAg
IFN0YWNrRnJhbWUmIGZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMuZmlyc3QoKTsKLSAgICAgICAg
YXV0byBmcmFtZURlc2NyaXB0aW9uID0gbWFrZVN0cmluZyhmcmFtZS5kaXNwbGF5TmFtZShtX3Zt
KSwgZGVzY3JpcHRpb25Gb3JMb2NhdGlvbihmcmFtZS5zZW1hbnRpY0xvY2F0aW9uLCBmcmFtZS53
YXNtQ29tcGlsYXRpb25Nb2RlKSk7CisgICAgICAgIGF1dG8gZnJhbWVEZXNjcmlwdGlvbiA9IG1h
a2VTdHJpbmcoZnJhbWUuZGlzcGxheU5hbWUobV92bSksIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24o
ZnJhbWUuc2VtYW50aWNMb2NhdGlvbiwgZnJhbWUud2FzbUNvbXBpbGF0aW9uTW9kZSwgZnJhbWUu
d2FzbU9mZnNldCkpOwogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RhY2tG
cmFtZTo6Q29kZUxvY2F0aW9uLCBDb2RlQmxvY2sqPj4gbWFjaGluZUxvY2F0aW9uID0gZnJhbWUu
bWFjaGluZUxvY2F0aW9uKSB7CiAgICAgICAgICAgICBmcmFtZURlc2NyaXB0aW9uID0gbWFrZVN0
cmluZyhmcmFtZURlc2NyaXB0aW9uLCAiIDwtLSAiLAotICAgICAgICAgICAgICAgIG1hY2hpbmVM
b2NhdGlvbi0+c2Vjb25kLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCksIGRlc2NyaXB0aW9uRm9yTG9j
YXRpb24obWFjaGluZUxvY2F0aW9uLT5maXJzdCwgc3RkOjpudWxsb3B0KSk7CisgICAgICAgICAg
ICAgICAgbWFjaGluZUxvY2F0aW9uLT5zZWNvbmQtPmluZmVycmVkTmFtZSgpLmRhdGEoKSwgZGVz
Y3JpcHRpb25Gb3JMb2NhdGlvbihtYWNoaW5lTG9jYXRpb24tPmZpcnN0LCBzdGQ6Om51bGxvcHQs
IEJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICB9CiAgICAgICAgIGJ5dGVjb2RlQ291bnRzLmFk
ZChmcmFtZURlc2NyaXB0aW9uLCAwKS5pdGVyYXRvci0+dmFsdWUrKzsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5o
CShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVk
ZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNo
aW5lU3RhY2tNYXJrZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1
ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIK
KyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdG9wd2F0Y2guaD4KQEAgLTY5LDYgKzcxLDcg
QEAgcHVibGljOgogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhc206OkluZGV4T3JOYW1lPiB3YXNt
SW5kZXhPck5hbWU7CiAjZW5kaWYKICAgICAgICAgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxh
dGlvbk1vZGU+IHdhc21Db21waWxhdGlvbk1vZGU7CisgICAgICAgIEJveDxQQ1RvQ29kZU9yaWdp
bk1hcD4gd2FzbVBDTWFwOwogICAgIH07CiAKICAgICBlbnVtIGNsYXNzIEZyYW1lVHlwZSB7IApA
QCAtOTgsNiArMTAxLDcgQEAgcHVibGljOgogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhc206Oklu
ZGV4T3JOYW1lPiB3YXNtSW5kZXhPck5hbWU7CiAjZW5kaWYKICAgICAgICAgc3RkOjpvcHRpb25h
bDxXYXNtOjpDb21waWxhdGlvbk1vZGU+IHdhc21Db21waWxhdGlvbk1vZGU7CisgICAgICAgIEJ5
dGVjb2RlSW5kZXggd2FzbU9mZnNldDsKIAogICAgICAgICBzdHJ1Y3QgQ29kZUxvY2F0aW9uIHsK
ICAgICAgICAgICAgIGJvb2wgaGFzQ29kZUJsb2NrSGFzaCgpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21BaXJJUkdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1ODAsNyArMzU4MCw4IEBAIHZvaWQgQWlySVJH
ZW5lcmF0b3I6OmR1bXAoY29uc3QgQ29udHJvbFMKIAogYXV0byBBaXJJUkdlbmVyYXRvcjo6b3Jp
Z2luKCkgLT4gQjM6Ok9yaWdpbgogewotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaW1wbGVtZW50
IGEgd2F5IHRvIGdpdmUgSW5zdCdzIGFuIG9yaWdpbi4KKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGltcGxlbWVudCBhIHdheSB0byBnaXZlIEluc3QncyBhbiBvcmlnaW4sIGFuZCBwaXBlIHRoYXQK
KyAgICAvLyBpbmZvcm1hdGlvbiBpbnRvIHRoZSBzYW1wbGluZyBwcm9maWxlcjogaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDE4MgogICAgIHJldHVybiBCMzo6T3Jp
Z2luKCk7CiB9CiAKQEAgLTM1OTYsNyArMzU5Nyw3IEBAIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW8KIAogICAgIHByb2NlZHVyZS5zZXRPcmlnaW5QcmludGVyKFtdIChQ
cmludFN0cmVhbSYgb3V0LCBCMzo6T3JpZ2luIG9yaWdpbikgewogICAgICAgICBpZiAob3JpZ2lu
LmRhdGEoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0PE9w
Y29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIE9w
Y29kZU9yaWdpbihvcmlnaW4pKTsKICAgICB9KTsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHdl
IGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lzdGVy
cygpIG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNTQsOSArMzI1
NCwxNyBAQCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAKICAgICBj
b21waWxhdGlvbkNvbnRleHQud2FzbUVudHJ5cG9pbnRKSVQgPSBtYWtlVW5pcXVlPENDYWxsSGVs
cGVycz4oKTsKIAorICAgIGlmIChPcHRpb25zOjp1c2VTYW1wbGluZ1Byb2ZpbGVyKCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyB0aGlzIGJhc2VkIG9uIFZNIHJlbGV2YW50IGlu
Zm8uCisgICAgICAgIC8vIEJ1dCB0aGlzIGlzIGdvb2QgZW5vdWdoIGZvciBvdXIgb3duIHByb2Zp
bGluZyBmb3Igbm93LgorICAgICAgICAvLyBXaGVuIHdlIHN0YXJ0IHRvIHNob3cgdGhpcyBkYXRh
IGluIHdlYiBpbnNwZWN0b3IsIHdlJ2xsCisgICAgICAgIC8vIG5lZWQgb3RoZXIgaG9va3MgaW50
byB0aGlzIGJlc2lkZXMgdGhlIEpTQyBvcHRpb24uCisgICAgICAgIHByb2NlZHVyZS5zZXROZWVk
c1BDVG9PcmlnaW5NYXAoKTsKKyAgICB9CisKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2luUHJpbnRl
cihbXSAoUHJpbnRTdHJlYW0mIG91dCwgT3JpZ2luIG9yaWdpbikgewogICAgICAgICBpZiAob3Jp
Z2luLmRhdGEoKSkKLSAgICAgICAgICAgIG91dC5wcmludCgiV2FzbTogIiwgYml0d2lzZV9jYXN0
PE9wY29kZU9yaWdpbj4ob3JpZ2luKSk7CisgICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIs
IE9wY29kZU9yaWdpbihvcmlnaW4pKTsKICAgICB9KTsKICAgICAKICAgICAvLyBUaGlzIG1lYW5z
IHdlIGNhbm5vdCB1c2UgZWl0aGVyIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtczo6dXNlZFJlZ2lz
dGVycygpIG9yCkBAIC0zMjk5LDYgKzMzMDcsMTQgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3RpbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgY29tcHV0ZVBD
VG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW9uQ29udGV4dCYgY29udGV4dCwgTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikKK3sKKyAgICBpZiAoY29udGV4dC5wcm9jZWR1cmUgJiYgY29udGV4dC5wcm9j
ZWR1cmUtPm5lZWRzUENUb09yaWdpbk1hcCgpKSB7CisgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFw
IG9yaWdpbk1hcCA9IGNvbnRleHQucHJvY2VkdXJlLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwor
ICAgICAgICBjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwID0gQm94PFBDVG9Db2RlT3JpZ2luTWFw
Pjo6Y3JlYXRlKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXI6Oldhc21Db2RlT3JpZ2luTWFwLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCBsaW5rQnVmZmVyKTsK
KyAgICB9Cit9CisKIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVjdG9y
PENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMsIGNv
bnN0IEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQm
IGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiB7CiAgICAgaWYgKCFjb250ZXh0LnBy
b2NlZHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMyLDEzIEBA
CiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVkZSAiSklUQ29tcGlsYXRpb24uaCIK
ICNpbmNsdWRlICJKSVRPcGFxdWVCeXByb2R1Y3RzLmgiCisjaW5jbHVkZSAiUENUb0NvZGVPcmln
aW5NYXAuaCIKICNpbmNsdWRlICJXYXNtQ29tcGlsYXRpb25Nb2RlLmgiCiAjaW5jbHVkZSAiV2Fz
bUVtYmVkZGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1lbW9yeS5oIgogI2luY2x1ZGUgIldhc21Nb2R1
bGVJbmZvcm1hdGlvbi5oIgogI2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgorI2luY2x1ZGUg
PHd0Zi9Cb3guaD4KICNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KIAogZXh0ZXJuICJDIiB2b2lk
IGR1bXBQcm9jZWR1cmUodm9pZCopOwpAQCAtNTEsMTIgKzUzLDE0IEBAIHN0cnVjdCBDb21waWxh
dGlvbkNvbnRleHQgewogICAgIHN0ZDo6dW5pcXVlX3B0cjxDQ2FsbEhlbHBlcnM+IGVtYmVkZGVy
RW50cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxwZXJzPiB3YXNtRW50
cnlwb2ludEpJVDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8T3BhcXVlQnlwcm9kdWN0cz4gd2FzbUVu
dHJ5cG9pbnRCeXByb2R1Y3RzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBw
cm9jZWR1cmUgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEIzOjpQcm9jZWR1cmU+
IHByb2NlZHVyZTsKKyAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+IHBjVG9Db2RlT3JpZ2luTWFw
OwogfTsKIAogRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVuY3Rpb24+LCBTdHJp
bmc+IHBhcnNlQW5kQ29tcGlsZShDb21waWxhdGlvbkNvbnRleHQmLCBjb25zdCBGdW5jdGlvbkRh
dGEmLCBjb25zdCBTaWduYXR1cmUmLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCB1
bnNpZ25lZCYgb3NyRW50cnlTY3JhdGNoQnVmZmVyU2l6ZSwgY29uc3QgTW9kdWxlSW5mb3JtYXRp
b24mLCBNZW1vcnlNb2RlLCBDb21waWxhdGlvbk1vZGUsIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgs
IHVpbnQzMl90IGxvb3BJbmRleEZvck9TUkVudHJ5LCBUaWVyVXBDb3VudCogPSBudWxscHRyKTsK
IAogdm9pZCBjb21wdXRlRXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhWZWN0b3I8Q29kZUxvY2F0
aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+JiBoYW5kbGVycywgY29uc3QgSW50ZXJu
YWxGdW5jdGlvbiosIGNvbnN0IENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZmZXImKTsKK3Zv
aWQgY29tcHV0ZVBDVG9Db2RlT3JpZ2luTWFwKENvbXBpbGF0aW9uQ29udGV4dCYsIExpbmtCdWZm
ZXImKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkocmV2aXNpb24gMjg2ODgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiV2FzbUFpcklSR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiV2FzbUIzSVJHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJXYXNtQ2FsbGVlLmgiCisjaW5jbHVk
ZSAiV2FzbUNhbGxlZVJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiV2FzbUNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2FzbVRpZXJVcENvdW50
LmgiCkBAIC0xMTMsNiArMTE0LDggQEAgdm9pZCBCQlFQbGFuOjp3b3JrKENvbXBpbGF0aW9uRWZm
b3J0IGVmZgogICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRy
VGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKICAgICBjb21wdXRlRXhjZXB0aW9uSGFu
ZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBmdW5jdGlvbi5nZXQoKSwg
Y29udGV4dCwgbGlua0J1ZmZlcik7CiAKKyAgICBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoY29u
dGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBzaXplX3QgZnVuY3Rpb25JbmRleFNwYWNlID0gbV9m
dW5jdGlvbkluZGV4ICsgbV9tb2R1bGVJbmZvcm1hdGlvbi0+aW1wb3J0RnVuY3Rpb25Db3VudCgp
OwogICAgIFNpZ25hdHVyZUluZGV4IHNpZ25hdHVyZUluZGV4ID0gbV9tb2R1bGVJbmZvcm1hdGlv
bi0+aW50ZXJuYWxGdW5jdGlvblNpZ25hdHVyZUluZGljZXNbbV9mdW5jdGlvbkluZGV4XTsKICAg
ICBjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSA9IFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQo
c2lnbmF0dXJlSW5kZXgpOwpAQCAtMTI3LDYgKzEzMCw5IEBAIHZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmYKICAgICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9iYnFD
YWxsZWVzW21fZnVuY3Rpb25JbmRleF0pOwogICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5l
bnRyeXBvaW50KCk7CiAKKyAgICAgICAgaWYgKGNvbnRleHQucGNUb0NvZGVPcmlnaW5NYXApCisg
ICAgICAgICAgICBDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuYWRkUENUb0NvZGVPcmlnaW5N
YXAoY2FsbGVlLnB0cigpLCBXVEZNb3ZlKGNvbnRleHQucGNUb0NvZGVPcmlnaW5NYXApKTsKKwog
ICAgICAgICAvLyBXZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBwdWJsaXNoIG91ciBjYWxsZWUgYXQg
dGhlIHNhbWUgdGltZSBhcyB3ZSBsaW5rIG91ciBjYWxsc2l0ZXMuIFRoaXMgZW5hYmxlcyB1cyB0
byBlbnN1cmUgd2UKICAgICAgICAgLy8gYWx3YXlzIGNhbGwgdGhlIGZhc3Rlc3QgY29kZS4gQW55
IGZ1bmN0aW9uIGxpbmtlZCBhZnRlciB1cyB3aWxsIHNlZSBvdXIgbmV3IGNvZGUgYW5kIHRoZSBu
ZXcgY2FsbHNpdGVzLCB3aGljaCB0aGV5CiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFs
c28gb2sgaWYgdGhleSBwdWJsaXNoIHRoZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0
cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBhZnRlciB3ZSByZWxlYXNlCkBAIC0yMzgsNiArMjQ0LDkg
QEAgdm9pZCBCQlFQbGFuOjpkaWRDb21wbGV0ZUNvbXBpbGF0aW9uKCkKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMobV9leGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvbiwgY29udGV4dCwgbGlu
a0J1ZmZlcik7CisKKyAgICAgICAgICAgIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChjb250ZXh0
LCBsaW5rQnVmZmVyKTsKKwogICAgICAgICAgICAgZnVuY3Rpb24tPmVudHJ5cG9pbnQuY29tcGls
YXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgICAgICAgICBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgQkJR
IGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRl
eFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5k
ZXhTcGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgICAgICAgICAgV1RGTW92ZShjb250
ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAtMjg1LDYgKzI5NCw5IEBAIHZvaWQg
QkJRUGxhbjo6aW5pdGlhbGl6ZUNhbGxlZXMoY29uc3QgQ2EKICAgICAgICAgUmVmPEJCUUNhbGxl
ZT4gd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBCQlFDYWxsZWU6OmNyZWF0ZShXVEZNb3ZlKGZ1bmN0
aW9uLT5lbnRyeXBvaW50KSwgZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVsZUluZm9ybWF0aW9u
LT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSksIFdURk1vdmUobV90aWVyVXBD
b3VudHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUobV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSwgV1RGTW92ZShmdW5jdGlvbi0+c3RhY2tt
YXBzKSwgV1RGTW92ZShmdW5jdGlvbi0+ZXhjZXB0aW9uSGFuZGxlcnMpLCBXVEZNb3ZlKG1fZXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdKSk7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoUG9pbnRlcihmdW5jdGlvbi0+Y2FsbGVlTW92ZUxvY2F0
aW9uLCBDYWxsZWVCaXRzOjpib3hXYXNtKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpKSk7CiAK
KyAgICAgICAgaWYgKG1fY29tcGlsYXRpb25Db250ZXh0c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhd
LnBjVG9Db2RlT3JpZ2luTWFwKQorICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRv
bigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKHdhc21FbnRyeXBvaW50Q2FsbGVlLnB0cigpLCBXVEZN
b3ZlKG1fY29tcGlsYXRpb25Db250ZXh0c1tpbnRlcm5hbEZ1bmN0aW9uSW5kZXhdLnBjVG9Db2Rl
T3JpZ2luTWFwKSk7CisKICAgICAgICAgY2FsbGJhY2soaW50ZXJuYWxGdW5jdGlvbkluZGV4LCBX
VEZNb3ZlKGVtYmVkZGVyRW50cnlwb2ludENhbGxlZSksIFdURk1vdmUod2FzbUVudHJ5cG9pbnRD
YWxsZWUpKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
Q2FsbGVlUmVnaXN0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQ2FsbGVlUmVnaXN0cnkuaAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKIAorI2luY2x1ZGUgIlBDVG9D
b2RlT3JpZ2luTWFwLmgiCisjaW5jbHVkZSA8d3RmL0JveC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KIApAQCAtNTMsNiArNTUsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgbV9sb2NrIH07CiAgICAgICAgIG1fY2Fs
bGVlU2V0LnJlbW92ZShjYWxsZWUpOworICAgICAgICBtX3BjVG9Db2RlT3JpZ2luTWFwcy5yZW1v
dmUoY2FsbGVlKTsKICAgICB9CiAKICAgICBjb25zdCBIYXNoU2V0PENhbGxlZSo+JiBhbGxDYWxs
ZWVzKCkgV1RGX1JFUVVJUkVTX0xPQ0sobV9sb2NrKQpAQCAtNjcsMTEgKzcwLDI5IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fY2FsbGVlU2V0LmNvbnRhaW5zKGNhbGxlZSk7CiAgICAgfQog
CisgICAgdm9pZCBhZGRQQ1RvQ29kZU9yaWdpbk1hcChDYWxsZWUqIGNhbGxlZSwgQm94PFBDVG9D
b2RlT3JpZ2luTWFwPiBvcmlnaW5NYXApCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyIHsg
bV9sb2NrIH07CisgICAgICAgIEFTU0VSVChpc1ZhbGlkQ2FsbGVlKGNhbGxlZSkpOworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fcGNUb0NvZGVPcmlnaW5NYXBzLmFkZChjYWxsZWUsIFdURk1v
dmUob3JpZ2luTWFwKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFkZFJlc3VsdC5pc05ld0Vu
dHJ5KTsKKyAgICB9CisKKyAgICBCb3g8UENUb0NvZGVPcmlnaW5NYXA+IGNvZGVPcmlnaW5NYXAo
Q2FsbGVlKiBjYWxsZWUpICBXVEZfUkVRVUlSRVNfTE9DSyhtX2xvY2spCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNWYWxpZENhbGxlZShjYWxsZWUpKTsKKyAgICAgICAgYXV0byBpdGVyID0gbV9w
Y1RvQ29kZU9yaWdpbk1hcHMuZmluZChjYWxsZWUpOworICAgICAgICBpZiAoaXRlciAhPSBtX3Bj
VG9Db2RlT3JpZ2luTWFwcy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBpdGVyLT52YWx1ZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgQ2FsbGVlUmVnaXN0cnkoKSA9
IGRlZmF1bHQ7CiAKIHByaXZhdGU6CiAgICAgTG9jayBtX2xvY2s7CiAgICAgSGFzaFNldDxDYWxs
ZWUqPiBtX2NhbGxlZVNldCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7CisgICAgSGFzaE1h
cDxDYWxsZWUqLCBCb3g8UENUb0NvZGVPcmlnaW5NYXA+PiBtX3BjVG9Db2RlT3JpZ2luTWFwcyBX
VEZfR1VBUkRFRF9CWV9MT0NLKG1fbG9jayk7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
V2FzbQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAko
cmV2aXNpb24gMjg2ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9NR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTGlua0J1
ZmZlci5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNh
bGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21O
YW1lU2VjdGlvbi5oIgogI2luY2x1ZGUgIldhc21TaWduYXR1cmVJbmxpbmVzLmgiCiAjaW5jbHVk
ZSA8d3RmL0RhdGFMb2cuaD4KQEAgLTkyLDYgKzkzLDggQEAgdm9pZCBPTUdQbGFuOjp3b3JrKENv
bXBpbGF0aW9uRWZmb3J0KQogICAgIFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25I
YW5kbGVyUHRyVGFnPj4gZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uczsKICAgICBjb21wdXRlRXhj
ZXB0aW9uSGFuZGxlckxvY2F0aW9ucyhleGNlcHRpb25IYW5kbGVyTG9jYXRpb25zLCBpbnRlcm5h
bEZ1bmN0aW9uLCBjb250ZXh0LCBsaW5rQnVmZmVyKTsKIAorICAgIGNvbXB1dGVQQ1RvQ29kZU9y
aWdpbk1hcChjb250ZXh0LCBsaW5rQnVmZmVyKTsKKwogICAgIG9tZ0VudHJ5cG9pbnQuY29tcGls
YXRpb24gPSBtYWtlVW5pcXVlPENvbXBpbGF0aW9uPigKICAgICAgICAgRklOQUxJWkVfQ09ERV9J
Rihjb250ZXh0LnByb2NlZHVyZS0+c2hvdWxkRHVtcElSKCkgfHwgc2hvdWxkRHVtcERpc2Fzc2Vt
Ymx5Rm9yKENvbXBpbGF0aW9uTW9kZTo6T01HTW9kZSksIGxpbmtCdWZmZXIsIEpJVENvbXBpbGF0
aW9uUHRyVGFnLCAiV2ViQXNzZW1ibHkgT01HIGZ1bmN0aW9uWyVpXSAlcyBuYW1lICVzIiwgbV9m
dW5jdGlvbkluZGV4LCBzaWduYXR1cmUudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSwgbWFrZVN0
cmluZyhJbmRleE9yTmFtZShmdW5jdGlvbkluZGV4U3BhY2UsIG1fbW9kdWxlSW5mb3JtYXRpb24t
Pm5hbWVTZWN0aW9uLT5nZXQoZnVuY3Rpb25JbmRleFNwYWNlKSkpLmFzY2lpKCkuZGF0YSgpKSwK
ICAgICAgICAgV1RGTW92ZShjb250ZXh0Lndhc21FbnRyeXBvaW50Qnlwcm9kdWN0cykpOwpAQCAt
MTA2LDYgKzEwOSw5IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAg
ICAgICAgQVNTRVJUKCFtX2NvZGVCbG9jay0+bV9vbWdDYWxsZWVzW21fZnVuY3Rpb25JbmRleF0p
OwogICAgICAgICBlbnRyeXBvaW50ID0gY2FsbGVlLT5lbnRyeXBvaW50KCk7CiAKKyAgICAgICAg
aWYgKGNvbnRleHQucGNUb0NvZGVPcmlnaW5NYXApCisgICAgICAgICAgICBDYWxsZWVSZWdpc3Ry
eTo6c2luZ2xldG9uKCkuYWRkUENUb0NvZGVPcmlnaW5NYXAoY2FsbGVlLnB0cigpLCBXVEZNb3Zl
KGNvbnRleHQucGNUb0NvZGVPcmlnaW5NYXApKTsKKwogICAgICAgICAvLyBXZSB3YW50IHRvIG1h
a2Ugc3VyZSB3ZSBwdWJsaXNoIG91ciBjYWxsZWUgYXQgdGhlIHNhbWUgdGltZSBhcyB3ZSBsaW5r
IG91ciBjYWxsc2l0ZXMuIFRoaXMgZW5hYmxlcyB1cyB0byBlbnN1cmUgd2UKICAgICAgICAgLy8g
YWx3YXlzIGNhbGwgdGhlIGZhc3Rlc3QgY29kZS4gQW55IGZ1bmN0aW9uIGxpbmtlZCBhZnRlciB1
cyB3aWxsIHNlZSBvdXIgbmV3IGNvZGUgYW5kIHRoZSBuZXcgY2FsbHNpdGVzLCB3aGljaCB0aGV5
CiAgICAgICAgIC8vIHdpbGwgdXBkYXRlLiBJdCdzIGFsc28gb2sgaWYgdGhleSBwdWJsaXNoIHRo
ZWlyIGNvZGUgYmVmb3JlIHdlIHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZXMgYmVjYXVzZSBh
ZnRlciB3ZSByZWxlYXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtT3Bj
b2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bU9wY29kZU9yaWdpbi5oCShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVpbnQzMl90PihvZmZzZXQp
ID09IG9mZnNldCk7CiAgICAgICAgIHBhY2tlZERhdGEgPSAoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG9wY29kZSkgPDwgMzIpIHwgb2Zmc2V0OwogICAgIH0KKyAgICBPcGNvZGVPcmlnaW4oQjM6Ok9y
aWdpbiBvcmlnaW4pCisgICAgICAgIDogcGFja2VkRGF0YShiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+
KG9yaWdpbikpCisgICAgeworICAgIH0KIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogCg==
</data>
<flag name="review"
          id="472409"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="472410"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446897</attachid>
            <date>2021-12-11 12:30:40 -0800</date>
            <delta_ts>2021-12-11 12:45:57 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>26525</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDIxLTEyLTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRlYWNoIHRoZSBzYW1wbGluZyBwcm9maWxlciBob3cgdG8gZGlzcGxheSBvcmlnaW4gZGF0YSBm
b3IgQjMgV2FzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM0MDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyB0ZWFjaGVzIHRoZSBTYW1wbGluZ1Byb2ZpbGVyIGhvdyB0byBnYXRoZXIgb3JpZ2lu
IGRhdGEgZm9yCisgICAgICAgIFdhc20uIFdlIHJldXNlIHRoZSBQQ1RvQ29kZU9yaWdpbk1hcCBm
cm9tIEpTLCBhbmQgc3RvcmUgdGhlIHdhc20KKyAgICAgICAgZnVuY3Rpb24gb2Zmc2V0IGRhdGEg
aW5zaWRlIG9mIENvZGVPcmlnaW4ncyBCeXRlY29kZUluZGV4LgorICAgICAgICAKKyAgICAgICAg
Rm9yIG5vdywgdGhpcyBwYXRjaCBpcyBvbmx5IGRvaW5nIHRoaXMgZm9yIEIzLCBiZWNhdXNlIHRo
ZSBBaXIgYmFja2VuZAorICAgICAgICBkb2Vzbid0IGN1cnJlbnRseSBnZW5lcmF0ZSBmaWxsZWQg
aW4gT3Bjb2RlT3JpZ2luIGRhdGEuIFdlJ2xsIGZpeCB0aGF0CisgICAgICAgIGluOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0MTgyCisgICAgICAgIAorICAgICAg
ICBBbHNvLCB0aGlzIGNhcGFiaWxpdHkgaXNuJ3QgeWV0IHN1cHBvcnRlZCBpbiBXZWIgSW5zcGVj
dG9yLiBXZSdsbCB3YW50CisgICAgICAgIHRvIGRvIHRoYXQgaW4gYSBmdXR1cmUgY2hhbmdlIGFz
IHdlIGltcHJvdmUgV2ViIEluc3BlY3RvcidzIGFiaWxpdHkgdG8KKyAgICAgICAgZGVidWcgV2Fz
bSBjb2RlLiBXaGVuIHRoYXQgdGltZSBjb21lcywgd2UnbGwgaGF2ZSB0byBnZW5lcmF0ZSB0aGUK
KyAgICAgICAgUENUb0NvZGVPcmlnaW5NYXAgYmFzZWQgb24gZGVidWdnaW5nIGluZm8sIGFuZCBu
b3QganVzdCAndXNlU2FtcGxpbmdQcm9maWxlcicKKyAgICAgICAgSlNDIG9wdGlvbi4KKyAgICAg
ICAgCisgICAgICAgIFRoZSBkYXRhIG5vdyBzaG93cyB1cCBsaWtlIHRoaXMgZm9yIGhvdHRlc3Qg
Ynl0ZWNvZGVzOgorICAgICAgICAKKyAgICAgICAgSG90dGVzdCBieXRlY29kZXMgYXMgPG51bVNh
bXBsZXMgICAnZnVuY3Rpb25OYW1lI2hhc2g6SklUVHlwZTpieXRlY29kZUluZGV4Jz4KKyAgICAg
ICAgICAgNTI0ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzczXTpPTUc6MHgyMWEnCisgICAgICAg
ICAgIDQxNCAgICAnPD8+Lndhc20tZnVuY3Rpb25bMjM2M106T01HOjB4MWFlJworICAgICAgICAg
ICAzOTUgICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNzNdOk9NRzoweDQxOCcKKyAgICAgICAgICAg
MzU0ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzczXTpPTUc6MHgzNGYnCisgICAgICAgICAgIDI3
MCAgICAnPD8+Lndhc20tZnVuY3Rpb25bMjM3M106T01HOjB4MzUyJworICAgICAgICAgICAyNTYg
ICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNjNdOk9NRzoweDE1MicKKworCisgICAgICAgICogZnRs
L0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAq
IGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5jcHA6CisgICAgICAgIChKU0M6OlBDVG9Db2RlT3JpZ2lu
TWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKToKKyAgICAgICAgKiBqaXQvUENU
b0NvZGVPcmlnaW5NYXAuaDoKKyAgICAgICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3Bw
OgorICAgICAgICAoSlNDOjpGcmFtZVdhbGtlcjo6cmVjb3JkSklURnJhbWUpOgorICAgICAgICAo
SlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZFN0YWNrVHJhY2VzKToKKyAg
ICAgICAgKEpTQzo6U2FtcGxpbmdQcm9maWxlcjo6cmVwb3J0VG9wQnl0ZWNvZGVzKToKKyAgICAg
ICAgKiBydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuaDoKKyAgICAgICAgKiB3YXNtL1dhc21BaXJJ
UkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkFpcklSR2VuZXJhdG9yOjpvcmln
aW4pOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGVBaXIpOgorICAgICAgICAq
IHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFu
ZENvbXBpbGUpOgorICAgICAgICAoSlNDOjpXYXNtOjpjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAp
OgorICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuaDoKKyAgICAgICAgKCk6IERlbGV0
ZWQuCisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChKU0M6Oldhc206
OkJCUVBsYW46OndvcmspOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpkaWRDb21wbGV0
ZUNvbXBpbGF0aW9uKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QkJRUGxhbjo6aW5pdGlhbGl6ZUNh
bGxlZXMpOgorICAgICAgICAqIHdhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5Lmg6CisgICAgICAgIChK
U0M6Oldhc206OkNhbGxlZVJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQ2FsbGVlKToKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OmFkZFBDVG9Db2RlT3JpZ2luTWFwKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OldURl9SRVFVSVJFU19MT0NLKToKKyAgICAgICAg
KiB3YXNtL1dhc21PTUdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6T01HUGxhbjo6d29y
ayk6CisgICAgICAgICogd2FzbS9XYXNtT3Bjb2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6Oldh
c206Ok9wY29kZU9yaWdpbjo6T3Bjb2RlT3JpZ2luKToKKwogMjAyMS0xMi0xMSAgTWFyayBMYW0g
IDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQXV0b21hdGljYWxseSBmb3JiaWQgSlMg
ZXhlY3V0aW9uIHdoZW4gd2UgdGhyb3cgYSBUZXJtaW5hdGlvbkV4Y2VwdGlvbi4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDI4Njg4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODc4LDYg
Kzg3OCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUEKICAgICBq
aXQvSklUT3BlcmF0aW9ucy5oCiAgICAgaml0L0pJVFN0dWJSb3V0aW5lLmgKICAgICBqaXQvSklU
VGh1bmtzLmgKKyAgICBqaXQvUENUb0NvZGVPcmlnaW5NYXAuaAogICAgIGppdC9Qb2x5bW9ycGhp
Y0NhbGxTdHViUm91dGluZS5oCiAgICAgaml0L1JlZy5oCiAgICAgaml0L1JlZ2lzdGVyQXRPZmZz
ZXQuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCShyZXZp
c2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBz
dGF0ZSwgU2FmZXBvaW50OjpSZQogCiAgICAgaWYgKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9y
aWdpbk1hcHBpbmcoKSkgewogICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBz
dGF0ZS5wcm9jLT5yZWxlYXNlUENUb09yaWdpbk1hcCgpOwotICAgICAgICBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24ubV9wY1RvQ29kZU9yaWdpbk1hcCA9IG1ha2VVbmlxdWU8UENUb0NvZGVPcmlnaW5N
YXA+KFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcih2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0
YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlcik7CisgICAgICAgIHN0YXRlLmppdENvZGUt
PmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6SlND
b2RlT3JpZ2luTWFwLCB2bSwgV1RGTW92ZShvcmlnaW5NYXApKSwgKnN0YXRlLmZpbmFsaXplci0+
YjNDb2RlTGlua0J1ZmZlcik7CiAgICAgfQogCiAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNFbnRy
eVB0clRhZz4gbGFiZWwgPSBzdGF0ZS5maW5hbGl6ZXItPmIzQ29kZUxpbmtCdWZmZXItPmxvY2F0
aW9uT2Y8SlNFbnRyeVB0clRhZz4oc3RhdGUucHJvYy0+Y29kZSgpLmVudHJ5cG9pbnRMYWJlbCgw
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2lu
TWFwLmNwcAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Q
Q1RvQ29kZU9yaWdpbk1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIldhc21PcGNvZGVPcmlnaW4uaCIKIAogI2lmIENP
TVBJTEVSKE1TVkMpCiAvLyBTZWUgaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGli
cmFyeS80d3owNzI2OC5hc3B4CkBAIC05OSwyMCArMTAwLDE3IEBAIHByaXZhdGU6CiB9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKIAogUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIoVk0mIHZtKQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fc2hvdWxkQnVp
bGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKKyAgICA6
IG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBp
bmcoKSkKIHsgfQogCiBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luTWFw
QnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBvdGhlcikKLSAgICA6IG1fdm0ob3Ro
ZXIubV92bSkKLSAgICAsIG1fY29kZVJhbmdlcyhXVEZNb3ZlKG90aGVyLm1fY29kZVJhbmdlcykp
CisgICAgOiBtX2NvZGVSYW5nZXMoV1RGTW92ZShvdGhlci5tX2NvZGVSYW5nZXMpKQogICAgICwg
bV9zaG91bGRCdWlsZE1hcHBpbmcob3RoZXIubV9zaG91bGRCdWlsZE1hcHBpbmcpCiB7IH0KIAog
I2lmIEVOQUJMRShGVExfSklUKQotUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXIoVk0mIHZtLCBCMzo6UENUb09yaWdpbk1hcCYmIGIzUENUb09yaWdpbk1h
cCkKLSAgICA6IG1fdm0odm0pCi0gICAgLCBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCitQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6
OlBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihKU1RhZywgVk0mIHZtLCBCMzo6UENUb09yaWdpbk1h
cCBiM1BDVG9PcmlnaW5NYXApCisgICAgOiBtX3Nob3VsZEJ1aWxkTWFwcGluZyh2bS5zaG91bGRC
dWlsZGVyUENUb0NvZGVPcmlnaW5NYXBwaW5nKCkpCiB7CiAgICAgaWYgKCFtX3Nob3VsZEJ1aWxk
TWFwcGluZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTI3LDYgKzEyNSwyMiBAQCBQQ1RvQ29kZU9y
aWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3JpZ2luCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShX
RUJBU1NFTUJMWV9CM0pJVCkKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmln
aW5NYXBCdWlsZGVyKFdhc21UYWcsIEIzOjpQQ1RvT3JpZ2luTWFwIGIzUENUb09yaWdpbk1hcCkK
KyAgICA6IG1fc2hvdWxkQnVpbGRNYXBwaW5nKHRydWUpCit7CisgICAgZm9yIChjb25zdCBCMzo6
UENUb09yaWdpbk1hcDo6T3JpZ2luUmFuZ2UmIG9yaWdpblJhbmdlIDogYjNQQ1RvT3JpZ2luTWFw
LnJhbmdlcygpKSB7CisgICAgICAgIEIzOjpPcmlnaW4gYjNPcmlnaW4gPSBvcmlnaW5SYW5nZS5v
cmlnaW47CisgICAgICAgIGlmIChiM09yaWdpbikgeworICAgICAgICAgICAgV2FzbTo6T3Bjb2Rl
T3JpZ2luIHdhc21PcmlnaW4geyBiM09yaWdpbiB9OworICAgICAgICAgICAgLy8gV2Ugc3Rhc2gg
dGhlIGxvY2F0aW9uIGludG8gYSBCeXRlY29kZUluZGV4LgorICAgICAgICAgICAgYXBwZW5kSXRl
bShvcmlnaW5SYW5nZS5sYWJlbCwgQ29kZU9yaWdpbihCeXRlY29kZUluZGV4KHdhc21PcmlnaW4u
bG9jYXRpb24oKSkpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBhcHBlbmRJdGVtKG9y
aWdpblJhbmdlLmxhYmVsLCBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OmRlZmF1bHRDb2RlT3Jp
Z2luKCkpOworICAgIH0KK30KKyNlbmRpZgorCiB2b2lkIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRl
cjo6YXBwZW5kSXRlbShNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbGFiZWwsIGNvbnN0IENvZGVPcmln
aW4mIGNvZGVPcmlnaW4pCiB7CiAgICAgaWYgKCFtX3Nob3VsZEJ1aWxkTWFwcGluZykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BDVG9Db2RlT3JpZ2luTWFwLmgJKHJldmlz
aW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsMTMgQEAgcHVibGljOgogICAgIFBDVG9D
b2RlT3JpZ2luTWFwQnVpbGRlcihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXImJiBvdGhlcik7CiAK
ICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoVk0mLCBC
Mzo6UENUb09yaWdpbk1hcCYmKTsKKyAgICBlbnVtIEpTVGFnIHsgSlNDb2RlT3JpZ2luTWFwIH07
CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKEpTVGFnLCBWTSYsIEIzOjpQQ1RvT3JpZ2lu
TWFwKTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0IzSklUKQorICAgIGVudW0g
V2FzbVRhZyB7IFdhc21Db2RlT3JpZ2luTWFwIH07CisgICAgUENUb0NvZGVPcmlnaW5NYXBCdWls
ZGVyKFdhc21UYWcsIEIzOjpQQ1RvT3JpZ2luTWFwKTsKICNlbmRpZgogCiAgICAgdm9pZCBhcHBl
bmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCwgY29uc3QgQ29kZU9yaWdpbiYpOwpAQCAtNjks
NyArNzUsNiBAQCBwcml2YXRlOgogICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAg
fTsKIAotICAgIFZNJiBtX3ZtOwogICAgIFZlY3RvcjxDb2RlUmFuZ2U+IG1fY29kZVJhbmdlczsK
ICAgICBib29sIG1fc2hvdWxkQnVpbGRNYXBwaW5nOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwCShyZXZpc2lvbiAy
ODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw5IEBAIHByb3RlY3RlZDoKICAgICAg
ICAgICAgICAgICAvLyBBbmQgd2UgY2FuIHNhZmVseSBjb3B5IFdhc206OkluZGV4T3JOYW1lIGV2
ZW4gd2hlbiBhbnkgbG9jayBpcyBoZWxkIGJ5IHN1c3BlbmRlZCB0aHJlYWRzLgogICAgICAgICAg
ICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0ud2FzbUluZGV4T3JOYW1lID0gd2FzbUNhbGxlZS0+
aW5kZXhPck5hbWUoKTsKICAgICAgICAgICAgICAgICBzdGFja1RyYWNlW21fZGVwdGhdLndhc21D
b21waWxhdGlvbk1vZGUgPSB3YXNtQ2FsbGVlLT5jb21waWxhdGlvbk1vZGUoKTsKKyNpZiBFTkFC
TEUoSklUKQorICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0ud2FzbVBDTWFwID0g
V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNvZGVPcmlnaW5NYXAod2FzbUNhbGxl
ZSk7CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCkBAIC00OTYsNiAr
NDk5LDI1IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAg
ICAgICAgIHN0YWNrVHJhY2UuZnJhbWVzLmFwcGVuZChTdGFja0ZyYW1lKCkpOwogICAgICAgICB9
OwogCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgICAgICBhdXRvIHN0b3JlV2FzbUNhbGxl
ZUludG9MYXN0RnJhbWUgPSBbJl0gKFVucHJvY2Vzc2VkU3RhY2tGcmFtZSYgdW5wcm9jZXNzZWRT
dGFja0ZyYW1lLCB2b2lkKiBwYykgeworICAgICAgICAgICAgQ2FsbGVlQml0cyBjYWxsZWVCaXRz
ID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLnVudmVyaWZpZWRDYWxsZWU7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGNhbGxlZUJpdHMsIGNhbGxlZUJpdHMuaXNXYXNtKCkpOworICAgICAgICAg
ICAgU3RhY2tGcmFtZSYgc3RhY2tGcmFtZSA9IHN0YWNrVHJhY2UuZnJhbWVzLmxhc3QoKTsKKyAg
ICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVUeXBlID0gRnJhbWVUeXBlOjpXYXNtOworICAgICAg
ICAgICAgc3RhY2tGcmFtZS53YXNtSW5kZXhPck5hbWUgPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUu
d2FzbUluZGV4T3JOYW1lOworICAgICAgICAgICAgc3RhY2tGcmFtZS53YXNtQ29tcGlsYXRpb25N
b2RlID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLndhc21Db21waWxhdGlvbk1vZGU7CisjaWYgRU5B
QkxFKEpJVCkKKyAgICAgICAgICAgIGlmIChwYyAmJiB1bnByb2Nlc3NlZFN0YWNrRnJhbWUud2Fz
bVBDTWFwKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Q29kZU9yaWdpbj4g
Y29kZU9yaWdpbiA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS53YXNtUENNYXAtPmZpbmRQQyhwYykp
CisgICAgICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUud2FzbU9mZnNldCA9IGNvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBVTlVT
RURfUEFSQU0ocGMpOworI2VuZGlmCisgICAgICAgIH07CisjZW5kaWYKKwogICAgICAgICBhdXRv
IHN0b3JlQ2FsbGVlSW50b0xhc3RGcmFtZSA9IFsmXSAoVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1
bnByb2Nlc3NlZFN0YWNrRnJhbWUpIHsKICAgICAgICAgICAgIGFzc2VydElzSGVsZChtX2xvY2sp
OwogICAgICAgICAgICAgLy8gU2V0IHRoZSBjYWxsZWUgaWYgaXQncyBhIHZhbGlkIEdDIG9iamVj
dC4KQEAgLTUwNCw5ICs1MjYsNyBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZl
cmlmaWVkCiAgICAgICAgICAgICBib29sIGFscmVhZHlIYXNFeGVjdXRhYmxlID0gISFzdGFja0Zy
YW1lLmV4ZWN1dGFibGU7CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgICAgICAgICAgaWYg
KGNhbGxlZUJpdHMuaXNXYXNtKCkpIHsKLSAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLmZyYW1l
VHlwZSA9IEZyYW1lVHlwZTo6V2FzbTsKLSAgICAgICAgICAgICAgICBzdGFja0ZyYW1lLndhc21J
bmRleE9yTmFtZSA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS53YXNtSW5kZXhPck5hbWU7Ci0gICAg
ICAgICAgICAgICAgc3RhY2tGcmFtZS53YXNtQ29tcGlsYXRpb25Nb2RlID0gdW5wcm9jZXNzZWRT
dGFja0ZyYW1lLndhc21Db21waWxhdGlvbk1vZGU7CisgICAgICAgICAgICAgICAgc3RvcmVXYXNt
Q2FsbGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrRnJhbWUsIG51bGxwdHIpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICNlbmRpZgpAQCAtNjMwLDYgKzY1
MCwxMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkCiAjZW5kaWYK
ICAgICAgICAgICAgICAgICBVTlVTRURfUEFSQU0oYXBwZW5kQ29kZU9yaWdpbik7CiAgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoIXVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMu
aXNFbXB0eSgpICYmIHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXNbMF0udW52ZXJpZmllZENh
bGxlZS5pc1dhc20oKSkgeworICAgICAgICAgICAgYXBwZW5kRW1wdHlGcmFtZSgpOworICAgICAg
ICAgICAgc3RvcmVXYXNtQ2FsbGVlSW50b0xhc3RGcmFtZSh1bnByb2Nlc3NlZFN0YWNrVHJhY2Uu
ZnJhbWVzWzBdLCB1bnByb2Nlc3NlZFN0YWNrVHJhY2UudG9wUEMpOworICAgICAgICAgICAgc3Rh
cnRJbmRleCA9IDE7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJ
bmRleDsgaSA8IHVucHJvY2Vzc2VkU3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpOyBpKyspIHsKQEAg
LTExNjAsNyArMTE4NCwyMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnJlcG9ydFRvcEJ5dGVj
b2RlCiAgICAgICAgIGlmICghc3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbkZvckxvY2F0aW9uID0gWyZdIChT
dGFja0ZyYW1lOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIHN0ZDo6b3B0aW9uYWw8V2FzbTo6Q29t
cGlsYXRpb25Nb2RlPiB3YXNtQ29tcGlsYXRpb25Nb2RlKSAtPiBTdHJpbmcgeworICAgICAgICBh
dXRvIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24gPSBbJl0gKFN0YWNrRnJhbWU6OkNvZGVMb2NhdGlv
biBsb2NhdGlvbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxhdGlvbk1vZGU+IHdhc21Db21w
aWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXggd2FzbU9mZnNldCkgLT4gU3RyaW5nIHsKKyAgICAg
ICAgICAgIGlmICh3YXNtQ29tcGlsYXRpb25Nb2RlKSB7CisgICAgICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24ucHJp
bnQoIjoiKTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5wcmludChXYXNtOjptYWtlU3Ry
aW5nKHdhc21Db21waWxhdGlvbk1vZGUudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGRlc2Ny
aXB0aW9uLnByaW50KCI6Iik7CisgICAgICAgICAgICAgICAgaWYgKHdhc21PZmZzZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdWludHB0cl90IG9mZnNldCA9IHdhc21PZmZzZXQub2Zmc2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KFJhd1BvaW50ZXIoYml0d2lz
ZV9jYXN0PHZvaWQqPihvZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KCJuaWwiKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZGVzY3JpcHRpb24udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgU3RyaW5nIGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBTdHJpbmcgY29kZUJsb2NrSGFz
aDsKICAgICAgICAgICAgIFN0cmluZyBqaXRUeXBlOwpAQCAtMTE3Niw5ICsxMjEzLDcgQEAgdm9p
ZCBTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICAgICAgY29kZUJsb2NrSGFzaCA9ICI8bmlsPiJfczsKIAotICAgICAgICAg
ICAgaWYgKHdhc21Db21waWxhdGlvbk1vZGUpCi0gICAgICAgICAgICAgICAgaml0VHlwZSA9IFdh
c206Om1ha2VTdHJpbmcod2FzbUNvbXBpbGF0aW9uTW9kZS52YWx1ZSgpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGxvY2F0aW9uLmlzUmVnRXhwKQorICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmlz
UmVnRXhwKQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSAiUmVnRXhwIl9zOwogICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSBKSVRDb2RlOjp0eXBlTmFtZShsb2Nh
dGlvbi5qaXRUeXBlKTsKQEAgLTExODcsMTAgKzEyMjIsMTAgQEAgdm9pZCBTYW1wbGluZ1Byb2Zp
bGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAgICB9OwogCiAgICAgICAgIFN0YWNrRnJhbWUm
IGZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMuZmlyc3QoKTsKLSAgICAgICAgYXV0byBmcmFtZURl
c2NyaXB0aW9uID0gbWFrZVN0cmluZyhmcmFtZS5kaXNwbGF5TmFtZShtX3ZtKSwgZGVzY3JpcHRp
b25Gb3JMb2NhdGlvbihmcmFtZS5zZW1hbnRpY0xvY2F0aW9uLCBmcmFtZS53YXNtQ29tcGlsYXRp
b25Nb2RlKSk7CisgICAgICAgIGF1dG8gZnJhbWVEZXNjcmlwdGlvbiA9IG1ha2VTdHJpbmcoZnJh
bWUuZGlzcGxheU5hbWUobV92bSksIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24oZnJhbWUuc2VtYW50
aWNMb2NhdGlvbiwgZnJhbWUud2FzbUNvbXBpbGF0aW9uTW9kZSwgZnJhbWUud2FzbU9mZnNldCkp
OwogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RhY2tGcmFtZTo6Q29kZUxv
Y2F0aW9uLCBDb2RlQmxvY2sqPj4gbWFjaGluZUxvY2F0aW9uID0gZnJhbWUubWFjaGluZUxvY2F0
aW9uKSB7CiAgICAgICAgICAgICBmcmFtZURlc2NyaXB0aW9uID0gbWFrZVN0cmluZyhmcmFtZURl
c2NyaXB0aW9uLCAiIDwtLSAiLAotICAgICAgICAgICAgICAgIG1hY2hpbmVMb2NhdGlvbi0+c2Vj
b25kLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCksIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24obWFjaGlu
ZUxvY2F0aW9uLT5maXJzdCwgc3RkOjpudWxsb3B0KSk7CisgICAgICAgICAgICAgICAgbWFjaGlu
ZUxvY2F0aW9uLT5zZWNvbmQtPmluZmVycmVkTmFtZSgpLmRhdGEoKSwgZGVzY3JpcHRpb25Gb3JM
b2NhdGlvbihtYWNoaW5lTG9jYXRpb24tPmZpcnN0LCBzdGQ6Om51bGxvcHQsIEJ5dGVjb2RlSW5k
ZXgoKSkpOwogICAgICAgICB9CiAgICAgICAgIGJ5dGVjb2RlQ291bnRzLmFkZChmcmFtZURlc2Ny
aXB0aW9uLCAwKS5pdGVyYXRvci0+dmFsdWUrKzsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oCShyZXZpc2lvbiAy
ODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVkZSAiQ29kZUJsb2Nr
SGFzaC5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJr
ZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1ZGUgIldhc21Db21w
aWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIKKyNpbmNsdWRlIDx3
dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9TdG9wd2F0Y2guaD4KQEAgLTY5LDYgKzcxLDkgQEAgcHVibGljOgog
ICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhc206OkluZGV4T3JOYW1lPiB3YXNtSW5kZXhPck5hbWU7
CiAjZW5kaWYKICAgICAgICAgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxhdGlvbk1vZGU+IHdh
c21Db21waWxhdGlvbk1vZGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAgQm94PFBDVG9Db2Rl
T3JpZ2luTWFwPiB3YXNtUENNYXA7CisjZW5kaWYKICAgICB9OwogCiAgICAgZW51bSBjbGFzcyBG
cmFtZVR5cGUgeyAKQEAgLTk4LDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RkOjpvcHRp
b25hbDxXYXNtOjpJbmRleE9yTmFtZT4gd2FzbUluZGV4T3JOYW1lOwogI2VuZGlmCiAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8V2FzbTo6Q29tcGlsYXRpb25Nb2RlPiB3YXNtQ29tcGlsYXRpb25Nb2Rl
OworICAgICAgICBCeXRlY29kZUluZGV4IHdhc21PZmZzZXQ7CiAKICAgICAgICAgc3RydWN0IENv
ZGVMb2NhdGlvbiB7CiAgICAgICAgICAgICBib29sIGhhc0NvZGVCbG9ja0hhc2goKSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgwLDcgKzM1ODAsOCBA
QCB2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IENvbnRyb2xTCiAKIGF1dG8gQWlySVJH
ZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KIHsKLSAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGltcGxlbWVudCBhIHdheSB0byBnaXZlIEluc3QncyBhbiBvcmlnaW4uCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBpbXBsZW1lbnQgYSB3YXkgdG8gZ2l2ZSBJbnN0J3MgYW4gb3JpZ2luLCBh
bmQgcGlwZSB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gaW50byB0aGUgc2FtcGxpbmcgcHJvZmls
ZXI6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQxODIKICAgICBy
ZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCkBAIC0zNTk2LDcgKzM1OTcsNyBAQCBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAKICAgICBwcm9jZWR1cmUuc2V0T3JpZ2lu
UHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmlnaW4pIHsKICAgICAg
ICAgaWYgKG9yaWdpbi5kYXRhKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIsIGJp
dHdpc2VfY2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgICAgICAgICAgb3V0LnByaW50
KCJXYXNtOiAiLCBPcGNvZGVPcmlnaW4ob3JpZ2luKSk7CiAgICAgfSk7CiAgICAgCiAgICAgLy8g
VGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJhbXM6
OnVzZWRSZWdpc3RlcnMoKSBvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjU0LDkgKzMyNTQsMTcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEludGVybmFsRnVu
Y3RpbwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50SklUID0gbWFrZVVu
aXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNlU2FtcGxpbmdQcm9m
aWxlcigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gdGhpcyBiYXNlZCBvbiBW
TSByZWxldmFudCBpbmZvLgorICAgICAgICAvLyBCdXQgdGhpcyBpcyBnb29kIGVub3VnaCBmb3Ig
b3VyIG93biBwcm9maWxpbmcgZm9yIG5vdy4KKyAgICAgICAgLy8gV2hlbiB3ZSBzdGFydCB0byBz
aG93IHRoaXMgZGF0YSBpbiB3ZWIgaW5zcGVjdG9yLCB3ZSdsbAorICAgICAgICAvLyBuZWVkIG90
aGVyIGhvb2tzIGludG8gdGhpcyBiZXNpZGVzIHRoZSBKU0Mgb3B0aW9uLgorICAgICAgICBwcm9j
ZWR1cmUuc2V0TmVlZHNQQ1RvT3JpZ2luTWFwKCk7CisgICAgfQorCiAgICAgcHJvY2VkdXJlLnNl
dE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBvcmlnaW4pIHsKICAg
ICAgICAgaWYgKG9yaWdpbi5kYXRhKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIldhc206ICIs
IGJpdHdpc2VfY2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgICAgICAgICAgb3V0LnBy
aW50KCJXYXNtOiAiLCBPcGNvZGVPcmlnaW4ob3JpZ2luKSk7CiAgICAgfSk7CiAgICAgCiAgICAg
Ly8gVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXM6OnVzZWRSZWdpc3RlcnMoKSBvcgpAQCAtMzI5OSw2ICszMzA3LDE0IEBAIEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2
b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRleHQmIGNvbnRleHQs
IExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKGNvbnRleHQucHJvY2VkdXJlICYm
IGNvbnRleHQucHJvY2VkdXJlLT5uZWVkc1BDVG9PcmlnaW5NYXAoKSkgeworICAgICAgICBCMzo6
UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBjb250ZXh0LnByb2NlZHVyZS0+cmVsZWFzZVBDVG9P
cmlnaW5NYXAoKTsKKyAgICAgICAgY29udGV4dC5wY1RvQ29kZU9yaWdpbk1hcCA9IEJveDxQQ1Rv
Q29kZU9yaWdpbk1hcD46OmNyZWF0ZShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoUENUb0NvZGVP
cmlnaW5NYXBCdWlsZGVyOjpXYXNtQ29kZU9yaWdpbk1hcCwgV1RGTW92ZShvcmlnaW5NYXApKSwg
bGlua0J1ZmZlcik7CisgICAgfQorfQorCiB2b2lkIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9j
YXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5kbGVyUHRyVGFnPj4m
IGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgY29uc3QgQ29tcGls
YXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQogewogICAgIGlm
ICghY29udGV4dC5wcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDExICszMiwxMyBAQAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkpJVENv
bXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BhcXVlQnlwcm9kdWN0cy5oIgorI2luY2x1ZGUg
IlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiV2FzbUNvbXBpbGF0aW9uTW9kZS5oIgog
I2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1vcnkuaCIKICNpbmNs
dWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNtVGllclVwQ291bnQu
aCIKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAKIGV4
dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTUxLDEyICs1MywxNCBAQCBz
dHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0NhbGxIZWxw
ZXJzPiBlbWJlZGRlckVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENDYWxsSGVs
cGVycz4gd2FzbUVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE9wYXF1ZUJ5cHJv
ZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QjM6
OlByb2NlZHVyZT4gcHJvY2VkdXJlIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxC
Mzo6UHJvY2VkdXJlPiBwcm9jZWR1cmU7CisgICAgQm94PFBDVG9Db2RlT3JpZ2luTWFwPiBwY1Rv
Q29kZU9yaWdpbk1hcDsKIH07CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1
bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25Db250ZXh0JiwgY29u
c3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNpemUsIGNvbnN0IE1v
ZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2RlLCB1aW50MzJfdCBm
dW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwgVGllclVwQ291bnQq
ID0gbnVsbHB0cik7CiAKIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoVmVj
dG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+PiYgaGFuZGxlcnMs
IGNvbnN0IEludGVybmFsRnVuY3Rpb24qLCBjb25zdCBDb21waWxhdGlvbkNvbnRleHQmLCBMaW5r
QnVmZmVyJik7Cit2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRl
eHQmLCBMaW5rQnVmZmVyJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJKHJldmlzaW9uIDI4
Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldhc21BaXJJUkdlbmVyYXRv
ci5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2FzbUNhbGxl
ZS5oIgorI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIldhc21Db2Rl
QmxvY2suaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgIldh
c21UaWVyVXBDb3VudC5oIgpAQCAtMTEzLDYgKzExNCw4IEBAIHZvaWQgQkJRUGxhbjo6d29yayhD
b21waWxhdGlvbkVmZm9ydCBlZmYKICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8RXhjZXB0
aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CiAgICAgY29tcHV0
ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9ucywgZnVu
Y3Rpb24uZ2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCisgICAgY29tcHV0ZVBDVG9Db2Rl
T3JpZ2luTWFwKGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgc2l6ZV90IGZ1bmN0aW9uSW5k
ZXhTcGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRpb24tPmltcG9ydEZ1
bmN0aW9uQ291bnQoKTsKICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJbmRleCA9IG1fbW9k
dWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRpY2VzW21fZnVuY3Rp
b25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBTaWduYXR1cmVJbmZv
cm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTEyNyw2ICsxMzAsOSBAQCB2b2lkIEJC
UVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgICAgIEFTU0VSVCghbV9jb2Rl
QmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKICAgICAgICAgZW50cnlwb2lu
dCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCisgICAgICAgIGlmIChjb250ZXh0LnBjVG9Db2Rl
T3JpZ2luTWFwKQorICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBD
VG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShjb250ZXh0LnBjVG9Db2RlT3Jp
Z2luTWFwKSk7CisKICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBv
dXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlz
IGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0
ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBj
b2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVw
ZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSBy
ZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpAQCAt
MjM4LDYgKzI0NCw5IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21waWxhdGlvbigpCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25IYW5kbGVyTG9jYXRp
b25zKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb24s
IGNvbnRleHQsIGxpbmtCdWZmZXIpOworCisgICAgICAgICAgICBjb21wdXRlUENUb0NvZGVPcmln
aW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICAgICAgICAgIGZ1bmN0aW9uLT5lbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgICAg
ICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldl
YkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0aW9uSW5kZXgsIHNp
Z25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5nKEluZGV4T3JOYW1l
KGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdl
dChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAgICAgICAgICAgICAg
IFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsKQEAgLTI4NSw2ICsy
OTQsOSBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0IENhCiAgICAgICAg
IFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2FsbGVlOjpjcmVhdGUo
V1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpLCBXVEZN
b3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBXVEZNb3ZlKG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSksIFdURk1vdmUoZnVu
Y3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlvbkhhbmRsZXJzKSwg
V1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxGdW5jdGlvbkluZGV4
XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIoZnVuY3Rpb24tPmNh
bGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50cnlwb2ludENhbGxl
ZS5wdHIoKSkpOwogCisgICAgICAgIGlmIChtX2NvbXBpbGF0aW9uQ29udGV4dHNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkKKyAgICAgICAgICAgIENhbGxlZVJlZ2lz
dHJ5OjpzaW5nbGV0b24oKS5hZGRQQ1RvQ29kZU9yaWdpbk1hcCh3YXNtRW50cnlwb2ludENhbGxl
ZS5wdHIoKSwgV1RGTW92ZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbaW50ZXJuYWxGdW5jdGlvbklu
ZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkpOworCiAgICAgICAgIGNhbGxiYWNrKGludGVybmFsRnVu
Y3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUpLCBXVEZNb3ZlKHdh
c21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgJKHJldmlzaW9uIDI4Njg4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVSZWdpc3RyeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAKKyNp
bmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgPHd0Zi9Cb3guaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAKQEAgLTUzLDYgKzU1
LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9Owog
ICAgICAgICBtX2NhbGxlZVNldC5yZW1vdmUoY2FsbGVlKTsKKyAgICAgICAgbV9wY1RvQ29kZU9y
aWdpbk1hcHMucmVtb3ZlKGNhbGxlZSk7CiAgICAgfQogCiAgICAgY29uc3QgSGFzaFNldDxDYWxs
ZWUqPiYgYWxsQ2FsbGVlcygpIFdURl9SRVFVSVJFU19MT0NLKG1fbG9jaykKQEAgLTY3LDExICs3
MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NhbGxlZVNldC5jb250YWlucyhjYWxs
ZWUpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUENUb0NvZGVPcmlnaW5NYXAoQ2FsbGVlKiBjYWxs
ZWUsIEJveDxQQ1RvQ29kZU9yaWdpbk1hcD4gb3JpZ2luTWFwKQorICAgIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBBU1NFUlQoaXNWYWxpZENhbGxlZShjYWxs
ZWUpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3BjVG9Db2RlT3JpZ2luTWFwcy5hZGQo
Y2FsbGVlLCBXVEZNb3ZlKG9yaWdpbk1hcCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgQm94PFBDVG9Db2RlT3JpZ2luTWFwPiBj
b2RlT3JpZ2luTWFwKENhbGxlZSogY2FsbGVlKSAgV1RGX1JFUVVJUkVTX0xPQ0sobV9sb2NrKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRDYWxsZWUoY2FsbGVlKSk7CisgICAgICAgIGF1
dG8gaXRlciA9IG1fcGNUb0NvZGVPcmlnaW5NYXBzLmZpbmQoY2FsbGVlKTsKKyAgICAgICAgaWYg
KGl0ZXIgIT0gbV9wY1RvQ29kZU9yaWdpbk1hcHMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
aXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwogICAgIENhbGxl
ZVJlZ2lzdHJ5KCkgPSBkZWZhdWx0OwogCiBwcml2YXRlOgogICAgIExvY2sgbV9sb2NrOwogICAg
IEhhc2hTZXQ8Q2FsbGVlKj4gbV9jYWxsZWVTZXQgV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2sp
OworICAgIEhhc2hNYXA8Q2FsbGVlKiwgQm94PFBDVG9Db2RlT3JpZ2luTWFwPj4gbV9wY1RvQ29k
ZU9yaWdpbk1hcHMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21P
TUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
T01HUGxhbi5jcHAJKHJldmlzaW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC05Miw2ICs5Myw4IEBAIHZvaWQgT01H
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7CiAg
ICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxvY2F0
aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7CiAKKyAgICBjb21w
dXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICBvbWdFbnRy
eXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4oCiAgICAgICAgIEZJ
TkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNob3VsZER1bXBJUigpIHx8IHNob3Vs
ZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUpLCBsaW5rQnVmZmVy
LCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5jdGlvblslaV0gJXMg
bmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5nKCkuYXNjaWkoKS5k
YXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNwYWNlLCBtX21vZHVs
ZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhTcGFjZSkpKS5hc2Np
aSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJv
ZHVjdHMpKTsKQEAgLTEwNiw2ICsxMDksOSBAQCB2b2lkIE9NR1BsYW46OndvcmsoQ29tcGlsYXRp
b25FZmZvcnQpCiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb21nQ2FsbGVlc1ttX2Z1
bmN0aW9uSW5kZXhdKTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgp
OwogCisgICAgICAgIGlmIChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQorICAgICAgICAgICAg
Q2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5w
dHIoKSwgV1RGTW92ZShjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKSk7CisKICAgICAgICAgLy8g
V2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRp
bWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdl
CiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBs
aW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRl
cywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRo
ZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2Fj
aGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU9wY29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uaAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Myw2ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1aW50
MzJfdD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgICAgICBwYWNrZWREYXRhID0gKHN0YXRpY19j
YXN0PHVpbnQ2NF90PihvcGNvZGUpIDw8IDMyKSB8IG9mZnNldDsKICAgICB9CisgICAgT3Bjb2Rl
T3JpZ2luKEIzOjpPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IHBhY2tlZERhdGEoYml0d2lzZV9j
YXN0PHVpbnQ2NF90PihvcmlnaW4pKQorICAgIHsKKyAgICB9CiAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIAo=
</data>
<flag name="review"
          id="472411"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
    <flag name="commit-queue"
          id="472413"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>446898</attachid>
            <date>2021-12-11 12:45:57 -0800</date>
            <delta_ts>2021-12-11 16:41:11 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>26651</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjg2OTE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDIxLTEyLTExICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRlYWNoIHRoZSBzYW1wbGluZyBwcm9maWxlciBob3cgdG8gZGlzcGxheSBvcmlnaW4gZGF0YSBm
b3IgQjMgV2FzbQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM0MDk3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICBUaGlzIHRlYWNoZXMgdGhlIFNhbXBsaW5nUHJvZmlsZXIgaG93IHRvIGdhdGhlciBvcmlnaW4g
ZGF0YSBmb3IKKyAgICAgICAgV2FzbS4gV2UgcmV1c2UgdGhlIFBDVG9Db2RlT3JpZ2luTWFwIGZy
b20gSlMsIGFuZCBzdG9yZSB0aGUgd2FzbQorICAgICAgICBmdW5jdGlvbiBvZmZzZXQgZGF0YSBp
bnNpZGUgb2YgQ29kZU9yaWdpbidzIEJ5dGVjb2RlSW5kZXguCisgICAgICAgIAorICAgICAgICBG
b3Igbm93LCB0aGlzIHBhdGNoIGlzIG9ubHkgZG9pbmcgdGhpcyBmb3IgQjMsIGJlY2F1c2UgdGhl
IEFpciBiYWNrZW5kCisgICAgICAgIGRvZXNuJ3QgY3VycmVudGx5IGdlbmVyYXRlIGZpbGxlZCBp
biBPcGNvZGVPcmlnaW4gZGF0YS4gV2UnbGwgZml4IHRoYXQKKyAgICAgICAgaW46IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQxODIKKyAgICAgICAgCisgICAgICAg
IEFsc28sIHRoaXMgY2FwYWJpbGl0eSBpc24ndCB5ZXQgc3VwcG9ydGVkIGluIFdlYiBJbnNwZWN0
b3IuIFdlJ2xsIHdhbnQKKyAgICAgICAgdG8gZG8gdGhhdCBpbiBhIGZ1dHVyZSBjaGFuZ2UgYXMg
d2UgaW1wcm92ZSBXZWIgSW5zcGVjdG9yJ3MgYWJpbGl0eSB0bworICAgICAgICBkZWJ1ZyBXYXNt
IGNvZGUuIFdoZW4gdGhhdCB0aW1lIGNvbWVzLCB3ZSdsbCBoYXZlIHRvIGdlbmVyYXRlIHRoZQor
ICAgICAgICBQQ1RvQ29kZU9yaWdpbk1hcCBiYXNlZCBvbiBkZWJ1Z2dpbmcgaW5mbywgYW5kIG5v
dCBqdXN0ICd1c2VTYW1wbGluZ1Byb2ZpbGVyJworICAgICAgICBKU0Mgb3B0aW9uLgorICAgICAg
ICAKKyAgICAgICAgVGhlIGRhdGEgbm93IHNob3dzIHVwIGxpa2UgdGhpcyBmb3IgaG90dGVzdCBi
eXRlY29kZXM6CisgICAgICAgIAorICAgICAgICBIb3R0ZXN0IGJ5dGVjb2RlcyBhcyA8bnVtU2Ft
cGxlcyAgICdmdW5jdGlvbk5hbWUjaGFzaDpKSVRUeXBlOmJ5dGVjb2RlSW5kZXgnPgorICAgICAg
ICAgICA1MjQgICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNzNdOk9NRzoweDIxYScKKyAgICAgICAg
ICAgNDE0ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzYzXTpPTUc6MHgxYWUnCisgICAgICAgICAg
IDM5NSAgICAnPD8+Lndhc20tZnVuY3Rpb25bMjM3M106T01HOjB4NDE4JworICAgICAgICAgICAz
NTQgICAgJzw/Pi53YXNtLWZ1bmN0aW9uWzIzNzNdOk9NRzoweDM0ZicKKyAgICAgICAgICAgMjcw
ICAgICc8Pz4ud2FzbS1mdW5jdGlvblsyMzczXTpPTUc6MHgzNTInCisgICAgICAgICAgIDI1NiAg
ICAnPD8+Lndhc20tZnVuY3Rpb25bMjM2M106T01HOjB4MTUyJworCisKKyAgICAgICAgKiBmdGwv
RlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICog
aml0L1BDVG9Db2RlT3JpZ2luTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6UENUb0NvZGVPcmlnaW5N
YXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIpOgorICAgICAgICAqIGppdC9QQ1Rv
Q29kZU9yaWdpbk1hcC5oOgorICAgICAgICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHA6
CisgICAgICAgIChKU0M6OkZyYW1lV2Fsa2VyOjpyZWNvcmRKSVRGcmFtZSk6CisgICAgICAgIChK
U0M6OlNhbXBsaW5nUHJvZmlsZXI6OnByb2Nlc3NVbnZlcmlmaWVkU3RhY2tUcmFjZXMpOgorICAg
ICAgICAoSlNDOjpTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZXMpOgorICAgICAg
ICAqIHJ1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5oOgorICAgICAgICAqIHdhc20vV2FzbUFpcklS
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6QWlySVJHZW5lcmF0b3I6Om9yaWdp
bik6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5kQ29tcGlsZUFpcik6CisgICAgICAgICog
d2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnBhcnNlQW5k
Q29tcGlsZSk6CisgICAgICAgIChKU0M6Oldhc206OmNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcCk6
CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oOgorICAgICAgICAoKTogRGVsZXRl
ZC4KKyAgICAgICAgKiB3YXNtL1dhc21CQlFQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
QkJRUGxhbjo6d29yayk6CisgICAgICAgIChKU0M6Oldhc206OkJCUVBsYW46OmRpZENvbXBsZXRl
Q29tcGlsYXRpb24pOgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjppbml0aWFsaXplQ2Fs
bGVlcyk6CisgICAgICAgICogd2FzbS9XYXNtQ2FsbGVlUmVnaXN0cnkuaDoKKyAgICAgICAgKEpT
Qzo6V2FzbTo6Q2FsbGVlUmVnaXN0cnk6OnVucmVnaXN0ZXJDYWxsZWUpOgorICAgICAgICAoSlND
OjpXYXNtOjpDYWxsZWVSZWdpc3RyeTo6YWRkUENUb0NvZGVPcmlnaW5NYXApOgorICAgICAgICAo
SlNDOjpXYXNtOjpDYWxsZWVSZWdpc3RyeTo6V1RGX1JFUVVJUkVTX0xPQ0spOgorICAgICAgICAq
IHdhc20vV2FzbU9NR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpPTUdQbGFuOjp3b3Jr
KToKKyAgICAgICAgKiB3YXNtL1dhc21PcGNvZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6T3Bjb2RlT3JpZ2luOjpPcGNvZGVPcmlnaW4pOgorCiAyMDIxLTEyLTExICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBBdXRvbWF0aWNhbGx5IGZvcmJpZCBKUyBl
eGVjdXRpb24gd2hlbiB3ZSB0aHJvdyBhIFRlcm1pbmF0aW9uRXhjZXB0aW9uLgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjg2ODgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NzgsNiAr
ODc4LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQQogICAgIGpp
dC9KSVRPcGVyYXRpb25zLmgKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuaAogICAgIGppdC9KSVRU
aHVua3MuaAorICAgIGppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCiAgICAgaml0L1BvbHltb3JwaGlj
Q2FsbFN0dWJSb3V0aW5lLmgKICAgICBqaXQvUmVnLmgKICAgICBqaXQvUmVnaXN0ZXJBdE9mZnNl
dC5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlz
aW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0
YXRlLCBTYWZlcG9pbnQ6OlJlCiAKICAgICBpZiAodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3Jp
Z2luTWFwcGluZygpKSB7CiAgICAgICAgIEIzOjpQQ1RvT3JpZ2luTWFwIG9yaWdpbk1hcCA9IHN0
YXRlLnByb2MtPnJlbGVhc2VQQ1RvT3JpZ2luTWFwKCk7Ci0gICAgICAgIHN0YXRlLmppdENvZGUt
PmNvbW1vbi5tX3BjVG9Db2RlT3JpZ2luTWFwID0gbWFrZVVuaXF1ZTxQQ1RvQ29kZU9yaWdpbk1h
cD4oUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3Rh
dGUuZmluYWxpemVyLT5iM0NvZGVMaW5rQnVmZmVyKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+
Y29tbW9uLm1fcGNUb0NvZGVPcmlnaW5NYXAgPSBtYWtlVW5pcXVlPFBDVG9Db2RlT3JpZ2luTWFw
PihQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpKU0Nv
ZGVPcmlnaW5NYXAsIHZtLCBXVEZNb3ZlKG9yaWdpbk1hcCkpLCAqc3RhdGUuZmluYWxpemVyLT5i
M0NvZGVMaW5rQnVmZmVyKTsKICAgICB9CiAKICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU0VudHJ5
UHRyVGFnPiBsYWJlbCA9IHN0YXRlLmZpbmFsaXplci0+YjNDb2RlTGlua0J1ZmZlci0+bG9jYXRp
b25PZjxKU0VudHJ5UHRyVGFnPihzdGF0ZS5wcm9jLT5jb2RlKCkuZW50cnlwb2ludExhYmVsKDAp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5N
YXAuY3BwCShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1BD
VG9Db2RlT3JpZ2luTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiV2FzbU9wY29kZU9yaWdpbi5oIgogCiAjaWYgQ09N
UElMRVIoTVNWQykKIC8vIFNlZSBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJy
YXJ5LzR3ejA3MjY4LmFzcHgKQEAgLTk5LDIwICsxMDAsMTcgQEAgcHJpdmF0ZToKIH0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQogCiBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcihWTSYgdm0pCi0gICAgOiBtX3ZtKHZtKQotICAgICwgbV9zaG91bGRCdWls
ZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGluZygpKQorICAgIDog
bV9zaG91bGRCdWlsZE1hcHBpbmcodm0uc2hvdWxkQnVpbGRlclBDVG9Db2RlT3JpZ2luTWFwcGlu
ZygpKQogeyB9CiAKIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW5NYXBC
dWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKQotICAgIDogbV92bShvdGhl
ci5tX3ZtKQotICAgICwgbV9jb2RlUmFuZ2VzKFdURk1vdmUob3RoZXIubV9jb2RlUmFuZ2VzKSkK
KyAgICA6IG1fY29kZVJhbmdlcyhXVEZNb3ZlKG90aGVyLm1fY29kZVJhbmdlcykpCiAgICAgLCBt
X3Nob3VsZEJ1aWxkTWFwcGluZyhvdGhlci5tX3Nob3VsZEJ1aWxkTWFwcGluZykKIHsgfQogCiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi1QQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXI6OlBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcihWTSYgdm0sIEIzOjpQQ1RvT3JpZ2luTWFwJiYgYjNQQ1RvT3JpZ2luTWFw
KQotICAgIDogbV92bSh2bSkKLSAgICAsIG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1
aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKK1BDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6
UENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyKEpTVGFnLCBWTSYgdm0sIEIzOjpQQ1RvT3JpZ2luTWFw
IGIzUENUb09yaWdpbk1hcCkKKyAgICA6IG1fc2hvdWxkQnVpbGRNYXBwaW5nKHZtLnNob3VsZEJ1
aWxkZXJQQ1RvQ29kZU9yaWdpbk1hcHBpbmcoKSkKIHsKICAgICBpZiAoIW1fc2hvdWxkQnVpbGRN
YXBwaW5nKQogICAgICAgICByZXR1cm47CkBAIC0xMjcsNiArMTI1LDIyIEBAIFBDVG9Db2RlT3Jp
Z2luTWFwQnVpbGRlcjo6UENUb0NvZGVPcmlnaW4KIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZX0IzSklUKQorUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpQQ1RvQ29kZU9yaWdp
bk1hcEJ1aWxkZXIoV2FzbVRhZywgQjM6OlBDVG9PcmlnaW5NYXAgYjNQQ1RvT3JpZ2luTWFwKQor
ICAgIDogbV9zaG91bGRCdWlsZE1hcHBpbmcodHJ1ZSkKK3sKKyAgICBmb3IgKGNvbnN0IEIzOjpQ
Q1RvT3JpZ2luTWFwOjpPcmlnaW5SYW5nZSYgb3JpZ2luUmFuZ2UgOiBiM1BDVG9PcmlnaW5NYXAu
cmFuZ2VzKCkpIHsKKyAgICAgICAgQjM6Ok9yaWdpbiBiM09yaWdpbiA9IG9yaWdpblJhbmdlLm9y
aWdpbjsKKyAgICAgICAgaWYgKGIzT3JpZ2luKSB7CisgICAgICAgICAgICBXYXNtOjpPcGNvZGVP
cmlnaW4gd2FzbU9yaWdpbiB7IGIzT3JpZ2luIH07CisgICAgICAgICAgICAvLyBXZSBzdGFzaCB0
aGUgbG9jYXRpb24gaW50byBhIEJ5dGVjb2RlSW5kZXguCisgICAgICAgICAgICBhcHBlbmRJdGVt
KG9yaWdpblJhbmdlLmxhYmVsLCBDb2RlT3JpZ2luKEJ5dGVjb2RlSW5kZXgod2FzbU9yaWdpbi5s
b2NhdGlvbigpKSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFwcGVuZEl0ZW0ob3Jp
Z2luUmFuZ2UubGFiZWwsIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcjo6ZGVmYXVsdENvZGVPcmln
aW4oKSk7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVy
OjphcHBlbmRJdGVtKE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsYWJlbCwgY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbikKIHsKICAgICBpZiAoIW1fc2hvdWxkQnVpbGRNYXBwaW5nKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUENUb0NvZGVPcmlnaW5NYXAuaAkocmV2aXNp
b24gMjg2ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9QQ1RvQ29kZU9yaWdpbk1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1MywxMyBAQCBwdWJsaWM6CiAgICAgUENUb0Nv
ZGVPcmlnaW5NYXBCdWlsZGVyKFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlciYmIG90aGVyKTsKIAog
I2lmIEVOQUJMRShGVExfSklUKQotICAgIFBDVG9Db2RlT3JpZ2luTWFwQnVpbGRlcihWTSYsIEIz
OjpQQ1RvT3JpZ2luTWFwJiYpOworICAgIGVudW0gSlNUYWcgeyBKU0NvZGVPcmlnaW5NYXAgfTsK
KyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxkZXIoSlNUYWcsIFZNJiwgQjM6OlBDVG9PcmlnaW5N
YXApOworI2VuZGlmCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfQjNKSVQpCisgICAgZW51bSBX
YXNtVGFnIHsgV2FzbUNvZGVPcmlnaW5NYXAgfTsKKyAgICBQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIoV2FzbVRhZywgQjM6OlBDVG9PcmlnaW5NYXApOwogI2VuZGlmCiAKICAgICB2b2lkIGFwcGVu
ZEl0ZW0oTWFjcm9Bc3NlbWJsZXI6OkxhYmVsLCBjb25zdCBDb2RlT3JpZ2luJik7CkBAIC02OSw3
ICs3NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICB9
OwogCi0gICAgVk0mIG1fdm07CiAgICAgVmVjdG9yPENvZGVSYW5nZT4gbV9jb2RlUmFuZ2VzOwog
ICAgIGJvb2wgbV9zaG91bGRCdWlsZE1hcHBpbmc7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5jcHAJKHJldmlzaW9uIDI4
Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NhbXBsaW5nUHJvZmlsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDkgQEAgcHJvdGVjdGVkOgogICAgICAg
ICAgICAgICAgIC8vIEFuZCB3ZSBjYW4gc2FmZWx5IGNvcHkgV2FzbTo6SW5kZXhPck5hbWUgZXZl
biB3aGVuIGFueSBsb2NrIGlzIGhlbGQgYnkgc3VzcGVuZGVkIHRocmVhZHMuCiAgICAgICAgICAg
ICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXS53YXNtSW5kZXhPck5hbWUgPSB3YXNtQ2FsbGVlLT5p
bmRleE9yTmFtZSgpOwogICAgICAgICAgICAgICAgIHN0YWNrVHJhY2VbbV9kZXB0aF0ud2FzbUNv
bXBpbGF0aW9uTW9kZSA9IHdhc21DYWxsZWUtPmNvbXBpbGF0aW9uTW9kZSgpOworI2lmIEVOQUJM
RShKSVQpCisgICAgICAgICAgICAgICAgc3RhY2tUcmFjZVttX2RlcHRoXS53YXNtUENNYXAgPSBX
YXNtOjpDYWxsZWVSZWdpc3RyeTo6c2luZ2xldG9uKCkuY29kZU9yaWdpbk1hcCh3YXNtQ2FsbGVl
KTsKKyNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKQEAgLTQ5Niw2ICs0
OTksMjUgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpwcm9jZXNzVW52ZXJpZmllZAogICAgICAg
ICAgICAgc3RhY2tUcmFjZS5mcmFtZXMuYXBwZW5kKFN0YWNrRnJhbWUoKSk7CiAgICAgICAgIH07
CiAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGF1dG8gc3RvcmVXYXNtQ2FsbGVl
SW50b0xhc3RGcmFtZSA9IFsmXSAoVW5wcm9jZXNzZWRTdGFja0ZyYW1lJiB1bnByb2Nlc3NlZFN0
YWNrRnJhbWUsIHZvaWQqIHBjKSB7CisgICAgICAgICAgICBDYWxsZWVCaXRzIGNhbGxlZUJpdHMg
PSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUudW52ZXJpZmllZENhbGxlZTsKKyAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoY2FsbGVlQml0cywgY2FsbGVlQml0cy5pc1dhc20oKSk7CisgICAgICAgICAg
ICBTdGFja0ZyYW1lJiBzdGFja0ZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMubGFzdCgpOworICAg
ICAgICAgICAgc3RhY2tGcmFtZS5mcmFtZVR5cGUgPSBGcmFtZVR5cGU6Oldhc207CisgICAgICAg
ICAgICBzdGFja0ZyYW1lLndhc21JbmRleE9yTmFtZSA9IHVucHJvY2Vzc2VkU3RhY2tGcmFtZS53
YXNtSW5kZXhPck5hbWU7CisgICAgICAgICAgICBzdGFja0ZyYW1lLndhc21Db21waWxhdGlvbk1v
ZGUgPSB1bnByb2Nlc3NlZFN0YWNrRnJhbWUud2FzbUNvbXBpbGF0aW9uTW9kZTsKKyNpZiBFTkFC
TEUoSklUKQorICAgICAgICAgICAgaWYgKHBjICYmIHVucHJvY2Vzc2VkU3RhY2tGcmFtZS53YXNt
UENNYXApIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxDb2RlT3JpZ2luPiBj
b2RlT3JpZ2luID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLndhc21QQ01hcC0+ZmluZFBDKHBjKSkK
KyAgICAgICAgICAgICAgICAgICAgc3RhY2tGcmFtZS53YXNtT2Zmc2V0ID0gY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCgpOworICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgIFVOVVNF
RF9QQVJBTShwYyk7CisjZW5kaWYKKyAgICAgICAgfTsKKyNlbmRpZgorCiAgICAgICAgIGF1dG8g
c3RvcmVDYWxsZWVJbnRvTGFzdEZyYW1lID0gWyZdIChVbnByb2Nlc3NlZFN0YWNrRnJhbWUmIHVu
cHJvY2Vzc2VkU3RhY2tGcmFtZSkgewogICAgICAgICAgICAgYXNzZXJ0SXNIZWxkKG1fbG9jayk7
CiAgICAgICAgICAgICAvLyBTZXQgdGhlIGNhbGxlZSBpZiBpdCdzIGEgdmFsaWQgR0Mgb2JqZWN0
LgpAQCAtNTA0LDkgKzUyNiw3IEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVy
aWZpZWQKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUhhc0V4ZWN1dGFibGUgPSAhIXN0YWNrRnJh
bWUuZXhlY3V0YWJsZTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgICAgICAgICBpZiAo
Y2FsbGVlQml0cy5pc1dhc20oKSkgewotICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUuZnJhbWVU
eXBlID0gRnJhbWVUeXBlOjpXYXNtOwotICAgICAgICAgICAgICAgIHN0YWNrRnJhbWUud2FzbUlu
ZGV4T3JOYW1lID0gdW5wcm9jZXNzZWRTdGFja0ZyYW1lLndhc21JbmRleE9yTmFtZTsKLSAgICAg
ICAgICAgICAgICBzdGFja0ZyYW1lLndhc21Db21waWxhdGlvbk1vZGUgPSB1bnByb2Nlc3NlZFN0
YWNrRnJhbWUud2FzbUNvbXBpbGF0aW9uTW9kZTsKKyAgICAgICAgICAgICAgICBzdG9yZVdhc21D
YWxsZWVJbnRvTGFzdEZyYW1lKHVucHJvY2Vzc2VkU3RhY2tGcmFtZSwgbnVsbHB0cik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogI2VuZGlmCkBAIC02MzEsNiArNjUx
LDEzIEBAIHZvaWQgU2FtcGxpbmdQcm9maWxlcjo6cHJvY2Vzc1VudmVyaWZpZWQKICAgICAgICAg
ICAgICAgICBVTlVTRURfUEFSQU0oYXBwZW5kQ29kZU9yaWdpbik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgICAgIGVsc2UgaWYgKCF1bnBy
b2Nlc3NlZFN0YWNrVHJhY2UuZnJhbWVzLmlzRW1wdHkoKSAmJiB1bnByb2Nlc3NlZFN0YWNrVHJh
Y2UuZnJhbWVzWzBdLnVudmVyaWZpZWRDYWxsZWUuaXNXYXNtKCkpIHsKKyAgICAgICAgICAgIGFw
cGVuZEVtcHR5RnJhbWUoKTsKKyAgICAgICAgICAgIHN0b3JlV2FzbUNhbGxlZUludG9MYXN0RnJh
bWUodW5wcm9jZXNzZWRTdGFja1RyYWNlLmZyYW1lc1swXSwgdW5wcm9jZXNzZWRTdGFja1RyYWNl
LnRvcFBDKTsKKyAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAxOworICAgICAgICB9CisjZW5kaWYK
IAogICAgICAgICBmb3IgKHNpemVfdCBpID0gc3RhcnRJbmRleDsgaSA8IHVucHJvY2Vzc2VkU3Rh
Y2tUcmFjZS5mcmFtZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIFVucHJvY2Vzc2VkU3Rh
Y2tGcmFtZSYgdW5wcm9jZXNzZWRTdGFja0ZyYW1lID0gdW5wcm9jZXNzZWRTdGFja1RyYWNlLmZy
YW1lc1tpXTsKQEAgLTExNjAsNyArMTE4NywyMCBAQCB2b2lkIFNhbXBsaW5nUHJvZmlsZXI6OnJl
cG9ydFRvcEJ5dGVjb2RlCiAgICAgICAgIGlmICghc3RhY2tUcmFjZS5mcmFtZXMuc2l6ZSgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbkZvckxvY2F0
aW9uID0gWyZdIChTdGFja0ZyYW1lOjpDb2RlTG9jYXRpb24gbG9jYXRpb24sIHN0ZDo6b3B0aW9u
YWw8V2FzbTo6Q29tcGlsYXRpb25Nb2RlPiB3YXNtQ29tcGlsYXRpb25Nb2RlKSAtPiBTdHJpbmcg
eworICAgICAgICBhdXRvIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24gPSBbJl0gKFN0YWNrRnJhbWU6
OkNvZGVMb2NhdGlvbiBsb2NhdGlvbiwgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxhdGlvbk1v
ZGU+IHdhc21Db21waWxhdGlvbk1vZGUsIEJ5dGVjb2RlSW5kZXggd2FzbU9mZnNldCkgLT4gU3Ry
aW5nIHsKKyAgICAgICAgICAgIGlmICh3YXNtQ29tcGlsYXRpb25Nb2RlKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgZGVz
Y3JpcHRpb24ucHJpbnQoIjoiKTsKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbi5wcmludChX
YXNtOjptYWtlU3RyaW5nKHdhc21Db21waWxhdGlvbk1vZGUudmFsdWUoKSkpOworICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uLnByaW50KCI6Iik7CisgICAgICAgICAgICAgICAgaWYgKHdhc21P
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IG9mZnNldCA9IHdhc21PZmZz
ZXQub2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KFJhd1Bv
aW50ZXIoYml0d2lzZV9jYXN0PHZvaWQqPihvZmZzZXQpKSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLnByaW50KCJuaWwiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRpb24udG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgU3RyaW5nIGJ5dGVjb2RlSW5kZXg7CiAgICAgICAgICAgICBTdHJpbmcg
Y29kZUJsb2NrSGFzaDsKICAgICAgICAgICAgIFN0cmluZyBqaXRUeXBlOwpAQCAtMTE3Niw5ICsx
MjE2LDcgQEAgdm9pZCBTYW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgY29kZUJsb2NrSGFzaCA9ICI8bmlsPiJfczsK
IAotICAgICAgICAgICAgaWYgKHdhc21Db21waWxhdGlvbk1vZGUpCi0gICAgICAgICAgICAgICAg
aml0VHlwZSA9IFdhc206Om1ha2VTdHJpbmcod2FzbUNvbXBpbGF0aW9uTW9kZS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0aW9uLmlzUmVnRXhwKQorICAgICAgICAgICAgaWYg
KGxvY2F0aW9uLmlzUmVnRXhwKQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSAiUmVnRXhwIl9z
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGppdFR5cGUgPSBKSVRDb2RlOjp0
eXBlTmFtZShsb2NhdGlvbi5qaXRUeXBlKTsKQEAgLTExODcsMTAgKzEyMjUsMTAgQEAgdm9pZCBT
YW1wbGluZ1Byb2ZpbGVyOjpyZXBvcnRUb3BCeXRlY29kZQogICAgICAgICB9OwogCiAgICAgICAg
IFN0YWNrRnJhbWUmIGZyYW1lID0gc3RhY2tUcmFjZS5mcmFtZXMuZmlyc3QoKTsKLSAgICAgICAg
YXV0byBmcmFtZURlc2NyaXB0aW9uID0gbWFrZVN0cmluZyhmcmFtZS5kaXNwbGF5TmFtZShtX3Zt
KSwgZGVzY3JpcHRpb25Gb3JMb2NhdGlvbihmcmFtZS5zZW1hbnRpY0xvY2F0aW9uLCBmcmFtZS53
YXNtQ29tcGlsYXRpb25Nb2RlKSk7CisgICAgICAgIGF1dG8gZnJhbWVEZXNjcmlwdGlvbiA9IG1h
a2VTdHJpbmcoZnJhbWUuZGlzcGxheU5hbWUobV92bSksIGRlc2NyaXB0aW9uRm9yTG9jYXRpb24o
ZnJhbWUuc2VtYW50aWNMb2NhdGlvbiwgZnJhbWUud2FzbUNvbXBpbGF0aW9uTW9kZSwgZnJhbWUu
d2FzbU9mZnNldCkpOwogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8U3RhY2tG
cmFtZTo6Q29kZUxvY2F0aW9uLCBDb2RlQmxvY2sqPj4gbWFjaGluZUxvY2F0aW9uID0gZnJhbWUu
bWFjaGluZUxvY2F0aW9uKSB7CiAgICAgICAgICAgICBmcmFtZURlc2NyaXB0aW9uID0gbWFrZVN0
cmluZyhmcmFtZURlc2NyaXB0aW9uLCAiIDwtLSAiLAotICAgICAgICAgICAgICAgIG1hY2hpbmVM
b2NhdGlvbi0+c2Vjb25kLT5pbmZlcnJlZE5hbWUoKS5kYXRhKCksIGRlc2NyaXB0aW9uRm9yTG9j
YXRpb24obWFjaGluZUxvY2F0aW9uLT5maXJzdCwgc3RkOjpudWxsb3B0KSk7CisgICAgICAgICAg
ICAgICAgbWFjaGluZUxvY2F0aW9uLT5zZWNvbmQtPmluZmVycmVkTmFtZSgpLmRhdGEoKSwgZGVz
Y3JpcHRpb25Gb3JMb2NhdGlvbihtYWNoaW5lTG9jYXRpb24tPmZpcnN0LCBzdGQ6Om51bGxvcHQs
IEJ5dGVjb2RlSW5kZXgoKSkpOwogICAgICAgICB9CiAgICAgICAgIGJ5dGVjb2RlQ291bnRzLmFk
ZChmcmFtZURlc2NyaXB0aW9uLCAwKS5pdGVyYXRvci0+dmFsdWUrKzsKICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxlci5o
CShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1w
bGluZ1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDEwIEBACiAjaW5jbHVk
ZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJNYWNo
aW5lU3RhY2tNYXJrZXIuaCIKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgogI2luY2x1
ZGUgIldhc21Db21waWxhdGlvbk1vZGUuaCIKICNpbmNsdWRlICJXYXNtSW5kZXhPck5hbWUuaCIK
KyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdG9wd2F0Y2guaD4KQEAgLTY5LDYgKzcxLDkg
QEAgcHVibGljOgogICAgICAgICBzdGQ6Om9wdGlvbmFsPFdhc206OkluZGV4T3JOYW1lPiB3YXNt
SW5kZXhPck5hbWU7CiAjZW5kaWYKICAgICAgICAgc3RkOjpvcHRpb25hbDxXYXNtOjpDb21waWxh
dGlvbk1vZGU+IHdhc21Db21waWxhdGlvbk1vZGU7CisjaWYgRU5BQkxFKEpJVCkKKyAgICAgICAg
Qm94PFBDVG9Db2RlT3JpZ2luTWFwPiB3YXNtUENNYXA7CisjZW5kaWYKICAgICB9OwogCiAgICAg
ZW51bSBjbGFzcyBGcmFtZVR5cGUgeyAKQEAgLTk4LDYgKzEwMyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgc3RkOjpvcHRpb25hbDxXYXNtOjpJbmRleE9yTmFtZT4gd2FzbUluZGV4T3JOYW1lOwogI2Vu
ZGlmCiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8V2FzbTo6Q29tcGlsYXRpb25Nb2RlPiB3YXNtQ29t
cGlsYXRpb25Nb2RlOworICAgICAgICBCeXRlY29kZUluZGV4IHdhc21PZmZzZXQ7CiAKICAgICAg
ICAgc3RydWN0IENvZGVMb2NhdGlvbiB7CiAgICAgICAgICAgICBib29sIGhhc0NvZGVCbG9ja0hh
c2goKSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUFpcklSR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
QWlySVJHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyODY4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQWlySVJHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgw
LDcgKzM1ODAsOCBAQCB2b2lkIEFpcklSR2VuZXJhdG9yOjpkdW1wKGNvbnN0IENvbnRyb2xTCiAK
IGF1dG8gQWlySVJHZW5lcmF0b3I6Om9yaWdpbigpIC0+IEIzOjpPcmlnaW4KIHsKLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGltcGxlbWVudCBhIHdheSB0byBnaXZlIEluc3QncyBhbiBvcmlnaW4u
CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbXBsZW1lbnQgYSB3YXkgdG8gZ2l2ZSBJbnN0J3Mg
YW4gb3JpZ2luLCBhbmQgcGlwZSB0aGF0CisgICAgLy8gaW5mb3JtYXRpb24gaW50byB0aGUgc2Ft
cGxpbmcgcHJvZmlsZXI6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzQxODIKICAgICByZXR1cm4gQjM6Ok9yaWdpbigpOwogfQogCkBAIC0zNTk2LDcgKzM1OTcsNyBA
QCBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8SW50ZXJuYWxGdW5jdGlvCiAKICAgICBwcm9jZWR1
cmUuc2V0T3JpZ2luUHJpbnRlcihbXSAoUHJpbnRTdHJlYW0mIG91dCwgQjM6Ok9yaWdpbiBvcmln
aW4pIHsKICAgICAgICAgaWYgKG9yaWdpbi5kYXRhKCkpCi0gICAgICAgICAgICBvdXQucHJpbnQo
Ildhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgICAgICAg
ICAgb3V0LnByaW50KCJXYXNtOiAiLCBPcGNvZGVPcmlnaW4ob3JpZ2luKSk7CiAgICAgfSk7CiAg
ICAgCiAgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXM6OnVzZWRSZWdpc3RlcnMoKSBvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMjg2ODgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjU0LDkgKzMyNTQsMTcgQEAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEludGVybmFsRnVuY3RpbwogCiAgICAgY29tcGlsYXRpb25Db250ZXh0Lndhc21FbnRyeXBvaW50
SklUID0gbWFrZVVuaXF1ZTxDQ2FsbEhlbHBlcnM+KCk7CiAKKyAgICBpZiAoT3B0aW9uczo6dXNl
U2FtcGxpbmdQcm9maWxlcigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZG8gdGhp
cyBiYXNlZCBvbiBWTSByZWxldmFudCBpbmZvLgorICAgICAgICAvLyBCdXQgdGhpcyBpcyBnb29k
IGVub3VnaCBmb3Igb3VyIG93biBwcm9maWxpbmcgZm9yIG5vdy4KKyAgICAgICAgLy8gV2hlbiB3
ZSBzdGFydCB0byBzaG93IHRoaXMgZGF0YSBpbiB3ZWIgaW5zcGVjdG9yLCB3ZSdsbAorICAgICAg
ICAvLyBuZWVkIG90aGVyIGhvb2tzIGludG8gdGhpcyBiZXNpZGVzIHRoZSBKU0Mgb3B0aW9uLgor
ICAgICAgICBwcm9jZWR1cmUuc2V0TmVlZHNQQ1RvT3JpZ2luTWFwKCk7CisgICAgfQorCiAgICAg
cHJvY2VkdXJlLnNldE9yaWdpblByaW50ZXIoW10gKFByaW50U3RyZWFtJiBvdXQsIE9yaWdpbiBv
cmlnaW4pIHsKICAgICAgICAgaWYgKG9yaWdpbi5kYXRhKCkpCi0gICAgICAgICAgICBvdXQucHJp
bnQoIldhc206ICIsIGJpdHdpc2VfY2FzdDxPcGNvZGVPcmlnaW4+KG9yaWdpbikpOworICAgICAg
ICAgICAgb3V0LnByaW50KCJXYXNtOiAiLCBPcGNvZGVPcmlnaW4ob3JpZ2luKSk7CiAgICAgfSk7
CiAgICAgCiAgICAgLy8gVGhpcyBtZWFucyB3ZSBjYW5ub3QgdXNlIGVpdGhlciBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXM6OnVzZWRSZWdpc3RlcnMoKSBvcgpAQCAtMzI5OSw2ICszMzA3LDE0IEBA
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxJbnRlcm5hbEZ1bmN0aW8KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCit2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21waWxhdGlvbkNvbnRl
eHQmIGNvbnRleHQsIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCit7CisgICAgaWYgKGNvbnRleHQu
cHJvY2VkdXJlICYmIGNvbnRleHQucHJvY2VkdXJlLT5uZWVkc1BDVG9PcmlnaW5NYXAoKSkgewor
ICAgICAgICBCMzo6UENUb09yaWdpbk1hcCBvcmlnaW5NYXAgPSBjb250ZXh0LnByb2NlZHVyZS0+
cmVsZWFzZVBDVG9PcmlnaW5NYXAoKTsKKyAgICAgICAgY29udGV4dC5wY1RvQ29kZU9yaWdpbk1h
cCA9IEJveDxQQ1RvQ29kZU9yaWdpbk1hcD46OmNyZWF0ZShQQ1RvQ29kZU9yaWdpbk1hcEJ1aWxk
ZXIoUENUb0NvZGVPcmlnaW5NYXBCdWlsZGVyOjpXYXNtQ29kZU9yaWdpbk1hcCwgV1RGTW92ZShv
cmlnaW5NYXApKSwgbGlua0J1ZmZlcik7CisgICAgfQorfQorCiB2b2lkIGNvbXB1dGVFeGNlcHRp
b25IYW5kbGVyTG9jYXRpb25zKFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxFeGNlcHRpb25IYW5k
bGVyUHRyVGFnPj4mIGhhbmRsZXJzLCBjb25zdCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwg
Y29uc3QgQ29tcGlsYXRpb25Db250ZXh0JiBjb250ZXh0LCBMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KQogewogICAgIGlmICghY29udGV4dC5wcm9jZWR1cmUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHJldmlzaW9uIDI4Njg4MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDExICszMiwxMyBAQAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2lu
Y2x1ZGUgIkpJVENvbXBpbGF0aW9uLmgiCiAjaW5jbHVkZSAiSklUT3BhcXVlQnlwcm9kdWN0cy5o
IgorI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgiCiAjaW5jbHVkZSAiV2FzbUNvbXBpbGF0
aW9uTW9kZS5oIgogI2luY2x1ZGUgIldhc21FbWJlZGRlci5oIgogI2luY2x1ZGUgIldhc21NZW1v
cnkuaCIKICNpbmNsdWRlICJXYXNtTW9kdWxlSW5mb3JtYXRpb24uaCIKICNpbmNsdWRlICJXYXNt
VGllclVwQ291bnQuaCIKKyNpbmNsdWRlIDx3dGYvQm94Lmg+CiAjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CiAKIGV4dGVybiAiQyIgdm9pZCBkdW1wUHJvY2VkdXJlKHZvaWQqKTsKQEAgLTUxLDEy
ICs1MywxNCBAQCBzdHJ1Y3QgQ29tcGlsYXRpb25Db250ZXh0IHsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q0NhbGxIZWxwZXJzPiBlbWJlZGRlckVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPENDYWxsSGVscGVycz4gd2FzbUVudHJ5cG9pbnRKSVQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PE9wYXF1ZUJ5cHJvZHVjdHM+IHdhc21FbnRyeXBvaW50Qnlwcm9kdWN0czsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8QjM6OlByb2NlZHVyZT4gcHJvY2VkdXJlIHsgbnVsbHB0ciB9OworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCMzo6UHJvY2VkdXJlPiBwcm9jZWR1cmU7CisgICAgQm94PFBDVG9Db2RlT3Jp
Z2luTWFwPiBwY1RvQ29kZU9yaWdpbk1hcDsKIH07CiAKIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxJbnRlcm5hbEZ1bmN0aW9uPiwgU3RyaW5nPiBwYXJzZUFuZENvbXBpbGUoQ29tcGlsYXRpb25D
b250ZXh0JiwgY29uc3QgRnVuY3Rpb25EYXRhJiwgY29uc3QgU2lnbmF0dXJlJiwgVmVjdG9yPFVu
bGlua2VkV2FzbVRvV2FzbUNhbGw+JiwgdW5zaWduZWQmIG9zckVudHJ5U2NyYXRjaEJ1ZmZlclNp
emUsIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiwgTWVtb3J5TW9kZSwgQ29tcGlsYXRpb25Nb2Rl
LCB1aW50MzJfdCBmdW5jdGlvbkluZGV4LCB1aW50MzJfdCBsb29wSW5kZXhGb3JPU1JFbnRyeSwg
VGllclVwQ291bnQqID0gbnVsbHB0cik7CiAKIHZvaWQgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnMoVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEV4Y2VwdGlvbkhhbmRsZXJQdHJUYWc+
PiYgaGFuZGxlcnMsIGNvbnN0IEludGVybmFsRnVuY3Rpb24qLCBjb25zdCBDb21waWxhdGlvbkNv
bnRleHQmLCBMaW5rQnVmZmVyJik7Cit2b2lkIGNvbXB1dGVQQ1RvQ29kZU9yaWdpbk1hcChDb21w
aWxhdGlvbkNvbnRleHQmLCBMaW5rQnVmZmVyJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpX
YXNtCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAJ
KHJldmlzaW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIldhc21B
aXJJUkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldhc21CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiV2FzbUNhbGxlZS5oIgorI2luY2x1ZGUgIldhc21DYWxsZWVSZWdpc3RyeS5oIgogI2luY2x1
ZGUgIldhc21Db2RlQmxvY2suaCIKICNpbmNsdWRlICJXYXNtU2lnbmF0dXJlSW5saW5lcy5oIgog
I2luY2x1ZGUgIldhc21UaWVyVXBDb3VudC5oIgpAQCAtMTEzLDYgKzExNCw4IEBAIHZvaWQgQkJR
UGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCBlZmYKICAgICBWZWN0b3I8Q29kZUxvY2F0aW9u
TGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnM7
CiAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9uSGFuZGxlckxv
Y2F0aW9ucywgZnVuY3Rpb24uZ2V0KCksIGNvbnRleHQsIGxpbmtCdWZmZXIpOwogCisgICAgY29t
cHV0ZVBDVG9Db2RlT3JpZ2luTWFwKGNvbnRleHQsIGxpbmtCdWZmZXIpOworCiAgICAgc2l6ZV90
IGZ1bmN0aW9uSW5kZXhTcGFjZSA9IG1fZnVuY3Rpb25JbmRleCArIG1fbW9kdWxlSW5mb3JtYXRp
b24tPmltcG9ydEZ1bmN0aW9uQ291bnQoKTsKICAgICBTaWduYXR1cmVJbmRleCBzaWduYXR1cmVJ
bmRleCA9IG1fbW9kdWxlSW5mb3JtYXRpb24tPmludGVybmFsRnVuY3Rpb25TaWduYXR1cmVJbmRp
Y2VzW21fZnVuY3Rpb25JbmRleF07CiAgICAgY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUgPSBT
aWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZUluZGV4KTsKQEAgLTEyNyw2ICsxMzAs
OSBAQCB2b2lkIEJCUVBsYW46OndvcmsoQ29tcGlsYXRpb25FZmZvcnQgZWZmCiAgICAgICAgIEFT
U0VSVCghbV9jb2RlQmxvY2stPm1fYmJxQ2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKICAgICAg
ICAgZW50cnlwb2ludCA9IGNhbGxlZS0+ZW50cnlwb2ludCgpOwogCisgICAgICAgIGlmIChjb250
ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQorICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmds
ZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2luTWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShjb250ZXh0
LnBjVG9Db2RlT3JpZ2luTWFwKSk7CisKICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUg
d2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2Fs
bHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMgdG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBj
YWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFueSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBz
ZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUgbmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAg
ICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBhbHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2Rl
IGJlZm9yZSB3ZSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2Ug
cmVsZWFzZQpAQCAtMjM4LDYgKzI0NCw5IEBAIHZvaWQgQkJRUGxhbjo6ZGlkQ29tcGxldGVDb21w
aWxhdGlvbigpCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGNvbXB1dGVFeGNlcHRpb25I
YW5kbGVyTG9jYXRpb25zKG1fZXhjZXB0aW9uSGFuZGxlckxvY2F0aW9uc1tmdW5jdGlvbkluZGV4
XSwgZnVuY3Rpb24sIGNvbnRleHQsIGxpbmtCdWZmZXIpOworCisgICAgICAgICAgICBjb21wdXRl
UENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CisKICAgICAgICAgICAgIGZ1
bmN0aW9uLT5lbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4o
CiAgICAgICAgICAgICAgICAgRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlv
blB0clRhZywgIldlYkFzc2VtYmx5IEJCUSBmdW5jdGlvblslaV0gJXMgbmFtZSAlcyIsIGZ1bmN0
aW9uSW5kZXgsIHNpZ25hdHVyZS50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpLCBtYWtlU3RyaW5n
KEluZGV4T3JOYW1lKGZ1bmN0aW9uSW5kZXhTcGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFt
ZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4U3BhY2UpKSkuYXNjaWkoKS5kYXRhKCkpLAogICAg
ICAgICAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50cnlwb2ludEJ5cHJvZHVjdHMpKTsK
QEAgLTI4NSw2ICsyOTQsOSBAQCB2b2lkIEJCUVBsYW46OmluaXRpYWxpemVDYWxsZWVzKGNvbnN0
IENhCiAgICAgICAgIFJlZjxCQlFDYWxsZWU+IHdhc21FbnRyeXBvaW50Q2FsbGVlID0gQkJRQ2Fs
bGVlOjpjcmVhdGUoV1RGTW92ZShmdW5jdGlvbi0+ZW50cnlwb2ludCksIGZ1bmN0aW9uSW5kZXhT
cGFjZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+bmFtZVNlY3Rpb24tPmdldChmdW5jdGlvbkluZGV4
U3BhY2UpLCBXVEZNb3ZlKG1fdGllclVwQ291bnRzW2ludGVybmFsRnVuY3Rpb25JbmRleF0pLCBX
VEZNb3ZlKG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XSks
IFdURk1vdmUoZnVuY3Rpb24tPnN0YWNrbWFwcyksIFdURk1vdmUoZnVuY3Rpb24tPmV4Y2VwdGlv
bkhhbmRsZXJzKSwgV1RGTW92ZShtX2V4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnNbaW50ZXJuYWxG
dW5jdGlvbkluZGV4XSkpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIo
ZnVuY3Rpb24tPmNhbGxlZU1vdmVMb2NhdGlvbiwgQ2FsbGVlQml0czo6Ym94V2FzbSh3YXNtRW50
cnlwb2ludENhbGxlZS5wdHIoKSkpOwogCisgICAgICAgIGlmIChtX2NvbXBpbGF0aW9uQ29udGV4
dHNbaW50ZXJuYWxGdW5jdGlvbkluZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkKKyAgICAgICAgICAg
IENhbGxlZVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5hZGRQQ1RvQ29kZU9yaWdpbk1hcCh3YXNtRW50
cnlwb2ludENhbGxlZS5wdHIoKSwgV1RGTW92ZShtX2NvbXBpbGF0aW9uQ29udGV4dHNbaW50ZXJu
YWxGdW5jdGlvbkluZGV4XS5wY1RvQ29kZU9yaWdpbk1hcCkpOworCiAgICAgICAgIGNhbGxiYWNr
KGludGVybmFsRnVuY3Rpb25JbmRleCwgV1RGTW92ZShlbWJlZGRlckVudHJ5cG9pbnRDYWxsZWUp
LCBXVEZNb3ZlKHdhc21FbnRyeXBvaW50Q2FsbGVlKSk7CiAgICAgfQogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUNhbGxlZVJlZ2lzdHJ5LmgJKHJldmlzaW9u
IDI4Njg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21DYWxsZWVSZWdpc3Ry
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCiAKKyNpbmNsdWRlICJQQ1RvQ29kZU9yaWdpbk1hcC5oIgorI2luY2x1ZGUgPHd0Zi9C
b3guaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAK
QEAgLTUzLDYgKzU1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fbG9jayB9OwogICAgICAgICBtX2NhbGxlZVNldC5yZW1vdmUoY2FsbGVlKTsKKyAgICAgICAg
bV9wY1RvQ29kZU9yaWdpbk1hcHMucmVtb3ZlKGNhbGxlZSk7CiAgICAgfQogCiAgICAgY29uc3Qg
SGFzaFNldDxDYWxsZWUqPiYgYWxsQ2FsbGVlcygpIFdURl9SRVFVSVJFU19MT0NLKG1fbG9jaykK
QEAgLTY3LDExICs3MCwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2NhbGxlZVNldC5j
b250YWlucyhjYWxsZWUpOwogICAgIH0KIAorICAgIHZvaWQgYWRkUENUb0NvZGVPcmlnaW5NYXAo
Q2FsbGVlKiBjYWxsZWUsIEJveDxQQ1RvQ29kZU9yaWdpbk1hcD4gb3JpZ2luTWFwKQorICAgIHsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fbG9jayB9OworICAgICAgICBBU1NFUlQoaXNWYWxp
ZENhbGxlZShjYWxsZWUpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3BjVG9Db2RlT3Jp
Z2luTWFwcy5hZGQoY2FsbGVlLCBXVEZNb3ZlKG9yaWdpbk1hcCkpOworICAgICAgICBSRUxFQVNF
X0FTU0VSVChhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgQm94PFBDVG9Db2Rl
T3JpZ2luTWFwPiBjb2RlT3JpZ2luTWFwKENhbGxlZSogY2FsbGVlKSAgV1RGX1JFUVVJUkVTX0xP
Q0sobV9sb2NrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRDYWxsZWUoY2FsbGVlKSk7
CisgICAgICAgIGF1dG8gaXRlciA9IG1fcGNUb0NvZGVPcmlnaW5NYXBzLmZpbmQoY2FsbGVlKTsK
KyAgICAgICAgaWYgKGl0ZXIgIT0gbV9wY1RvQ29kZU9yaWdpbk1hcHMuZW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KwogICAgIENhbGxlZVJlZ2lzdHJ5KCkgPSBkZWZhdWx0OwogCiBwcml2YXRlOgogICAgIExvY2sg
bV9sb2NrOwogICAgIEhhc2hTZXQ8Q2FsbGVlKj4gbV9jYWxsZWVTZXQgV1RGX0dVQVJERURfQllf
TE9DSyhtX2xvY2spOworICAgIEhhc2hNYXA8Q2FsbGVlKiwgQm94PFBDVG9Db2RlT3JpZ2luTWFw
Pj4gbV9wY1RvQ29kZU9yaWdpbk1hcHMgV1RGX0dVQVJERURfQllfTE9DSyhtX2xvY2spOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21PTUdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtT01HUGxhbi5jcHAJKHJldmlzaW9uIDI4Njg4MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21PTUdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJXYXNtQjNJUkdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIldhc21DYWxsZWUuaCIKKyNpbmNsdWRlICJXYXNtQ2FsbGVlUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJXYXNtTmFtZVNlY3Rpb24uaCIKICNpbmNsdWRlICJXYXNtU2ln
bmF0dXJlSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CkBAIC05Miw2ICs5Myw4
IEBAIHZvaWQgT01HUGxhbjo6d29yayhDb21waWxhdGlvbkVmZm9ydCkKICAgICBWZWN0b3I8Q29k
ZUxvY2F0aW9uTGFiZWw8RXhjZXB0aW9uSGFuZGxlclB0clRhZz4+IGV4Y2VwdGlvbkhhbmRsZXJM
b2NhdGlvbnM7CiAgICAgY29tcHV0ZUV4Y2VwdGlvbkhhbmRsZXJMb2NhdGlvbnMoZXhjZXB0aW9u
SGFuZGxlckxvY2F0aW9ucywgaW50ZXJuYWxGdW5jdGlvbiwgY29udGV4dCwgbGlua0J1ZmZlcik7
CiAKKyAgICBjb21wdXRlUENUb0NvZGVPcmlnaW5NYXAoY29udGV4dCwgbGlua0J1ZmZlcik7CisK
ICAgICBvbWdFbnRyeXBvaW50LmNvbXBpbGF0aW9uID0gbWFrZVVuaXF1ZTxDb21waWxhdGlvbj4o
CiAgICAgICAgIEZJTkFMSVpFX0NPREVfSUYoY29udGV4dC5wcm9jZWR1cmUtPnNob3VsZER1bXBJ
UigpIHx8IHNob3VsZER1bXBEaXNhc3NlbWJseUZvcihDb21waWxhdGlvbk1vZGU6Ok9NR01vZGUp
LCBsaW5rQnVmZmVyLCBKSVRDb21waWxhdGlvblB0clRhZywgIldlYkFzc2VtYmx5IE9NRyBmdW5j
dGlvblslaV0gJXMgbmFtZSAlcyIsIG1fZnVuY3Rpb25JbmRleCwgc2lnbmF0dXJlLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCksIG1ha2VTdHJpbmcoSW5kZXhPck5hbWUoZnVuY3Rpb25JbmRleFNw
YWNlLCBtX21vZHVsZUluZm9ybWF0aW9uLT5uYW1lU2VjdGlvbi0+Z2V0KGZ1bmN0aW9uSW5kZXhT
cGFjZSkpKS5hc2NpaSgpLmRhdGEoKSksCiAgICAgICAgIFdURk1vdmUoY29udGV4dC53YXNtRW50
cnlwb2ludEJ5cHJvZHVjdHMpKTsKQEAgLTEwNiw2ICsxMDksOSBAQCB2b2lkIE9NR1BsYW46Ondv
cmsoQ29tcGlsYXRpb25FZmZvcnQpCiAgICAgICAgIEFTU0VSVCghbV9jb2RlQmxvY2stPm1fb21n
Q2FsbGVlc1ttX2Z1bmN0aW9uSW5kZXhdKTsKICAgICAgICAgZW50cnlwb2ludCA9IGNhbGxlZS0+
ZW50cnlwb2ludCgpOwogCisgICAgICAgIGlmIChjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKQor
ICAgICAgICAgICAgQ2FsbGVlUmVnaXN0cnk6OnNpbmdsZXRvbigpLmFkZFBDVG9Db2RlT3JpZ2lu
TWFwKGNhbGxlZS5wdHIoKSwgV1RGTW92ZShjb250ZXh0LnBjVG9Db2RlT3JpZ2luTWFwKSk7CisK
ICAgICAgICAgLy8gV2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgcHVibGlzaCBvdXIgY2FsbGVlIGF0
IHRoZSBzYW1lIHRpbWUgYXMgd2UgbGluayBvdXIgY2FsbHNpdGVzLiBUaGlzIGVuYWJsZXMgdXMg
dG8gZW5zdXJlIHdlCiAgICAgICAgIC8vIGFsd2F5cyBjYWxsIHRoZSBmYXN0ZXN0IGNvZGUuIEFu
eSBmdW5jdGlvbiBsaW5rZWQgYWZ0ZXIgdXMgd2lsbCBzZWUgb3VyIG5ldyBjb2RlIGFuZCB0aGUg
bmV3IGNhbGxzaXRlcywgd2hpY2ggdGhleQogICAgICAgICAvLyB3aWxsIHVwZGF0ZS4gSXQncyBh
bHNvIG9rIGlmIHRoZXkgcHVibGlzaCB0aGVpciBjb2RlIGJlZm9yZSB3ZSByZXNldCB0aGUgaW5z
dHJ1Y3Rpb24gY2FjaGVzIGJlY2F1c2UgYWZ0ZXIgd2UgcmVsZWFzZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21PcGNvZGVPcmlnaW4uaAkocmV2aXNpb24gMjg2ODgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU9wY29kZU9yaWdpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0MywxMCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChzdGF0
aWNfY2FzdDx1aW50MzJfdD4ob2Zmc2V0KSA9PSBvZmZzZXQpOwogICAgICAgICBwYWNrZWREYXRh
ID0gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihvcGNvZGUpIDw8IDMyKSB8IG9mZnNldDsKICAgICB9
CisgICAgT3Bjb2RlT3JpZ2luKEIzOjpPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IHBhY2tlZERh
dGEoYml0d2lzZV9jYXN0PHVpbnQ2NF90PihvcmlnaW4pKQorICAgIHsKKyAgICB9CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>