<?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>136602</bug_id>
          
          <creation_ts>2014-09-06 12:40:32 -0700</creation_ts>
          <short_desc>XPCPtr should be converted into an all purpose smart pointer for os_objects</short_desc>
          <delta_ts>2014-09-07 14:36:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1033681</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-06 12:40:32 -0700</bug_when>
    <thetext>XPCPtr should be converted into an all purpose smart pointer for os_objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033682</commentid>
    <comment_count>1</comment_count>
      <attachid>237742</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-06 12:43:21 -0700</bug_when>
    <thetext>Created attachment 237742
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033706</commentid>
    <comment_count>2</comment_count>
      <attachid>237742</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-06 17:26:28 -0700</bug_when>
    <thetext>Comment on attachment 237742
Patch

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

Generally I’d like to see this more similar to RefPtr, maybe even sharing code somehow. If we made ref/deref free functions instead of member functions, I think we’d be able to share a single class template. But why don’t I feel that way about RetainPtr? Too many special features? Hard to say.

&gt; Source/WTF/wtf/OSObjectPtr.h:89
&gt; +    OSObjectPtr(AdoptOSObject, T ptr)

For PassRefPtr we made this private and made adoptRef a friend. Might want that here too.

&gt; Source/WTF/wtf/OSObjectPtr.h:118
&gt; +    OSObjectPtr&amp; operator=(const OSObjectPtr&amp; other)

I like the swap style we use in RefPtr better.

Also, missing the move assignment operator.

&gt; Source/WTF/wtf/OSObjectPtr.h:124
&gt;          T ptr = m_ptr;

No need for this local variable. It’s fine to release before assigning m_ptr, since we have already retained optr. That’s what we do in the nullptr specialization below, in fact.

&gt; Source/WTF/wtf/OSObjectPtr.h:133
&gt; +    OSObjectPtr&amp; operator=(std::nullptr_t)

With all the inlining, I’m surprised we need a specialization for nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033732</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-07 10:56:13 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 237742 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237742&amp;action=review
&gt; 
&gt; Generally I’d like to see this more similar to RefPtr, maybe even sharing code somehow. If we made ref/deref free functions instead of member functions, I think we’d be able to share a single class template. But why don’t I feel that way about RetainPtr? Too many special features? Hard to say.
&gt; 
&gt; &gt; Source/WTF/wtf/OSObjectPtr.h:89
&gt; &gt; +    OSObjectPtr(AdoptOSObject, T ptr)
&gt; 
&gt; For PassRefPtr we made this private and made adoptRef a friend. Might want that here too.
&gt; 
&gt; &gt; Source/WTF/wtf/OSObjectPtr.h:118
&gt; &gt; +    OSObjectPtr&amp; operator=(const OSObjectPtr&amp; other)
&gt; 
&gt; I like the swap style we use in RefPtr better.
&gt; 
&gt; Also, missing the move assignment operator.
&gt; 
&gt; &gt; Source/WTF/wtf/OSObjectPtr.h:124
&gt; &gt;          T ptr = m_ptr;
&gt; 
&gt; No need for this local variable. It’s fine to release before assigning m_ptr, since we have already retained optr. That’s what we do in the nullptr specialization below, in fact.
&gt; 
&gt; &gt; Source/WTF/wtf/OSObjectPtr.h:133
&gt; &gt; +    OSObjectPtr&amp; operator=(std::nullptr_t)
&gt; 
&gt; With all the inlining, I’m surprised we need a specialization for nullptr.

Thanks for the review.  Given that I am mostly just moving this class, I am going to make these changes in a follow up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033733</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-07 10:56:38 -0700</bug_when>
    <thetext>Committed r173367: &lt;http://trac.webkit.org/changeset/173367&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033754</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-09-07 14:36:29 -0700</bug_when>
    <thetext>Feedback is being address in bug 136613.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237742</attachid>
            <date>2014-09-06 12:43:21 -0700</date>
            <delta_ts>2014-09-06 17:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136602-20140906124315.patch</filename>
            <type>text/plain</type>
            <size>39612</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNzMzNjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE0LTA5LTA2ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgWFBDUHRyIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhbiBh
