<?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>181357</bug_id>
          
          <creation_ts>2018-01-05 17:01:33 -0800</creation_ts>
          <short_desc>Storage Access API: Refactor to make naming accurate and explicit, simplify access table, and prepare for access removal for page</short_desc>
          <delta_ts>2018-01-05 18:16:56 -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>WebKit2</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="John Wilander">wilander</reporter>
          <assigned_to name="John Wilander">wilander</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1386378</commentid>
    <comment_count>0</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-01-05 17:01:33 -0800</bug_when>
    <thetext>First, function and message names need to be changed to reflect how this was eventually implemented, i.e. access per frame.

Second, the UI process doesn&apos;t need the ability to remove access since that is done directly by the web process. This means the UI process should only have explicit grant access functionality.

Finally, the network process&apos; entry table only needs to be able to give access to one domain in one frame at a time since access goes away on frame navigation. And it should use pageIDs as main keys to prepare for access removal for all frames under a page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386380</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-05 17:03:34 -0800</bug_when>
    <thetext>&lt;rdar://problem/36331031&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386391</commentid>
    <comment_count>2</comment_count>
      <attachid>330615</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-01-05 17:18:19 -0800</bug_when>
    <thetext>Created attachment 330615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386400</commentid>
    <comment_count>3</comment_count>
      <attachid>330615</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-05 17:23:54 -0800</bug_when>
    <thetext>Comment on attachment 330615
Patch

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

&gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:290
&gt; -    auto it1 = m_framesGrantedStorageAccess.find(frameID);
&gt; +    auto it1 = m_framesGrantedStorageAccess.find(pageID);

This doesn&apos;t look right.  If it is right you should rename m_framesGrantedStorageAccess to m_pagesGrantedStorageAccess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386403</commentid>
    <comment_count>4</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-01-05 17:29:09 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #3)
&gt; Comment on attachment 330615 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=330615&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp:290
&gt; &gt; -    auto it1 = m_framesGrantedStorageAccess.find(frameID);
&gt; &gt; +    auto it1 = m_framesGrantedStorageAccess.find(pageID);
&gt; 
&gt; This doesn&apos;t look right.  If it is right you should rename
&gt; m_framesGrantedStorageAccess to m_pagesGrantedStorageAccess.

It is right. Access is given to individual frames but since frameIDs are scoped to pageIDs, both are needed to identify a frame. The reasons why I changed from frameID to pageID as primary key are:
1. We want to be able to efficiently remove storage access for all frames on a page.
2. The pageID is the globally unique key.

Does that make sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386406</commentid>
    <comment_count>5</comment_count>
      <attachid>330615</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-01-05 17:30:53 -0800</bug_when>
    <thetext>Comment on attachment 330615
Patch

yep.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386427</commentid>
    <comment_count>6</comment_count>
      <attachid>330615</attachid>
    <who name="John Wilander">wilander</who>
    <bug_when>2018-01-05 17:56:41 -0800</bug_when>
    <thetext>Comment on attachment 330615
Patch

Thanks, Alex!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386430</commentid>
    <comment_count>7</comment_count>
      <attachid>330615</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-05 18:16:54 -0800</bug_when>
    <thetext>Comment on attachment 330615
Patch

Clearing flags on attachment: 330615

Committed r226482: &lt;https://trac.webkit.org/changeset/226482&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386431</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-05 18:16:56 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330615</attachid>
            <date>2018-01-05 17:18:19 -0800</date>
            <delta_ts>2018-01-05 18:16:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181357-20180105171818.patch</filename>
            <type>text/plain</type>
            <size>40980</size>
            <attacher name="John Wilander">wilander</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNjQ3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE4LTAxLTA1ICBKb2huIFdp
bGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNjZXNzIEFQ
STogUmVmYWN0b3IgdG8gbWFrZSBuYW1pbmcgYWNjdXJhdGUgYW5kIGV4cGxpY2l0LCBzaW1wbGlm
eSBhY2Nlc3MgdGFibGUsIGFuZCBwcmVwYXJlIGZvciBhY2Nlc3MgcmVtb3ZhbCBmb3IgcGFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxMzU3Cisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjMzMTAzMT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoZSBvbmx5IGNoYW5nZWQg
ZnVuY3Rpb25hbGl0eSB0aGF0IGlzbid0IGNvdmVyZWQKKyAgICAgICAgYnkgZXhpc3RpbmcgdGVz
dHMgaXMgY3Jvc3Mtb3JpZ2luIGlmcmFtZXMgaW4gdGhlIHNhbWUgcGFydGl0aW9uCisgICAgICAg
IHNob3VsZCBiZSBoYW5kbGVkIGFzIGFscmVhZHkgaGF2aW5nIGFjY2Vzcy4gVGhpcyBjYW5ub3Qg
YmUKKyAgICAgICAgdGVzdGVkIGluIGxheW91dCB0ZXN0cyBzaW5jZSB0aGV5IGRvbid0IHN1cHBv
cnQgc3ViZG9tYWlucy4KKworICAgICAgICBUaGlzIGNoYW5nZSBkb2VzIHRoZSBmb2xsb3dpbmc6
CisgICAgICAgIC0gQ2hhbmdlcyBmdW5jdGlvbiBhbmQgbWVzc2FnZSBuYW1lcyB0byByZWZsZWN0
IGhvdyB0aGlzIGZlYXR1cmUKKyAgICAgICAgICB3YXMgZXZlbnR1YWxseSBpbXBsZW1lbnRlZCwg
aS5lLiBhY2Nlc3MgcGVyIGZyYW1lLgorICAgICAgICAtIE1ha2VzIGl0IGV4cGxpY2l0IHRoYXQg
dGhlIFVJIHByb2Nlc3MgaXMgb25seSBpbnZvbHZlZCBpbgorICAgICAgICAgIGdyYW50aW5nIHN0
b3JhZ2UgYWNjZXNzIGFuZCBub3QgcmVtb3Zpbmcgc3RvcmFnZSBhY2Nlc3MuCisgICAgICAgICAg
VGhlIGxhdHRlciBpcyBkb25lIGRpcmVjdGx5IGJ5IHRoZSB3ZWIgcHJvY2Vzcy4KKyAgICAgICAg
LSBTaW1wbGlmaWVzIHRoZSBuZXR3b3JrIHByb2Nlc3MnIGVudHJ5IG1hcCBzaW5jZSBvbmx5IG5l
ZWRzIHRvCisgICAgICAgICAgYmUgYWJsZSB0byBnaXZlIGFjY2VzcyB0byBvbmUgZG9tYWluIGlu
IG9uZSBmcmFtZSBhdCBhIHRpbWUuCisgICAgICAgICAgQWNjZXNzIGdvZXMgYXdheSBvbiBmcmFt
ZSBuYXZpZ2F0aW9uIHNvIHRoZXJlIGNhbiBvbmx5IGJlIG9uZQorICAgICAgICAgIGRvbWFpbiBh
dCBhIHRpbWUgcGVyIGZyYW1lLiBBbHNvLCB0aGUgbWFwIG5vdyB1c2VzIHBhZ2VJRHMgYXMKKyAg
ICAgICAgICBtYWluIGtleXMgdG8gcHJlcGFyZSBmb3IgZWZmaWNpZW50IGFjY2VzcyByZW1vdmFs
IGZvciBhbGwKKyAgICAgICAgICBmcmFtZXMgdW5kZXIgYSBwYWdlLgorICAgICAgICAtIEZpeGVz
IGEgYnVnIGluIHNvIHRoYXQgYSBjcm9zcy1vcmlnaW4gaWZyYW1lIHdpdGggdGhlIHNhbWUKKyAg
ICAgICAgICBwYXJ0aXRpb24gYXMgdGhlIHRvcCBmcmFtZSBjb3JyZWN0bHkgaXMgaGFuZGxlZCBh
cyBhbHJlYWR5CisgICAgICAgICAgaGF2aW5nIGFjY2Vzcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOZXR3b3JrU3RvcmFnZVNlc3Npb246OmNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24gY29uc3QpOgor
ICAgICAgICAgICAgVGhlIG9ubHkgY2hhbmdlIGhlcmUgaXMgdGhlIGNoYW5nZWQgbmFtZWQgb2Yg
dGhlIGNhbGwgdG8KKyAgICAgICAgICAgIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6aGFzU3RvcmFn
ZUFjY2Vzc0ZvckZyYW1lKCkuCisgICAgICAgIChXZWJDb3JlOjpOZXR3b3JrU3RvcmFnZVNlc3Np
b246Omhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpO
ZXR3b3JrU3RvcmFnZVNlc3Npb246OmdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cmVtb3ZlU3RvcmFnZUFjY2Vzc0Zv
ckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6aXNTdG9y
YWdlQWNjZXNzR3JhbnRlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOZXR3
b3JrU3RvcmFnZVNlc3Npb246OnNldFN0b3JhZ2VBY2Nlc3NHcmFudGVkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6cmVtb3ZlU3RvcmFnZUFjY2Vz
cyk6IERlbGV0ZWQuCisKIDIwMTgtMDEtMDUgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBh
cHBsZS5jb20+CiAKICAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9ydF0gQWRkIGEgd2F5IHRvIHdy
aXRlIGJsb2IgZGF0YSB0byBhIGZpbGUgVVJMIGZyb20gdGhlIFVJIHByb2Nlc3MKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFn
ZVNlc3Npb24uaAkocmV2aXNpb24gMjI2NDExKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTgsOSAr
OTgsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNvb2tpZVN0b3JhZ2VQYXJ0aXRpb24oY29uc3Qg
VVJMJiBmaXJzdFBhcnR5Rm9yQ29va2llcywgY29uc3QgVVJMJiByZXNvdXJjZSwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlEKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFByZXZhbGVudERvbWFpbnNUb1BhcnRp
dGlvbk9yQmxvY2tDb29raWVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9QYXJ0aXRp
b24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgYm9vbCBjbGVhckZpcnN0
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVByZXZhbGVudERvbWFpbnMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTdG9y
YWdlQWNjZXNzR3JhbnRlZChjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJp
bmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCkg
Y29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQWNjZXNzR3JhbnRlZChj
b25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21h
aW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB2YWx1ZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVTdG9yYWdlQWNjZXNzKHVpbnQ2NF90IGZyYW1lSUQs
IHVpbnQ2NF90IHBhZ2VJRCk7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNTdG9yYWdlQWNj
ZXNzRm9yRnJhbWUoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBm
aXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpIGNvbnN0
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUoY29u
c3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpOworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgcmVtb3ZlU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCk7CiAjZW5kaWYKICNlbGlmIFVTRShTT1VQKQogICAgIE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbihQQUw6OlNlc3Npb25JRCwgc3RkOjp1bmlxdWVfcHRyPFNvdXBOZXR3b3JrU2Vzc2lv
bj4mJik7CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEJsb2Nr
VGhpcmRQYXJ0eUNvb2tpZXMoY29uc3QgU3RyaW5nJiB0b3BQcml2YXRlbHlDb250cm9sbGVkRG9t
YWluKSBjb25zdDsKICAgICBIYXNoU2V0PFN0cmluZz4gbV90b3BQcml2YXRlbHlDb250cm9sbGVk
RG9tYWluc1RvUGFydGl0aW9uOwogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3RvcFByaXZhdGVseUNv
bnRyb2xsZWREb21haW5zVG9CbG9jazsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNoTWFwPHVp
bnQ2NF90LCBIYXNoU2V0PFN0cmluZz4sIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RG
OjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+LCBEZWZhdWx0SGFzaDx1
aW50NjRfdD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0
X3Q+PiBtX2ZyYW1lc0dyYW50ZWRTdG9yYWdlQWNjZXNzOworICAgIEhhc2hNYXA8dWludDY0X3Qs
IEhhc2hNYXA8dWludDY0X3QsIFN0cmluZywgRGVmYXVsdEhhc2g8dWludDY0X3Q+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90Pj4sIERlZmF1bHRIYXNo
PHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4+IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3M7CiAjZW5kaWYKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9OZXR3
b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9OZXR3b3JrU3RvcmFnZVNlc3Npb25DRk5ldC5jcHAJKHJldmlz
aW9uIDIyNjQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvTmV0d29y
a1N0b3JhZ2VTZXNzaW9uQ0ZOZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsNyArMTk2LDcg
QEAgU3RyaW5nIE5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6Y29va2llU3RvcgogICAgIGlmIChmaXJz
dFBhcnR5RG9tYWluID09IHJlc291cmNlRG9tYWluKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKIAotICAgIGlmIChmcmFtZUlEICYmIHBhZ2VJRCAmJiBpc1N0b3JhZ2VBY2Nlc3NHcmFu
dGVkKHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELnZhbHVlKCksIHBh
Z2VJRC52YWx1ZSgpKSkKKyAgICBpZiAoZnJhbWVJRCAmJiBwYWdlSUQgJiYgaGFzU3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lKHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELnZh
bHVlKCksIHBhZ2VJRC52YWx1ZSgpKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAK
ICAgICByZXR1cm4gZmlyc3RQYXJ0eURvbWFpbjsKQEAgLTI4Myw2NSArMjgzLDQ1IEBAIHZvaWQg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpyZW1vdmVQcmV2YWwKICAgICB9CiB9CiAKLWJvb2wgTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjppc1N0b3JhZ2VBY2Nlc3NHcmFudGVkKGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKSBjb25zdAorYm9vbCBOZXR3b3JrU3RvcmFnZVNlc3Np
b246Omhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWlu
LCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCkgY29uc3QKIHsKICAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eURvbWFpbik7
CiAKLSAgICBhdXRvIGl0MSA9IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZmluZChmcmFt
ZUlEKTsKKyAgICBhdXRvIGl0MSA9IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZmluZChw
YWdlSUQpOwogICAgIGlmIChpdDEgPT0gbV9mcmFtZXNHcmFudGVkU3RvcmFnZUFjY2Vzcy5lbmQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBpdDIgPSBpdDEtPnZhbHVlLmZp
bmQocGFnZUlEKTsKKyAgICBhdXRvIGl0MiA9IGl0MS0+dmFsdWUuZmluZChmcmFtZUlEKTsKICAg
ICBpZiAoaXQyID09IGl0MS0+dmFsdWUuZW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICByZXR1cm4gaXQyLT52YWx1ZS5jb250YWlucyhyZXNvdXJjZURvbWFpbik7CisgICAg
cmV0dXJuIGl0Mi0+dmFsdWUgPT0gcmVzb3VyY2VEb21haW47CiB9CiAKLXZvaWQgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uOjpzZXRTdG9yYWdlQWNjZXNzR3JhbnRlZChjb25zdCBTdHJpbmcmIHJlc291
cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB2YWx1ZSkKK3ZvaWQgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uOjpncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShjb25zdCBTdHJpbmcmIHJlc291cmNlRG9t
YWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVp
bnQ2NF90IHBhZ2VJRCkKIHsKICAgICBVTlVTRURfUEFSQU0oZmlyc3RQYXJ0eURvbWFpbik7CiAK
LSAgICBhdXRvIGl0MSA9IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZmluZChmcmFtZUlE
KTsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKGl0MSA9PSBtX2ZyYW1lc0dyYW50ZWRT
dG9yYWdlQWNjZXNzLmVuZCgpKSB7Ci0gICAgICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBIYXNo
U2V0PFN0cmluZz4sIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+IGVudHJ5OwotICAgICAgICAgICAgZW50cnku
YWRkKHBhZ2VJRCwgSGFzaFNldDxTdHJpbmc+KHsgcmVzb3VyY2VEb21haW4gfSkpOwotICAgICAg
ICAgICAgbV9mcmFtZXNHcmFudGVkU3RvcmFnZUFjY2Vzcy5hZGQoZnJhbWVJRCwgZW50cnkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXV0byBpdDIgPSBpdDEtPnZhbHVlLmZpbmQo
cGFnZUlEKTsKLSAgICAgICAgICAgIGlmIChpdDIgPT0gaXQxLT52YWx1ZS5lbmQoKSkKLSAgICAg
ICAgICAgICAgICBpdDEtPnZhbHVlLmFkZChwYWdlSUQsIEhhc2hTZXQ8U3RyaW5nPih7IHJlc291
cmNlRG9tYWluIH0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpdDItPnZh
bHVlLmFkZChyZXNvdXJjZURvbWFpbik7Ci0gICAgICAgIH0KKyAgICBhdXRvIGl0MSA9IG1fZnJh
bWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZmluZChwYWdlSUQpOworICAgIGlmIChpdDEgPT0gbV9m
cmFtZXNHcmFudGVkU3RvcmFnZUFjY2Vzcy5lbmQoKSkgeworICAgICAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTdHJpbmcsIERlZmF1bHRIYXNoPHVpbnQ2NF90Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czx1aW50NjRfdD4+IGVudHJ5OworICAgICAgICBlbnRyeS5hZGQo
ZnJhbWVJRCwgcmVzb3VyY2VEb21haW4pOworICAgICAgICBtX2ZyYW1lc0dyYW50ZWRTdG9yYWdl
QWNjZXNzLmFkZChwYWdlSUQsIGVudHJ5KTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAoaXQx
ID09IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZW5kKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgYXV0byBpdDIgPSBpdDEtPnZhbHVlLmZpbmQocGFnZUlEKTsKLSAgICAg
ICAgaWYgKGl0MiA9PSBpdDEtPnZhbHVlLmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIGl0Mi0+dmFsdWUucmVtb3ZlKHJlc291cmNlRG9tYWluKTsKLQotICAgICAgICBpZiAo
aXQyLT52YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBpdDEtPnZhbHVlLnJlbW92ZShwYWdl
SUQpOwotCi0gICAgICAgIGlmIChpdDEtPnZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1f
ZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MucmVtb3ZlKGZyYW1lSUQpOworICAgICAgICBhdXRv
IGl0MiA9IGl0MS0+dmFsdWUuZmluZChmcmFtZUlEKTsKKyAgICAgICAgaXQyLT52YWx1ZSA9IHJl
c291cmNlRG9tYWluOwogICAgIH0KIH0KIAotdm9pZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnJl
bW92ZVN0b3JhZ2VBY2Nlc3ModWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKQordm9p
ZCBOZXR3b3JrU3RvcmFnZVNlc3Npb246OnJlbW92ZVN0b3JhZ2VBY2Nlc3NGb3JGcmFtZSh1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpCiB7Ci0gICAgYXV0byBpdGVyYXRpb24gPSBt
X2ZyYW1lc0dyYW50ZWRTdG9yYWdlQWNjZXNzLmZpbmQoZnJhbWVJRCk7CisgICAgYXV0byBpdGVy
YXRpb24gPSBtX2ZyYW1lc0dyYW50ZWRTdG9yYWdlQWNjZXNzLmZpbmQocGFnZUlEKTsKICAgICBp
ZiAoaXRlcmF0aW9uID09IG1fZnJhbWVzR3JhbnRlZFN0b3JhZ2VBY2Nlc3MuZW5kKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBpdGVyYXRpb24tPnZhbHVlLnJlbW92ZShwYWdlSUQpOwor
CisgICAgaXRlcmF0aW9uLT52YWx1ZS5yZW1vdmUoZnJhbWVJRCk7CiB9Ci0gICAgCisKICNlbmRp
ZiAvLyBIQVZFKENGTkVUV09SS19TVE9SQUdFX1BBUlRJVElPTklORykKIAogI2lmICFQTEFURk9S
TShDT0NPQSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjY0NzQpCisrKyBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYxIEBACisyMDE4LTAxLTA1ICBK
b2huIFdpbGFuZGVyICA8d2lsYW5kZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN0b3JhZ2UgQWNj
ZXNzIEFQSTogUmVmYWN0b3IgdG8gbWFrZSBuYW1pbmcgYWNjdXJhdGUgYW5kIGV4cGxpY2l0LCBz
aW1wbGlmeSBhY2Nlc3MgdGFibGUsIGFuZCBwcmVwYXJlIGZvciBhY2Nlc3MgcmVtb3ZhbCBmb3Ig
cGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgx
MzU3CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjMzMTAzMT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZSBkb2VzIHRoZSBmb2xs
b3dpbmc6CisgICAgICAgIC0gQ2hhbmdlcyBmdW5jdGlvbiBhbmQgbWVzc2FnZSBuYW1lcyB0byBy
ZWZsZWN0IGhvdyB0aGlzIGZlYXR1cmUKKyAgICAgICAgICB3YXMgZXZlbnR1YWxseSBpbXBsZW1l
bnRlZCwgaS5lLiBhY2Nlc3MgcGVyIGZyYW1lLgorICAgICAgICAtIE1ha2VzIGl0IGV4cGxpY2l0
IHRoYXQgdGhlIFVJIHByb2Nlc3MgaXMgb25seSBpbnZvbHZlZCBpbgorICAgICAgICAgIGdyYW50
aW5nIHN0b3JhZ2UgYWNjZXNzIGFuZCBub3QgcmVtb3Zpbmcgc3RvcmFnZSBhY2Nlc3MuCisgICAg
ICAgICAgVGhlIGxhdHRlciBpcyBkb25lIGRpcmVjdGx5IGJ5IHRoZSB3ZWIgcHJvY2Vzcy4KKyAg
ICAgICAgLSBTaW1wbGlmaWVzIHRoZSBuZXR3b3JrIHByb2Nlc3MnIGVudHJ5IG1hcCBzaW5jZSBv
bmx5IG5lZWRzIHRvCisgICAgICAgICAgYmUgYWJsZSB0byBnaXZlIGFjY2VzcyB0byBvbmUgZG9t
YWluIGluIG9uZSBmcmFtZSBhdCBhIHRpbWUuCisgICAgICAgICAgQWNjZXNzIGdvZXMgYXdheSBv
biBmcmFtZSBuYXZpZ2F0aW9uIHNvIHRoZXJlIGNhbiBvbmx5IGJlIG9uZQorICAgICAgICAgIGRv
bWFpbiBhdCBhIHRpbWUgcGVyIGZyYW1lLiBBbHNvLCB0aGUgbWFwIG5vdyB1c2VzIHBhZ2VJRHMg
YXMKKyAgICAgICAgICBtYWluIGtleXMgdG8gcHJlcGFyZSBmb3IgZWZmaWNpZW50IGFjY2VzcyBy
ZW1vdmFsIGZvciBhbGwKKyAgICAgICAgICBmcmFtZXMgdW5kZXIgYSBwYWdlLgorICAgICAgICAt
IEZpeGVzIGEgYnVnIGluIHNvIHRoYXQgYSBjcm9zcy1vcmlnaW4gaWZyYW1lIHdpdGggdGhlIHNh
bWUKKyAgICAgICAgICBwYXJ0aXRpb24gYXMgdGhlIHRvcCBmcmFtZSBjb3JyZWN0bHkgaXMgaGFu
ZGxlZCBhcyBhbHJlYWR5CisgICAgICAgICAgaGF2aW5nIGFjY2Vzcy4KKworICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbW92ZVN0b3JhZ2VBY2Nl
c3NGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpyZW1vdmVTdG9yYWdlQWNjZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6Omhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZSk6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtQcm9jZXNzOjpncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9t
YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjp1cGRhdGVT
dG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWlucyk6IERlbGV0ZWQuCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQ
cm94eTo6aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Byb2Nlc3NQcm94eTo6Z3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWUpOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9t
YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzUHJveHk6OnVw
ZGF0ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21haW5zKTogRGVsZXRlZC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlz
dGljc1N0b3JlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0
b3JlOjpoYXNTdG9yYWdlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2Fk
U3RhdGlzdGljc1N0b3JlOjpyZXF1ZXN0U3RvcmFnZUFjY2Vzcyk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
c2l0ZURhdGFTdG9yZTo6aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcik6CisgICAgICAg
IChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFu
ZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OmVuYWJsZVJlc291cmNl
TG9hZFN0YXRpc3RpY3NBbmRTZXRUZXN0aW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViS2l0OjpX
ZWJzaXRlRGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRs
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjp1cGRhdGVT
dG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIpOiBEZWxldGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQyKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbENoYW5n
ZURvY3VtZW50KToKKwogMjAxOC0wMS0wNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNl
bkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlc3RyaWN0IG5hdmlnYXRpb24tdGltZSBXS1dlYnNp
dGVEYXRhU3RvcmUgc3dhcHBpbmcgdG8gbWFpbiBmcmFtZSBuYXZpZ2F0aW9ucwpJbmRleDogU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIyNjQxMSkKKysrIFNvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NzEsMTAgKzQ3MSwxMCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjplbnN1CiAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmFkZFdlYnNp
dGVEYXRhU3RvcmUoV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnM6OmxlZ2FjeVByaXZhdGVTZXNz
aW9uUGFyYW1ldGVycygpKTsKIH0KIAotdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6cmVtb3ZlU3RvcmFnZUFjY2VzcyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCkKK3ZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlbW92ZVN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCBzZXNzaW9u
SUQsIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICNpZiBIQVZFKENGTkVU
V09SS19TVE9SQUdFX1BBUlRJVElPTklORykKLSAgICBzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQp
LnJlbW92ZVN0b3JhZ2VBY2Nlc3MoZnJhbWVJRCwgcGFnZUlEKTsKKyAgICBzdG9yYWdlU2Vzc2lv
bihzZXNzaW9uSUQpLnJlbW92ZVN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShmcmFtZUlELCBwYWdlSUQp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2Vzc2lvbklEKTsKICAgICBVTlVTRURfUEFSQU0o
ZnJhbWVJRCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAyMjY0MTEp
CisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw3ICsxMzMsNyBAQCBwcml2YXRlOgogCiAg
ICAgQ2FjaGVTdG9yYWdlRW5naW5lQ29ubmVjdGlvbiYgY2FjaGVTdG9yYWdlQ29ubmVjdGlvbigp
OwogCi0gICAgdm9pZCByZW1vdmVTdG9yYWdlQWNjZXNzKFBBTDo6U2Vzc2lvbklELCB1aW50NjRf
dCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpOworICAgIHZvaWQgcmVtb3ZlU3RvcmFnZUFjY2Vz
c0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklELCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdl
SUQpOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogCkluZGV4OiBT
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4JKHJldmlzaW9uIDIyNjQx
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU4LDUgKzU4LDUgQEAgbWVz
c2FnZXMgLT4gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2NlcwogCiAgICAgRW5zdXJlTGVnYWN5
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbigpCiAKLSAgICBSZW1vdmVTdG9yYWdlQWNjZXNzKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb25JRCwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlEKTsK
KyAgICBSZW1vdmVTdG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklE
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQpOwogfQpJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDIy
NjQxMSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMzksMjEgKzMzOSwyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojp1cGRhdGVQcmV2YWxlbnREb21hCiAgICAgICAgIG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2V0
UHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXMoZG9tYWluc1RvUGFydGl0
aW9uLCBkb21haW5zVG9CbG9jaywgZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrLCBz
aG91bGRDbGVhckZpcnN0KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6aGFzU3RvcmFnZUFj
Y2Vzc0ZvclByZXZhbGVudERvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY29udGV4dElkKQordm9p
ZCBOZXR3b3JrUHJvY2Vzczo6aGFzU3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBm
aXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2
NF90IGNvbnRleHRJZCkKIHsKICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0g
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKQotICAgICAg
ICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpTdG9yYWdlQWNjZXNzUmVxdWVzdFJlc3VsdChuZXR3b3JrU3RvcmFnZVNlc3Npb24t
PmlzU3RvcmFnZUFjY2Vzc0dyYW50ZWQocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCksIGNvbnRleHRJZCksIDApOworICAgICAgICBwYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpTdG9yYWdl
QWNjZXNzUmVxdWVzdFJlc3VsdChuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmhhc1N0b3JhZ2VBY2Nl
c3NGb3JGcmFtZShyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFn
ZUlEKSwgY29udGV4dElkKSwgMCk7CiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlU3RvcmFnZUFjY2Vzc0ZvclBy
ZXZhbGVudERvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJl
c291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCBzaG91bGRHcmFudFN0b3JhZ2UsIHVpbnQ2NF90
IGNvbnRleHRJZCkKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmdyYW50U3RvcmFnZUFjY2Vzc0ZvckZy
YW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFp
biwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50
NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNvbnRleHRJZCkKIHsKICAgICBib29sIGlzU3RvcmFnZUdy
YW50ZWQgPSBmYWxzZTsKICAgICBpZiAoYXV0byogbmV0d29ya1N0b3JhZ2VTZXNzaW9uID0gTmV0
d29ya1N0b3JhZ2VTZXNzaW9uOjpzdG9yYWdlU2Vzc2lvbihzZXNzaW9uSUQpKSB7Ci0gICAgICAg
IG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+c2V0U3RvcmFnZUFjY2Vzc0dyYW50ZWQocmVzb3VyY2VE
b21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgc2hvdWxkR3JhbnRTdG9y
YWdlKTsKLSAgICAgICAgQVNTRVJUKG5ldHdvcmtTdG9yYWdlU2Vzc2lvbi0+aXNTdG9yYWdlQWNj
ZXNzR3JhbnRlZChyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFn
ZUlEKSA9PSBzaG91bGRHcmFudFN0b3JhZ2UpOwotICAgICAgICBpc1N0b3JhZ2VHcmFudGVkID0g
c2hvdWxkR3JhbnRTdG9yYWdlOworICAgICAgICBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPmdyYW50
U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBm
cmFtZUlELCBwYWdlSUQpOworICAgICAgICBBU1NFUlQobmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5o
YXNTdG9yYWdlQWNjZXNzRm9yRnJhbWUocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4s
IGZyYW1lSUQsIHBhZ2VJRCkpOworICAgICAgICBpc1N0b3JhZ2VHcmFudGVkID0gdHJ1ZTsKICAg
ICB9IGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgJKHJldmlzaW9uIDIyNjQx
MSkKKysrIFNvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw4IEBAIHB1YmxpYzoKIAogI2lmIEhBVkUoQ0ZORVRX
T1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAgIHZvaWQgdXBkYXRlUHJldmFsZW50RG9tYWlu
c1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXMoUEFMOjpTZXNzaW9uSUQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBkb21haW5zVG9QYXJ0aXRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5z
VG9CbG9jaywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25O
b3JCbG9jaywgYm9vbCBzaG91bGRDbGVhckZpcnN0KTsKLSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nl
c3NGb3JQcmV2YWxlbnREb21haW5zKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291
cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1l
SUQsIHVpbnQ2NF90IHBhZ2VJRCwgdWludDY0X3QgY29udGV4dElkKTsKLSAgICB2b2lkIHVwZGF0
ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21haW5zKFBBTDo6U2Vzc2lvbklELCBjb25zdCBT
dHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB2YWx1ZSwgdWludDY0X3QgY29u
dGV4dElkKTsKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5
RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNvbnRl
eHRJZCk7CisgICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25J
RCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5
RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVpbnQ2NF90IGNvbnRl
eHRJZCk7CiAgICAgdm9pZCByZW1vdmVQcmV2YWxlbnREb21haW5zKFBBTDo6U2Vzc2lvbklELCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlucyk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAyMjY0MTEpCisrKyBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC04Myw4ICs4Myw4IEBA
IG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmUKIAogI2lmIEhBVkUoQ0ZO
RVRXT1JLX1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAgIFVwZGF0ZVByZXZhbGVudERvbWFpbnNU
b1BhcnRpdGlvbk9yQmxvY2tDb29raWVzKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgVmVjdG9y
PFN0cmluZz4gZG9tYWluc1RvUGFydGl0aW9uLCBWZWN0b3I8U3RyaW5nPiBkb21haW5zVG9CbG9j
aywgVmVjdG9yPFN0cmluZz4gZG9tYWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrLCBib29s
IHNob3VsZENsZWFyRmlyc3QpCi0gICAgSGFzU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFp
bnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcgcmVzb3VyY2VEb21haW4sIFN0cmlu
ZyBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIHVp
bnQ2NF90IGNvbnRleHRJZCkKLSAgICBVcGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9t
YWlucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyByZXNvdXJjZURvbWFpbiwgU3Ry
aW5nIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwg
Ym9vbCBzaG91bGRHcmFudEFjY2VzcywgdWludDY0X3QgY29udGV4dElkKQorICAgIEhhc1N0b3Jh
Z2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyByZXNvdXJj
ZURvbWFpbiwgU3RyaW5nIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCwgdWludDY0X3QgY29udGV4dElkKQorICAgIEdyYW50U3RvcmFnZUFjY2Vzc0Zv
ckZyYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nIHJlc291cmNlRG9tYWluLCBT
dHJpbmcgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlE
LCB1aW50NjRfdCBjb250ZXh0SWQpCiAgICAgUmVtb3ZlUHJldmFsZW50RG9tYWlucyhQQUw6OlNl
c3Npb25JRCBzZXNzaW9uSUQsIFZlY3RvcjxTdHJpbmc+IGRvbWFpbnNXaXRoSW50ZXJhY3Rpb24p
OwogI2VuZGlmCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzU3RvcmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5jcHAJKHJldmlzaW9uIDIyNjQxMSkK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9y
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NywxMiArMTQ3LDEyIEBAIHN0YXRpYyBWZWN0b3I8
T3BlcmF0aW5nRGF0ZT4gbWVyZ2VPcGVyYXQKICAgICByZXR1cm4gbWVyZ2VkRGF0ZXM7CiB9CiAK
LVdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGlj
c1N0b3JlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSwgRnVu
Y3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiB0ZXN0aW5nQ2FsbGJhY2ssIFVwZGF0ZVByZXZh
bGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciYmIHVwZGF0ZVByZXZh
bGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciwgSGFzU3RvcmFnZUFj
Y2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYgaGFzU3RvcmFnZUFjY2Vzc0ZvclByZXZh
bGVudERvbWFpbnNIYW5kbGVyLCBVcGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWlu
c0hhbmRsZXImJiB1cGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIs
IFJlbW92ZVByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYgcmVtb3ZlRG9tYWluc0hhbmRsZXIpCitX
ZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OldlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZShjb25zdCBTdHJpbmcmIHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIEZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgdGVzdGluZ0NhbGxiYWNrLCBVcGRhdGVQcmV2YWxl
bnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXImJiB1cGRhdGVQcmV2YWxl
bnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIsIEhhc1N0b3JhZ2VBY2Nl
c3NGb3JGcmFtZUhhbmRsZXImJiBoYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyLCBHcmFu
dFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXImJiBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZUhhbmRsZXIsIFJlbW92ZVByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYgcmVtb3ZlRG9tYWluc0hh
bmRsZXIpCiAgICAgOiBtX3N0YXRpc3RpY3NRdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgiV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIFByb2Nlc3MgRGF0YSBRdWV1ZSIsIFdvcmtRdWV1ZTo6
VHlwZTo6U2VyaWFsLCBXb3JrUXVldWU6OlFPUzo6VXRpbGl0eSkpCiAgICAgLCBtX3BlcnNpc3Rl
bnRTdG9yYWdlKCp0aGlzLCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5KQogICAgICwg
bV91cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIo
V1RGTW92ZSh1cGRhdGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hh
bmRsZXIpKQotICAgICwgbV9oYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRs
ZXIoV1RGTW92ZShoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIpKQot
ICAgICwgbV91cGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIoV1RG
TW92ZSh1cGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIpKQorICAg
ICwgbV9oYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKFdURk1vdmUoaGFzU3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lSGFuZGxlcikpCisgICAgLCBtX2dyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1l
SGFuZGxlcihXVEZNb3ZlKGdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcikpCiAgICAg
LCBtX3JlbW92ZURvbWFpbnNIYW5kbGVyKFdURk1vdmUocmVtb3ZlRG9tYWluc0hhbmRsZXIpKQog
ICAgICwgbV9kYWlseVRhc2tzVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmV2ViUmVzb3Vy
Y2VMb2FkU3RhdGlzdGljc1N0b3JlOjpwZXJmb3JtRGFpbHlUYXNrcykKICAgICAsIG1fc3RhdGlz
dGljc1Rlc3RpbmdDYWxsYmFjayhXVEZNb3ZlKHRlc3RpbmdDYWxsYmFjaykpCkBAIC0yNzIsNyAr
MjcyLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OmhhcwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgbV9oYXNTdG9yYWdlQWNjZXNzRm9y
UHJldmFsZW50RG9tYWluc0hhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVBy
aW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAg
ICBtX2hhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWlu
LCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFj
aykpOwogICAgIH0pOwogfQogCkBAIC0yODEsNyArMjgxLDE0IEBAIHZvaWQgV2ViUmVzb3VyY2VM
b2FkU3RhdGlzdGljc1N0b3JlOjpyZXEKICAgICBBU1NFUlQoc3ViRnJhbWVIb3N0ICE9IHRvcEZy
YW1lSG9zdCk7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIG1fc3RhdGlz
dGljc1F1ZXVlLT5kaXNwYXRjaChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFByaW1hcnlEb21haW4oc3ViRnJhbWVI
b3N0KSwgdG9wRnJhbWVQcmltYXJ5RG9tYWluID0gaXNvbGF0ZWRQcmltYXJ5RG9tYWluKHRvcEZy
YW1lSG9zdCksIGZyYW1lSUQsIHBhZ2VJRCwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KCkgbXV0YWJsZSB7CisgICAgYXV0byBzdWJGcmFtZVByaW1hcnlEb21haW4gPSBpc29sYXRlZFBy
aW1hcnlEb21haW4oc3ViRnJhbWVIb3N0KTsKKyAgICBhdXRvIHRvcEZyYW1lUHJpbWFyeURvbWFp
biA9IGlzb2xhdGVkUHJpbWFyeURvbWFpbih0b3BGcmFtZUhvc3QpOworICAgIGlmIChzdWJGcmFt
ZVByaW1hcnlEb21haW4gPT0gdG9wRnJhbWVQcmltYXJ5RG9tYWluKSB7CisgICAgICAgIGNhbGxi
YWNrKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zdGF0aXN0aWNzUXVl
dWUtPmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHN1YkZy
YW1lUHJpbWFyeURvbWFpbiA9IGNyb3NzVGhyZWFkQ29weShzdWJGcmFtZVByaW1hcnlEb21haW4p
LCB0b3BGcmFtZVByaW1hcnlEb21haW4gPSBjcm9zc1RocmVhZENvcHkodG9wRnJhbWVQcmltYXJ5
RG9tYWluKSwgZnJhbWVJRCwgcGFnZUlELCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAo
KSBtdXRhYmxlIHsKIAogICAgICAgICBhdXRvJiBzdWJGcmFtZVN0YXRpc3RpYyA9IGVuc3VyZVJl
c291cmNlU3RhdGlzdGljc0ZvclByaW1hcnlEb21haW4oc3ViRnJhbWVQcmltYXJ5RG9tYWluKTsK
ICAgICAgICAgaWYgKHNob3VsZEJsb2NrQ29va2llcyhzdWJGcmFtZVN0YXRpc3RpYykpIHsKQEAg
LTI5NCw3ICszMDEsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZTo6cmVx
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIG1fdXBk
YXRlU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyKHN1YkZyYW1lUHJpbWFy
eURvbWFpbiwgdG9wRnJhbWVQcmltYXJ5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHRydWUsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgbV9ncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhh
bmRsZXIoc3ViRnJhbWVQcmltYXJ5RG9tYWluLCB0b3BGcmFtZVByaW1hcnlEb21haW4sIGZyYW1l
SUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0pOwogfQogICAgIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc1N0b3JlLmgJKHJldmlzaW9uIDIyNjQxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MiwxMiArNjIsMTIgQEAgZW51bSBjbGFzcyBTaG91bGRDbGVhckZpcnN0OwogY2xhc3MgV2ViUmVz
b3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlIGZpbmFsIDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6
V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIHB1YmxpYzoKICAgICB1c2luZyBVcGRhdGVQcmV2
YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIgPSBXVEY6OkZ1bmN0
aW9uPHZvaWQoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1BhcnRpdGlvbiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9t
YWluc1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrLCBTaG91bGRDbGVhckZpcnN0KT47Ci0gICAg
dXNpbmcgSGFzU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyID0gV1RGOjpG
dW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYg
Zmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6
OkZ1bmN0aW9uPHZvaWQoYm9vbCBoYXNBY2Nlc3MpPiYmIGNhbGxiYWNrKT47Ci0gICAgdXNpbmcg
VXBkYXRlU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyID0gV1RGOjpGdW5j
dGlvbjx2b2lkKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmly
c3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHZh
bHVlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCB3YXNHcmFudGVkKT4mJiBjYWxsYmFjayk+Owor
ICAgIHVzaW5nIEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBh
cnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6RnVuY3Rp
b248dm9pZChib29sIGhhc0FjY2Vzcyk+JiYgY2FsbGJhY2spPjsKKyAgICB1c2luZyBHcmFudFN0
b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoY29uc3QgU3Ry
aW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50
NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6RnVuY3Rpb248dm9pZChib29sIHdh
c0dyYW50ZWQpPiYmIGNhbGxiYWNrKT47CiAgICAgdXNpbmcgUmVtb3ZlUHJldmFsZW50RG9tYWlu
c0hhbmRsZXIgPSBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik+Owot
ICAgIHN0YXRpYyBSZWY8V2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBGdW5jdGlvbjx2b2lk
IChjb25zdCBTdHJpbmcmKT4mJiB0ZXN0aW5nQ2FsbGJhY2ssIFVwZGF0ZVByZXZhbGVudERvbWFp
bnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciYmIHVwZGF0ZVByZXZhbGVudERvbWFp
bnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciA9IFtdKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIFNob3Vs
ZENsZWFyRmlyc3QpIHsgfSwgSGFzU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5k
bGVyJiYgaGFzU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyID0gW10oY29u
c3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBXVEY6OkZ1bmN0
aW9uPHZvaWQoYm9vbCk+JiYpIHsgfSwgVXBkYXRlU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERv
bWFpbnNIYW5kbGVyJiYgdXBkYXRlU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5k
bGVyID0gW10oY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90
LCBib29sLCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYpIHsgfSwgUmVtb3ZlUHJldmFsZW50
RG9tYWluc0hhbmRsZXImJiByZW1vdmVEb21haW5zSGFuZGxlciA9IFtdIChjb25zdCBWZWN0b3I8
U3RyaW5nPiYpIHsgfSkKKyAgICBzdGF0aWMgUmVmPFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NT
dG9yZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSwgRnVuY3Rpb248dm9pZCAoY29uc3QgU3RyaW5nJik+JiYgdGVzdGluZ0NhbGxiYWNrLCBVcGRh
dGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXImJiB1cGRh
dGVQcmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIgPSBbXShj
b25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBTaG91bGRDbGVhckZpcnN0KSB7IH0sIEhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZUhhbmRsZXImJiBoYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyID0gW10oY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBXVEY6OkZ1bmN0aW9uPHZv
aWQoYm9vbCk+JiYpIHsgfSwgR3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyJiYgZ3Jh
bnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyID0gW10oY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiwgdWludDY0X3QsIHVpbnQ2NF90LCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYp
IHsgfSwgUmVtb3ZlUHJldmFsZW50RG9tYWluc0hhbmRsZXImJiByZW1vdmVEb21haW5zSGFuZGxl
ciA9IFtdIChjb25zdCBWZWN0b3I8U3RyaW5nPiYpIHsgfSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShyZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBXVEZNb3ZlKHRlc3RpbmdDYWxsYmFjayksIFdURk1vdmUo
dXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyKSwg
V1RGTW92ZShoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIpLCBXVEZN
b3ZlKHVwZGF0ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21haW5zSGFuZGxlciksIFdURk1v
dmUocmVtb3ZlRG9tYWluc0hhbmRsZXIpKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFdlYlJlc291cmNlTG9hZFN0YXRpc3RpY3NTdG9yZShyZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5LCBXVEZNb3ZlKHRlc3RpbmdDYWxsYmFjayksIFdURk1vdmUodXBkYXRlUHJldmFsZW50
RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nvb2tpZXNIYW5kbGVyKSwgV1RGTW92ZShoYXNTdG9y
YWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKSwgV1RGTW92ZShncmFudFN0b3JhZ2VBY2Nlc3NGb3JG
cmFtZUhhbmRsZXIpLCBXVEZNb3ZlKHJlbW92ZURvbWFpbnNIYW5kbGVyKSkpOwogICAgIH0KIAog
ICAgIH5XZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoKTsKQEAgLTE0Myw3ICsxNDMsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBsb2dUZXN0aW5nRXZlbnQoY29uc3QgU3RyaW5nJik7CiAKIHBy
aXZhdGU6Ci0gICAgV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlKGNvbnN0IFN0cmluZyYs
IEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgdGVzdGluZ0NhbGxiYWNrLCBVcGRhdGVQ
cmV2YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXImJiwgSGFzU3Rv
cmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyJiYsIFVwZGF0ZVN0b3JhZ2VBY2Nl
c3NGb3JQcmV2YWxlbnREb21haW5zSGFuZGxlciYmLCBSZW1vdmVQcmV2YWxlbnREb21haW5zSGFu
ZGxlciYmKTsKKyAgICBXZWJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmUoY29uc3QgU3RyaW5n
JiwgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4mJiB0ZXN0aW5nQ2FsbGJhY2ssIFVwZGF0
ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlvbk9yQmxvY2tDb29raWVzSGFuZGxlciYmLCBIYXNT
dG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyJiYsIEdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1l
SGFuZGxlciYmLCBSZW1vdmVQcmV2YWxlbnREb21haW5zSGFuZGxlciYmKTsKIAogICAgIHZvaWQg
cmVtb3ZlRGF0YVJlY29yZHMoKTsKIApAQCAtMTk2LDggKzE5Niw4IEBAIHByaXZhdGU6CiAgICAg
VmVjdG9yPE9wZXJhdGluZ0RhdGU+IG1fb3BlcmF0aW5nRGF0ZXM7CiAKICAgICBVcGRhdGVQcmV2
YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXIgbV91cGRhdGVQcmV2
YWxlbnREb21haW5zVG9QYXJ0aXRpb25PckJsb2NrQ29va2llc0hhbmRsZXI7Ci0gICAgSGFzU3Rv
cmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnNIYW5kbGVyIG1faGFzU3RvcmFnZUFjY2Vzc0Zv
clByZXZhbGVudERvbWFpbnNIYW5kbGVyOwotICAgIFVwZGF0ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2
YWxlbnREb21haW5zSGFuZGxlciBtX3VwZGF0ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21h
aW5zSGFuZGxlcjsKKyAgICBIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyIG1faGFzU3Rv
cmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcjsKKyAgICBHcmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZUhhbmRsZXIgbV9ncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXI7CiAgICAgUmVtb3Zl
UHJldmFsZW50RG9tYWluc0hhbmRsZXIgbV9yZW1vdmVEb21haW5zSGFuZGxlcjsKIAogICAgIFdh
bGxUaW1lIG1fZW5kT2ZHcmFuZGZhdGhlcmluZ1RpbWVzdGFtcDsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cAkocmV2aXNpb24gMjI2NDExKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDIwICs0MDgsMjAg
QEAgc3RhdGljIHVpbnQ2NF90IG5leHRSZXF1ZXN0U3RvcmFnZUFjY2VzcwogICAgIHJldHVybiAr
K25leHRDb250ZXh0SWQ7CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6aGFzU3RvcmFn
ZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnMoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4s
IHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKGJvb2wpPiYmIGNhbGxiYWNrKQordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpoYXNT
dG9yYWdlQWNjZXNzRm9yRnJhbWUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBTdHJp
bmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2
NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNhbGxiYWNrKQogewogICAgIGF1dG8gY29udGV4dElkID0gbmV4dFJlcXVlc3RT
dG9yYWdlQWNjZXNzQ29udGV4dElkKCk7CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3N0b3JhZ2VB
Y2Nlc3NSZXNwb25zZUNhbGxiYWNrTWFwLmFkZChjb250ZXh0SWQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwot
ICAgIHNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpIYXNTdG9yYWdlQWNjZXNzRm9yUHJl
dmFsZW50RG9tYWlucyhzZXNzaW9uSUQsIHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWlu
LCBmcmFtZUlELCBwYWdlSUQsIGNvbnRleHRJZCksIDApOworICAgIHNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpIYXNTdG9yYWdlQWNjZXNzRm9yRnJhbWUoc2Vzc2lvbklELCByZXNvdXJj
ZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCBjb250ZXh0SWQpLCAw
KTsKIH0KIAotdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojp1cGRhdGVTdG9yYWdlQWNjZXNzRm9y
UHJldmFsZW50RG9tYWlucyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IFN0cmluZyYg
cmVzb3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgcGFnZUlELCBib29sIHZhbHVlLCBXVEY6OkNvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spCit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Omdy
YW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvIGNvbnRleHRJZCA9IG5leHRSZXF1
ZXN0U3RvcmFnZUFjY2Vzc0NvbnRleHRJZCgpOwogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9zdG9y
YWdlQWNjZXNzUmVzcG9uc2VDYWxsYmFja01hcC5hZGQoY29udGV4dElkLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7CiAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXBkYXRlU3RvcmFnZUFjY2Vz
c0ZvclByZXZhbGVudERvbWFpbnMoc2Vzc2lvbklELCByZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0
eURvbWFpbiwgZnJhbWVJRCwgcGFnZUlELCB2YWx1ZSwgY29udGV4dElkKSwgMCk7CisgICAgc2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lKHNl
c3Npb25JRCwgcmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJ
RCwgY29udGV4dElkKSwgMCk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6c3RvcmFn
ZUFjY2Vzc1JlcXVlc3RSZXN1bHQoYm9vbCB3YXNHcmFudGVkLCB1aW50NjRfdCBjb250ZXh0SWQp
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJv
eHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAkocmV2aXNpb24gMjI2NDExKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDggKzc4LDggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBIQVZFKENGTkVUV09SS19TVE9SQUdF
X1BBUlRJVElPTklORykKLSAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21h
aW5zKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBT
dHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJ
RCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjayk7Ci0gICAgdm9pZCB1
cGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWlucyhQQUw6OlNlc3Npb25JRCwgY29u
c3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIGJvb2wgdmFsdWUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY2FsbGJhY2spOworICAgIHZvaWQgaGFzU3RvcmFnZUFj
Y2Vzc0ZvckZyYW1lKFBBTDo6U2Vzc2lvbklELCBjb25zdCBTdHJpbmcmIHJlc291cmNlRG9tYWlu
LCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2
NF90IHBhZ2VJRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjYWxsYmFjayk7Cisg
ICAgdm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShQQUw6OlNlc3Npb25JRCwgY29uc3Qg
U3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1
aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Ym9vbCk+JiYgY2FsbGJhY2spOwogI2VuZGlmCiAKICAgICB2b2lkIHByb2Nlc3NSZWFkeVRvU3Vz
cGVuZCgpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0
ZURhdGFTdG9yZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
c2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5jcHAJKHJldmlzaW9uIDIyNjQxMSkKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTc2LDE2ICsxMTc2LDE2IEBAIHZvaWQgV2Vic2l0ZURhdGFTdG9yZTo6
dXBkYXRlUHJldmFsZW50RG8KICAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb05ldHdvcmtpbmdQ
cm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6VXBkYXRlUHJldmFsZW50RG9tYWluc1Rv
UGFydGl0aW9uT3JCbG9ja0Nvb2tpZXMobV9zZXNzaW9uSUQsIGRvbWFpbnNUb1BhcnRpdGlvbiwg
ZG9tYWluc1RvQmxvY2ssIGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgc2hvdWxk
Q2xlYXJGaXJzdCA9PSBTaG91bGRDbGVhckZpcnN0OjpZZXMpKTsKIH0KIAotdm9pZCBXZWJzaXRl
RGF0YVN0b3JlOjpoYXNTdG9yYWdlQWNjZXNzRm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIoY29u
c3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWlu
LCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRs
ZXI8dm9pZChib29sIGhhc0FjY2Vzcyk+JiYgY2FsbGJhY2spCit2b2lkIFdlYnNpdGVEYXRhU3Rv
cmU6Omhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJj
ZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlE
LCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIGhhc0Fj
Y2Vzcyk+JiYgY2FsbGJhY2spCiB7CiAgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IHByb2Nl
c3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1Byb2Nlc3MoKS0+aGFzU3Rv
cmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnMobV9zZXNzaW9uSUQsIHJlc291cmNlRG9tYWlu
LCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPm5ldHdvcmtQcm9jZXNzKCktPmhhc1N0b3JhZ2VBY2Nlc3NG
b3JGcmFtZShtX3Nlc3Npb25JRCwgcmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZy
YW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYnNpdGVEYXRh
U3RvcmU6OnVwZGF0ZVN0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21haW5zSGFuZGxlcihjb25z
dCBTdHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4s
IHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgYm9vbCB2YWx1ZSwgV1RGOjpDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wgd2FzR3JhbnRlZCk+JiYgY2FsbGJhY2spCit2b2lkIFdl
YnNpdGVEYXRhU3RvcmU6OmdyYW50U3RvcmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihjb25zdCBT
dHJpbmcmIHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVp
bnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wgd2FzR3JhbnRlZCk+JiYgY2FsbGJhY2spCiB7CiAgICAgZm9yIChhdXRvJiBwcm9j
ZXNzUG9vbCA6IHByb2Nlc3NQb29scygpKQotICAgICAgICBwcm9jZXNzUG9vbC0+bmV0d29ya1By
b2Nlc3MoKS0+dXBkYXRlU3RvcmFnZUFjY2Vzc0ZvclByZXZhbGVudERvbWFpbnMobV9zZXNzaW9u
SUQsIHJlc291cmNlRG9tYWluLCBmaXJzdFBhcnR5RG9tYWluLCBmcmFtZUlELCBwYWdlSUQsIHZh
bHVlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgICAgIHByb2Nlc3NQb29sLT5uZXR3b3JrUHJv
Y2VzcygpLT5ncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZShtX3Nlc3Npb25JRCwgcmVzb3VyY2VE
b21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RGTW92ZShjYWxsYmFj
aykpOwogfQogCiB2b2lkIFdlYnNpdGVEYXRhU3RvcmU6OnJlbW92ZVByZXZhbGVudERvbWFpbnMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnMpCkBAIC0xNDA0LDkgKzE0MDQsOSBAQCB2b2lk
IFdlYnNpdGVEYXRhU3RvcmU6OmVuYWJsZVJlc291cmNlTG9hCiAgICAgbV9yZXNvdXJjZUxvYWRT
dGF0aXN0aWNzID0gV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpjcmVhdGUobV9jb25m
aWd1cmF0aW9uLnJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnksIFdURk1vdmUoY2FsbGJh
Y2spLCBbdGhpc10gKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9QYXJ0aXRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zVG9CbG9jaywgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGRvbWFpbnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgU2hvdWxkQ2xlYXJGaXJzdCBzaG91
bGRDbGVhckZpcnN0KSB7CiAgICAgICAgIHVwZGF0ZVByZXZhbGVudERvbWFpbnNUb1BhcnRpdGlv
bk9yQmxvY2tDb29raWVzKGRvbWFpbnNUb1BhcnRpdGlvbiwgZG9tYWluc1RvQmxvY2ssIGRvbWFp
bnNUb05laXRoZXJQYXJ0aXRpb25Ob3JCbG9jaywgc2hvdWxkQ2xlYXJGaXJzdCk7CiAgICAgfSwg
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFN0cmluZyYgcmVz
b3VyY2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBo
YXNBY2Nlc3MpPiYmIGNhbGxiYWNrKSB7Ci0gICAgICAgIGhhc1N0b3JhZ2VBY2Nlc3NGb3JQcmV2
YWxlbnREb21haW5zSGFuZGxlcihyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFpbiwgZnJh
bWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7Ci0gICAgfSwgW3RoaXMsIHByb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21haW4sIGNv
bnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWludDY0X3Qg
cGFnZUlELCBib29sIHZhbHVlLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNH
cmFudGVkKT4mJiBjYWxsYmFjaykgewotICAgICAgICB1cGRhdGVTdG9yYWdlQWNjZXNzRm9yUHJl
dmFsZW50RG9tYWluc0hhbmRsZXIocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZy
YW1lSUQsIHBhZ2VJRCwgdmFsdWUsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgaGFzU3Rv
cmFnZUFjY2Vzc0ZvckZyYW1lSGFuZGxlcihyZXNvdXJjZURvbWFpbiwgZmlyc3RQYXJ0eURvbWFp
biwgZnJhbWVJRCwgcGFnZUlELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgfSwgW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0IFN0cmluZyYgcmVzb3VyY2VEb21h
aW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNHcmFudGVk
KT4mJiBjYWxsYmFjaykgeworICAgICAgICBncmFudFN0b3JhZ2VBY2Nlc3NGb3JGcmFtZUhhbmRs
ZXIocmVzb3VyY2VEb21haW4sIGZpcnN0UGFydHlEb21haW4sIGZyYW1lSUQsIHBhZ2VJRCwgV1RG
TW92ZShjYWxsYmFjaykpOwogICAgIH0sIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyldIChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWluc1RvUmVtb3ZlKSB7CiAgICAgICAg
IHJlbW92ZVByZXZhbGVudERvbWFpbnMoZG9tYWluc1RvUmVtb3ZlKTsKICAgICB9KTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRl
RGF0YVN0b3JlLmgJKHJldmlzaW9uIDIyNjQxMSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDgg
KzExOCw4IEBAIHB1YmxpYzoKIAogI2lmIEhBVkUoQ0ZORVRXT1JLX1NUT1JBR0VfUEFSVElUSU9O
SU5HKQogICAgIHZvaWQgdXBkYXRlUHJldmFsZW50RG9tYWluc1RvUGFydGl0aW9uT3JCbG9ja0Nv
b2tpZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGRvbWFpbnNUb1BhcnRpdGlvbiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGRvbWFpbnNUb0Jsb2NrLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZG9tYWlu
c1RvTmVpdGhlclBhcnRpdGlvbk5vckJsb2NrLCBTaG91bGRDbGVhckZpcnN0KTsKLSAgICB2b2lk
IGhhc1N0b3JhZ2VBY2Nlc3NGb3JQcmV2YWxlbnREb21haW5zSGFuZGxlcihjb25zdCBTdHJpbmcm
IHJlc291cmNlRG9tYWluLCBjb25zdCBTdHJpbmcmIGZpcnN0UGFydHlEb21haW4sIHVpbnQ2NF90
IGZyYW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wgaGFzQWNjZXNzKT4mJiBjYWxsYmFjayk7Ci0gICAgdm9pZCB1cGRhdGVTdG9yYWdlQWNjZXNz
Rm9yUHJldmFsZW50RG9tYWluc0hhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwg
Y29uc3QgU3RyaW5nJiBmaXJzdFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRf
dCBwYWdlSUQsIGJvb2wgdmFsdWUsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHdh
c0dyYW50ZWQpPiYmIGNhbGxiYWNrKTsKKyAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3NGb3JGcmFt
ZUhhbmRsZXIoY29uc3QgU3RyaW5nJiByZXNvdXJjZURvbWFpbiwgY29uc3QgU3RyaW5nJiBmaXJz
dFBhcnR5RG9tYWluLCB1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBwYWdlSUQsIFdURjo6Q29t
cGxldGlvbkhhbmRsZXI8dm9pZChib29sIGhhc0FjY2Vzcyk+JiYgY2FsbGJhY2spOworICAgIHZv
aWQgZ3JhbnRTdG9yYWdlQWNjZXNzRm9yRnJhbWVIYW5kbGVyKGNvbnN0IFN0cmluZyYgcmVzb3Vy
Y2VEb21haW4sIGNvbnN0IFN0cmluZyYgZmlyc3RQYXJ0eURvbWFpbiwgdWludDY0X3QgZnJhbWVJ
RCwgdWludDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCB3YXNH
cmFudGVkKT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCByZW1vdmVQcmV2YWxlbnREb21haW5zKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBkb21haW5zKTsKICAgICB2b2lkIGhhc1N0b3JhZ2VBY2Nlc3Mo
U3RyaW5nJiYgc3ViRnJhbWVIb3N0LCBTdHJpbmcmJiB0b3BGcmFtZUhvc3QsIHVpbnQ2NF90IGZy
YW1lSUQsIHVpbnQ2NF90IHBhZ2VJRCwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkIChib29s
KT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCByZXF1ZXN0U3RvcmFnZUFjY2VzcyhTdHJpbmcmJiBz
dWJGcmFtZUhvc3QsIFN0cmluZyYmIHRvcEZyYW1lSG9zdCwgdWludDY0X3QgZnJhbWVJRCwgdWlu
dDY0X3QgcGFnZUlELCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQgKGJvb2wpPiYmIGNhbGxi
YWNrKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUxvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNpb24gMjI2
NDExKQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVAKIAogI2lmIEhBVkUoQ0ZORVRXT1JL
X1NUT1JBR0VfUEFSVElUSU9OSU5HKQogICAgIGlmIChtX2hhc0ZyYW1lU3BlY2lmaWNTdG9yYWdl
QWNjZXNzKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UmVtb3ZlU3RvcmFnZUFjY2VzcyhzZXNzaW9uSUQoKSwgZnJh
bWVJRCgpLnZhbHVlKCksIHBhZ2VJRCgpLnZhbHVlKCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVT
dG9yYWdlQWNjZXNzRm9yRnJhbWUoc2Vzc2lvbklEKCksIGZyYW1lSUQoKS52YWx1ZSgpLCBwYWdl
SUQoKS52YWx1ZSgpKSwgMCk7CiAgICAgICAgIG1faGFzRnJhbWVTcGVjaWZpY1N0b3JhZ2VBY2Nl
c3MgPSBmYWxzZTsKICAgICB9CiAjZW5kaWYKQEAgLTM5Miw3ICszOTIsNyBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxDCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX2hhc0ZyYW1lU3BlY2lmaWNTdG9yYWdlQWNjZXNzKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZU5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24o
KS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVtb3ZlU3Rv
cmFnZUFjY2VzcyhzZXNzaW9uSUQoKSwgZnJhbWVJRCgpLnZhbHVlKCksIHBhZ2VJRCgpLnZhbHVl
KCkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVTdG9yYWdlQWNjZXNzRm9yRnJhbWUoc2Vzc2lvbklE
KCksIGZyYW1lSUQoKS52YWx1ZSgpLCBwYWdlSUQoKS52YWx1ZSgpKSwgMCk7CiAgICAgICAgIG1f
aGFzRnJhbWVTcGVjaWZpY1N0b3JhZ2VBY2Nlc3MgPSBmYWxzZTsKICAgICB9CiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>