bGwgcHVycG9zZSBzbWFydCBwb2ludGVyIGZvciBvc19vYmplY3RzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY2MDIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHd0Zi9PU09iamVjdFB0ci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9JUEMvbWFjL1hQQ1B0ci5oLgorICAgICAgICAoV1RGOjpyZXRhaW5P
U09iamVjdCk6CisgICAgICAgIChXVEY6OnJlbGVhc2VPU09iamVjdCk6CisgICAgICAgIChXVEY6
Ok9TT2JqZWN0UHRyOjpPU09iamVjdFB0cik6CisgICAgICAgIChXVEY6Ok9TT2JqZWN0UHRyOjp+
T1NPYmplY3RQdHIpOgorICAgICAgICAoV1RGOjpPU09iamVjdFB0cjo6b3BlcmF0b3I9KToKKyAg
ICAgICAgKFdURjo6YWRvcHRPU09iamVjdCk6CisgICAgICAgIChJUEM6OlhQQ1B0cjo6WFBDUHRy
KTogRGVsZXRlZC4KKyAgICAgICAgKElQQzo6WFBDUHRyOjp+WFBDUHRyKTogRGVsZXRlZC4KKyAg
ICAgICAgKElQQzo6WFBDUHRyOjpvcGVyYXRvcj0pOiBEZWxldGVkLgorICAgICAgICAoSVBDOjph
ZG9wdFhQQyk6IERlbGV0ZWQuCisgICAgICAgIFJlbmFtZS9tb3ZlIFhQQ1B0ciB0byBPU09iamVj
dFB0ciBhbmQgbWFrZSBpdCB3b3JrIHdpdGggYW55IG9zX29iamVjdC4KKwogMjAxNC0wOS0wNSAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2Mgc2hv
dWxkIGhvbm9yIHRoZSBGYXN0TWFsbG9jIHN0YXRpc3RpY3MgQVBJCkluZGV4OiBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MzE0MSkKKysrIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcz
LDYgKzczLDcgQEAKIAkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0RFRDBFRTE4
MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCAqLzsgfTsKIAkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkNERUQwRjExODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwICov
OyB9OwogCQkyQ0RFRDBGNDE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkNERUQwRjIxODExNUM4NTAwNERC
QTcwIC8qIFJ1bkxvb3AuaCAqLzsgfTsKKwkJN0NCQkEwNzQxOUJCN0ZEQzAwQkJGMDI1IC8qIE9T
T2JqZWN0UHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Q0JCQTA3MzE5QkI3RkRDMDBCQkYwMjUgLyogT1NPYmplY3RQdHIuaCAqLzsgfTsKIAkJN0NE
RDdGRjgxODZEMjkxRTAwNzQzM0NEIC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDREQ3RkY3MTg2RDI5MUUwMDc0MzND
RCAvKiBJdGVyYXRvckFkYXB0b3JzLmggKi87IH07CiAJCTdDREQ3RkZBMTg2RDJBNTQwMDc0MzND
RCAvKiBJdGVyYXRvclJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3Q0REN0ZGOTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICov
OyB9OwogCQk3RTI5QzMzRTE1RkZENzlCMDA1MTZENjEgLyogT2JqY1J1bnRpbWVFeHRyYXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFMjlDMzNEMTVG
RkQ3OUIwMDUxNkQ2MSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovOyB9OwpAQCAtMzU5LDYgKzM2
MCw3IEBACiAJCTVEMjQ3QjcwMTQ2ODlDNDcwMEU3OEI3NiAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1RDI0N0I3MzE0Njg5QzQ3MDBFNzhCNzYgLyogV1RGLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2Nv
bmZpZzsgcGF0aCA9IFdURi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU0MUNBRjQxNjMwREIyNjAwNkQwREVDIC8qIENvcHlXVEZIZWFkZXJzLnhjY29uZmlnICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IENvcHlXVEZIZWFkZXJzLnhjY29uZmlnOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3Q0JCQTA3MzE5QkI3RkRDMDBCQkYwMjUgLyogT1NP
YmplY3RQdHIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NPYmplY3RQdHIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NERDdGRjcxODZEMjkxRTAwNzQzM0NE
IC8qIEl0ZXJhdG9yQWRhcHRvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SXRlcmF0b3JBZGFwdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0REN0ZG
OTE4NkQyQTU0MDA3NDMzQ0QgLyogSXRlcmF0b3JSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJdGVyYXRvclJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTdFMjlDMzNEMTVGRkQ3OUIwMDUxNkQ2MSAvKiBPYmpjUnVudGltZUV4dHJhcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPYmpjUnVudGltZUV4dHJhcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzg4LDYgKzc5MCw3IEBACiAJCQkJN0UyOUMzM0QxNUZG
RDc5QjAwNTE2RDYxIC8qIE9iamNSdW50aW1lRXh0cmFzLmggKi8sCiAJCQkJQThBNDcyRDcxNTFB
ODI1QjAwNDEyM0ZGIC8qIE9TQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcyRDgxNTFBODI1QjAw
NDEyM0ZGIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovLAorCQkJCTdDQkJBMDczMTlCQjdGREMw
MEJCRjAyNSAvKiBPU09iamVjdFB0ci5oICovLAogCQkJCUE4QTQ3MkRBMTUxQTgyNUIwMDQxMjNG
RiAvKiBPU1JhbmRvbVNvdXJjZS5jcHAgKi8sCiAJCQkJQThBNDcyREIxNTFBODI1QjAwNDEyM0ZG
IC8qIE9TUmFuZG9tU291cmNlLmggKi8sCiAJCQkJMUFGREU2NTIxOTUzQjIzRDAwQzQ4RkZBIC8q
IE9wdGlvbmFsLmggKi8sCkBAIC0xMDgyLDYgKzEwODUsNyBAQAogCQkJCUE4QTQ3M0U4MTUxQTgy
NUIwMDQxMjNGRiAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0IxQUE4MDE4
MEU1QUYzMDA0QTJGMDUgLyogUGFzc1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUEx
NTFBODI1QjAwNDEyM0ZGIC8qIE1ENS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NCQkEwNzQxOUJC
N0ZEQzAwQkJGMDI1IC8qIE9TT2JqZWN0UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDU0OTdB
RDE1ODU3RDAzMDBCNUJDMzAgLyogTWVkaWFUaW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzNFQjE1MUE4MjVCMDA0MTIzRkYgLyogTWVzc2FnZVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzNFRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9PU09iamVjdFB0ci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL09TT2JqZWN0UHRyLmgJKHJldmlzaW9uIDE3MzE0MSkJKGZyb20gU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vSVBDL21hYy9YUENQdHIuaDoxNzMxNDEpCisrKyBTb3VyY2UvV1RG
L3d0Zi9PU09iamVjdFB0ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBYUENQdHJfaAorI2RlZmluZSBYUENQdHJfaAorCisjaW5jbHVkZSA8
eHBjL3hwYy5oPgorCituYW1lc3BhY2UgSVBDIHsKKworc3RydWN0IEFkb3B0WFBDIHsgfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgWFBDUHRyIHsKK3B1YmxpYzoKKyAgICBYUENQdHIo
KQorICAgICAgICA6IG1fcHRyKG51bGxwdHIpCisgICAgeworICAgIH0KKworICAgIFhQQ1B0cihB
ZG9wdFhQQywgVCBwdHIpCisgICAgICAgIDogbV9wdHIocHRyKQorICAgIHsKKyAgICB9CisKKyAg
ICB+WFBDUHRyKCkKKyAgICB7CisgICAgICAgIGlmIChtX3B0cikKKyAgICAgICAgICAgIHhwY19y
ZWxlYXNlKG1fcHRyKTsKKyAgICB9CisKKyAgICBUIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRy
OyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7
IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3B0cjsgfQorCisgICAg
WFBDUHRyKGNvbnN0IFhQQ1B0ciYgb3RoZXIpCisgICAgICAgIDogbV9wdHIob3RoZXIubV9wdHIp
CisgICAgeworICAgICAgICBpZiAobV9wdHIpCisgICAgICAgICAgICB4cGNfcmV0YWluKG1fcHRy
KTsKKyAgICB9CisKKyAgICBYUENQdHIoWFBDUHRyJiYgb3RoZXIpCisgICAgICAgIDogbV9wdHIo
b3RoZXIubV9wdHIpCisgICAgeworICAgICAgICBvdGhlci5tX3B0ciA9IG51bGxwdHI7CisgICAg
fQorCisgICAgWFBDUHRyJiBvcGVyYXRvcj0oY29uc3QgWFBDUHRyJiBvdGhlcikKKyAgICB7Cisg
ICAgICAgIFQgb3B0ciA9IG90aGVyLmdldCgpOworICAgICAgICBpZiAob3B0cikKKyAgICAgICAg
ICAgIHhwY19yZXRhaW4ob3B0cik7CisKKyAgICAgICAgVCBwdHIgPSBtX3B0cjsKKyAgICAgICAg
bV9wdHIgPSBvcHRyOworCisgICAgICAgIGlmIChwdHIpCisgICAgICAgICAgICB4cGNfcmVsZWFz
ZShwdHIpOworCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBYUENQdHImIG9w
ZXJhdG9yPShzdGQ6Om51bGxwdHJfdCkKKyAgICB7CisgICAgICAgIGlmIChtX3B0cikKKyAgICAg
ICAgICAgIHhwY19yZWxlYXNlKG1fcHRyKTsKKyAgICAgICAgbV9wdHIgPSBudWxscHRyOworCisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Citwcml2YXRlOgorICAgIFQgbV9wdHI7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBpbmxpbmUgWFBDUHRyPFQ+IGFkb3B0WFBDKFQgcHRyKQor
eworICAgIHJldHVybiBYUENQdHI8VD4oQWRvcHRYUEMgeyB9LCBwdHIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBJUEMKKworI2VuZGlmIC8vIFhQQ1B0cl9oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9P
U09iamVjdFB0ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL09TT2JqZWN0UHRyLmgJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XVEYvd3RmL09TT2JqZWN0UHRyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDMxICsyMyw3OCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpZm5kZWYgWFBDUHRyX2gKLSNkZWZpbmUgWFBDUHRyX2gKKyNpZm5kZWYg
T1NPYmplY3RQdHJfaAorI2RlZmluZSBPU09iamVjdFB0cl9oCiAKLSNpbmNsdWRlIDx4cGMveHBj
Lmg+CisjaW5jbHVkZSA8b3Mvb2JqZWN0Lmg+CiAKLW5hbWVzcGFjZSBJUEMgeworI2lmIFBMQVRG
T1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8IDEwMTAwMAogCi1z
dHJ1Y3QgQWRvcHRYUEMgeyB9OworI2lmIF9faGFzX2luY2x1ZGUoPG9zL29iamVjdF9wcml2YXRl
Lmg+KQorI2luY2x1ZGUgPG9zL29iamVjdF9wcml2YXRlLmg+CisjZW5kaWYKIAotdGVtcGxhdGU8
dHlwZW5hbWUgVD4gY2xhc3MgWFBDUHRyIHsKKyNpZiBPU19PQkpFQ1RfVVNFX09CSkMKK0BjbGFz
cyBPU19vYmplY3Q7Cit0eXBlZGVmIE9TX29iamVjdCAqX29zX29iamVjdF90OworI2Vsc2UKK3R5
cGVkZWYgc3RydWN0IF9vc19vYmplY3RfcyAqX29zX29iamVjdF90OworI2VuZGlmCisKK2V4dGVy
biAiQyIgX29zX29iamVjdF90IF9vc19vYmplY3RfcmV0YWluKF9vc19vYmplY3RfdCBvYmplY3Qp
OworZXh0ZXJuICJDIiB2b2lkIF9vc19vYmplY3RfcmVsZWFzZShfb3Nfb2JqZWN0X3Qgb2JqZWN0
KTsKKworI2VuZGlmCisKKworbmFtZXNwYWNlIFdURiB7CisKK3N0cnVjdCBBZG9wdE9TT2JqZWN0
IHsgfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRpYyBpbmxpbmUgdm9pZCByZXRhaW5P
U09iamVjdChUIHB0cikKK3sKKyNpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwIHx8IFBMQVRGT1JNKElPUykKKyAgICBvc19yZXRhaW4o
cHRyKTsKKyNlbHNlCisjaWYgT1NfT0JKRUNUX1VTRV9PQkpDX1JFVEFJTl9SRUxFQVNFCisgICAg
W3B0ciByZXRhaW5dOworI2Vsc2UKKyAgICBfb3Nfb2JqZWN0X3JldGFpbigoX29zX29iamVjdF90
KXB0cik7CisjZW5kaWYKKyNlbmRpZgorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGlj
IGlubGluZSB2b2lkIHJlbGVhc2VPU09iamVjdChUIHB0cikKK3sKKyNpZiBQTEFURk9STShNQUMp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMDAwIHx8IFBMQVRGT1JN
KElPUykKKyAgICBvc19yZWxlYXNlKHB0cik7CisjZWxzZQorI2lmIE9TX09CSkVDVF9VU0VfT0JK
Q19SRVRBSU5fUkVMRUFTRQorICAgIFtwdHIgcmVsZWFzZV07CisjZWxzZQorICAgIF9vc19vYmpl
Y3RfcmVsZWFzZSgoX29zX29iamVjdF90KXB0cik7CisjZW5kaWYKKyNlbmRpZgorfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBPU09iamVjdFB0ciB7CiBwdWJsaWM6Ci0gICAgWFBDUHRy
KCkKKyAgICBPU09iamVjdFB0cigpCiAgICAgICAgIDogbV9wdHIobnVsbHB0cikKICAgICB7CiAg
ICAgfQogCi0gICAgWFBDUHRyKEFkb3B0WFBDLCBUIHB0cikKKyAgICBPU09iamVjdFB0cihBZG9w
dE9TT2JqZWN0LCBUIHB0cikKICAgICAgICAgOiBtX3B0cihwdHIpCiAgICAgewogICAgIH0KIAot
ICAgIH5YUENQdHIoKQorICAgIH5PU09iamVjdFB0cigpCiAgICAgewogICAgICAgICBpZiAobV9w
dHIpCi0gICAgICAgICAgICB4cGNfcmVsZWFzZShtX3B0cik7CisgICAgICAgICAgICByZWxlYXNl
T1NPYmplY3QobV9wdHIpOwogICAgIH0KIAogICAgIFQgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9w
dHI7IH0KQEAgLTU1LDM4ICsxMDIsMzggQEAgcHVibGljOgogICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIW1fcHRyOyB9CiAKLSAgICBYUENQdHIoY29uc3QgWFBDUHRyJiBvdGhlcikK
KyAgICBPU09iamVjdFB0cihjb25zdCBPU09iamVjdFB0ciYgb3RoZXIpCiAgICAgICAgIDogbV9w
dHIob3RoZXIubV9wdHIpCiAgICAgewogICAgICAgICBpZiAobV9wdHIpCi0gICAgICAgICAgICB4
cGNfcmV0YWluKG1fcHRyKTsKKyAgICAgICAgICAgIHJldGFpbk9TT2JqZWN0KG1fcHRyKTsKICAg
ICB9CiAKLSAgICBYUENQdHIoWFBDUHRyJiYgb3RoZXIpCisgICAgT1NPYmplY3RQdHIoT1NPYmpl
Y3RQdHImJiBvdGhlcikKICAgICAgICAgOiBtX3B0cihvdGhlci5tX3B0cikKICAgICB7CiAgICAg
ICAgIG90aGVyLm1fcHRyID0gbnVsbHB0cjsKICAgICB9CiAKLSAgICBYUENQdHImIG9wZXJhdG9y
PShjb25zdCBYUENQdHImIG90aGVyKQorICAgIE9TT2JqZWN0UHRyJiBvcGVyYXRvcj0oY29uc3Qg
T1NPYmplY3RQdHImIG90aGVyKQogICAgIHsKICAgICAgICAgVCBvcHRyID0gb3RoZXIuZ2V0KCk7
CiAgICAgICAgIGlmIChvcHRyKQotICAgICAgICAgICAgeHBjX3JldGFpbihvcHRyKTsKKyAgICAg
ICAgICAgIHJldGFpbk9TT2JqZWN0KG9wdHIpOwogCiAgICAgICAgIFQgcHRyID0gbV9wdHI7CiAg
ICAgICAgIG1fcHRyID0gb3B0cjsKIAogICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgeHBj
X3JlbGVhc2UocHRyKTsKKyAgICAgICAgICAgIHJlbGVhc2VPU09iamVjdChwdHIpOwogCiAgICAg
ICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKLSAgICBYUENQdHImIG9wZXJhdG9yPShzdGQ6Om51
bGxwdHJfdCkKKyAgICBPU09iamVjdFB0ciYgb3BlcmF0b3I9KHN0ZDo6bnVsbHB0cl90KQogICAg
IHsKICAgICAgICAgaWYgKG1fcHRyKQotICAgICAgICAgICAgeHBjX3JlbGVhc2UobV9wdHIpOwor
ICAgICAgICAgICAgcmVsZWFzZU9TT2JqZWN0KG1fcHRyKTsKICAgICAgICAgbV9wdHIgPSBudWxs
cHRyOwogCiAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTk1LDExICsxNDIsMTQgQEAgcHJpdmF0
ZToKICAgICBUIG1fcHRyOwogfTsKIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFhQQ1B0
cjxUPiBhZG9wdFhQQyhUIHB0cikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBPU09iamVj
dFB0cjxUPiBhZG9wdE9TT2JqZWN0KFQgcHRyKQogewotICAgIHJldHVybiBYUENQdHI8VD4oQWRv
cHRYUEMgeyB9LCBwdHIpOworICAgIHJldHVybiBPU09iamVjdFB0cjxUPihBZG9wdE9TT2JqZWN0
IHsgfSwgcHRyKTsKIH0KIAotfSAvLyBuYW1lc3BhY2UgSVBDCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpPU09iamVjdFB0cjsKK3VzaW5nIFdURjo6YWRvcHRPU09iamVjdDsKIAot
I2VuZGlmIC8vIFhQQ1B0cl9oCisjZW5kaWYgLy8gT1NPYmplY3RQdHJfaApJbmRleDogU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTczMzYyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTQtMDktMDYgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBYUENQdHIgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGFuIGFs
bCBwdXJwb3NlIHNtYXJ0IHBvaW50ZXIgZm9yIG9zX29iamVjdHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjYwMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9p
bnQvbWFjL1hQQ1NlcnZpY2UvRGF0YWJhc2VTZXJ2aWNlRW50cnlQb2ludC5tbToKKyAgICAgICAg
KERhdGFiYXNlU2VydmljZUluaXRpYWxpemVyKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9F
bnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL05ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5tbToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlOjpOZXR3b3Jr
U2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUpOgorICAgICAgICAoTmV0d29ya1NlcnZpY2VJbml0
aWFsaXplcik6CisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaDoKKyAgICAgICAg
KElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcjo6SWRlbnRpZmllcik6CisgICAgICAgICogUGxh
dGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFjLm1tOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9u
VGVybWluYXRpb25XYXRjaGRvZzo6Y3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2cp
OgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6Q29ubmVjdGlv
blRlcm1pbmF0aW9uV2F0Y2hkb2cpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9tYWMvWFBDUHRy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENT
ZXJ2aWNlL1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tOgorICAgICAgICAoV2ViS2l0OjpQbHVn
aW5TZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZTo6UGx1Z2luU2VydmljZUluaXRpYWxpemVyRGVs
ZWdhdGUpOgorICAgICAgICAoUGx1Z2luU2VydmljZUluaXRpYWxpemVyKToKKyAgICAgICAgKiBT
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQ
b2ludC5oOgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZTo6
WFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUpOgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2
aWNlSW5pdGlhbGl6ZXIpOgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21h
Yy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50Lm1tOgorICAgICAgICAoV2ViS2l0OjpY
UENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZTo6Y2hlY2tFbnRpdGxlbWVudHMpOgorICAgICAg
ICAoV2ViS2l0OjpYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZTo6aGFzRW50aXRsZW1lbnQp
OgorICAgICAgICAqIFNoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQ
Q1NlcnZpY2VNYWluLkRldmVsb3BtZW50Lm1tOgorICAgICAgICAoV2ViS2l0OjpYUENTZXJ2aWNl
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBTaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMv
WFBDU2VydmljZS9YUENTZXJ2aWNlTWFpbi5tbToKKyAgICAgICAgKFdlYktpdDo6WFBDU2Vydmlj
ZUV2ZW50SGFuZGxlcik6CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNz
TGF1bmNoZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OmNvbm5lY3RUb1NlcnZpY2UpOgorICAg
ICAgICAoV2ViS2l0Ojpjb25uZWN0VG9SZUV4ZWNTZXJ2aWNlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50
Lm1tOgorICAgICAgICAoV2ViQ29udGVudFNlcnZpY2VJbml0aWFsaXplcik6CisgICAgICAgIFVw
ZGF0ZSBhZnRlciB0aGUgcmVuYW1lIG9mIFhQQ1B0ciB0byBPU09iamVjdFB0ci4KKwogMjAxNC0w
OS0wNiAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgU2VyaWFs
aXplIFJlc291cmNlUmVzcG9uc2VzIHVzaW5nIFdlYktpdCB0eXBlcwpJbmRleDogU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQQ1NlcnZpY2UvRGF0YWJhc2VT
ZXJ2aWNlRW50cnlQb2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9EYXRhYmFzZVNlcnZpY2VFbnRyeVBv
aW50Lm1tCShyZXZpc2lvbiAxNzMxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9EYXRhYmFzZVNlcnZpY2VFbnRyeVBvaW50Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw1ICszNiw1IEBAIGV4dGVybiAiQyIgV0tfRVhQT1JUIHZv
aWQgRGF0YWJhc2VTZXJ2aWMKIAogdm9pZCBEYXRhYmFzZVNlcnZpY2VJbml0aWFsaXplcih4cGNf
Y29ubmVjdGlvbl90IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2Up
CiB7Ci0gICAgWFBDU2VydmljZUluaXRpYWxpemVyPERhdGFiYXNlUHJvY2VzcywgWFBDU2Vydmlj
ZUluaXRpYWxpemVyRGVsZWdhdGU+KElQQzo6YWRvcHRYUEMoY29ubmVjdGlvbiksIGluaXRpYWxp
emVyTWVzc2FnZSk7CisgICAgWFBDU2VydmljZUluaXRpYWxpemVyPERhdGFiYXNlUHJvY2Vzcywg
WFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+KGFkb3B0T1NPYmplY3QoY29ubmVjdGlvbiks
IGluaXRpYWxpemVyTWVzc2FnZSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL05ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9FbnRyeVBvaW50
L21hYy9YUENTZXJ2aWNlL05ldHdvcmtTZXJ2aWNlRW50cnlQb2ludC5tbQkocmV2aXNpb24gMTcz
MTQxKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBD
U2VydmljZS9OZXR3b3JrU2VydmljZUVudHJ5UG9pbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIE5ldHdvcmtTZXJ2aWNlSW5p
dGlhbGl6ZXJEZWxlZ2F0ZSA6IHB1YmxpYyBYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZSB7
CiBwdWJsaWM6Ci0gICAgTmV0d29ya1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlKElQQzo6WFBD
UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXpl
ck1lc3NhZ2UpCisgICAgTmV0d29ya1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlKE9TT2JqZWN0
UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXpl
ck1lc3NhZ2UpCiAgICAgICAgIDogWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUoV1RGOjpt
b3ZlKGNvbm5lY3Rpb24pLCBpbml0aWFsaXplck1lc3NhZ2UpCiAgICAgewogICAgIH0KQEAgLTUz
LDYgKzUzLDYgQEAgdm9pZCBOZXR3b3JrU2VydmljZUluaXRpYWxpemVyKHhwY19jb25uZQogICAg
IC8vIHRoZSB0aGlzIHByb2Nlc3MgZG9uJ3QgdHJ5IHRvIGluc2VydCB0aGUgc2hpbSBhbmQgY3Jh
c2guCiAgICAgRW52aXJvbm1lbnRVdGlsaXRpZXM6OnN0cmlwVmFsdWVzRW5kaW5nV2l0aFN0cmlu
ZygiRFlMRF9JTlNFUlRfTElCUkFSSUVTIiwgIi9TZWNJdGVtU2hpbS5keWxpYiIpOwogCi0gICAg
WFBDU2VydmljZUluaXRpYWxpemVyPE5ldHdvcmtQcm9jZXNzLCBOZXR3b3JrU2VydmljZUluaXRp
YWxpemVyRGVsZWdhdGU+KElQQzo6YWRvcHRYUEMoY29ubmVjdGlvbiksIGluaXRpYWxpemVyTWVz
c2FnZSk7CisgICAgWFBDU2VydmljZUluaXRpYWxpemVyPE5ldHdvcmtQcm9jZXNzLCBOZXR3b3Jr
U2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+KGFkb3B0T1NPYmplY3QoY29ubmVjdGlvbiksIGlu
aXRpYWxpemVyTWVzc2FnZSk7CiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0lQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMTczMTQxKQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vSVBDL0Nvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOCArNDEsOCBA
QAogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIE9TKERBUldJTikKLSNpbmNs
dWRlICJYUENQdHIuaCIKICNpbmNsdWRlIDxtYWNoL21hY2hfcG9ydC5oPgorI2luY2x1ZGUgPHd0
Zi9PU09iamVjdFB0ci5oPgogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KEVGTCkKQEAgLTExMCwxNCArMTEwLDE0IEBAIHB1YmxpYzoKICAgICAgICAgewogICAgICAgICB9
CiAKLSAgICAgICAgSWRlbnRpZmllcihtYWNoX3BvcnRfdCBwb3J0LCBYUENQdHI8eHBjX2Nvbm5l
Y3Rpb25fdD4geHBjQ29ubmVjdGlvbikKKyAgICAgICAgSWRlbnRpZmllcihtYWNoX3BvcnRfdCBw
b3J0LCBPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiB4cGNDb25uZWN0aW9uKQogICAgICAg
ICAgICAgOiBwb3J0KHBvcnQpCiAgICAgICAgICAgICAsIHhwY0Nvbm5lY3Rpb24oV1RGOjptb3Zl
KHhwY0Nvbm5lY3Rpb24pKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBtYWNoX3Bv
cnRfdCBwb3J0OwotICAgICAgICBYUENQdHI8eHBjX2Nvbm5lY3Rpb25fdD4geHBjQ29ubmVjdGlv
bjsKKyAgICAgICAgT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4geHBjQ29ubmVjdGlvbjsK
ICAgICB9OwogICAgIHN0YXRpYyBib29sIGlkZW50aWZpZXJJc051bGwoSWRlbnRpZmllciBpZGVu
dGlmaWVyKSB7IHJldHVybiBpZGVudGlmaWVyLnBvcnQgPT0gTUFDSF9QT1JUX05VTEw7IH0KICAg
ICB4cGNfY29ubmVjdGlvbl90IHhwY0Nvbm5lY3Rpb24oKSB7IHJldHVybiBtX3hwY0Nvbm5lY3Rp
b24uZ2V0KCk7IH0KQEAgLTMxOSw3ICszMTksNyBAQCBwcml2YXRlOgogICAgIGRpc3BhdGNoX3Nv
dXJjZV90IG1fZXhjZXB0aW9uUG9ydERhdGFBdmFpbGFibGVTb3VyY2U7CiAjZW5kaWYKIAotICAg
IFhQQ1B0cjx4cGNfY29ubmVjdGlvbl90PiBtX3hwY0Nvbm5lY3Rpb247CisgICAgT1NPYmplY3RQ
dHI8eHBjX2Nvbm5lY3Rpb25fdD4gbV94cGNDb25uZWN0aW9uOwogCiAjZWxpZiBVU0UoVU5JWF9E
T01BSU5fU09DS0VUUykKICAgICAvLyBDYWxsZWQgb24gdGhlIGNvbm5lY3Rpb24gcXVldWUuCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvbWFjL0Nvbm5lY3Rpb25NYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL21hYy9Db25uZWN0aW9uTWFj
Lm1tCShyZXZpc2lvbiAxNzMxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9JUEMvbWFj
L0Nvbm5lY3Rpb25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTc1LDEzICs3NSwxMyBAQCBlbnVt
IHsKIC8vICAgIHRvIGVuc3VyZSBpdCBoYXMgYSBjaGFuY2UgdG8gdGVybWluYXRlIGNsZWFubHku
CiBjbGFzcyBDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgY3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2coWFBDUHRyPHhwY19j
b25uZWN0aW9uX3Q+JiB4cGNDb25uZWN0aW9uLCBkb3VibGUgaW50ZXJ2YWxJblNlY29uZHMpCisg
ICAgc3RhdGljIHZvaWQgY3JlYXRlQ29ubmVjdGlvblRlcm1pbmF0aW9uV2F0Y2hkb2coT1NPYmpl
Y3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4mIHhwY0Nvbm5lY3Rpb24sIGRvdWJsZSBpbnRlcnZhbElu
U2Vjb25kcykKICAgICB7CiAgICAgICAgIG5ldyBDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRv
Zyh4cGNDb25uZWN0aW9uLCBpbnRlcnZhbEluU2Vjb25kcyk7CiAgICAgfQogICAgIAogcHJpdmF0
ZToKLSAgICBDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyhYUENQdHI8eHBjX2Nvbm5lY3Rp
b25fdD4mIHhwY0Nvbm5lY3Rpb24sIGRvdWJsZSBpbnRlcnZhbEluU2Vjb25kcykKKyAgICBDb25u
ZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZyhPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiYg
eHBjQ29ubmVjdGlvbiwgZG91YmxlIGludGVydmFsSW5TZWNvbmRzKQogICAgICAgICA6IG1feHBj
Q29ubmVjdGlvbih4cGNDb25uZWN0aW9uKQogICAgICAgICAsIG1fd2F0Y2hkb2dUaW1lcihSdW5M
b29wOjptYWluKCksIHRoaXMsICZDb25uZWN0aW9uVGVybWluYXRpb25XYXRjaGRvZzo6d2F0Y2hk
b2dUaW1lckZpcmVkKQogI2lmIFBMQVRGT1JNKElPUykKQEAgLTk5LDcgKzk5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgZGVsZXRlIHRoaXM7CiAgICAgfQogCi0gICAgWFBDUHRyPHhwY19jb25uZWN0
aW9uX3Q+IG1feHBjQ29ubmVjdGlvbjsKKyAgICBPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90
PiBtX3hwY0Nvbm5lY3Rpb247CiAgICAgUnVuTG9vcDo6VGltZXI8Q29ubmVjdGlvblRlcm1pbmF0
aW9uV2F0Y2hkb2c+IG1fd2F0Y2hkb2dUaW1lcjsKICNpZiBQTEFURk9STShJT1MpCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYktpdDo6UHJvY2Vzc0FuZFVJQXNzZXJ0aW9uPiBtX2Fzc2VydGlvbjsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0lQQy9tYWMvWFBDUHRyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL21hYy9YUENQdHIuaAkocmV2aXNpb24g
MTczMTQxKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vSVBDL21hYy9YUENQdHIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgWFBDUHRy
X2gKLSNkZWZpbmUgWFBDUHRyX2gKLQotI2luY2x1ZGUgPHhwYy94cGMuaD4KLQotbmFtZXNwYWNl
IElQQyB7Ci0KLXN0cnVjdCBBZG9wdFhQQyB7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNs
YXNzIFhQQ1B0ciB7Ci1wdWJsaWM6Ci0gICAgWFBDUHRyKCkKLSAgICAgICAgOiBtX3B0cihudWxs
cHRyKQotICAgIHsKLSAgICB9Ci0KLSAgICBYUENQdHIoQWRvcHRYUEMsIFQgcHRyKQotICAgICAg
ICA6IG1fcHRyKHB0cikKLSAgICB7Ci0gICAgfQotCi0gICAgflhQQ1B0cigpCi0gICAgewotICAg
ICAgICBpZiAobV9wdHIpCi0gICAgICAgICAgICB4cGNfcmVsZWFzZShtX3B0cik7Ci0gICAgfQot
Ci0gICAgVCBnZXQoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQotCi0gICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhbV9wdHI7IH0KLQotICAgIFhQQ1B0cihjb25zdCBYUENQdHImIG90
aGVyKQotICAgICAgICA6IG1fcHRyKG90aGVyLm1fcHRyKQotICAgIHsKLSAgICAgICAgaWYgKG1f
cHRyKQotICAgICAgICAgICAgeHBjX3JldGFpbihtX3B0cik7Ci0gICAgfQotCi0gICAgWFBDUHRy
KFhQQ1B0ciYmIG90aGVyKQotICAgICAgICA6IG1fcHRyKG90aGVyLm1fcHRyKQotICAgIHsKLSAg
ICAgICAgb3RoZXIubV9wdHIgPSBudWxscHRyOwotICAgIH0KLQotICAgIFhQQ1B0ciYgb3BlcmF0
b3I9KGNvbnN0IFhQQ1B0ciYgb3RoZXIpCi0gICAgewotICAgICAgICBUIG9wdHIgPSBvdGhlci5n
ZXQoKTsKLSAgICAgICAgaWYgKG9wdHIpCi0gICAgICAgICAgICB4cGNfcmV0YWluKG9wdHIpOwot
Ci0gICAgICAgIFQgcHRyID0gbV9wdHI7Ci0gICAgICAgIG1fcHRyID0gb3B0cjsKLQotICAgICAg
ICBpZiAocHRyKQotICAgICAgICAgICAgeHBjX3JlbGVhc2UocHRyKTsKLQotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgWFBDUHRyJiBvcGVyYXRvcj0oc3RkOjpudWxscHRyX3Qp
Ci0gICAgewotICAgICAgICBpZiAobV9wdHIpCi0gICAgICAgICAgICB4cGNfcmVsZWFzZShtX3B0
cik7Ci0gICAgICAgIG1fcHRyID0gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0g
ICAgfQotcHJpdmF0ZToKLSAgICBUIG1fcHRyOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFhQQ1B0cjxUPiBhZG9wdFhQQyhUIHB0cikKLXsKLSAgICByZXR1cm4gWFBDUHRyPFQ+
KEFkb3B0WFBDIHsgfSwgcHRyKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSVBDCi0KLSNlbmRpZiAv
LyBYUENQdHJfaApJbmRleDogU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50
L21hYy9YUENTZXJ2aWNlL1BsdWdpblNlcnZpY2VFbnRyeVBvaW50Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvRW50cnlQb2ludC9tYWMvWFBDU2VydmljZS9Q
bHVnaW5TZXJ2aWNlRW50cnlQb2ludC5tbQkocmV2aXNpb24gMTczMTQxKQorKysgU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1BsdWdpblNlcnZp
Y2VFbnRyeVBvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBQbHVnaW5TZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZSA6IHB1
YmxpYyBYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZSB7CiBwdWJsaWM6Ci0gICAgUGx1Z2lu
U2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUoSVBDOjpYUENQdHI8eHBjX2Nvbm5lY3Rpb25fdD4g
Y29ubmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVzc2FnZSkKKyAgICBQbHVnaW5T
ZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZShPU09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBj
b25uZWN0aW9uLCB4cGNfb2JqZWN0X3QgaW5pdGlhbGl6ZXJNZXNzYWdlKQogICAgICAgICA6IFhQ
Q1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlKFdURjo6bW92ZShjb25uZWN0aW9uKSwgaW5pdGlh
bGl6ZXJNZXNzYWdlKQogICAgIHsKICAgICB9CkBAIC03Niw2ICs3Niw2IEBAIHZvaWQgUGx1Z2lu
U2VydmljZUluaXRpYWxpemVyKHhwY19jb25uZWMKICAgICAvLyBzcGF3bmVkIGJ5IHRoZSBQbHVn
aW5Qcm9jZXNzIGRvbid0IHRyeSB0byBpbnNlcnQgdGhlIHNoaW0gYW5kIGNyYXNoLgogICAgIEVu
dmlyb25tZW50VXRpbGl0aWVzOjpzdHJpcFZhbHVlc0VuZGluZ1dpdGhTdHJpbmcoIkRZTERfSU5T
RVJUX0xJQlJBUklFUyIsICIvUGx1Z2luUHJvY2Vzc1NoaW0uZHlsaWIiKTsKIAotICAgIFhQQ1Nl
cnZpY2VJbml0aWFsaXplcjxQbHVnaW5Qcm9jZXNzLCBQbHVnaW5TZXJ2aWNlSW5pdGlhbGl6ZXJE
ZWxlZ2F0ZT4oSVBDOjphZG9wdFhQQyhjb25uZWN0aW9uKSwgaW5pdGlhbGl6ZXJNZXNzYWdlKTsK
KyAgICBYUENTZXJ2aWNlSW5pdGlhbGl6ZXI8UGx1Z2luUHJvY2VzcywgUGx1Z2luU2VydmljZUlu
aXRpYWxpemVyRGVsZWdhdGU+KGFkb3B0T1NPYmplY3QoY29ubmVjdGlvbiksIGluaXRpYWxpemVy
TWVzc2FnZSk7CiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vydmlj
ZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1No
YXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBv
aW50LmgJKHJldmlzaW9uIDE3MzE0MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBv
aW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2ltcG9ydCAiQ2hpbGRQcm9jZXNzLmgiCiAj
aW1wb3J0ICJXZWJLaXQySW5pdGlhbGl6ZS5oIgotI2ltcG9ydCAiWFBDUHRyLmgiCisjaW1wb3J0
IDx3dGYvT1NPYmplY3RQdHIuaD4KIAogI2lmIEhBVkUoVk9VQ0hFUlMpCiAjaWYgX19oYXNfaW5j
bHVkZSg8b3Mvdm91Y2hlcl9wcml2YXRlLmg+KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogY2xhc3MgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUgewogcHVibGlj
OgotICAgIFhQQ1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlKElQQzo6WFBDUHRyPHhwY19jb25u
ZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2UpCisg
ICAgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGUoT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rp
b25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF90IGluaXRpYWxpemVyTWVzc2FnZSkKICAgICAg
ICAgOiBtX2Nvbm5lY3Rpb24oV1RGOjptb3ZlKGNvbm5lY3Rpb24pKQogICAgICAgICAsIG1faW5p
dGlhbGl6ZXJNZXNzYWdlKGluaXRpYWxpemVyTWVzc2FnZSkKICAgICB7CkBAIC02MSwxMiArNjEs
MTIgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaGFzRW50aXRsZW1lbnQoY29uc3QgY2hhciogZW50
aXRsZW1lbnQpOwogICAgIGJvb2wgaXNDbGllbnRTYW5kYm94ZWQoKTsKIAotICAgIElQQzo6WFBD
UHRyPHhwY19jb25uZWN0aW9uX3Q+IG1fY29ubmVjdGlvbjsKKyAgICBPU09iamVjdFB0cjx4cGNf
Y29ubmVjdGlvbl90PiBtX2Nvbm5lY3Rpb247CiAgICAgeHBjX29iamVjdF90IG1faW5pdGlhbGl6
ZXJNZXNzYWdlOwogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgWFBDU2VydmljZVR5cGUsIHR5cGVu
YW1lIFhQQ1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlVHlwZT4KLXZvaWQgWFBDU2VydmljZUlu
aXRpYWxpemVyKElQQzo6WFBDUHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19v
YmplY3RfdCBpbml0aWFsaXplck1lc3NhZ2UpCit2b2lkIFhQQ1NlcnZpY2VJbml0aWFsaXplcihP
U09iamVjdFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25uZWN0aW9uLCB4cGNfb2JqZWN0X3QgaW5p
dGlhbGl6ZXJNZXNzYWdlKQogewogICAgIFhQQ1NlcnZpY2VJbml0aWFsaXplckRlbGVnYXRlVHlw
ZSBkZWxlZ2F0ZShXVEY6Om1vdmUoY29ubmVjdGlvbiksIGluaXRpYWxpemVyTWVzc2FnZSk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENT
ZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VF
bnRyeVBvaW50Lm1tCShyZXZpc2lvbiAxNzMxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
RW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5t
bQkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBib29sIFhQQ1NlcnZpY2VJbml0aWFs
aXplckRlbGVnYXRlOjpjaGVjCiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TKQotICAg
IGF1dG8gdmFsdWUgPSBJUEM6OmFkb3B0WFBDKHhwY19jb25uZWN0aW9uX2NvcHlfZW50aXRsZW1l
bnRfdmFsdWUobV9jb25uZWN0aW9uLmdldCgpLCAia2V5Y2hhaW4tYWNjZXNzLWdyb3VwcyIpKTsK
KyAgICBhdXRvIHZhbHVlID0gYWRvcHRPU09iamVjdCh4cGNfY29ubmVjdGlvbl9jb3B5X2VudGl0
bGVtZW50X3ZhbHVlKG1fY29ubmVjdGlvbi5nZXQoKSwgImtleWNoYWluLWFjY2Vzcy1ncm91cHMi
KSk7CiAgICAgaWYgKHZhbHVlICYmIHhwY19nZXRfdHlwZSh2YWx1ZS5nZXQoKSkgPT0gWFBDX1RZ
UEVfQVJSQVkpIHsKICAgICAgICAgeHBjX2FycmF5X2FwcGx5KHZhbHVlLmdldCgpLCBeYm9vbChz
aXplX3QgaW5kZXgsIHhwY19vYmplY3RfdCBvYmplY3QpIHsKICAgICAgICAgICAgIGlmICh4cGNf
Z2V0X3R5cGUob2JqZWN0KSA9PSBYUENfVFlQRV9TVFJJTkcgJiYgIXN0cmNtcCh4cGNfc3RyaW5n
X2dldF9zdHJpbmdfcHRyKG9iamVjdCksICJjb20uYXBwbGUuaWRlbnRpdGllcyIpKSB7CkBAIC05
OSw3ICs5OSw3IEBAIGJvb2wgWFBDU2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU6OmdldEUKIAog
Ym9vbCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZTo6aGFzRW50aXRsZW1lbnQoY29uc3Qg
Y2hhciogZW50aXRsZW1lbnQpCiB7Ci0gICAgYXV0byB2YWx1ZSA9IElQQzo6YWRvcHRYUEMoeHBj
X2Nvbm5lY3Rpb25fY29weV9lbnRpdGxlbWVudF92YWx1ZShtX2Nvbm5lY3Rpb24uZ2V0KCksIGVu
dGl0bGVtZW50KSk7CisgICAgYXV0byB2YWx1ZSA9IGFkb3B0T1NPYmplY3QoeHBjX2Nvbm5lY3Rp
b25fY29weV9lbnRpdGxlbWVudF92YWx1ZShtX2Nvbm5lY3Rpb24uZ2V0KCksIGVudGl0bGVtZW50
KSk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENT
ZXJ2aWNlTWFpbi5EZXZlbG9wbWVudC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlTWFpbi5E
ZXZlbG9wbWVudC5tbQkocmV2aXNpb24gMTczMTQxKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVk
L0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZU1haW4uRGV2ZWxv
cG1lbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbXBvcnQgPHNwYXdu
Lmg+IAogI2ltcG9ydCA8c3RkaW8uaD4KICNpbXBvcnQgPHN0ZGxpYi5oPgotI2ltcG9ydCAiWFBD
UHRyLmgiCisjaW1wb3J0IDx3dGYvT1NPYmplY3RQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKQEAgLTEzNiw3ICsxMzYsNyBAQCBzdGF0aWMgdm9pZCBYUENTZXJ2aWNlRXZlbnRIYW5kbGVy
KHhwY19jCiAgICAgICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBhdXRvIHJlcGx5ID0gSVBDOjphZG9wdFhQQyh4
cGNfZGljdGlvbmFyeV9jcmVhdGVfcmVwbHkoZXZlbnQpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlcGx5ID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGVfcmVwbHkoZXZlbnQp
KTsKICAgICAgICAgICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKHJlcGx5LmdldCgp
LCAibWVzc2FnZS1uYW1lIiwgInByb2Nlc3MtZmluaXNoZWQtbGF1bmNoaW5nIik7CiAgICAgICAg
ICAgICAgICAgeHBjX2Nvbm5lY3Rpb25fc2VuZF9tZXNzYWdlKHhwY19kaWN0aW9uYXJ5X2dldF9y
ZW1vdGVfY29ubmVjdGlvbihldmVudCksIHJlcGx5LmdldCgpKTsKIApJbmRleDogU291cmNlL1dl
YktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2Vydmlj
ZU1haW4ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRV
dGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZU1haW4ubW0JKHJldmlzaW9uIDE3MzE0
MSkKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENT
ZXJ2aWNlL1hQQ1NlcnZpY2VNYWluLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2ltcG9ydCA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KLSNpbXBv
cnQgIlhQQ1B0ci5oIgorI2ltcG9ydCA8d3RmL09TT2JqZWN0UHRyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyB2b2lkIFhQQ1NlcnZpY2VFdmVudEhh
bmRsZXIoeHBjX2MKICAgICAgICAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGF1dG8gcmVwbHkgPSBJUEM6OmFkb3B0
WFBDKHhwY19kaWN0aW9uYXJ5X2NyZWF0ZV9yZXBseShldmVudCkpOworICAgICAgICAgICAgICAg
IGF1dG8gcmVwbHkgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2NyZWF0ZV9yZXBseShl
dmVudCkpOwogICAgICAgICAgICAgICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcocmVwbHku
Z2V0KCksICJtZXNzYWdlLW5hbWUiLCAicHJvY2Vzcy1maW5pc2hlZC1sYXVuY2hpbmciKTsKICAg
ICAgICAgICAgICAgICB4cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoeHBjX2RpY3Rpb25hcnlf
Z2V0X3JlbW90ZV9jb25uZWN0aW9uKGV2ZW50KSwgcmVwbHkuZ2V0KCkpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nlc3NMYXVuY2hlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvbWFjL1Byb2Nl
c3NMYXVuY2hlck1hYy5tbQkocmV2aXNpb24gMTczMTQxKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL21hYy9Qcm9jZXNzTGF1bmNoZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTIwMiw3ICsyMDIsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRMZWFrQm9vc3QoY29uc3QgUHJv
Y2VzCiBzdGF0aWMgdm9pZCBjb25uZWN0VG9TZXJ2aWNlKGNvbnN0IFByb2Nlc3NMYXVuY2hlcjo6
TGF1bmNoT3B0aW9ucyYgbGF1bmNoT3B0aW9ucywgYm9vbCBmb3JEZXZlbG9wbWVudCwgUHJvY2Vz
c0xhdW5jaGVyKiB0aGF0LCBEaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzRnVuY3Rpb24gZGlkRmlu
aXNoTGF1bmNoaW5nUHJvY2Vzc0Z1bmN0aW9uLCBVVUlESG9sZGVyKiBpbnN0YW5jZVVVSUQpCiB7
CiAgICAgLy8gQ3JlYXRlIGEgY29ubmVjdGlvbiB0byB0aGUgV2ViS2l0IFhQQyBzZXJ2aWNlLgot
ICAgIGF1dG8gY29ubmVjdGlvbiA9IElQQzo6YWRvcHRYUEMoeHBjX2Nvbm5lY3Rpb25fY3JlYXRl
KHNlcnZpY2VOYW1lKGxhdW5jaE9wdGlvbnMsIGZvckRldmVsb3BtZW50KSwgMCkpOworICAgIGF1
dG8gY29ubmVjdGlvbiA9IGFkb3B0T1NPYmplY3QoeHBjX2Nvbm5lY3Rpb25fY3JlYXRlKHNlcnZp
Y2VOYW1lKGxhdW5jaE9wdGlvbnMsIGZvckRldmVsb3BtZW50KSwgMCkpOwogICAgIHhwY19jb25u
ZWN0aW9uX3NldF9pbnN0YW5jZShjb25uZWN0aW9uLmdldCgpLCBpbnN0YW5jZVVVSUQtPnV1aWQp
OwogCiAjaWYgUExBVEZPUk0oSU9TKSB8fCBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwMTAwMApAQCAtMjExLDcgKzIxMSw3IEBAIHN0YXRpYyB2b2lkIGNvbm5lY3RUb1NlcnZp
Y2UoY29uc3QgUHJvY2UKICAgICAvLyAxLjEuIEFuIGltcG9ydGFudCBjYXNlIGlzIFdlYktpdFRl
c3RSdW5uZXIsIHdoZXJlIHdlIHNob3VsZCB1c2UgRW5nbGlzaCBsb2NhbGl6YXRpb25zIGZvciBh
bGwgc3lzdGVtIGZyYW1ld29ya3MuCiAgICAgLy8gMi4gV2hlbiBBcHBsZUxhbmd1YWdlcyBpcyBw
YXNzZWQgYXMgY29tbWFuZCBsaW5lIGFyZ3VtZW50IGZvciBVSSBwcm9jZXNzLCBvciBzZXQgaW4g
aXRzIHByZWZlcmVuY2VzLCB3ZSBzaG91bGQgcmVzcGVjdCBpdCBpbiBjaGlsZCBwcm9jZXNzZXMu
CiAgICAgaWYgKF9DRkJ1bmRsZVNldHVwWFBDQm9vdHN0cmFwUHRyKCkpIHsKLSAgICAgICAgYXV0
byBpbml0aWFsaXphdGlvbk1lc3NhZ2UgPSBJUEM6OmFkb3B0WFBDKHhwY19kaWN0aW9uYXJ5X2Ny
ZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CisgICAgICAgIGF1dG8gaW5pdGlhbGl6YXRpb25N
ZXNzYWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVs
bHB0ciwgMCkpOwogICAgICAgICBfQ0ZCdW5kbGVTZXR1cFhQQ0Jvb3RzdHJhcFB0cigpKGluaXRp
YWxpemF0aW9uTWVzc2FnZS5nZXQoKSk7CiAgICAgICAgIHhwY19jb25uZWN0aW9uX3NldF9ib290
c3RyYXAoY29ubmVjdGlvbi5nZXQoKSwgaW5pdGlhbGl6YXRpb25NZXNzYWdlLmdldCgpKTsKICAg
ICB9CkBAIC0yMjIsNyArMjIyLDcgQEAgc3RhdGljIHZvaWQgY29ubmVjdFRvU2VydmljZShjb25z
dCBQcm9jZQogICAgIHhwY19jb25uZWN0aW9uX3Jlc3VtZShjb25uZWN0aW9uLmdldCgpKTsKICAg
ICAKICAgICBpZiAoc2hvdWxkTGVha0Jvb3N0KGxhdW5jaE9wdGlvbnMpKSB7Ci0gICAgICAgIGF1
dG8gcHJlQm9vdHN0cmFwTWVzc2FnZSA9IElQQzo6YWRvcHRYUEMoeHBjX2RpY3Rpb25hcnlfY3Jl
YXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAgICAgICAgYXV0byBwcmVCb290c3RyYXBNZXNz
YWdlID0gYWRvcHRPU09iamVjdCh4cGNfZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0
ciwgMCkpOwogICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKHByZUJvb3RzdHJhcE1l
c3NhZ2UuZ2V0KCksICJtZXNzYWdlLW5hbWUiLCAicHJlLWJvb3RzdHJhcCIpOwogICAgICAgICB4
cGNfY29ubmVjdGlvbl9zZW5kX21lc3NhZ2UoY29ubmVjdGlvbi5nZXQoKSwgcHJlQm9vdHN0cmFw
TWVzc2FnZS5nZXQoKSk7CiAgICAgfQpAQCAtMjM4LDcgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIGNv
bm5lY3RUb1NlcnZpY2UoY29uc3QgUHJvY2UKICAgICBDU3RyaW5nIGNsaWVudElkZW50aWZpZXIg
PSBidW5kbGVJZGVudGlmaWVyID8gU3RyaW5nKFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxl
SWRlbnRpZmllcl0pLnV0ZjgoKSA6ICpfTlNHZXRQcm9nbmFtZSgpOwogCiAgICAgLy8gRklYTUU6
IFN3aXRjaCB0byB4cGNfY29ubmVjdGlvbl9zZXRfYm9vdHN0cmFwIG9uY2UgaXQncyBhdmFpbGFi
bGUgZXZlcnl3aGVyZSB3ZSBuZWVkLgotICAgIGF1dG8gYm9vdHN0cmFwTWVzc2FnZSA9IElQQzo6
YWRvcHRYUEMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDApKTsKKyAg
ICBhdXRvIGJvb3RzdHJhcE1lc3NhZ2UgPSBhZG9wdE9TT2JqZWN0KHhwY19kaWN0aW9uYXJ5X2Ny
ZWF0ZShudWxscHRyLCBudWxscHRyLCAwKSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X3N0cmlu
Zyhib290c3RyYXBNZXNzYWdlLmdldCgpLCAibWVzc2FnZS1uYW1lIiwgImJvb3RzdHJhcCIpOwog
ICAgIHhwY19kaWN0aW9uYXJ5X3NldF9zdHJpbmcoYm9vdHN0cmFwTWVzc2FnZS5nZXQoKSwgImZy
YW1ld29yay1leGVjdXRhYmxlLXBhdGgiLCBbW1tOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmll
cjpAImNvbS5hcHBsZS5XZWJLaXQiXSBleGVjdXRhYmxlUGF0aF0gZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uXSk7CiAgICAgeHBjX2RpY3Rpb25hcnlfc2V0X21hY2hfc2VuZChib290c3RyYXBNZXNz
YWdlLmdldCgpLCAic2VydmVyLXBvcnQiLCBsaXN0ZW5pbmdQb3J0KTsKQEAgLTI1MCw3ICsyNTAs
NyBAQCBzdGF0aWMgdm9pZCBjb25uZWN0VG9TZXJ2aWNlKGNvbnN0IFByb2NlCiAgICAgICAgIHhw
Y19kaWN0aW9uYXJ5X3NldF9mZChib290c3RyYXBNZXNzYWdlLmdldCgpLCAic3RkZXJyIiwgU1RE
RVJSX0ZJTEVOTyk7CiAgICAgfQogCi0gICAgYXV0byBleHRyYUluaXRpYWxpemF0aW9uRGF0YSA9
IElQQzo6YWRvcHRYUEMoeHBjX2RpY3Rpb25hcnlfY3JlYXRlKG51bGxwdHIsIG51bGxwdHIsIDAp
KTsKKyAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25EYXRhID0gYWRvcHRPU09iamVjdCh4cGNf
ZGljdGlvbmFyeV9jcmVhdGUobnVsbHB0ciwgbnVsbHB0ciwgMCkpOwogCiAgICAgZm9yIChjb25z
dCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBsYXVuY2hPcHRpb25zLmV4dHJhSW5pdGlhbGl6YXRpb25E
YXRhKQogICAgICAgICB4cGNfZGljdGlvbmFyeV9zZXRfc3RyaW5nKGV4dHJhSW5pdGlhbGl6YXRp
b25EYXRhLmdldCgpLCBrZXlWYWx1ZVBhaXIua2V5LnV0ZjgoKS5kYXRhKCksIGtleVZhbHVlUGFp
ci52YWx1ZS51dGY4KCkuZGF0YSgpKTsKQEAgLTMwMCw3ICszMDAsNyBAQCBzdGF0aWMgdm9pZCBj
b25uZWN0VG9SZUV4ZWNTZXJ2aWNlKGNvbnN0CiAgICAgLy8gRklYTUU6IFRoaXMgVVVJRCBzaG91
bGQgYmUgc3RvcmVkIG9uIHRoZSBDaGlsZFByb2Nlc3NQcm94eS4KICAgICBSZWZQdHI8VVVJREhv
bGRlcj4gaW5zdGFuY2VVVUlEID0gVVVJREhvbGRlcjo6Y3JlYXRlKCk7CiAKLSAgICAvLyBGSVhN
RTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCB1c2UgWFBDUHRyIGZvciB0aGlzIGNvbm5l
Y3Rpb24gYXMgd2VsbCwgYnV0IHdlJ2QgaGF2ZSB0byBiZSBjYXJlZnVsCisgICAgLy8gRklYTUU6
IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIE9TT2JqZWN0UHRyIGZvciB0aGlzIGNv
bm5lY3Rpb24gYXMgd2VsbCwgYnV0IHdlJ2QgaGF2ZSB0byBiZSBjYXJlZnVsCiAgICAgLy8gbm90
IHRvIGludHJvZHVjZSBhbnkgcmV0YWluIGN5Y2xlcyBpbiB0aGUgY2FsbCB0byB4cGNfY29ubmVj
dGlvbl9zZXRfZXZlbnRfaGFuZGxlciBiZWxvdy4KICAgICB4cGNfY29ubmVjdGlvbl90IHJlRXhl
Y0Nvbm5lY3Rpb24gPSB4cGNfY29ubmVjdGlvbl9jcmVhdGUoc2VydmljZU5hbWUobGF1bmNoT3B0
aW9ucywgdHJ1ZSksIDApOwogICAgIHhwY19jb25uZWN0aW9uX3NldF9pbnN0YW5jZShyZUV4ZWND
b25uZWN0aW9uLCBpbnN0YW5jZVVVSUQtPnV1aWQpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9FbnRyeVBvaW50L21hYy9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlRW50cnlQ
b2ludC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9p
bnQvbWFjL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCShyZXZpc2lv
biAxNzMxNDEpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0VudHJ5UG9pbnQvbWFjL1hQ
Q1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw1ICs1Miw1IEBAIHZvaWQgV2ViQ29udGVudFNlcnZpY2VJbml0aWFsaXplcih4cGNfY28K
ICAgICBJbml0V2ViQ29yZVRocmVhZFN5c3RlbUludGVyZmFjZSgpOwogI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKIAotICAgIFhQQ1NlcnZpY2VJbml0aWFsaXplcjxXZWJQcm9jZXNzLCBYUENTZXJ2
aWNlSW5pdGlhbGl6ZXJEZWxlZ2F0ZT4oSVBDOjphZG9wdFhQQyhjb25uZWN0aW9uKSwgaW5pdGlh
bGl6ZXJNZXNzYWdlKTsKKyAgICBYUENTZXJ2aWNlSW5pdGlhbGl6ZXI8V2ViUHJvY2VzcywgWFBD
U2VydmljZUluaXRpYWxpemVyRGVsZWdhdGU+KGFkb3B0T1NPYmplY3QoY29ubmVjdGlvbiksIGlu
aXRpYWxpemVyTWVzc2FnZSk7CiB9CkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzMzNjIpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wOS0wNiAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFhQQ1B0ciBzaG91bGQgYmUgY29udmVydGVkIGlu
dG8gYW4gYWxsIHB1cnBvc2Ugc21hcnQgcG9pbnRlciBmb3Igb3Nfb2JqZWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2NjAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9kYXJ3aW46IEFkZGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL2Rhcndpbi9PU09iamVjdFB0ci5jcHA6IEFkZGVkLgorICAgICAgICBBZGQgYmFz
aWMgdW5pdCB0ZXN0cyBmb3IgT1NPYmplY3RQdHIuCisKIDIwMTQtMDktMDYgIFNhYW0gQmFyYXRp
ICA8c2FhbWJhcmF0aTFAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEFkZCBteXNl
bGYgYXMgYSBjb21taXR0ZXIuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTczMTQxKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw2ICsxMjIsNyBAQAogCQk3Qzc0
RDQyRjE4ODIyOEYzMDBFNUVENTcgLyogU3RyaW5nVmlldy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qzc0RDQyRDE4ODIyOEYzMDBFNUVENTcgLyog
U3RyaW5nVmlldy5jcHAgKi87IH07CiAJCTdDOEREQUFCMTczNURFRUUwMEVBNUFDMCAvKiBDbG9z
ZVRoZW5UZXJtaW5hdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0M4RERBQTkxNzM1REUxRDAwRUE1QUMwIC8qIENsb3NlVGhlblRlcm1pbmF0ZS5j
cHAgKi87IH07CiAJCTdDOUVEOThCMTdBMTlGNEIwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5n
U3RyaWtldGhyb3VnaC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOUVEOThBMTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3Ry
aW5nU3RyaWtldGhyb3VnaC5odG1sICovOyB9OworCQk3Q0JCQTA3ODE5QkI4QTkxMDBCQkYwMjUg
LyogT1NPYmplY3RQdHIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0NCQkEwNzYxOUJCOEE5MTAwQkJGMDI1IC8qIE9TT2JqZWN0UHRyLmNwcCAqLzsg
fTsKIAkJN0NDM0UxRkMxOTdFMjM0MTAwQkU2MjUyIC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDQzNFMUZB
MTk3RTIzNDEwMEJFNjI1MiAvKiBVc2VyQ29udGVudENvbnRyb2xsZXIubW0gKi87IH07CiAJCTdD
RkJDQURGMTc0MzIzNEYwMEIyQkZDRiAvKiBXaWxsTG9hZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0ZCQ0FERDE3NDMyMzRGMDBCMkJGQ0YgLyog
V2lsbExvYWQuY3BwICovOyB9OwogCQk3Q0ZCQ0FFNTE3NDMyMzhGMDBCMkJGQ0YgLyogV2lsbExv
YWRfQnVuZGxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdDRkJDQUUzMTc0MzIzOEUwMEIyQkZDRiAvKiBXaWxsTG9hZF9CdW5kbGUuY3BwICovOyB9
OwpAQCAtNDY0LDYgKzQ2NSw3IEBACiAJCTdDNzRENDJEMTg4MjI4RjMwMEU1RUQ1NyAvKiBTdHJp
bmdWaWV3LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0cmluZ1Zp
ZXcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhEREFBOTE3MzVERTFEMDBF
QTVBQzAgLyogQ2xvc2VUaGVuVGVybWluYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsb3Nl
VGhlblRlcm1pbmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDOUVEOThB
MTdBMTlEMDYwMEU0REMzMyAvKiBhdHRyaWJ1dGVkU3RyaW5nU3RyaWtldGhyb3VnaC5odG1sICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1s
OyBwYXRoID0gYXR0cmlidXRlZFN0cmluZ1N0cmlrZXRocm91Z2guaHRtbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0NCQkEwNzYxOUJCOEE5MTAwQkJGMDI1IC8qIE9TT2JqZWN0UHRy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TT2JqZWN0UHRyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NDM0UxRkExOTdFMjM0MTAwQkU2MjUy
IC8qIFVzZXJDb250ZW50Q29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFVzZXJDb250ZW50Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJN0NGQkNBREQxNzQzMjM0RjAwQjJCRkNGIC8qIFdpbGxMb2FkLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxMb2FkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGQkNBRTMxNzQzMjM4RTAwQjJCRkNGIC8qIFdpbGxMb2Fk
X0J1bmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaWxsTG9h
ZF9CdW5kbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzQ4LDYgKzc1MCwx
NCBAQAogCQkJcGF0aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJ
CTdDQkJBMDc1MTlCQjhBMDkwMEJCRjAyNSAvKiBkYXJ3aW4gKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTdDQkJBMDc2MTlCQjhBOTEwMEJCRjAyNSAvKiBP
U09iamVjdFB0ci5jcHAgKi8sCisJCQkpOworCQkJcGF0aCA9IGRhcndpbjsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDMDI5QjFBMTQ4NkIyMzgwMDgxN0RBOSAvKiBucyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC04OTMsNiArOTAz
LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUMwOTkxQzRGMTQzQzdENjgwMDc5OThGMiAvKiBj
ZiAqLywKIAkJCQlCQzAyOUIxQTE0ODZCMjM4MDA4MTdEQTkgLyogbnMgKi8sCisJCQkJN0NCQkEw
NzUxOUJCOEEwOTAwQkJGMDI1IC8qIGRhcndpbiAqLywKIAkJCQkyNkYxQjQ0MjE1Q0E0MzRGMDBE
MUU0QkYgLyogQXRvbWljU3RyaW5nLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5
QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQkyNkEyQzcyRTE1
RTJFNzNDMDA1QjFBMTQgLyogQ1N0cmluZy5jcHAgKi8sCkBAIC0xMzE4LDYgKzEzMjksNyBAQAog
CQkJCTFBRUY5OTQ5MTdBMDlGNTQwMDk5OEVGMCAvKiBHZXRQSURBZnRlckFib3J0ZWRQcm9jZXNz
TGF1bmNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDMDI5QjE4MTQ4NkFENjQwMDgxN0RBOSAv
KiBSZXRhaW5QdHIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMwMjlCMUMxNDg2QjI1OTAwODE3
REE5IC8qIFJldGFpblB0ci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTdDQkJBMDc4MTlCQjhBOTEw
MEJCRjAyNSAvKiBPU09iamVjdFB0ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMDk5MUM1MTE0
M0M3RDY4MDA3OTk4RjIgLyogUmV0YWluUHRySGFzaGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlDRDUzOTNDQTE3NTdCQUM0MDBDMDcxMjMgLyogU0hBMS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNEYzQjExMzE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9kYXJ3aW4vT1NPYmplY3RQdHIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL2Rhcndpbi9PU09iamVjdFB0ci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9kYXJ3aW4vT1NPYmplY3RQdHIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlIDx3dGYvT1NPYmplY3RQdHIuaD4KKworI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ29yZUZvdW5kYXRpb24uaD4KKwor
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitURVNUKE9TT2JqZWN0UHRyLCBBZG9wdE9TT2Jq
ZWN0KQoreworICAgIE9TT2JqZWN0UHRyPGRpc3BhdGNoX3F1ZXVlX3Q+IGZvbyA9IGFkb3B0T1NP
YmplY3QoZGlzcGF0Y2hfcXVldWVfY3JlYXRlKDAsIERJU1BBVENIX1FVRVVFX1NFUklBTCkpOwor
CisgICAgRVhQRUNUX0VRKDEsIENGR2V0UmV0YWluQ291bnQoZm9vLmdldCgpKSk7Cit9CisKK1RF
U1QoT1NPYmplY3RQdHIsIFJldGFpblJlbGVhc2UpCit7CisgICAgZGlzcGF0Y2hfcXVldWVfdCBm
b28gPSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoMCwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKKyAg
ICBFWFBFQ1RfRVEoMSwgQ0ZHZXRSZXRhaW5Db3VudChmb28pKTsKKworICAgIFdURjo6cmV0YWlu
T1NPYmplY3QoZm9vKTsKKyAgICBFWFBFQ1RfRVEoMiwgQ0ZHZXRSZXRhaW5Db3VudChmb28pKTsK
KworICAgIFdURjo6cmVsZWFzZU9TT2JqZWN0KGZvbyk7CisgICAgRVhQRUNUX0VRKDEsIENGR2V0
UmV0YWluQ291bnQoZm9vKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>
<flag name="review"
          id="262480"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>