<?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>103003</bug_id>
          
          <creation_ts>2012-11-21 18:24:41 -0800</creation_ts>
          <short_desc>Re-virtualize CSSRule.</short_desc>
          <delta_ts>2012-11-22 01:42:24 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>773467</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 18:24:41 -0800</bug_when>
    <thetext>CSSRule was split into CSSRule (CSSOM wrapper) and StyleRule (internal data), and keeping it lean is far less important as it&apos;s only instantiated on CSSOM API access.
We should make it virtual again to make it more hackable and less error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773472</commentid>
    <comment_count>1</comment_count>
      <attachid>175560</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 18:34:08 -0800</bug_when>
    <thetext>Created attachment 175560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773475</commentid>
    <comment_count>2</comment_count>
      <attachid>175561</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 18:39:47 -0800</bug_when>
    <thetext>Created attachment 175561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773487</commentid>
    <comment_count>3</comment_count>
      <attachid>175561</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-11-21 19:05:23 -0800</bug_when>
    <thetext>Comment on attachment 175561
Patch

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

&gt; Source/WebCore/css/StyleResolver.cpp:2573
&gt; -        if (cssRule-&gt;isImportRule())
&gt; +        if (cssRule-&gt;type() == CSSRule::IMPORT_RULE)
&gt;              collectCSSOMWrappers(wrapperMap, static_cast&lt;CSSImportRule*&gt;(cssRule)-&gt;styleSheet());
&gt; -        else if (cssRule-&gt;isMediaRule())
&gt; +        else if (cssRule-&gt;type() == CSSRule::MEDIA_RULE)
&gt;              collectCSSOMWrappers(wrapperMap, static_cast&lt;CSSMediaRule*&gt;(cssRule));
&gt;  #if ENABLE(CSS_REGIONS)
&gt; -        else if (cssRule-&gt;isRegionRule())
&gt; +        else if (cssRule-&gt;type() == CSSRule::WEBKIT_REGION_RULE)
&gt;              collectCSSOMWrappers(wrapperMap, static_cast&lt;WebKitCSSRegionRule*&gt;(cssRule));
&gt;  #endif
&gt; -        else if (cssRule-&gt;isStyleRule()) {
&gt; +        else if (cssRule-&gt;type() == CSSRule::STYLE_RULE) {
&gt;              CSSStyleRule* cssStyleRule = static_cast&lt;CSSStyleRule*&gt;(cssRule);
&gt;              wrapperMap.add(cssStyleRule-&gt;styleRule(), cssStyleRule);
&gt;          }

This looks like it should be a switch statement instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773505</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-11-21 19:47:31 -0800</bug_when>
    <thetext>Committed r135465: &lt;http://trac.webkit.org/changeset/135465&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773731</commentid>
    <comment_count>5</comment_count>
      <attachid>175560</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-11-22 01:42:24 -0800</bug_when>
    <thetext>Comment on attachment 175560
Patch

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

&gt; Source/WebCore/css/CSSStyleRule.cpp:129
&gt; +    ASSERT(rule-&gt;isStyleRule());
&gt; +    m_styleRule = static_cast&lt;StyleRule*&gt;(rule);

Would be good to add asStyleFooRule() casting functions at some point.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175560</attachid>
            <date>2012-11-21 18:34:08 -0800</date>
            <delta_ts>2012-11-22 01:42:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103003.diff</filename>
            <type>text/plain</type>
            <size>57317</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYzRkYWE4Li45YWIwYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTkg
QEAKKzIwMTItMTEtMjEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlLXZpcnR1YWxpemUgQ1NTUnVsZS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTAzMDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgQ1NTUnVsZSB2aXJ0dWFsIG9uY2UgYWdhaW4sIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIGlt
cG9ydGFudCB0byBrZWVwIGl0IGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICAgICAgICBTdHlsZVJ1
bGVCYXNlIGFuZCBpdHMgdmFyaW91cyBzdWJjbGFzc2VzIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBu
b3cuCisKKyAgICAgICAgKiBjc3MvQ1NTQ2hhcnNldFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2hhcnNldFJ1bGU6OkNTU0NoYXJzZXRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NoYXJzZXRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL0NTU0NoYXJz
ZXRSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6fkNTU0NoYXJzZXRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NoYXJzZXRSdWxlOjplbmNvZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6c2V0RW5jb2RpbmcpOgorICAgICAgICAqIGNz
cy9DU1NGb250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxl
OjpDU1NGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpy
ZWF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VSdWxlLmg6CisgICAgICAgIChDU1NG
b250RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6OkNTU0ltcG9ydFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1wb3J0UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTSW1wb3J0UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
Y3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAgKENTU0ltcG9ydFJ1bGUpOgorICAgICAgICAq
IGNzcy9DU1NNZWRpYVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjpD
U1NNZWRpYVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjpyZWF0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRpYVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAg
ICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmg6CisgICAgICAgIChDU1NNZWRpYVJ1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NQYWdlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVs
ZTo6Q1NTUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnJlYXR0YWNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhZ2VSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6Cisg
ICAgICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdlUnVsZSk6CisgICAg
ICAgICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoU2FtZVNpemVBc0NTU1J1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNz
cy9DU1NSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlOjp+Q1NTUnVsZSk6CisgICAg
ICAgIChDU1NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6OkNTU1J1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVS
dWxlOjpDU1NTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpyZWF0
dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdl
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmg6CisgICAgICAgIChDU1NTdHlsZVJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjp0eXBlKToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxl
cyk6CisgICAgICAgICogY3NzL0NTU1Vua25vd25SdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
U1NVbmtub3duUnVsZTo6Q1NTVW5rbm93blJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVW5r
bm93blJ1bGU6On5DU1NVbmtub3duUnVsZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENTU09NV3JhcHBlcnMpOgorICAgICAgICAq
IGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDoKKyAgICAgICAgKFdl
YktpdENTU0tleWZyYW1lUnVsZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlOjpyZWF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
OjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuaDoKKyAgICAgICAgKFdlYktpdENTU0tleWZyYW1lc1J1bGUpOgorICAgICAgICAqIGNzcy9X
ZWJLaXRDU1NSZWdpb25SdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1JlZ2lv
blJ1bGU6OldlYktpdENTU1JlZ2lvblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
UmVnaW9uUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTUmVnaW9u
UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NSZWdpb25S
dWxlLmg6CisgICAgICAgIChXZWJLaXRDU1NSZWdpb25SdWxlKToKKyAgICAgICAgKiBjc3MvV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1ZpZXdw
b3J0UnVsZTo6V2ViS2l0Q1NTVmlld3BvcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU1ZpZXdwb3J0UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
Vmlld3BvcnRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXNDU1NSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsTWVkaWFM
aXN0Q2hhaW4pOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQpOgorCiAyMDEy
LTExLTIxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM1MzM4LCByMTM1MzU5LCBhbmQgcjEzNTM3
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2hhcnNldFJ1bGUuY3BwCmluZGV4IDdhMWI1ZDQuLjNhN2Uz
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBtYWNydWxlcy5ydSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw3ICsyNiw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIENTU0NoYXJzZXRSdWxlOjpDU1NDaGFyc2V0UnVsZShDU1NTdHls
ZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCi0gICAgOiBDU1NSdWxlKHBh
cmVudCwgQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFKQorICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAg
LCBtX2VuY29kaW5nKGVuY29kaW5nKQogewogfQpAQCAtMzYsMTAgKzM2LDEwIEBAIFN0cmluZyBD
U1NDaGFyc2V0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuICJAY2hhcnNldCBcIiIg
KyBtX2VuY29kaW5nICsgIlwiOyI7CiB9CiAKLXZvaWQgQ1NTQ2hhcnNldFJ1bGU6OnJlcG9ydERl
c2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAordm9pZCBDU1NDaGFyc2V0UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAg
Q1NTUnVsZTo6cmVwb3J0QmFzZUNsYXNzTWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Cisg
ICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgaW5m
by5hZGRNZW1iZXIobV9lbmNvZGluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDaGFyc2V0UnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxl
LmgKaW5kZXggNzczZmYzYWEuLmU1NDM1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDaGFyc2V0UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVs
ZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
NyArMjMsNiBAQAogI2RlZmluZSBDU1NDaGFyc2V0UnVsZV9oCiAKICNpbmNsdWRlICJDU1NSdWxl
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzQsMTIgKzMzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NDaGFyc2V0UnVsZShwYXJlbnQsIGVuY29kaW5nKSk7CiAgICAgfQogCi0gICAgY29u
c3QgU3RyaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0KLSAgICB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKSB7
IG1fZW5jb2RpbmcgPSBlbmNvZGluZzsgfQorICAgIHZpcnR1YWwgfkNTU0NoYXJzZXRSdWxlKCkg
eyB9CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1NTUnVsZTo6
VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ0hBUlNFVF9SVUxFOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKSBPVkVSUklERSB7IEFTU0VSVF9VTlVTRUQo
cnVsZSwgIXJ1bGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFu
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcm
IGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQorICAgIHZvaWQgc2V0RW5j
b2RpbmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYpIHsgbV9lbmNvZGlu
ZyA9IGVuY29kaW5nOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQ2hhcnNldFJ1bGUoQ1NTU3R5bGVT
aGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlUnVsZS5jcHAKaW5kZXggN2Q4NTFlZC4uMzQ3MmQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCiAKKyNpbmNsdWRlICJQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1l
bnRhdGlvbi5oIgpAQCAtMzAsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NG
b250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VS
dWxlLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVs
ZTo6Rk9OVF9GQUNFX1JVTEUpCisgICAgOiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fZm9udEZh
Y2VSdWxlKGZvbnRGYWNlUnVsZSkKIHsKIH0KQEAgLTYwLDE4ICs2MSwxOSBAQCBTdHJpbmcgQ1NT
Rm9udEZhY2VSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVGb250RmFj
ZSogcnVsZSkKK3ZvaWQgQ1NTRm9udEZhY2VSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBy
dWxlKQogewogICAgIEFTU0VSVChydWxlKTsKLSAgICBtX2ZvbnRGYWNlUnVsZSA9IHJ1bGU7Cisg
ICAgQVNTRVJUKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkpOworICAgIG1fZm9udEZhY2VSdWxlID0g
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxlKTsKICAgICBpZiAobV9wcm9wZXJ0
aWVzQ1NTT01XcmFwcGVyKQogICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0
YWNoKG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9pZCBDU1NG
b250RmFjZVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NGb250RmFjZVJ1bGU6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdl
KG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udEZhY2VSdWxlKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5oCmluZGV4IGY2NzM2MmIuLjYxNTdhZjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VSdWxlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIw
MDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMyw5ICsyMyw2IEBACiAjZGVmaW5lIENTU0ZvbnRGYWNlUnVsZV9oCiAK
ICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjEgKzM0LDE5IEBAIGNsYXNz
IENTU0ZvbnRGYWNlUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGVGb250RmFjZSogcnVs
ZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGb250RmFj
ZVJ1bGUocnVsZSwgc2hlZXQpKTsgfQogCi0gICAgfkNTU0ZvbnRGYWNlUnVsZSgpOworICAgIHZp
cnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUoKSBjb25zdDsKLQotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBD
U1NSdWxlOjpUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBGT05UX0ZBQ0VfUlVM
RTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJ
REU7CiAKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKik7Ci0KLSAgICB2b2lk
IHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Cisg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBD
U1NGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQp
OwogCiAgICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBtX2ZvbnRGYWNlUnVsZTsKLSAgICAK
ICAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uPiBtX3Byb3Bl
cnRpZXNDU1NPTVdyYXBwZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAK
aW5kZXggODY5N2Y2Ni4uNDYxNzllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltcG9ydFJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNw
cApAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NJbXBvcnRSdWxl
OjpDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSwgQ1NTU3R5bGVTaGVl
dCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6OklNUE9SVF9SVUxFKQor
ICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX2ltcG9ydFJ1bGUoaW1wb3J0UnVsZSkKIHsK
IH0KQEAgLTgwLDEwICs4MCwxMCBAQCBTdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNv
bnN0CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENTU0ltcG9ydFJ1
bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NJbXBvcnRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZShtZW1vcnlPYmpl
Y3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZv
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ltcG9ydFJ1bGUpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fbWVkaWFDU1NPTVdyYXBwZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVTaGVldENT
U09NV3JhcHBlcik7CkBAIC05OSw0ICs5OSwxMCBAQCBDU1NTdHlsZVNoZWV0KiBDU1NJbXBvcnRS
dWxlOjpzdHlsZVNoZWV0KCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyLmdldCgpOyAKIH0KIAordm9pZCBDU1NJbXBvcnRSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVC
YXNlKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdoZW4gZW5hYmxpbmcgY2FjaGluZyBm
b3Igc3R5bGVzaGVldHMgd2l0aCBpbXBvcnQgcnVsZXMuCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVs
ZS5oCmluZGV4IGM4MzVmN2QuLjRmMTIzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbXBvcnRSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUu
aApAQCAtMzUsMjEgKzM1LDIxIEBAIGNsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVs
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1wb3J0UnVsZT4gY3JlYXRl
KFN0eWxlUnVsZUltcG9ydCogcnVsZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NJbXBvcnRSdWxlKHJ1bGUsIHNoZWV0KSk7IH0KICAgICAKLSAgICB+Q1NT
SW1wb3J0UnVsZSgpOworICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKKworICAgIHZpcnR1
YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gSU1QT1JUX1JV
TEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJS
SURFOwogCiAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKICAgICBNZWRpYUxpc3QqIG1lZGlhKCkg
Y29uc3Q7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0OwotICAgIAotICAg
IFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NTSW1w
b3J0UnVsZShTdHlsZVJ1bGVJbXBvcnQqLCBDU1NTdHlsZVNoZWV0Kik7CiAKICAgICBSZWZQdHI8
U3R5bGVSdWxlSW1wb3J0PiBtX2ltcG9ydFJ1bGU7Ci0KICAgICBtdXRhYmxlIFJlZlB0cjxNZWRp
YUxpc3Q+IG1fbWVkaWFDU1NPTVdyYXBwZXI7CiAgICAgbXV0YWJsZSBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAKaW5kZXggOGMyYzk3My4uZmM4NjI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTTWVk
aWFSdWxlOjpDU1NNZWRpYVJ1bGUoU3R5bGVSdWxlTWVkaWEqIG1lZGlhUnVsZSwgQ1NTU3R5bGVT
aGVldCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6Ok1FRElBX1JVTEUp
CisgICAgOiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fbWVkaWFSdWxlKG1lZGlhUnVsZSkKICAg
ICAsIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycyhtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKS5zaXpl
KCkpCiB7CkBAIC0xNjQsMTAgKzE2NCwxMSBAQCBDU1NSdWxlTGlzdCogQ1NTTWVkaWFSdWxlOjpj
c3NSdWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7
CiB9CiAKLXZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkK
K3ZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQogewogICAg
IEFTU0VSVChydWxlKTsKLSAgICBtX21lZGlhUnVsZSA9IHJ1bGU7CisgICAgQVNTRVJUKHJ1bGUt
PmlzTWVkaWFSdWxlKCkpOworICAgIG1fbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
TWVkaWEqPihydWxlKTsKICAgICBpZiAobV9tZWRpYUNTU09NV3JhcHBlciAmJiBtX21lZGlhUnVs
ZS0+bWVkaWFRdWVyaWVzKCkpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0YWNo
KG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgewpAQCAtMTc2LDEwICsx
NzcsMTAgQEAgdm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxl
KQogICAgIH0KIH0KIAotdm9pZCBDU1NNZWRpYVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NN
ZWRpYVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5m
bywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJh
c2VDbGFzc01lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9y
dE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVk
aWFDU1NPTVdyYXBwZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9ydWxlTGlzdENTU09NV3JhcHBlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTTWVkaWFSdWxlLmgKaW5kZXggYWRhY2E2ZC4uODc4MzU5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NNZWRpYVJ1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwg
MjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTM2LDI5ICszNSwyNyBAQCBjbGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTWVkaWFSdWxlPiBjcmVh
dGUoU3R5bGVSdWxlTWVkaWEqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTTWVkaWFSdWxlKHJ1bGUsIHNoZWV0KSk7IH0KIAotICAgIH5DU1NNZWRp
YVJ1bGUoKTsKKyAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NT
UnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gTUVESUFfUlVMRTsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3Q7CiAgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVz
KCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZVJ1bGUodW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CiAgICAgICAgIAogICAgIC8vIEZvciBDU1NSdWxlTGlzdAogICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0g
ICAgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSopOwotCi0gICAgdm9pZCByZXBvcnREZXNj
ZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCiBwcml2YXRlOgog
ICAgIENTU01lZGlhUnVsZShTdHlsZVJ1bGVNZWRpYSosIENTU1N0eWxlU2hlZXQqKTsKICAgICAK
ICAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IG1fbWVkaWFSdWxlOwotCiAgICAgbXV0YWJsZSBS
ZWZQdHI8TWVkaWFMaXN0PiBtX21lZGlhQ1NTT01XcmFwcGVyOwogICAgIG11dGFibGUgVmVjdG9y
PFJlZlB0cjxDU1NSdWxlPiA+IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyczsKICAgICBtdXRhYmxl
IE93blB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdENTU09NV3JhcHBlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCmluZGV4IGZjYjIyZjQ4Yy4uZDZlMzViNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENTU1BhZ2VSdWxlOjpDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiBwYWdlUnVsZSwgQ1NTU3R5
bGVTaGVldCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6OlBBR0VfUlVM
RSkKKyAgICA6IENTU1J1bGUocGFyZW50KQogICAgICwgbV9wYWdlUnVsZShwYWdlUnVsZSkKIHsK
IH0KQEAgLTk0LDE4ICs5NCwxOSBAQCBTdHJpbmcgQ1NTUGFnZVJ1bGU6OmNzc1RleHQoKSBjb25z
dAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBDU1NQYWdlUnVsZTo6
cmVhdHRhY2goU3R5bGVSdWxlUGFnZSogcnVsZSkKK3ZvaWQgQ1NTUGFnZVJ1bGU6OnJlYXR0YWNo
KFN0eWxlUnVsZUJhc2UqIHJ1bGUpCiB7CiAgICAgQVNTRVJUKHJ1bGUpOwotICAgIG1fcGFnZVJ1
bGUgPSBydWxlOworICAgIEFTU0VSVChydWxlLT5pc1BhZ2VSdWxlKCkpOworICAgIG1fcGFnZVJ1
bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSk7CiAgICAgaWYgKG1fcHJvcGVy
dGllc0NTU09NV3JhcHBlcikKICAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLT5yZWF0
dGFjaChtX3BhZ2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9pZCBDU1NQYWdl
UnVsZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0Cit2b2lkIENTU1BhZ2VSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZShtZW1vcnlPYmpl
Y3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZv
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VSdWxlKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuaAppbmRl
eCBhZWQ0ZGY0Li4xMTU3Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFn
ZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuaApAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDggKzIzLDYgQEAKICNk
ZWZpbmUgQ1NTUGFnZVJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM3LDI0ICszNSwyMiBAQCBjbGFzcyBDU1NQYWdlUnVsZSA6IHB1YmxpYyBD
U1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4gY3Jl
YXRlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTUGFnZVJ1bGUocnVsZSwgc2hlZXQpKTsgfQogCi0gICAgfkNTU1BhZ2VS
dWxlKCk7CisgICAgdmlydHVhbCB+Q1NTUGFnZVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NTUnVs
ZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gUEFHRV9SVUxFOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBPVkVSUklERTsKIAogICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgc2VsZWN0
b3JUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJik7
CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCByZWF0dGFjaChTdHls
ZVJ1bGVQYWdlKik7Ci0KLSAgICB2b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgQ1NTUGFnZVJ1bGUoU3R5bGVS
dWxlUGFnZSosIENTU1N0eWxlU2hlZXQqKTsKICAgICAKICAgICBSZWZQdHI8U3R5bGVSdWxlUGFn
ZT4gbV9wYWdlUnVsZTsKLQogICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb24+IG1fcHJvcGVydGllc0NTU09NV3JhcHBlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxl
LmNwcAppbmRleCA2YzUyMmJkLi4xZjU4MjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsMjUgKzIyLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5o
IgogCi0jaW5jbHVkZSAiQ1NTQ2hhcnNldFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTTWVkaWFSdWxl
LmgiCi0jaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVW5rbm93blJ1bGUuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1l
UnVsZS5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFNhbWVTaXplQXNDU1NSdWxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0NTU1J1bGU+IHsKKyAgICB2aXJ0dWFsIH5TYW1lU2l6
ZUFzQ1NTUnVsZSgpOwogICAgIHVuc2lnbmVkIGNoYXIgYml0ZmllbGRzOwogICAgIHZvaWQqIHBv
aW50ZXJVbmlvbjsKIH07CkBAIC02MCwxNzIgKzUwLDEzIEBAIHZvaWQgQ1NTUnVsZTo6c2V0Q3Nz
VGV4dChjb25zdCBTdHJpbmcmIC8qY3NzVGV4dCovLCBFeGNlcHRpb25Db2RlJiAvKmVjKi8pCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotU3RyaW5nIENTU1J1bGU6OmNzc1RleHQoKSBjb25z
dAotewotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBVTktOT1dOX1JVTEU6Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBjYXNlIFNUWUxFX1JVTEU6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBDU1NTdHlsZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAg
IGNhc2UgUEFHRV9SVUxFOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUGFn
ZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAgIGNhc2UgQ0hBUlNFVF9SVUxFOgotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2hhcnNldFJ1bGUqPih0aGlzKS0+Y3NzVGV4
dCgpOwotICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDU1NJbXBvcnRSdWxlKj4odGhpcyktPmNzc1RleHQoKTsKLSAgICBjYXNlIE1FRElBX1JV
TEU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDU1NNZWRpYVJ1bGUqPih0aGlz
KS0+Y3NzVGV4dCgpOwotICAgIGNhc2UgRk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBDU1NGb250RmFjZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAg
IGNhc2UgV0VCS0lUX0tFWUZSQU1FU19SVUxFOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHRoaXMpLT5jc3NUZXh0KCk7Ci0gICAgY2Fz
ZSBXRUJLSVRfS0VZRlJBTUVfUlVMRToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHRoaXMpLT5jc3NUZXh0KCk7Ci0jaWYgRU5BQkxFKENT
U19ERVZJQ0VfQURBUFRBVElPTikKLSAgICBjYXNlIFdFQktJVF9WSUVXUE9SVF9SVUxFOgotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2l0Q1NTVmlld3BvcnRSdWxlKj4odGhp
cyktPmNzc1RleHQoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICBjYXNl
IFdFQktJVF9SRUdJT05fUlVMRToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdl
YktpdENTU1JlZ2lvblJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotI2VuZGlmCi0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBD
U1NSdWxlOjpkZXN0cm95KCkKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgVU5L
Tk9XTl9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTVW5rbm93blJ1bGUqPih0
aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU1RZTEVfUlVMRToKLSAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBQQUdFX1JVTEU6Ci0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVs
ZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDSEFSU0VUX1JVTEU6Ci0gICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZSo+KHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJTVBPUlRfUlVMRToKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PENTU0ltcG9ydFJ1bGUqPih0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTUVESUFf
UlVMRToKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKLSAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4odGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFdFQktJVF9LRVlGUkFNRV9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlKj4odGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGNhc2UgV0VCS0lUX1ZJRVdQT1JUX1JVTEU6Ci0g
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NWaWV3cG9ydFJ1bGUqPih0aGlzKTsK
LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNh
c2UgV0VCS0lUX1JFR0lPTl9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2ViS2l0
Q1NTUmVnaW9uUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQ1NTUnVsZTo6cmVhdHRhY2goU3R5
bGVSdWxlQmFzZSogcnVsZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgVU5L
Tk9XTl9SVUxFOgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTVFlMRV9SVUxFOgotICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlKj4ocnVsZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBQQUdFX1JVTEU6
Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENIQVJTRVRfUlVMRToKLSAgICAgICAgQVNTRVJUKCFydWxlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2hlbiBl
bmFibGluZyBjYWNoaW5nIGZvciBzdHlsZXNoZWV0cyB3aXRoIGltcG9ydCBydWxlcy4KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1FRElB
X1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHRoaXMpLT5yZWF0dGFj
aChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgRk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU0ZvbnRGYWNl
UnVsZSo+KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KHJ1
bGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FU19SVUxFOgot
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4odGhpcyktPnJlYXR0
YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0gICAgICAgIC8vIE5vIG5lZWQg
dG8gcmVhdHRhY2gsIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgc2hhcmVhYmxlIG9uIG11dGF0aW9u
LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgY2FzZSBXRUJLSVRfVklFV1BPUlRfUlVM
RToKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVmlld3BvcnRSdWxlKj4odGhpcyktPnJl
YXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZVZpZXdwb3J0Kj4ocnVsZSkpOwotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgY2FzZSBXRUJLSVRf
UkVHSU9OX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0
aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOwotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KIHZvaWQgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2Ug
VU5LTk9XTl9SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDU1NVbmtub3duUnVsZSo+
KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNUWUxFX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENTU1N0eWxlUnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFBBR0VfUlVMRToK
LSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUGFnZVJ1bGUqPih0aGlzKS0+cmVwb3J0RGVz
Y2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBDSEFSU0VUX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENTU0NoYXJz
ZXRSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJ
bmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IENTU0ltcG9ydFJ1bGUqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1l
bW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBN
RURJQV9SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDU1NNZWRpYVJ1bGUqPih0aGlz
KS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKLSAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQ1NTRm9udEZhY2VSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2Fn
ZShtZW1vcnlPYmplY3RJbmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tF
WUZSQU1FU19SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJ
bmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0g
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHRoaXMpLT5y
ZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJl
dHVybjsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGNhc2UgV0VCS0lU
X1ZJRVdQT1JUX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1ZpZXdw
b3J0UnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0
SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykK
LSAgICBjYXNlIFdFQktJVF9SRUdJT05fUlVMRToKLSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm47CisgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAg
IGlmIChtX3BhcmVudElzUnVsZSkKKyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnRSdWxl
KTsKKyAgICBlbHNlCisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50U3R5bGVTaGVldCk7
CiB9CiAKIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIENTU1J1bGU6OnBhcnNlckNvbnRleHQoKSBj
b25zdApAQCAtMjM0LDEzICs2NSw0IEBAIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIENTU1J1bGU6
OnBhcnNlckNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBzdHlsZVNoZWV0ID8gc3R5bGVTaGVl
dC0+Y29udGVudHMoKS0+cGFyc2VyQ29udGV4dCgpIDogc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgp
OwogfQogCi12b2lkIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgIGlmIChtX3BhcmVudElzUnVsZSkKLSAgICAgICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnRS
dWxlKTsKLSAgICBlbHNlCi0gICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50U3R5bGVTaGVl
dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCmluZGV4IGFi
MzAwNDguLjA3NThlNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQW5kcmVhcyBLbGluZyAoa2xpbmdAd2Via2l0Lm9y
ZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yMyw4ICsyMyw3IEBACiAjaWZuZGVmIENTU1J1bGVfaAogI2Rl
ZmluZSBDU1NSdWxlX2gKIAotI2luY2x1ZGUgIktVUkxIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2
LDEzICszNSw3IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIENTU1J1bGUg
OiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlPiB7CiBwdWJsaWM6Ci0gICAgLy8gT3ZlcnJpZGUg
UmVmQ291bnRlZCdzIGRlcmVmKCkgdG8gZW5zdXJlIG9wZXJhdG9yIGRlbGV0ZSBpcyBjYWxsZWQg
b24KLSAgICAvLyB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3MgdHlwZS4KLSAgICB2b2lkIGRlcmVm
KCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkKLSAgICAgICAgICAgIGRlc3Ryb3ko
KTsKLSAgICB9CisgICAgdmlydHVhbCB+Q1NTUnVsZSgpIHsgfQogCiAgICAgZW51bSBUeXBlIHsK
ICAgICAgICAgVU5LTk9XTl9SVUxFLApAQCAtNjUsMjQgKzU4LDEwIEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH07CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlPihtX3R5cGUpOyB9Ci0KLSAgICBib29sIGlzQ2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gQ0hBUlNFVF9SVUxFOyB9Ci0gICAgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBGT05UX0ZBQ0VfUlVMRTsgfQotICAgIGJvb2wgaXNLZXlm
cmFtZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX0tFWUZSQU1FX1JVTEU7
IH0KLSAgICBib29sIGlzS2V5ZnJhbWVzUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBX
RUJLSVRfS0VZRlJBTUVTX1JVTEU7IH0KLSAgICBib29sIGlzTWVkaWFSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IE1FRElBX1JVTEU7IH0KLSAgICBib29sIGlzUGFnZVJ1bGUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gUEFHRV9SVUxFOyB9Ci0gICAgYm9vbCBpc1N0eWxlUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTVFlMRV9SVUxFOyB9Ci0gICAgYm9vbCBpc0ltcG9y
dFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSU1QT1JUX1JVTEU7IH0KLQotI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgYm9vbCBpc1ZpZXdwb3J0UnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBXRUJLSVRfVklFV1BPUlRfUlVMRTsgfQotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX1JFR0lPTl9SVUxFOyB9Ci0jZW5kaWYKKyAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikg
Y29uc3Q7CiAKICAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCkKICAgICB7CkBAIC0xMDUsNDQgKzg0LDMwIEBAIHB1YmxpYzoKIAogICAgIENTU1J1
bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElzUnVsZSA/IG1fcGFyZW50
UnVsZSA6IDA7IH0KIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgLy8gTk9URTog
SnVzdCBjYWxscyBub3RJbXBsZW1lbnRlZCgpLgogICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJh
c2UqKTsKLQotICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNv
bnN0OwotCiBwcm90ZWN0ZWQ6Ci0gICAgQ1NTUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIFR5
cGUgdHlwZSkKKyAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKICAgICAgICAgOiBt
X2hhc0NhY2hlZFNlbGVjdG9yVGV4dChmYWxzZSkKICAgICAgICAgLCBtX3BhcmVudElzUnVsZShm
YWxzZSkKLSAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX3BhcmVudFN0eWxlU2hl
ZXQocGFyZW50KQogICAgIHsKICAgICB9CiAKLSAgICAvLyBOT1RFOiBUaGlzIGNsYXNzIGlzIG5v
bi12aXJ0dWFsIGZvciBtZW1vcnkgYW5kIHBlcmZvcm1hbmNlIHJlYXNvbnMuCi0gICAgLy8gRG9u
J3QgZ28gbWFraW5nIGl0IHZpcnR1YWwgYWdhaW4gdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkgd2hh
dCB5b3UncmUgZG9pbmchCi0KLSAgICB+Q1NTUnVsZSgpIHsgfQotCiAgICAgYm9vbCBoYXNDYWNo
ZWRTZWxlY3RvclRleHQoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhY2hlZFNlbGVjdG9yVGV4dDsg
fQogICAgIHZvaWQgc2V0SGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGJvb2wgaGFzQ2FjaGVkU2VsZWN0
b3JUZXh0KSBjb25zdCB7IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0ID0gaGFzQ2FjaGVkU2VsZWN0
b3JUZXh0OyB9CiAKICAgICBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0KCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIGNoYXIgbV9o
YXNDYWNoZWRTZWxlY3RvclRleHQgOiAxOwogICAgIHVuc2lnbmVkIGNoYXIgbV9wYXJlbnRJc1J1
bGUgOiAxOwotICAgIHVuc2lnbmVkIGNoYXIgbV90eXBlIDogNTsKKwogICAgIHVuaW9uIHsKICAg
ICAgICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOwogICAgICAgICBDU1NTdHlsZVNoZWV0KiBtX3Bh
cmVudFN0eWxlU2hlZXQ7CiAgICAgfTsKLQotICAgIHZvaWQgZGVzdHJveSgpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAppbmRleCAx
YjM5ODcxLi4xMmUzN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcApAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQy
LDcgKzQyLDcgQEAgc3RhdGljIFNlbGVjdG9yVGV4dENhY2hlJiBzZWxlY3RvclRleHRDYWNoZSgp
CiB9CiAKIENTU1N0eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBD
U1NTdHlsZVNoZWV0KiBwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVsZTo6U1RZ
TEVfUlVMRSkKKyAgICA6IENTU1J1bGUocGFyZW50KQogICAgICwgbV9zdHlsZVJ1bGUoc3R5bGVS
dWxlKQogewogfQpAQCAtMTIyLDE3ICsxMjIsMTkgQEAgU3RyaW5nIENTU1N0eWxlUnVsZTo6Y3Nz
VGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENT
U1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlKiBydWxlKQordm9pZCBDU1NTdHlsZVJ1bGU6
OnJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqIHJ1bGUpCiB7Ci0gICAgbV9zdHlsZVJ1bGUgPSBydWxl
OworICAgIEFTU0VSVChydWxlKTsKKyAgICBBU1NFUlQocnVsZS0+aXNTdHlsZVJ1bGUoKSk7Cisg
ICAgbV9zdHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKTsKICAgICBpZiAo
bV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKQogICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBw
ZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9p
ZCBDU1NTdHlsZVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NTdHlsZVJ1bGU6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdl
KG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVSdWxlKTsKICAgICBpbmZv
LmFkZE1lbWJlcihtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5oCmluZGV4IGY5NmNiMTYuLmJjOGI2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDgsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
Myw4ICsyMyw2IEBACiAjZGVmaW5lIENTU1N0eWxlUnVsZV9oCiAKICNpbmNsdWRlICJDU1NSdWxl
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMjkgKzM0LDI3IEBAIGNsYXNzIENTU1N0
eWxlUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NTdHlsZVJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNo
ZWV0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVSdWxlKHJ1bGUsIHNoZWV0KSk7IH0K
IAotICAgIH5DU1NTdHlsZVJ1bGUoKTsKKyAgICB2aXJ0dWFsIH5DU1NTdHlsZVJ1bGUoKTsKKwor
ICAgIHZpcnR1YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gU1RZTEVfUlVM
RTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJ
REU7CiAKICAgICBTdHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxl
Y3RvclRleHQoY29uc3QgU3RyaW5nJik7CiAKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICAKICAgICAvLyBG
SVhNRTogTm90IENTU09NLiBSZW1vdmUuCiAgICAgU3R5bGVSdWxlKiBzdHlsZVJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlUnVsZS5nZXQoKTsgfQogCi0gICAgdm9pZCByZWF0dGFjaChTdHls
ZVJ1bGUqKTsKLQotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBDU1NTdHlsZVJ1bGUoU3R5bGVSdWxl
KiwgQ1NTU3R5bGVTaGVldCopOwogCiAgICAgU3RyaW5nIGdlbmVyYXRlU2VsZWN0b3JUZXh0KCkg
Y29uc3Q7CiAKICAgICBSZWZQdHI8U3R5bGVSdWxlPiBtX3N0eWxlUnVsZTsgICAgCi0KICAgICBt
dXRhYmxlIFJlZlB0cjxTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uPiBtX3Byb3BlcnRpZXND
U1NPTVdyYXBwZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXgg
OTdiMTkxOC4uMGViYmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAt
MjYyLDcgKzI2Miw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OnJ1
bGVzKCkKICAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBsZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50OyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogcnVsZSA9
IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0NoYXJzZXRSdWxlKCkpCisgICAgICAgIGlm
IChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIG5vbkNoYXJzZXRSdWxlcy0+cnVsZXMoKS5hcHBlbmQocnVsZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Vua25vd25SdWxlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaAppbmRleCAzMGQ0YzVhLi4zZmZmYWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDEyICsyOSwxNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENTU1Vua25vd25SdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGlj
OgotICAgIENTU1Vua25vd25SdWxlKCkgOiBDU1NSdWxlKDAsIENTU1J1bGU6OlVOS05PV05fUlVM
RSkgeyB9CisgICAgQ1NTVW5rbm93blJ1bGUoKSA6IENTU1J1bGUoMCkgeyB9CisgICAgdmlydHVh
bCB+Q1NTVW5rbm93blJ1bGUoKSB7IH0KIAotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgdmly
dHVhbCBDU1NSdWxlOjpUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBVTktOT1dO
X1JVTEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFz
ZSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQogICAgIHsKICAg
ICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgICAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1v
cnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5
VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDA3NjcwNDEuLjdhMzBhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTI1NTksMTUgKzI1NTksMTUgQEAgc3RhdGljIHZvaWQgY29sbGVj
dENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+
JiB3cmEKICAgICB1bnNpZ25lZCBzaXplID0gbGlzdFR5cGUtPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogY3NzUnVs
ZSA9IGxpc3RUeXBlLT5pdGVtKGkpOwotICAgICAgICBpZiAoY3NzUnVsZS0+aXNJbXBvcnRSdWxl
KCkpCisgICAgICAgIGlmIChjc3NSdWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6SU1QT1JUX1JVTEUp
CiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2Fz
dDxDU1NJbXBvcnRSdWxlKj4oY3NzUnVsZSktPnN0eWxlU2hlZXQoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNzc1J1bGUtPmlzTWVkaWFSdWxlKCkpCisgICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPnR5
cGUoKSA9PSBDU1NSdWxlOjpNRURJQV9SVUxFKQogICAgICAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkpOwog
I2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNSZWdp
b25SdWxlKCkpCisgICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpX
RUJLSVRfUkVHSU9OX1JVTEUpCiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFw
cGVyTWFwLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkpOwogI2Vu
ZGlmCi0gICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAg
ZWxzZSBpZiAoY3NzUnVsZS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKICAgICAg
ICAgICAgIENTU1N0eWxlUnVsZSogY3NzU3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4oY3NzUnVsZSk7CiAgICAgICAgICAgICB3cmFwcGVyTWFwLmFkZChjc3NTdHlsZVJ1bGUt
PnN0eWxlUnVsZSgpLCBjc3NTdHlsZVJ1bGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCmluZGV4IDhhY2I1NDkuLjM2ZjVjMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCiAK
ICNpbmNsdWRlICJQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2V0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTk3LDcgKzk1LDcgQEAgdm9pZCBTdHlsZUtleWZy
YW1lOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAogfQogCiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OldlYktpdENTU0tleWZyYW1lUnVs
ZShTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcGFyZW50
KQotICAgIDogQ1NTUnVsZSgwLCBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVfUlVMRSkKKyAgICA6
IENTU1J1bGUoMCkKICAgICAsIG1fa2V5ZnJhbWUoa2V5ZnJhbWUpCiB7CiAgICAgc2V0UGFyZW50
UnVsZShwYXJlbnQpOwpAQCAtMTE2LDEyICsxMTQsMTggQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJvcGVy
dGllc0NTU09NV3JhcHBlci5nZXQoKTsKIH0KIAotdm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAordm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVj
dEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fa2V5ZnJhbWUpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fcHJvcGVydGllc0NTU09NV3JhcHBlcik7CiB9CiAKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikKK3sKKyAgICAvLyBObyBuZWVkIHRvIHJl
YXR0YWNoLCB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHNoYXJlYWJsZSBvbiBtdXRhdGlvbi4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCmluZGV4IGQ4MTc3NjQuLmZj
Mzg5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDEwICsyNyw3IEBACiAjZGVmaW5lIFdlYktpdENTU0tleWZyYW1lUnVsZV9o
CiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MSwy
MiArNjgsMjIgQEAgcHJpdmF0ZToKIAogY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgotICAgIH5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKTsKKyAg
ICB2aXJ0dWFsIH5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NTUnVs
ZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FX1JV
TEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9rZXlmcmFtZS0+Y3NzVGV4dCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlYXR0YWNoKFN0
eWxlUnVsZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJSSURFOwogCiAgICAgU3RyaW5nIGtleVRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lLT5rZXlUZXh0KCk7IH0KICAgICB2b2lkIHNl
dEtleVRleHQoY29uc3QgU3RyaW5nJiBzKSB7IG1fa2V5ZnJhbWUtPnNldEtleVRleHQocyk7IH0K
IAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWUtPmNzc1RleHQoKTsgfQotCi0gICAg
dm9pZCByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIFdlYktpdENTU0tleWZyYW1lUnVsZShTdHlsZUtleWZyYW1lKiwg
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcGFyZW50KTsKIAogICAgIFJlZlB0cjxTdHlsZUtleWZy
YW1lPiBtX2tleWZyYW1lOwotICAgIAogICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUnVsZUNTU1N0
eWxlRGVjbGFyYXRpb24+IG1fcHJvcGVydGllc0NTU09NV3JhcHBlcjsKICAgICAKICAgICBmcmll
bmQgY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAppbmRleCAwOGZiYjBhLi5lNmFkMzAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSw5ICszMSw3IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1l
UnVsZS5oIgotI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTk2LDcgKzk0LDcgQEAgdm9pZCBTdHlsZVJ1bGVLZXlmcmFtZXM6OnJlcG9ydERlc2NlbmRh
bnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmoKIH0KIAogV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHlsZVJ1bGVLZXlmcmFtZXMq
IGtleWZyYW1lc1J1bGUsIENTU1N0eWxlU2hlZXQqIHBhcmVudCkKLSAgICA6IENTU1J1bGUocGFy
ZW50LCBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVTX1JVTEUpCisgICAgOiBDU1NSdWxlKHBhcmVu
dCkKICAgICAsIG1fa2V5ZnJhbWVzUnVsZShrZXlmcmFtZXNSdWxlKQogICAgICwgbV9jaGlsZFJ1
bGVDU1NPTVdyYXBwZXJzKGtleWZyYW1lc1J1bGUtPmtleWZyYW1lcygpLnNpemUoKSkKIHsKQEAg
LTIwMSwxNiArMTk5LDE3IEBAIENTU1J1bGVMaXN0KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpj
c3NSdWxlcygpCiAgICAgcmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7CiB9CiAK
LXZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlS2V5ZnJhbWVz
KiBydWxlKQordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVC
YXNlKiBydWxlKQogewogICAgIEFTU0VSVChydWxlKTsKLSAgICBtX2tleWZyYW1lc1J1bGUgPSBy
dWxlOworICAgIEFTU0VSVChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSk7CisgICAgbV9rZXlmcmFt
ZXNSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSk7CiB9CiAKLXZv
aWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1l
bW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit2b2lkIFdlYktpdENTU0tl
eWZyYW1lc1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9i
amVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0
SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9y
dEJhc2VDbGFzc01lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJl
cG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1f
a2V5ZnJhbWVzUnVsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3J1bGVMaXN0Q1NTT01XcmFwcGVyKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCmluZGV4IDA0YmVjN2YuLjRm
ZWE3MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMTAgKzI3LDggQEAKICNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZV9oCiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgog
I2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Miw3ICs3MCwxMiBAQCBjbGFzcyBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYktpdENTU0tleWZyYW1lc1J1bGU+IGNyZWF0ZShTdHlsZVJ1bGVLZXlmcmFtZXMqIHJ1
bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZShydWxlLCBzaGVldCkpOyB9CiAKLSAgICB+V2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZSgpOworICAgIHZpcnR1YWwgfldlYktpdENTU0tleWZyYW1lc1J1bGUoKTsKKworICAgIHZp
cnR1YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gV0VCS0lU
X0tFWUZSQU1FU19SVUxFOyB9CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdCBPVkVSUklERTsKIAogICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlmcmFtZXNSdWxlLT5uYW1lKCk7IH0KICAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJik7
CkBAIC04MywyMSArODYsMTQgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlUnVsZShjb25zdCBT
dHJpbmcmIGtleSk7CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBmaW5kUnVsZShjb25zdCBT
dHJpbmcmIGtleSk7CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCiAgICAgLy8gRm9y
IEluZGV4ZWRHZXR0ZXIgYW5kIENTU1J1bGVMaXN0LgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OwogICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUtleWZyYW1lcyopOwotCi0gICAgdm9p
ZCByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0Owot
CiBwcml2YXRlOgogICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUoU3R5bGVSdWxlS2V5ZnJhbWVz
KiwgQ1NTU3R5bGVTaGVldCogcGFyZW50KTsKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVLZXlmcmFt
ZXM+IG1fa2V5ZnJhbWVzUnVsZTsKLQogICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxXZWJLaXRD
U1NLZXlmcmFtZVJ1bGU+ID4gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzOwogICAgIG11dGFibGUg
T3duUHRyPENTU1J1bGVMaXN0PiBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcAppbmRleCBjZTEyMDdjLi42OGRiOTY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuY3BwCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9y
YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQxLDcgKzQyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogV2ViS2l0Q1NTUmVnaW9u
UnVsZTo6V2ViS2l0Q1NTUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qIHJlZ2lvblJ1bGUsIENT
U1N0eWxlU2hlZXQqIHBhcmVudCkKLSAgICA6IENTU1J1bGUocGFyZW50LCBDU1NSdWxlOjpXRUJL
SVRfUkVHSU9OX1JVTEUpCisgICAgOiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fcmVnaW9uUnVs
ZShyZWdpb25SdWxlKQogICAgICwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKHJlZ2lvblJ1bGUt
PmNoaWxkUnVsZXMoKS5zaXplKCkpCiB7CkBAIC05OSwyMCArMTAwLDIxIEBAIENTU1J1bGVMaXN0
KiBXZWJLaXRDU1NSZWdpb25SdWxlOjpjc3NSdWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcnVs
ZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7CiB9CiAKLXZvaWQgV2ViS2l0Q1NTUmVnaW9uUnVsZTo6
cmVhdHRhY2goU3R5bGVSdWxlUmVnaW9uKiBydWxlKQordm9pZCBXZWJLaXRDU1NSZWdpb25SdWxl
OjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQogewogICAgIEFTU0VSVChydWxlKTsKLSAg
ICBtX3JlZ2lvblJ1bGUgPSBydWxlOworICAgIEFTU0VSVChydWxlLT5pc1JlZ2lvblJ1bGUoKSk7
CisgICAgbV9yZWdpb25SdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5z
aXplKCk7ICsraSkgewogICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQog
ICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX3JlZ2lv
blJ1bGUtPmNoaWxkUnVsZXMoKVtpXS5nZXQoKSk7CiAgICAgfQogfQogCi12b2lkIFdlYktpdENT
U1JlZ2lvblJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBXZWJLaXRDU1NSZWdpb25SdWxlOjpyZXBv
cnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAog
ewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNv
cmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlV
c2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSht
ZW1vcnlPYmplY3RJbmZvKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3JlZ2lvblJ1bGUpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycyk7CiAgICAgaW5mby5hZGRN
ZW1iZXIobV9ydWxlTGlzdENTU09NV3JhcHBlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U1JlZ2lvblJ1bGUuaAppbmRleCBjMDJmNGM0Li5hNjhiYTExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NSZWdpb25SdWxlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsOCArMzIsNiBAQAogI2RlZmlu
ZSBXZWJLaXRDU1NSZWdpb25SdWxlX2gKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCkBAIC00NiwyNCArNDUsMjMg
QEAgY2xhc3MgV2ViS2l0Q1NTUmVnaW9uUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NSZWdpb25SdWxlPiBjcmVhdGUoU3R5bGVS
dWxlUmVnaW9uKiBydWxlLCBDU1NTdHlsZVNoZWV0KiBzaGVldCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYktpdENTU1JlZ2lvblJ1bGUocnVsZSwgc2hlZXQpKTsgfQogCi0gICAgfldlYktpdENT
U1JlZ2lvblJ1bGUoKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRDU1NSZWdpb25SdWxlKCk7CisKKyAg
ICB2aXJ0dWFsIENTU1J1bGU6OlR5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFdF
QktJVF9SRUdJT05fUlVMRTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KikgY29uc3QgT1ZFUlJJREU7CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwogICAgIENT
U1J1bGVMaXN0KiBjc3NSdWxlcygpIGNvbnN0OwogICAgIAogICAgIC8vIEZvciBDU1NSdWxlTGlz
dAogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qKTsK
LQotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8q
KSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBXZWJLaXRDU1NSZWdpb25SdWxlKFN0eWxlUnVsZVJl
Z2lvbiosIENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CiAKICAgICBSZWZQdHI8U3R5bGVSdWxlUmVn
aW9uPiBtX3JlZ2lvblJ1bGU7Ci0gICAgCiAgICAgbXV0YWJsZSBWZWN0b3I8UmVmUHRyPENTU1J1
bGU+ID4gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzOwogICAgIG11dGFibGUgT3duUHRyPENTU1J1
bGVMaXN0PiBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcAppbmRleCBjODE1YjU2Li4zZWY5MWFjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmNwcApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0
Miw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFdlYktpdENTU1ZpZXdwb3J0UnVsZTo6V2Vi
S2l0Q1NTVmlld3BvcnRSdWxlKFN0eWxlUnVsZVZpZXdwb3J0KiB2aWV3cG9ydFJ1bGUsIENTU1N0
eWxlU2hlZXQqIHNoZWV0KQotICAgIDogQ1NTUnVsZShzaGVldCwgQ1NTUnVsZTo6V0VCS0lUX1ZJ
RVdQT1JUX1JVTEUpCisgICAgOiBDU1NSdWxlKHNoZWV0KQogICAgICwgbV92aWV3cG9ydFJ1bGUo
dmlld3BvcnRSdWxlKQogewogfQpAQCAtNzUsMTkgKzc2LDIwIEBAIFN0cmluZyBXZWJLaXRDU1NW
aWV3cG9ydFJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmco
KTsKIH0KIAotdm9pZCBXZWJLaXRDU1NWaWV3cG9ydFJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVZp
ZXdwb3J0KiBydWxlKQordm9pZCBXZWJLaXRDU1NWaWV3cG9ydFJ1bGU6OnJlYXR0YWNoKFN0eWxl
UnVsZUJhc2UqIHJ1bGUpCiB7CiAgICAgQVNTRVJUKHJ1bGUpOwotICAgIG1fdmlld3BvcnRSdWxl
ID0gcnVsZTsKKyAgICBBU1NFUlQocnVsZS0+aXNWaWV3cG9ydFJ1bGUoKSk7CisgICAgbV92aWV3
cG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVWaWV3cG9ydCo+KHJ1bGUpOwogCiAgICAg
aWYgKG1fcHJvcGVydGllc0NTU09NV3JhcHBlcikKICAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01X
cmFwcGVyLT5yZWF0dGFjaChtX3ZpZXdwb3J0UnVsZS0+bXV0YWJsZVByb3BlcnRpZXMoKSk7CiB9
CiAKLXZvaWQgV2ViS2l0Q1NTVmlld3BvcnRSdWxlOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3ZvaWQgV2ViS2l0
Q1NTVmlld3BvcnRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1v
cnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9i
amVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6Q1NTKTsKLSAgICBDU1NSdWxlOjpy
ZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICBDU1NSdWxl
OjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX3ZpZXdwb3J0UnVsZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9wcm9wZXJ0aWVzQ1NTT01X
cmFwcGVyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NWaWV3
cG9ydFJ1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaApp
bmRleCBlOGEyN2QxLi4zZTZiNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1Zp
ZXdwb3J0UnVsZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTMzLDggKzM0LDYgQEAKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTUwLDE5ICs0OSwxNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5XZWJLaXRDU1NWaWV3cG9ydFJ1
bGUoKTsKIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7Ci0KLSAgICBT
dHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVWaWV3
cG9ydCopOworICAgIHZpcnR1YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gV0VCS0lUX1ZJRVdQT1JUX1JVTEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlYXR0YWNoKFN0eWxlUnVs
ZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVt
b3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJSSURFOwogCi0gICAgdm9pZCByZXBvcnREZXNjZW5k
YW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OworICAgIENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgV2ViS2l0Q1NTVmlld3Bv
cnRSdWxlKFN0eWxlUnVsZVZpZXdwb3J0KiwgQ1NTU3R5bGVTaGVldCopOwogCiAgICAgUmVmUHRy
PFN0eWxlUnVsZVZpZXdwb3J0PiBtX3ZpZXdwb3J0UnVsZTsKLQogICAgIG11dGFibGUgUmVmUHRy
PFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24+IG1fcHJvcGVydGllc0NTU09NV3JhcHBlcjsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CmluZGV4IDdkODBlNWEuLjc3NTA2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtNTE4LDcgKzUxOCw3IEBAIHByaXZhdGU6CiAvLyBz
dGF0aWMKIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKENT
U1J1bGUqIHJ1bGUpCiB7Ci0gICAgaWYgKCFydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgIGlmIChy
dWxlLT50eXBlKCkgIT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOwogfQpAQCAtMTAyNyw3
ICsxMDI3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hlZXRzKENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIFR5cGVCdWlsZGUKICAgICByZXN1bHQtPmFkZEl0ZW0o
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gc3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBz
aXplOyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogcnVsZSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7
Ci0gICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICBpZiAocnVsZS0+
dHlwZSgpID09IENTU1J1bGU6OklNUE9SVF9SVUxFKSB7CiAgICAgICAgICAgICBDU1NTdHlsZVNo
ZWV0KiBpbXBvcnRlZFN0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVs
ZSktPnN0eWxlU2hlZXQoKTsKICAgICAgICAgICAgIGlmIChpbXBvcnRlZFN0eWxlU2hlZXQpCiAg
ICAgICAgICAgICAgICAgY29sbGVjdFN0eWxlU2hlZXRzKGltcG9ydGVkU3R5bGVTaGVldCwgcmVz
dWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCAzMmNiZTc2Li5lYWIyZWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGFzQ1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCkKICAgICBWZWN0b3I8UmVmUHRyPENTU1J1bGU+ID4mIGxpc3RSdWxlcyA9IGxpc3Qt
PnJ1bGVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHN0eWxlU2hlZXQtPmxl
bmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENTU1J1bGUqIGl0ZW0gPSBzdHlsZVNo
ZWV0LT5pdGVtKGkpOwotICAgICAgICBpZiAoaXRlbS0+aXNDaGFyc2V0UnVsZSgpKQorICAgICAg
ICBpZiAoaXRlbS0+dHlwZSgpID09IENTU1J1bGU6OkNIQVJTRVRfUlVMRSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBsaXN0UnVsZXMuYXBwZW5kKGl0ZW0pOwogICAgIH0KQEAgLTIw
MiwxMCArMjAyLDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVM
aXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKQorICAgIGlmIChydWxlLT50eXBlKCkgPT0gQ1NT
UnVsZTo6TUVESUFfUlVMRSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU01lZGlhUnVs
ZSo+KHJ1bGUpLT5jc3NSdWxlcygpOwogCi0gICAgaWYgKHJ1bGUtPmlzS2V5ZnJhbWVzUnVsZSgp
KQorICAgIGlmIChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6V0VCS0lUX0tFWUZSQU1FU19SVUxF
KQogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHJ1
bGUpLT5jc3NSdWxlcygpOwogCiAgICAgcmV0dXJuIDA7CkBAIC0yMTksMTEgKzIxOSwxMSBAQCBz
dGF0aWMgdm9pZCBmaWxsTWVkaWFMaXN0Q2hhaW4oQ1NTUnVsZSogcnVsZSwgQXJyYXk8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTTWVkaWE+KgogICAgIHdoaWxlIChwYXJlbnRSdWxlKSB7CiAgICAgICAg
IENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSAwOwogICAgICAgICBib29sIGlzTWVk
aWFSdWxlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcmVudFJ1bGUtPmlzTWVkaWFSdWxlKCkpIHsK
KyAgICAgICAgaWYgKHBhcmVudFJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpNRURJQV9SVUxFKSB7
CiAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIG1lZGlhUnVsZSA9IHN0YXRpY19jYXN0PENTU01l
ZGlhUnVsZSo+KHBhcmVudFJ1bGUpOwogICAgICAgICAgICAgbWVkaWFMaXN0ID0gbWVkaWFSdWxl
LT5tZWRpYSgpOwogICAgICAgICAgICAgcGFyZW50U3R5bGVTaGVldCA9IG1lZGlhUnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpOwotICAgICAgICB9IGVsc2UgaWYgKHBhcmVudFJ1bGUtPmlzSW1wb3J0
UnVsZSgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50UnVsZS0+dHlwZSgpID09IENTU1J1
bGU6OklNUE9SVF9SVUxFKSB7CiAgICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHBhcmVudFJ1bGUpOwogICAgICAgICAgICAg
bWVkaWFMaXN0ID0gaW1wb3J0UnVsZS0+bWVkaWEoKTsKICAgICAgICAgICAgIHBhcmVudFN0eWxl
U2hlZXQgPSBpbXBvcnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDE5NTU1MDcuLjYzZGJkMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0yNjYsMTYgKzI2NiwxNiBAQCB2b2lkIFBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQsIGNvbnN0IEtVUgogICAgICAgICB9CiAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0
eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICAgICAgLy8gU29tZSBydWxlcyBoYXZlIHJl
c291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0aGF0IHdlIG5lZWQgdG8gcmV0cmlldmUuCi0g
ICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICBpZiAocnVsZS0+dHlw
ZSgpID09IENTU1J1bGU6OklNUE9SVF9SVUxFKSB7CiAgICAgICAgICAgICBDU1NJbXBvcnRSdWxl
KiBpbXBvcnRSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpOwogICAgICAg
ICAgICAgS1VSTCBpbXBvcnRVUkwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwoaW1wb3J0UnVsZS0+
aHJlZigpKTsKICAgICAgICAgICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250YWlucyhpbXBvcnRV
UkwpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgc2VyaWFsaXplQ1NT
U3R5bGVTaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIGltcG9ydFVSTCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAocnVsZS0+aXNGb250RmFjZVJ1bGUoKSkgeworICAgICAgICB9IGVsc2UgaWYg
KHJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpGT05UX0ZBQ0VfUlVMRSkgewogICAgICAgICAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBmb250IGZhY2UgcnVsZS4gSXQgaXMgbm90IGNsZWFy
IHRvIG1lIGF0IHRoaXMgcG9pbnQgaWYgdGhlIGFjdHVhbCBvdGYvZW90IGZpbGUgY2FuCiAgICAg
ICAgICAgICAvLyBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgQ1NTRm9udEZhY2VSdWxlIG9iamVjdC4K
LSAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICB9IGVsc2Ug
aWYgKHJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQogICAgICAgICAgICAgcmV0
cmlldmVSZXNvdXJjZXNGb3JSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpLT5z
dHlsZVJ1bGUoKSwgZG9jdW1lbnQpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175561</attachid>
            <date>2012-11-21 18:39:47 -0800</date>
            <delta_ts>2012-11-21 19:05:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-103003-v2.diff</filename>
            <type>text/plain</type>
            <size>57294</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYzRkYWE4Li45YWIwYjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTkg
QEAKKzIwMTItMTEtMjEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlLXZpcnR1YWxpemUgQ1NTUnVsZS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTAzMDAzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1ha2UgQ1NTUnVsZSB2aXJ0dWFsIG9uY2UgYWdhaW4sIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIGlt
cG9ydGFudCB0byBrZWVwIGl0IGFzIHNtYWxsIGFzIHBvc3NpYmxlLgorICAgICAgICBTdHlsZVJ1
bGVCYXNlIGFuZCBpdHMgdmFyaW91cyBzdWJjbGFzc2VzIGFyZSB0aGUgcmVsZXZhbnQgb25lcyBu
b3cuCisKKyAgICAgICAgKiBjc3MvQ1NTQ2hhcnNldFJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2hhcnNldFJ1bGU6OkNTU0NoYXJzZXRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NoYXJzZXRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL0NTU0NoYXJz
ZXRSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6fkNTU0NoYXJzZXRS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NoYXJzZXRSdWxlOjplbmNvZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDaGFyc2V0UnVsZTo6c2V0RW5jb2RpbmcpOgorICAgICAgICAqIGNz
cy9DU1NGb250RmFjZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxl
OjpDU1NGb250RmFjZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VSdWxlOjpy
ZWF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlcG9ydE1lbW9y
eVVzYWdlKToKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VSdWxlLmg6CisgICAgICAgIChDU1NG
b250RmFjZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0ltcG9ydFJ1bGU6OkNTU0ltcG9ydFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTSW1wb3J0UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTSW1wb3J0UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
Y3NzL0NTU0ltcG9ydFJ1bGUuaDoKKyAgICAgICAgKENTU0ltcG9ydFJ1bGUpOgorICAgICAgICAq
IGNzcy9DU1NNZWRpYVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjpD
U1NNZWRpYVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjpyZWF0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NNZWRpYVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAg
ICAgICAgKiBjc3MvQ1NTTWVkaWFSdWxlLmg6CisgICAgICAgIChDU1NNZWRpYVJ1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NQYWdlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVs
ZTo6Q1NTUGFnZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnJlYXR0YWNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhZ2VSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6Cisg
ICAgICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdlUnVsZSk6CisgICAg
ICAgICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoU2FtZVNpemVBc0NTU1J1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNz
cy9DU1NSdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlOjp+Q1NTUnVsZSk6CisgICAg
ICAgIChDU1NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6OkNTU1J1bGUpOgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVS
dWxlOjpDU1NTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpyZWF0
dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdl
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmg6CisgICAgICAgIChDU1NTdHlsZVJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjp0eXBlKToKKyAgICAgICAgKiBjc3Mv
Q1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpydWxl
cyk6CisgICAgICAgICogY3NzL0NTU1Vua25vd25SdWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
U1NVbmtub3duUnVsZTo6Q1NTVW5rbm93blJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTVW5r
bm93blJ1bGU6On5DU1NVbmtub3duUnVsZSk6CisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdENTU09NV3JhcHBlcnMpOgorICAgICAgICAq
IGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaDoKKyAgICAgICAgKFdl
YktpdENTU0tleWZyYW1lUnVsZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlOjpyZWF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
OjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuaDoKKyAgICAgICAgKFdlYktpdENTU0tleWZyYW1lc1J1bGUpOgorICAgICAgICAqIGNzcy9X
ZWJLaXRDU1NSZWdpb25SdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1JlZ2lv
blJ1bGU6OldlYktpdENTU1JlZ2lvblJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
UmVnaW9uUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTUmVnaW9u
UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NSZWdpb25S
dWxlLmg6CisgICAgICAgIChXZWJLaXRDU1NSZWdpb25SdWxlKToKKyAgICAgICAgKiBjc3MvV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1ZpZXdw
b3J0UnVsZTo6V2ViS2l0Q1NTVmlld3BvcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU1ZpZXdwb3J0UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
Vmlld3BvcnRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZSk6CisgICAgICAgICogY3NzL1dlYktpdENT
U1ZpZXdwb3J0UnVsZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6YXNDU1NSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsTWVkaWFM
aXN0Q2hhaW4pOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQpOgorCiAyMDEy
LTExLTIxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM1MzM4LCByMTM1MzU5LCBhbmQgcjEzNTM3
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2hhcnNldFJ1bGUuY3BwCmluZGV4IDdhMWI1ZDQuLjNhN2Uz
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVsZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBtYWNydWxlcy5ydSkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw3ICsyNiw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIENTU0NoYXJzZXRSdWxlOjpDU1NDaGFyc2V0UnVsZShDU1NTdHls
ZVNoZWV0KiBwYXJlbnQsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCi0gICAgOiBDU1NSdWxlKHBh
cmVudCwgQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFKQorICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAg
LCBtX2VuY29kaW5nKGVuY29kaW5nKQogewogfQpAQCAtMzYsMTAgKzM2LDEwIEBAIFN0cmluZyBD
U1NDaGFyc2V0UnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuICJAY2hhcnNldCBcIiIg
KyBtX2VuY29kaW5nICsgIlwiOyI7CiB9CiAKLXZvaWQgQ1NTQ2hhcnNldFJ1bGU6OnJlcG9ydERl
c2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBj
b25zdAordm9pZCBDU1NDaGFyc2V0UnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8gaW5m
byhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAg
Q1NTUnVsZTo6cmVwb3J0QmFzZUNsYXNzTWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Cisg
ICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgaW5m
by5hZGRNZW1iZXIobV9lbmNvZGluZyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDaGFyc2V0UnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NoYXJzZXRSdWxl
LmgKaW5kZXggNzczZmYzYWEuLmU1NDM1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDaGFyc2V0UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDaGFyc2V0UnVs
ZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4LCAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMs
NyArMjMsNiBAQAogI2RlZmluZSBDU1NDaGFyc2V0UnVsZV9oCiAKICNpbmNsdWRlICJDU1NSdWxl
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMzQsMTIgKzMzLDE1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDU1NDaGFyc2V0UnVsZShwYXJlbnQsIGVuY29kaW5nKSk7CiAgICAgfQogCi0gICAgY29u
c3QgU3RyaW5nJiBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2Rpbmc7IH0KLSAgICB2
b2lkIHNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUmKSB7
IG1fZW5jb2RpbmcgPSBlbmNvZGluZzsgfQorICAgIHZpcnR1YWwgfkNTU0NoYXJzZXRSdWxlKCkg
eyB9CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAgIHZpcnR1YWwgQ1NTUnVsZTo6
VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gQ0hBUlNFVF9SVUxFOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKSBPVkVSUklERSB7IEFTU0VSVF9VTlVTRUQo
cnVsZSwgIXJ1bGUpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9y
eU9iamVjdEluZm8qKSBjb25zdCBPVkVSUklERTsKIAotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFu
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKKyAgICBjb25zdCBTdHJpbmcm
IGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZzsgfQorICAgIHZvaWQgc2V0RW5j
b2RpbmcoY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9uQ29kZSYpIHsgbV9lbmNvZGlu
ZyA9IGVuY29kaW5nOyB9CiAKIHByaXZhdGU6CiAgICAgQ1NTQ2hhcnNldFJ1bGUoQ1NTU3R5bGVT
aGVldCogcGFyZW50LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZvbnRGYWNlUnVsZS5jcHAKaW5kZXggN2Q4NTFlZC4uMzQ3MmQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTkt
MjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11
ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhY2VSdWxlLmgiCiAKKyNpbmNsdWRlICJQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0Lmgi
CiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1l
bnRhdGlvbi5oIgpAQCAtMzAsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NG
b250RmFjZVJ1bGU6OkNTU0ZvbnRGYWNlUnVsZShTdHlsZVJ1bGVGb250RmFjZSogZm9udEZhY2VS
dWxlLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVs
ZTo6Rk9OVF9GQUNFX1JVTEUpCisgICAgOiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fZm9udEZh
Y2VSdWxlKGZvbnRGYWNlUnVsZSkKIHsKIH0KQEAgLTYwLDE4ICs2MSwxOSBAQCBTdHJpbmcgQ1NT
Rm9udEZhY2VSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5n
KCk7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVGb250RmFj
ZSogcnVsZSkKK3ZvaWQgQ1NTRm9udEZhY2VSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBy
dWxlKQogewogICAgIEFTU0VSVChydWxlKTsKLSAgICBtX2ZvbnRGYWNlUnVsZSA9IHJ1bGU7Cisg
ICAgQVNTRVJUKHJ1bGUtPmlzRm9udEZhY2VSdWxlKCkpOworICAgIG1fZm9udEZhY2VSdWxlID0g
c3RhdGljX2Nhc3Q8U3R5bGVSdWxlRm9udEZhY2UqPihydWxlKTsKICAgICBpZiAobV9wcm9wZXJ0
aWVzQ1NTT01XcmFwcGVyKQogICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0
YWNoKG1fZm9udEZhY2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9pZCBDU1NG
b250RmFjZVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZv
KiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NGb250RmFjZVJ1bGU6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdl
KG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fZm9udEZhY2VSdWxlKTsKICAgICBp
bmZvLmFkZE1lbWJlcihtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZvbnRGYWNlUnVsZS5oCmluZGV4IGY2NzM2MmIuLjYxNTdhZjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VSdWxlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAw
MyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIw
MDYsIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMyw5ICsyMyw2IEBACiAjZGVmaW5lIENTU0ZvbnRGYWNlUnVsZV9oCiAK
ICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjEgKzM0LDE5IEBAIGNsYXNz
IENTU0ZvbnRGYWNlUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NGb250RmFjZVJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGVGb250RmFjZSogcnVs
ZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGb250RmFj
ZVJ1bGUocnVsZSwgc2hlZXQpKTsgfQogCi0gICAgfkNTU0ZvbnRGYWNlUnVsZSgpOworICAgIHZp
cnR1YWwgfkNTU0ZvbnRGYWNlUnVsZSgpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUoKSBjb25zdDsKLQotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBD
U1NSdWxlOjpUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBGT05UX0ZBQ0VfUlVM
RTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJ
REU7CiAKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKik7Ci0KLSAgICB2b2lk
IHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Cisg
ICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBD
U1NGb250RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQp
OwogCiAgICAgUmVmUHRyPFN0eWxlUnVsZUZvbnRGYWNlPiBtX2ZvbnRGYWNlUnVsZTsKLSAgICAK
ICAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uPiBtX3Byb3Bl
cnRpZXNDU1NPTVdyYXBwZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTSW1wb3J0UnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAK
aW5kZXggODY5N2Y2Ni4uNDYxNzllMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ltcG9ydFJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmNw
cApAQCAtMzYsNyArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBDU1NJbXBvcnRSdWxl
OjpDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCogaW1wb3J0UnVsZSwgQ1NTU3R5bGVTaGVl
dCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6OklNUE9SVF9SVUxFKQor
ICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX2ltcG9ydFJ1bGUoaW1wb3J0UnVsZSkKIHsK
IH0KQEAgLTgwLDEwICs4MCwxMCBAQCBTdHJpbmcgQ1NTSW1wb3J0UnVsZTo6Y3NzVGV4dCgpIGNv
bnN0CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENTU0ltcG9ydFJ1
bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NJbXBvcnRSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZShtZW1vcnlPYmpl
Y3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZv
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2ltcG9ydFJ1bGUpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1fbWVkaWFDU1NPTVdyYXBwZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVTaGVldENT
U09NV3JhcHBlcik7CkBAIC05OSw0ICs5OSwxMCBAQCBDU1NTdHlsZVNoZWV0KiBDU1NJbXBvcnRS
dWxlOjpzdHlsZVNoZWV0KCkgY29uc3QKICAgICByZXR1cm4gbV9zdHlsZVNoZWV0Q1NTT01XcmFw
cGVyLmdldCgpOyAKIH0KIAordm9pZCBDU1NJbXBvcnRSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVC
YXNlKikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHdoZW4gZW5hYmxpbmcgY2FjaGluZyBm
b3Igc3R5bGVzaGVldHMgd2l0aCBpbXBvcnQgcnVsZXMuCisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVs
ZS5oCmluZGV4IGM4MzVmN2QuLjRmMTIzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NJbXBvcnRSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUu
aApAQCAtMzUsMjEgKzM1LDIxIEBAIGNsYXNzIENTU0ltcG9ydFJ1bGUgOiBwdWJsaWMgQ1NTUnVs
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1wb3J0UnVsZT4gY3JlYXRl
KFN0eWxlUnVsZUltcG9ydCogcnVsZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NJbXBvcnRSdWxlKHJ1bGUsIHNoZWV0KSk7IH0KICAgICAKLSAgICB+Q1NT
SW1wb3J0UnVsZSgpOworICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKKworICAgIHZpcnR1
YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gSU1QT1JUX1JV
TEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJS
SURFOwogCiAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKICAgICBNZWRpYUxpc3QqIG1lZGlhKCkg
Y29uc3Q7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCgpIGNvbnN0OwotICAgIAotICAg
IFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NTSW1w
b3J0UnVsZShTdHlsZVJ1bGVJbXBvcnQqLCBDU1NTdHlsZVNoZWV0Kik7CiAKICAgICBSZWZQdHI8
U3R5bGVSdWxlSW1wb3J0PiBtX2ltcG9ydFJ1bGU7Ci0KICAgICBtdXRhYmxlIFJlZlB0cjxNZWRp
YUxpc3Q+IG1fbWVkaWFDU1NPTVdyYXBwZXI7CiAgICAgbXV0YWJsZSBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gbV9zdHlsZVNoZWV0Q1NTT01XcmFwcGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAKaW5kZXggOGMyYzk3My4uZmM4NjI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlh
UnVsZS5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTTWVk
aWFSdWxlOjpDU1NNZWRpYVJ1bGUoU3R5bGVSdWxlTWVkaWEqIG1lZGlhUnVsZSwgQ1NTU3R5bGVT
aGVldCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6Ok1FRElBX1JVTEUp
CisgICAgOiBDU1NSdWxlKHBhcmVudCkKICAgICAsIG1fbWVkaWFSdWxlKG1lZGlhUnVsZSkKICAg
ICAsIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycyhtZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKS5zaXpl
KCkpCiB7CkBAIC0xNjQsMTAgKzE2NCwxMSBAQCBDU1NSdWxlTGlzdCogQ1NTTWVkaWFSdWxlOjpj
c3NSdWxlcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7
CiB9CiAKLXZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkK
K3ZvaWQgQ1NTTWVkaWFSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQogewogICAg
IEFTU0VSVChydWxlKTsKLSAgICBtX21lZGlhUnVsZSA9IHJ1bGU7CisgICAgQVNTRVJUKHJ1bGUt
PmlzTWVkaWFSdWxlKCkpOworICAgIG1fbWVkaWFSdWxlID0gc3RhdGljX2Nhc3Q8U3R5bGVSdWxl
TWVkaWEqPihydWxlKTsKICAgICBpZiAobV9tZWRpYUNTU09NV3JhcHBlciAmJiBtX21lZGlhUnVs
ZS0+bWVkaWFRdWVyaWVzKCkpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0YWNo
KG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgewpAQCAtMTc2LDEwICsx
NzcsMTAgQEAgdm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxl
KQogICAgIH0KIH0KIAotdm9pZCBDU1NNZWRpYVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NN
ZWRpYVJ1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVj
dEluZm8pIGNvbnN0CiB7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5m
bywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJh
c2VDbGFzc01lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9y
dE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fbWVk
aWFDU1NPTVdyYXBwZXIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fY2hpbGRSdWxlQ1NTT01XcmFw
cGVycyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9ydWxlTGlzdENTU09NV3JhcHBlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTTWVkaWFSdWxlLmgKaW5kZXggYWRhY2E2ZC4uODc4MzU5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NNZWRpYVJ1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwg
MjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTM2LDI5ICszNSwyNyBAQCBjbGFzcyBDU1NNZWRpYVJ1bGUgOiBwdWJsaWMgQ1NT
UnVsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTWVkaWFSdWxlPiBjcmVh
dGUoU3R5bGVSdWxlTWVkaWEqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTTWVkaWFSdWxlKHJ1bGUsIHNoZWV0KSk7IH0KIAotICAgIH5DU1NNZWRp
YVJ1bGUoKTsKKyAgICB2aXJ0dWFsIH5DU1NNZWRpYVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NT
UnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gTUVESUFfUlVMRTsgfQor
ICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CiAK
ICAgICBNZWRpYUxpc3QqIG1lZGlhKCkgY29uc3Q7CiAgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVz
KCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBpbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZSwg
dW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGRlbGV0ZVJ1bGUodW5z
aWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CiAgICAgICAgIAogICAgIC8vIEZvciBDU1NSdWxlTGlzdAogICAgIHVuc2lnbmVkIGxlbmd0
aCgpIGNvbnN0OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0g
ICAgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSopOwotCi0gICAgdm9pZCByZXBvcnREZXNj
ZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCiBwcml2YXRlOgog
ICAgIENTU01lZGlhUnVsZShTdHlsZVJ1bGVNZWRpYSosIENTU1N0eWxlU2hlZXQqKTsKICAgICAK
ICAgICBSZWZQdHI8U3R5bGVSdWxlTWVkaWE+IG1fbWVkaWFSdWxlOwotCiAgICAgbXV0YWJsZSBS
ZWZQdHI8TWVkaWFMaXN0PiBtX21lZGlhQ1NTT01XcmFwcGVyOwogICAgIG11dGFibGUgVmVjdG9y
PFJlZlB0cjxDU1NSdWxlPiA+IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyczsKICAgICBtdXRhYmxl
IE93blB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdENTU09NV3JhcHBlcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCmluZGV4IGZjYjIyZjQ4Yy4uZDZlMzViNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFnZVJ1bGUuY3BwCkBAIC0zNSw3ICszNSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IENTU1BhZ2VSdWxlOjpDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiBwYWdlUnVsZSwgQ1NTU3R5
bGVTaGVldCogcGFyZW50KQotICAgIDogQ1NTUnVsZShwYXJlbnQsIENTU1J1bGU6OlBBR0VfUlVM
RSkKKyAgICA6IENTU1J1bGUocGFyZW50KQogICAgICwgbV9wYWdlUnVsZShwYWdlUnVsZSkKIHsK
IH0KQEAgLTk0LDE4ICs5NCwxOSBAQCBTdHJpbmcgQ1NTUGFnZVJ1bGU6OmNzc1RleHQoKSBjb25z
dAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBDU1NQYWdlUnVsZTo6
cmVhdHRhY2goU3R5bGVSdWxlUGFnZSogcnVsZSkKK3ZvaWQgQ1NTUGFnZVJ1bGU6OnJlYXR0YWNo
KFN0eWxlUnVsZUJhc2UqIHJ1bGUpCiB7CiAgICAgQVNTRVJUKHJ1bGUpOwotICAgIG1fcGFnZVJ1
bGUgPSBydWxlOworICAgIEFTU0VSVChydWxlLT5pc1BhZ2VSdWxlKCkpOworICAgIG1fcGFnZVJ1
bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGVQYWdlKj4ocnVsZSk7CiAgICAgaWYgKG1fcHJvcGVy
dGllc0NTU09NV3JhcHBlcikKICAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLT5yZWF0
dGFjaChtX3BhZ2VSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9pZCBDU1NQYWdl
UnVsZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9y
eU9iamVjdEluZm8pIGNvbnN0Cit2b2lkIENTU1BhZ2VSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShN
ZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAgIE1lbW9yeUNs
YXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6
Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZShtZW1vcnlPYmpl
Y3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZv
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3BhZ2VSdWxlKTsKICAgICBpbmZvLmFkZE1lbWJlciht
X3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuaAppbmRl
eCBhZWQ0ZGY0Li4xMTU3Yzk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFn
ZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuaApAQCAtMSw3ICsx
LDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJp
Z2h0IChDKSAyMDAyLCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDggKzIzLDYgQEAKICNk
ZWZpbmUgQ1NTUGFnZVJ1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTM3LDI0ICszNSwyMiBAQCBjbGFzcyBDU1NQYWdlUnVsZSA6IHB1YmxpYyBD
U1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQYWdlUnVsZT4gY3Jl
YXRlKFN0eWxlUnVsZVBhZ2UqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTUGFnZVJ1bGUocnVsZSwgc2hlZXQpKTsgfQogCi0gICAgfkNTU1BhZ2VS
dWxlKCk7CisgICAgdmlydHVhbCB+Q1NTUGFnZVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NTUnVs
ZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gUEFHRV9SVUxFOyB9CisgICAg
dmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9p
ZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBPVkVSUklERTsKIAogICAg
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7CiAKICAgICBTdHJpbmcgc2VsZWN0
b3JUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJik7
CiAKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OwotCi0gICAgdm9pZCByZWF0dGFjaChTdHls
ZVJ1bGVQYWdlKik7Ci0KLSAgICB2b2lkIHJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KIHByaXZhdGU6CiAgICAgQ1NTUGFnZVJ1bGUoU3R5bGVS
dWxlUGFnZSosIENTU1N0eWxlU2hlZXQqKTsKICAgICAKICAgICBSZWZQdHI8U3R5bGVSdWxlUGFn
ZT4gbV9wYWdlUnVsZTsKLQogICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUnVsZUNTU1N0eWxlRGVj
bGFyYXRpb24+IG1fcHJvcGVydGllc0NTU09NV3JhcHBlcjsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxl
LmNwcAppbmRleCA2YzUyMmJkLi4xZjU4MjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MjIsMjUgKzIyLDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5o
IgogCi0jaW5jbHVkZSAiQ1NTQ2hhcnNldFJ1bGUuaCIKLSNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKLSNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCi0jaW5jbHVkZSAiQ1NTTWVkaWFSdWxl
LmgiCi0jaW5jbHVkZSAiQ1NTUGFnZVJ1bGUuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVW5rbm93blJ1bGUuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1l
UnVsZS5oIgotI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKLSNpbmNsdWRlICJX
ZWJLaXRDU1NSZWdpb25SdWxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IFNhbWVTaXplQXNDU1NSdWxlIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0NTU1J1bGU+IHsKKyAgICB2aXJ0dWFsIH5TYW1lU2l6
ZUFzQ1NTUnVsZSgpOwogICAgIHVuc2lnbmVkIGNoYXIgYml0ZmllbGRzOwogICAgIHZvaWQqIHBv
aW50ZXJVbmlvbjsKIH07CkBAIC02MCwxNzIgKzUwLDEzIEBAIHZvaWQgQ1NTUnVsZTo6c2V0Q3Nz
VGV4dChjb25zdCBTdHJpbmcmIC8qY3NzVGV4dCovLCBFeGNlcHRpb25Db2RlJiAvKmVjKi8pCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotU3RyaW5nIENTU1J1bGU6OmNzc1RleHQoKSBjb25z
dAotewotICAgIHN3aXRjaCAodHlwZSgpKSB7Ci0gICAgY2FzZSBVTktOT1dOX1JVTEU6Ci0gICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBjYXNlIFNUWUxFX1JVTEU6Ci0gICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBDU1NTdHlsZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAg
IGNhc2UgUEFHRV9SVUxFOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUGFn
ZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAgIGNhc2UgQ0hBUlNFVF9SVUxFOgotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2hhcnNldFJ1bGUqPih0aGlzKS0+Y3NzVGV4
dCgpOwotICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDU1NJbXBvcnRSdWxlKj4odGhpcyktPmNzc1RleHQoKTsKLSAgICBjYXNlIE1FRElBX1JV
TEU6Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDU1NNZWRpYVJ1bGUqPih0aGlz
KS0+Y3NzVGV4dCgpOwotICAgIGNhc2UgRk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBDU1NGb250RmFjZVJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotICAg
IGNhc2UgV0VCS0lUX0tFWUZSQU1FU19SVUxFOgotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KHRoaXMpLT5jc3NUZXh0KCk7Ci0gICAgY2Fz
ZSBXRUJLSVRfS0VZRlJBTUVfUlVMRToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHRoaXMpLT5jc3NUZXh0KCk7Ci0jaWYgRU5BQkxFKENT
U19ERVZJQ0VfQURBUFRBVElPTikKLSAgICBjYXNlIFdFQktJVF9WSUVXUE9SVF9SVUxFOgotICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2l0Q1NTVmlld3BvcnRSdWxlKj4odGhp
cyktPmNzc1RleHQoKTsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICBjYXNl
IFdFQktJVF9SRUdJT05fUlVMRToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFdl
YktpdENTU1JlZ2lvblJ1bGUqPih0aGlzKS0+Y3NzVGV4dCgpOwotI2VuZGlmCi0gICAgfQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBD
U1NSdWxlOjpkZXN0cm95KCkKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgVU5L
Tk9XTl9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTVW5rbm93blJ1bGUqPih0
aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgU1RZTEVfUlVMRToKLSAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBQQUdFX1JVTEU6Ci0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVs
ZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDSEFSU0VUX1JVTEU6Ci0gICAg
ICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NDaGFyc2V0UnVsZSo+KHRoaXMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBJTVBPUlRfUlVMRToKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PENTU0ltcG9ydFJ1bGUqPih0aGlzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgTUVESUFf
UlVMRToKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHRoaXMpOwot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKLSAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2Fz
dDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4odGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBj
YXNlIFdFQktJVF9LRVlGUkFNRV9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlKj4odGhpcyk7Ci0gICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUo
Q1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGNhc2UgV0VCS0lUX1ZJRVdQT1JUX1JVTEU6Ci0g
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NWaWV3cG9ydFJ1bGUqPih0aGlzKTsK
LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0jaWYgRU5BQkxFKENTU19SRUdJT05TKQotICAgIGNh
c2UgV0VCS0lUX1JFR0lPTl9SVUxFOgotICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2ViS2l0
Q1NTUmVnaW9uUnVsZSo+KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLXZvaWQgQ1NTUnVsZTo6cmVhdHRhY2goU3R5
bGVSdWxlQmFzZSogcnVsZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2UgVU5L
Tk9XTl9SVUxFOgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTVFlMRV9SVUxFOgotICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlKj4ocnVsZSkpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBQQUdFX1JVTEU6
Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZVBhZ2UqPihydWxlKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNl
IENIQVJTRVRfUlVMRToKLSAgICAgICAgQVNTRVJUKCFydWxlKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgd2hlbiBl
bmFibGluZyBjYWNoaW5nIGZvciBzdHlsZXNoZWV0cyB3aXRoIGltcG9ydCBydWxlcy4KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE1FRElB
X1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KHRoaXMpLT5yZWF0dGFj
aChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVNZWRpYSo+KHJ1bGUpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIGNhc2UgRk9OVF9GQUNFX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU0ZvbnRGYWNl
UnVsZSo+KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGVGb250RmFjZSo+KHJ1
bGUpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FU19SVUxFOgot
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4odGhpcyktPnJlYXR0
YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0gICAgICAgIC8vIE5vIG5lZWQg
dG8gcmVhdHRhY2gsIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgc2hhcmVhYmxlIG9uIG11dGF0aW9u
LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuOwotI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgY2FzZSBXRUJLSVRfVklFV1BPUlRfUlVM
RToKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVmlld3BvcnRSdWxlKj4odGhpcyktPnJl
YXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZVZpZXdwb3J0Kj4ocnVsZSkpOwotICAgICAgICBy
ZXR1cm47Ci0jZW5kaWYKLSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgY2FzZSBXRUJLSVRf
UkVHSU9OX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0
aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOwotICAg
ICAgICByZXR1cm47Ci0jZW5kaWYKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19
Ci0KIHZvaWQgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVt
b3J5T2JqZWN0SW5mbykgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHR5cGUoKSkgewotICAgIGNhc2Ug
VU5LTk9XTl9SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDU1NVbmtub3duUnVsZSo+
KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFNUWUxFX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0
PGNvbnN0IENTU1N0eWxlUnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFBBR0VfUlVMRToK
LSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTUGFnZVJ1bGUqPih0aGlzKS0+cmVwb3J0RGVz
Y2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAgICByZXR1cm47Ci0g
ICAgY2FzZSBDSEFSU0VUX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IENTU0NoYXJz
ZXRSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJ
bmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgSU1QT1JUX1JVTEU6Ci0gICAgICAgIHN0
YXRpY19jYXN0PGNvbnN0IENTU0ltcG9ydFJ1bGUqPih0aGlzKS0+cmVwb3J0RGVzY2VuZGFudE1l
bW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBN
RURJQV9SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBDU1NNZWRpYVJ1bGUqPih0aGlz
KS0+cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKLSAgICAgICAgc3RhdGljX2Nhc3Q8
Y29uc3QgQ1NTRm9udEZhY2VSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2Fn
ZShtZW1vcnlPYmplY3RJbmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tF
WUZSQU1FU19SVUxFOgotICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlKj4odGhpcyktPnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJ
bmZvKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgV0VCS0lUX0tFWUZSQU1FX1JVTEU6Ci0g
ICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHRoaXMpLT5y
ZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJl
dHVybjsKLSNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQotICAgIGNhc2UgV0VCS0lU
X1ZJRVdQT1JUX1JVTEU6Ci0gICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IFdlYktpdENTU1ZpZXdw
b3J0UnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0
SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotI2lmIEVOQUJMRShDU1NfUkVHSU9OUykK
LSAgICBjYXNlIFdFQktJVF9SRUdJT05fUlVMRToKLSAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KHRoaXMpLT5yZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2Uo
bWVtb3J5T2JqZWN0SW5mbyk7Ci0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm47CisgICAgTWVtb3J5Q2xhc3NJbmZvIGlu
Zm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOworICAg
IGlmIChtX3BhcmVudElzUnVsZSkKKyAgICAgICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnRSdWxl
KTsKKyAgICBlbHNlCisgICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50U3R5bGVTaGVldCk7
CiB9CiAKIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIENTU1J1bGU6OnBhcnNlckNvbnRleHQoKSBj
b25zdApAQCAtMjM0LDEzICs2NSw0IEBAIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIENTU1J1bGU6
OnBhcnNlckNvbnRleHQoKSBjb25zdAogICAgIHJldHVybiBzdHlsZVNoZWV0ID8gc3R5bGVTaGVl
dC0+Y29udGVudHMoKS0+cGFyc2VyQ29udGV4dCgpIDogc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgp
OwogfQogCi12b2lkIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Ci17Ci0gICAgTWVtb3J5Q2xhc3NJbmZv
IGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpDU1MpOwot
ICAgIGlmIChtX3BhcmVudElzUnVsZSkKLSAgICAgICAgaW5mby5hZGRNZW1iZXIobV9wYXJlbnRS
dWxlKTsKLSAgICBlbHNlCi0gICAgICAgIGluZm8uYWRkTWVtYmVyKG1fcGFyZW50U3R5bGVTaGVl
dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCmluZGV4IGFi
MzAwNDguLjA3NThlNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNiwgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQW5kcmVhcyBLbGluZyAoa2xpbmdAd2Via2l0Lm9y
ZykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCkBAIC0yMyw4ICsyMyw3IEBACiAjaWZuZGVmIENTU1J1bGVfaAogI2Rl
ZmluZSBDU1NSdWxlX2gKIAotI2luY2x1ZGUgIktVUkxIYXNoLmgiCi0jaW5jbHVkZSA8d3RmL0xp
c3RIYXNoU2V0Lmg+CisjaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM2
LDEzICszNSw3IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNzIENTU1J1bGUg
OiBwdWJsaWMgUmVmQ291bnRlZDxDU1NSdWxlPiB7CiBwdWJsaWM6Ci0gICAgLy8gT3ZlcnJpZGUg
UmVmQ291bnRlZCdzIGRlcmVmKCkgdG8gZW5zdXJlIG9wZXJhdG9yIGRlbGV0ZSBpcyBjYWxsZWQg
b24KLSAgICAvLyB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3MgdHlwZS4KLSAgICB2b2lkIGRlcmVm
KCkKLSAgICB7Ci0gICAgICAgIGlmIChkZXJlZkJhc2UoKSkKLSAgICAgICAgICAgIGRlc3Ryb3ko
KTsKLSAgICB9CisgICAgdmlydHVhbCB+Q1NTUnVsZSgpIHsgfQogCiAgICAgZW51bSBUeXBlIHsK
ICAgICAgICAgVU5LTk9XTl9SVUxFLApAQCAtNjUsMjQgKzU4LDEwIEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH07CiAKLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxU
eXBlPihtX3R5cGUpOyB9Ci0KLSAgICBib29sIGlzQ2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVy
biB0eXBlKCkgPT0gQ0hBUlNFVF9SVUxFOyB9Ci0gICAgYm9vbCBpc0ZvbnRGYWNlUnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBGT05UX0ZBQ0VfUlVMRTsgfQotICAgIGJvb2wgaXNLZXlm
cmFtZVJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX0tFWUZSQU1FX1JVTEU7
IH0KLSAgICBib29sIGlzS2V5ZnJhbWVzUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBX
RUJLSVRfS0VZRlJBTUVTX1JVTEU7IH0KLSAgICBib29sIGlzTWVkaWFSdWxlKCkgY29uc3QgeyBy
ZXR1cm4gdHlwZSgpID09IE1FRElBX1JVTEU7IH0KLSAgICBib29sIGlzUGFnZVJ1bGUoKSBjb25z
dCB7IHJldHVybiB0eXBlKCkgPT0gUEFHRV9SVUxFOyB9Ci0gICAgYm9vbCBpc1N0eWxlUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBTVFlMRV9SVUxFOyB9Ci0gICAgYm9vbCBpc0ltcG9y
dFJ1bGUoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gSU1QT1JUX1JVTEU7IH0KLQotI2lmIEVO
QUJMRShDU1NfREVWSUNFX0FEQVBUQVRJT04pCi0gICAgYm9vbCBpc1ZpZXdwb3J0UnVsZSgpIGNv
bnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBXRUJLSVRfVklFV1BPUlRfUlVMRTsgfQotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCi0gICAgYm9vbCBpc1JlZ2lvblJ1bGUoKSBjb25zdCB7
IHJldHVybiB0eXBlKCkgPT0gV0VCS0lUX1JFR0lPTl9SVUxFOyB9Ci0jZW5kaWYKKyAgICB2aXJ0
dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikg
Y29uc3Q7CiAKICAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCkKICAgICB7CkBAIC0xMDUsNDQgKzg0LDMwIEBAIHB1YmxpYzoKIAogICAgIENTU1J1
bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudElzUnVsZSA/IG1fcGFyZW50
UnVsZSA6IDA7IH0KIAotICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgLy8gTk9URTog
SnVzdCBjYWxscyBub3RJbXBsZW1lbnRlZCgpLgogICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJh
c2UqKTsKLQotICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNv
bnN0OwotCiBwcm90ZWN0ZWQ6Ci0gICAgQ1NTUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIFR5
cGUgdHlwZSkKKyAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCkKICAgICAgICAgOiBt
X2hhc0NhY2hlZFNlbGVjdG9yVGV4dChmYWxzZSkKICAgICAgICAgLCBtX3BhcmVudElzUnVsZShm
YWxzZSkKLSAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX3BhcmVudFN0eWxlU2hl
ZXQocGFyZW50KQogICAgIHsKICAgICB9CiAKLSAgICAvLyBOT1RFOiBUaGlzIGNsYXNzIGlzIG5v
bi12aXJ0dWFsIGZvciBtZW1vcnkgYW5kIHBlcmZvcm1hbmNlIHJlYXNvbnMuCi0gICAgLy8gRG9u
J3QgZ28gbWFraW5nIGl0IHZpcnR1YWwgYWdhaW4gdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkgd2hh
dCB5b3UncmUgZG9pbmchCi0KLSAgICB+Q1NTUnVsZSgpIHsgfQotCiAgICAgYm9vbCBoYXNDYWNo
ZWRTZWxlY3RvclRleHQoKSBjb25zdCB7IHJldHVybiBtX2hhc0NhY2hlZFNlbGVjdG9yVGV4dDsg
fQogICAgIHZvaWQgc2V0SGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGJvb2wgaGFzQ2FjaGVkU2VsZWN0
b3JUZXh0KSBjb25zdCB7IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0ID0gaGFzQ2FjaGVkU2VsZWN0
b3JUZXh0OyB9CiAKICAgICBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBwYXJzZXJDb250ZXh0KCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBtdXRhYmxlIHVuc2lnbmVkIGNoYXIgbV9o
YXNDYWNoZWRTZWxlY3RvclRleHQgOiAxOwogICAgIHVuc2lnbmVkIGNoYXIgbV9wYXJlbnRJc1J1
bGUgOiAxOwotICAgIHVuc2lnbmVkIGNoYXIgbV90eXBlIDogNTsKKwogICAgIHVuaW9uIHsKICAg
ICAgICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOwogICAgICAgICBDU1NTdHlsZVNoZWV0KiBtX3Bh
cmVudFN0eWxlU2hlZXQ7CiAgICAgfTsKLQotICAgIHZvaWQgZGVzdHJveSgpOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAppbmRleCAx
YjM5ODcxLi4xMmUzN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcApAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29w
eXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQy
LDcgKzQyLDcgQEAgc3RhdGljIFNlbGVjdG9yVGV4dENhY2hlJiBzZWxlY3RvclRleHRDYWNoZSgp
CiB9CiAKIENTU1N0eWxlUnVsZTo6Q1NTU3R5bGVSdWxlKFN0eWxlUnVsZSogc3R5bGVSdWxlLCBD
U1NTdHlsZVNoZWV0KiBwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVsZTo6U1RZ
TEVfUlVMRSkKKyAgICA6IENTU1J1bGUocGFyZW50KQogICAgICwgbV9zdHlsZVJ1bGUoc3R5bGVS
dWxlKQogewogfQpAQCAtMTIyLDE3ICsxMjIsMTkgQEAgU3RyaW5nIENTU1N0eWxlUnVsZTo6Y3Nz
VGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi12b2lkIENT
U1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlKiBydWxlKQordm9pZCBDU1NTdHlsZVJ1bGU6
OnJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqIHJ1bGUpCiB7Ci0gICAgbV9zdHlsZVJ1bGUgPSBydWxl
OworICAgIEFTU0VSVChydWxlKTsKKyAgICBBU1NFUlQocnVsZS0+aXNTdHlsZVJ1bGUoKSk7Cisg
ICAgbV9zdHlsZVJ1bGUgPSBzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKTsKICAgICBpZiAo
bV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKQogICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBw
ZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxlLT5tdXRhYmxlUHJvcGVydGllcygpKTsKIH0KIAotdm9p
ZCBDU1NTdHlsZVJ1bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBDU1NTdHlsZVJ1bGU6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAg
ICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1l
bW9yeVR5cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdl
KG1lbW9yeU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fc3R5bGVSdWxlKTsKICAgICBpbmZv
LmFkZE1lbWJlcihtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlUnVsZS5oCmluZGV4IGY5NmNiMTYuLmJjOGI2ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2Rl
Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDgsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
Myw4ICsyMyw2IEBACiAjZGVmaW5lIENTU1N0eWxlUnVsZV9oCiAKICNpbmNsdWRlICJDU1NSdWxl
LmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMjkgKzM0LDI3IEBAIGNsYXNzIENTU1N0
eWxlUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDU1NTdHlsZVJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGUqIHJ1bGUsIENTU1N0eWxlU2hlZXQqIHNo
ZWV0KSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVSdWxlKHJ1bGUsIHNoZWV0KSk7IH0K
IAotICAgIH5DU1NTdHlsZVJ1bGUoKTsKKyAgICB2aXJ0dWFsIH5DU1NTdHlsZVJ1bGUoKTsKKwor
ICAgIHZpcnR1YWwgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gU1RZTEVfUlVM
RTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJSSURFOworICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJ
REU7CiAKICAgICBTdHJpbmcgc2VsZWN0b3JUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxl
Y3RvclRleHQoY29uc3QgU3RyaW5nJik7CiAKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIGNvbnN0OwogCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAgICAKICAgICAvLyBG
SVhNRTogTm90IENTU09NLiBSZW1vdmUuCiAgICAgU3R5bGVSdWxlKiBzdHlsZVJ1bGUoKSBjb25z
dCB7IHJldHVybiBtX3N0eWxlUnVsZS5nZXQoKTsgfQogCi0gICAgdm9pZCByZWF0dGFjaChTdHls
ZVJ1bGUqKTsKLQotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBDU1NTdHlsZVJ1bGUoU3R5bGVSdWxl
KiwgQ1NTU3R5bGVTaGVldCopOwogCiAgICAgU3RyaW5nIGdlbmVyYXRlU2VsZWN0b3JUZXh0KCkg
Y29uc3Q7CiAKICAgICBSZWZQdHI8U3R5bGVSdWxlPiBtX3N0eWxlUnVsZTsgICAgCi0KICAgICBt
dXRhYmxlIFJlZlB0cjxTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uPiBtX3Byb3BlcnRpZXND
U1NPTVdyYXBwZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXgg
OTdiMTkxOC4uMGViYmUyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAt
MjYyLDcgKzI2Miw3IEBAIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OnJ1
bGVzKCkKICAgICB1bnNpZ25lZCBydWxlQ291bnQgPSBsZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcnVsZUNvdW50OyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogcnVsZSA9
IGl0ZW0oaSk7Ci0gICAgICAgIGlmIChydWxlLT5pc0NoYXJzZXRSdWxlKCkpCisgICAgICAgIGlm
IChydWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6Q0hBUlNFVF9SVUxFKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIG5vbkNoYXJzZXRSdWxlcy0+cnVsZXMoKS5hcHBlbmQocnVsZSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Vua25vd25SdWxlLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaAppbmRleCAzMGQ0YzVhLi4zZmZmYWEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTVW5rbm93blJ1bGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNiwgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDEyICsyOSwxNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENTU1Vua25vd25SdWxlIDogcHVibGljIENTU1J1bGUgewogcHVibGlj
OgotICAgIENTU1Vua25vd25SdWxlKCkgOiBDU1NSdWxlKDAsIENTU1J1bGU6OlVOS05PV05fUlVM
RSkgeyB9CisgICAgQ1NTVW5rbm93blJ1bGUoKSA6IENTU1J1bGUoMCkgeyB9CisgICAgdmlydHVh
bCB+Q1NTVW5rbm93blJ1bGUoKSB7IH0KIAotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgdmly
dHVhbCBDU1NSdWxlOjpUeXBlIHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBVTktOT1dO
X1JVTEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREUgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFz
ZSopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdCBPVkVSUklERQogICAgIHsKICAg
ICAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29y
ZU1lbW9yeVR5cGVzOjpDU1MpOwotICAgICAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1v
cnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKKyAgICAgICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5
VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgfQogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCmluZGV4IDA3NjcwNDEuLjdhMzBhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKQEAgLTI1NTksMTUgKzI1NTksMTUgQEAgc3RhdGljIHZvaWQgY29sbGVj
dENTU09NV3JhcHBlcnMoSGFzaE1hcDxTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+
JiB3cmEKICAgICB1bnNpZ25lZCBzaXplID0gbGlzdFR5cGUtPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogY3NzUnVs
ZSA9IGxpc3RUeXBlLT5pdGVtKGkpOwotICAgICAgICBpZiAoY3NzUnVsZS0+aXNJbXBvcnRSdWxl
KCkpCisgICAgICAgIGlmIChjc3NSdWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6SU1QT1JUX1JVTEUp
CiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFwcGVyTWFwLCBzdGF0aWNfY2Fz
dDxDU1NJbXBvcnRSdWxlKj4oY3NzUnVsZSktPnN0eWxlU2hlZXQoKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNzc1J1bGUtPmlzTWVkaWFSdWxlKCkpCisgICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPnR5
cGUoKSA9PSBDU1NSdWxlOjpNRURJQV9SVUxFKQogICAgICAgICAgICAgY29sbGVjdENTU09NV3Jh
cHBlcnMod3JhcHBlck1hcCwgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4oY3NzUnVsZSkpOwog
I2lmIEVOQUJMRShDU1NfUkVHSU9OUykKLSAgICAgICAgZWxzZSBpZiAoY3NzUnVsZS0+aXNSZWdp
b25SdWxlKCkpCisgICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpX
RUJLSVRfUkVHSU9OX1JVTEUpCiAgICAgICAgICAgICBjb2xsZWN0Q1NTT01XcmFwcGVycyh3cmFw
cGVyTWFwLCBzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxlKj4oY3NzUnVsZSkpOwogI2Vu
ZGlmCi0gICAgICAgIGVsc2UgaWYgKGNzc1J1bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAg
ZWxzZSBpZiAoY3NzUnVsZS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKICAgICAg
ICAgICAgIENTU1N0eWxlUnVsZSogY3NzU3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4oY3NzUnVsZSk7CiAgICAgICAgICAgICB3cmFwcGVyTWFwLmFkZChjc3NTdHlsZVJ1bGUt
PnN0eWxlUnVsZSgpLCBjc3NTdHlsZVJ1bGUpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCmluZGV4IDhhY2I1NDkuLjM2ZjVjMDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNyw4ICsyNyw2IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCiAK
ICNpbmNsdWRlICJQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2V0LmgiCi0jaW5jbHVkZSAiV2ViQ29yZU1lbW9yeUluc3RydW1lbnRhdGlv
bi5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKQEAgLTk3LDcgKzk1LDcgQEAgdm9pZCBTdHlsZUtleWZy
YW1lOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAogfQogCiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OldlYktpdENTU0tleWZyYW1lUnVs
ZShTdHlsZUtleWZyYW1lKiBrZXlmcmFtZSwgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcGFyZW50
KQotICAgIDogQ1NTUnVsZSgwLCBDU1NSdWxlOjpXRUJLSVRfS0VZRlJBTUVfUlVMRSkKKyAgICA6
IENTU1J1bGUoMCkKICAgICAsIG1fa2V5ZnJhbWUoa2V5ZnJhbWUpCiB7CiAgICAgc2V0UGFyZW50
UnVsZShwYXJlbnQpOwpAQCAtMTE2LDEyICsxMTQsMTggQEAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fcHJvcGVy
dGllc0NTU09NV3JhcHBlci5nZXQoKTsKIH0KIAotdm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmpl
Y3RJbmZvKSBjb25zdAordm9pZCBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiB7CiAgICAgTWVt
b3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5
cGVzOjpDU1MpOwotICAgIENTU1J1bGU6OnJlcG9ydEJhc2VDbGFzc01lbW9yeVVzYWdlKG1lbW9y
eU9iamVjdEluZm8pOworICAgIENTU1J1bGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVj
dEluZm8pOwogICAgIGluZm8uYWRkTWVtYmVyKG1fa2V5ZnJhbWUpOwogICAgIGluZm8uYWRkTWVt
YmVyKG1fcHJvcGVydGllc0NTU09NV3JhcHBlcik7CiB9CiAKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikKK3sKKyAgICAvLyBObyBuZWVkIHRvIHJl
YXR0YWNoLCB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHNoYXJlYWJsZSBvbiBtdXRhdGlvbi4KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5oCmluZGV4IGQ4MTc3NjQuLmZj
Mzg5OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI3LDEwICsyNyw3IEBACiAjZGVmaW5lIFdlYktpdENTU0tleWZyYW1lUnVsZV9o
CiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTZXQuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03MSwy
MiArNjgsMjIgQEAgcHJpdmF0ZToKIAogY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgotICAgIH5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKTsKKyAg
ICB2aXJ0dWFsIH5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKTsKKworICAgIHZpcnR1YWwgQ1NTUnVs
ZTo6VHlwZSB0eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FX1JV
TEU7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9rZXlmcmFtZS0+Y3NzVGV4dCgpOyB9CisgICAgdmlydHVhbCB2b2lkIHJlYXR0YWNoKFN0
eWxlUnVsZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJSSURFOwogCiAgICAgU3RyaW5nIGtleVRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lLT5rZXlUZXh0KCk7IH0KICAgICB2b2lkIHNl
dEtleVRleHQoY29uc3QgU3RyaW5nJiBzKSB7IG1fa2V5ZnJhbWUtPnNldEtleVRleHQocyk7IH0K
IAogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3Q7CiAKLSAgICBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWUtPmNzc1RleHQoKTsgfQotCi0gICAg
dm9pZCByZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0
OwotCiBwcml2YXRlOgogICAgIFdlYktpdENTU0tleWZyYW1lUnVsZShTdHlsZUtleWZyYW1lKiwg
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcGFyZW50KTsKIAogICAgIFJlZlB0cjxTdHlsZUtleWZy
YW1lPiBtX2tleWZyYW1lOwotICAgIAogICAgIG11dGFibGUgUmVmUHRyPFN0eWxlUnVsZUNTU1N0
eWxlRGVjbGFyYXRpb24+IG1fcHJvcGVydGllc0NTU09NV3JhcHBlcjsKICAgICAKICAgICBmcmll
bmQgY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAppbmRleCAwOGZiYjBhLi4xNDA2ZmVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIlN0
eWxlUHJvcGVydHlTZXQuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZU1lbW9yeUluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1l
UnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBAIC05Niw3ICs5NSw3IEBAIHZvaWQg
U3R5bGVSdWxlS2V5ZnJhbWVzOjpyZXBvcnREZXNjZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqCiB9CiAKIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OldlYktpdENT
U0tleWZyYW1lc1J1bGUoU3R5bGVSdWxlS2V5ZnJhbWVzKiBrZXlmcmFtZXNSdWxlLCBDU1NTdHls
ZVNoZWV0KiBwYXJlbnQpCi0gICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVsZTo6V0VCS0lUX0tF
WUZSQU1FU19SVUxFKQorICAgIDogQ1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX2tleWZyYW1lc1J1
bGUoa2V5ZnJhbWVzUnVsZSkKICAgICAsIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycyhrZXlmcmFt
ZXNSdWxlLT5rZXlmcmFtZXMoKS5zaXplKCkpCiB7CkBAIC0yMDEsMTYgKzIwMCwxNyBAQCBDU1NS
dWxlTGlzdCogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3NzUnVsZXMoKQogICAgIHJldHVybiBt
X3J1bGVMaXN0Q1NTT01XcmFwcGVyLmdldCgpOwogfQogCi12b2lkIFdlYktpdENTU0tleWZyYW1l
c1J1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZUtleWZyYW1lcyogcnVsZSkKK3ZvaWQgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlQmFzZSogcnVsZSkKIHsKICAgICBBU1NF
UlQocnVsZSk7Ci0gICAgbV9rZXlmcmFtZXNSdWxlID0gcnVsZTsKKyAgICBBU1NFUlQocnVsZS0+
aXNLZXlmcmFtZXNSdWxlKCkpOworICAgIG1fa2V5ZnJhbWVzUnVsZSA9IHN0YXRpY19jYXN0PFN0
eWxlUnVsZUtleWZyYW1lcyo+KHJ1bGUpOwogfQogCi12b2lkIFdlYktpdENTU0tleWZyYW1lc1J1
bGU6OnJlcG9ydERlc2NlbmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpyZXBvcnRNZW1v
cnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogewogICAg
IE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1v
cnlUeXBlczo6Q1NTKTsKLSAgICBDU1NSdWxlOjpyZXBvcnRCYXNlQ2xhc3NNZW1vcnlVc2FnZSht
ZW1vcnlPYmplY3RJbmZvKTsKKyAgICBDU1NSdWxlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlP
YmplY3RJbmZvKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2tleWZyYW1lc1J1bGUpOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycyk7CiAgICAgaW5mby5hZGRNZW1i
ZXIobV9ydWxlTGlzdENTU09NV3JhcHBlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lc1J1bGUuaAppbmRleCAwNGJlYzdmLi40ZmVhNzBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDEwICsyNyw4
IEBACiAjZGVmaW5lIFdlYktpdENTU0tleWZyYW1lc1J1bGVfaAogCiAjaW5jbHVkZSAiQ1NTUnVs
ZS5oIgotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTdHlsZVJ1bGUuaCIK
ICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NzIsNyArNzAsMTIgQEAgY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSA6IHB1YmxpYyBDU1NS
dWxlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlPiBjcmVhdGUoU3R5bGVSdWxlS2V5ZnJhbWVzKiBydWxlLCBDU1NTdHlsZVNoZWV0KiBzaGVl
dCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdlYktpdENTU0tleWZyYW1lc1J1bGUocnVsZSwgc2hl
ZXQpKTsgfQogCi0gICAgfldlYktpdENTU0tleWZyYW1lc1J1bGUoKTsKKyAgICB2aXJ0dWFsIH5X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlKCk7CisKKyAgICB2aXJ0dWFsIENTU1J1bGU6OlR5cGUgdHlw
ZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFdFQktJVF9LRVlGUkFNRVNfUlVMRTsgfQorICAg
IHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBy
ZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3QgT1ZFUlJJREU7CiAKICAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzUnVsZS0+bmFtZSgpOyB9
CiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYpOwpAQCAtODMsMjEgKzg2LDE0IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRlbGV0ZVJ1bGUoY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIFdlYktp
dENTU0tleWZyYW1lUnVsZSogZmluZFJ1bGUoY29uc3QgU3RyaW5nJiBrZXkpOwogCi0gICAgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKLQogICAgIC8vIEZvciBJbmRleGVkR2V0dGVyIGFuZCBDU1NS
dWxlTGlzdC4KICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCi0gICAgdm9pZCByZWF0dGFj
aChTdHlsZVJ1bGVLZXlmcmFtZXMqKTsKLQotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKLQogcHJpdmF0ZToKICAgICBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKFN0eWxlUnVsZUtleWZyYW1lcyosIENTU1N0eWxlU2hlZXQqIHBhcmVu
dCk7CiAKICAgICBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBtX2tleWZyYW1lc1J1bGU7Ci0K
ICAgICBtdXRhYmxlIFZlY3RvcjxSZWZQdHI8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlPiA+IG1fY2hp
bGRSdWxlQ1NTT01XcmFwcGVyczsKICAgICBtdXRhYmxlIE93blB0cjxDU1NSdWxlTGlzdD4gbV9y
dWxlTGlzdENTU09NV3JhcHBlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVn
aW9uUnVsZS5jcHAKaW5kZXggY2UxMjA3Yy4uNjhkYjk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw3ICs0Miw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIFdlYktpdENTU1JlZ2lvblJ1bGU6OldlYktpdENTU1JlZ2lvblJ1
bGUoU3R5bGVSdWxlUmVnaW9uKiByZWdpb25SdWxlLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpCi0g
ICAgOiBDU1NSdWxlKHBhcmVudCwgQ1NTUnVsZTo6V0VCS0lUX1JFR0lPTl9SVUxFKQorICAgIDog
Q1NTUnVsZShwYXJlbnQpCiAgICAgLCBtX3JlZ2lvblJ1bGUocmVnaW9uUnVsZSkKICAgICAsIG1f
Y2hpbGRSdWxlQ1NTT01XcmFwcGVycyhyZWdpb25SdWxlLT5jaGlsZFJ1bGVzKCkuc2l6ZSgpKQog
ewpAQCAtOTksMjAgKzEwMCwyMSBAQCBDU1NSdWxlTGlzdCogV2ViS2l0Q1NTUmVnaW9uUnVsZTo6
Y3NzUnVsZXMoKSBjb25zdAogICAgIHJldHVybiBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyLmdldCgp
OwogfQogCi12b2lkIFdlYktpdENTU1JlZ2lvblJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVJlZ2lv
biogcnVsZSkKK3ZvaWQgV2ViS2l0Q1NTUmVnaW9uUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlQmFz
ZSogcnVsZSkKIHsKICAgICBBU1NFUlQocnVsZSk7Ci0gICAgbV9yZWdpb25SdWxlID0gcnVsZTsK
KyAgICBBU1NFUlQocnVsZS0+aXNSZWdpb25SdWxlKCkpOworICAgIG1fcmVnaW9uUnVsZSA9IHN0
YXRpY19jYXN0PFN0eWxlUnVsZVJlZ2lvbio+KHJ1bGUpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
aWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKICAgICAgICAgICAgIG1fY2hpbGRSdWxl
Q1NTT01XcmFwcGVyc1tpXS0+cmVhdHRhY2gobV9yZWdpb25SdWxlLT5jaGlsZFJ1bGVzKClbaV0u
Z2V0KCkpOwogICAgIH0KIH0KIAotdm9pZCBXZWJLaXRDU1NSZWdpb25SdWxlOjpyZXBvcnREZXNj
ZW5kYW50TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29u
c3QKK3ZvaWQgV2ViS2l0Q1NTUmVnaW9uUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2Jq
ZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkNTUyk7Ci0g
ICAgQ1NTUnVsZTo6cmVwb3J0QmFzZUNsYXNzTWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7
CisgICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAg
aW5mby5hZGRNZW1iZXIobV9yZWdpb25SdWxlKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fcnVsZUxpc3RDU1NPTVdy
YXBwZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgKaW5kZXggYzAy
ZjRjNC4uYTY4YmExMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1Jl
Z2lvblJ1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5o
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1z
IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMxLDggKzMyLDYgQEAKICNkZWZpbmUgV2ViS2l0Q1NTUmVnaW9uUnVsZV9o
CiAKICNpbmNsdWRlICJDU1NSdWxlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgRU5B
QkxFKENTU19SRUdJT05TKQpAQCAtNDYsMjQgKzQ1LDIzIEBAIGNsYXNzIFdlYktpdENTU1JlZ2lv
blJ1bGUgOiBwdWJsaWMgQ1NTUnVsZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViS2l0Q1NTUmVnaW9uUnVsZT4gY3JlYXRlKFN0eWxlUnVsZVJlZ2lvbiogcnVsZSwgQ1NTU3R5
bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NSZWdpb25SdWxl
KHJ1bGUsIHNoZWV0KSk7IH0KIAotICAgIH5XZWJLaXRDU1NSZWdpb25SdWxlKCk7CisgICAgdmly
dHVhbCB+V2ViS2l0Q1NTUmVnaW9uUnVsZSgpOworCisgICAgdmlydHVhbCBDU1NSdWxlOjpUeXBl
IHR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBXRUJLSVRfUkVHSU9OX1JVTEU7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2
b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0IE9WRVJSSURFOwogCi0g
ICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKICAgICBDU1NSdWxlTGlzdCogY3NzUnVsZXMoKSBj
b25zdDsKICAgICAKICAgICAvLyBGb3IgQ1NTUnVsZUxpc3QKICAgICB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKICAgICBDU1NSdWxlKiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAotICAg
IHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlUmVnaW9uKik7Ci0KLSAgICB2b2lkIHJlcG9ydERlc2Nl
bmRhbnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7Ci0KIHByaXZhdGU6CiAg
ICAgV2ViS2l0Q1NTUmVnaW9uUnVsZShTdHlsZVJ1bGVSZWdpb24qLCBDU1NTdHlsZVNoZWV0KiBw
YXJlbnQpOwogCiAgICAgUmVmUHRyPFN0eWxlUnVsZVJlZ2lvbj4gbV9yZWdpb25SdWxlOwotICAg
IAogICAgIG11dGFibGUgVmVjdG9yPFJlZlB0cjxDU1NSdWxlPiA+IG1fY2hpbGRSdWxlQ1NTT01X
cmFwcGVyczsKICAgICBtdXRhYmxlIE93blB0cjxDU1NSdWxlTGlzdD4gbV9ydWxlTGlzdENTU09N
V3JhcHBlcjsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NW
aWV3cG9ydFJ1bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVs
ZS5jcHAKaW5kZXggYzgxNWI1Ni4uM2VmOTFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1dlYktpdENTU1ZpZXdwb3J0UnVsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU1ZpZXdwb3J0UnVsZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDIsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBXZWJLaXRDU1NWaWV3cG9ydFJ1bGU6OldlYktpdENTU1ZpZXdwb3J0UnVsZShTdHls
ZVJ1bGVWaWV3cG9ydCogdmlld3BvcnRSdWxlLCBDU1NTdHlsZVNoZWV0KiBzaGVldCkKLSAgICA6
IENTU1J1bGUoc2hlZXQsIENTU1J1bGU6OldFQktJVF9WSUVXUE9SVF9SVUxFKQorICAgIDogQ1NT
UnVsZShzaGVldCkKICAgICAsIG1fdmlld3BvcnRSdWxlKHZpZXdwb3J0UnVsZSkKIHsKIH0KQEAg
LTc1LDE5ICs3NiwyMCBAQCBTdHJpbmcgV2ViS2l0Q1NTVmlld3BvcnRSdWxlOjpjc3NUZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViS2l0Q1NT
Vmlld3BvcnRSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVWaWV3cG9ydCogcnVsZSkKK3ZvaWQgV2Vi
S2l0Q1NTVmlld3BvcnRSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQogewogICAg
IEFTU0VSVChydWxlKTsKLSAgICBtX3ZpZXdwb3J0UnVsZSA9IHJ1bGU7CisgICAgQVNTRVJUKHJ1
bGUtPmlzVmlld3BvcnRSdWxlKCkpOworICAgIG1fdmlld3BvcnRSdWxlID0gc3RhdGljX2Nhc3Q8
U3R5bGVSdWxlVmlld3BvcnQqPihydWxlKTsKIAogICAgIGlmIChtX3Byb3BlcnRpZXNDU1NPTVdy
YXBwZXIpCiAgICAgICAgIG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRhY2gobV92aWV3
cG9ydFJ1bGUtPm11dGFibGVQcm9wZXJ0aWVzKCkpOwogfQogCi12b2lkIFdlYktpdENTU1ZpZXdw
b3J0UnVsZTo6cmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluZm8pIGNvbnN0Cit2b2lkIFdlYktpdENTU1ZpZXdwb3J0UnVsZTo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsK
ICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3Jl
TWVtb3J5VHlwZXM6OkNTUyk7Ci0gICAgQ1NTUnVsZTo6cmVwb3J0QmFzZUNsYXNzTWVtb3J5VXNh
Z2UobWVtb3J5T2JqZWN0SW5mbyk7CisgICAgQ1NTUnVsZTo6cmVwb3J0TWVtb3J5VXNhZ2UobWVt
b3J5T2JqZWN0SW5mbyk7CiAgICAgaW5mby5hZGRNZW1iZXIobV92aWV3cG9ydFJ1bGUpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1fcHJvcGVydGllc0NTU09NV3JhcHBlcik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTVmlld3BvcnRSdWxlLmgKaW5kZXggZThhMjdkMS4uM2U2Yjc3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1ZpZXdwb3J0UnVsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NWaWV3cG9ydFJ1bGUuaApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw4ICsz
NCw2IEBACiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKIAogI2luY2x1ZGUgIkNT
U1J1bGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCwxOSArNDksMTcgQEAgcHVibGlj
OgogICAgIH0KICAgICB+V2ViS2l0Q1NTVmlld3BvcnRSdWxlKCk7CiAKLSAgICBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0OwotCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsK
LQotICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlVmlld3BvcnQqKTsKKyAgICB2aXJ0dWFsIENT
U1J1bGU6OlR5cGUgdHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFdFQktJVF9WSUVXUE9S
VF9SVUxFOyB9CisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCByZWF0dGFjaChTdHlsZVJ1bGVCYXNlKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBP
VkVSUklERTsKIAotICAgIHZvaWQgcmVwb3J0RGVzY2VuZGFudE1lbW9yeVVzYWdlKE1lbW9yeU9i
amVjdEluZm8qKSBjb25zdDsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIFdlYktpdENTU1ZpZXdwb3J0UnVsZShTdHlsZVJ1bGVWaWV3cG9y
dCosIENTU1N0eWxlU2hlZXQqKTsKIAogICAgIFJlZlB0cjxTdHlsZVJ1bGVWaWV3cG9ydD4gbV92
aWV3cG9ydFJ1bGU7Ci0KICAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVJ1bGVDU1NTdHlsZURlY2xh
cmF0aW9uPiBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXI7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA3ZDgwZTVhLi43NzUwNjNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAK
QEAgLTUxOCw3ICs1MTgsNyBAQCBwcml2YXRlOgogLy8gc3RhdGljCiBDU1NTdHlsZVJ1bGUqIElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShDU1NSdWxlKiBydWxlKQogewotICAgIGlm
ICghcnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICBpZiAocnVsZS0+dHlwZSgpICE9IENTU1J1bGU6
OlNUWUxFX1JVTEUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxD
U1NTdHlsZVJ1bGUqPihydWxlKTsKIH0KQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
LCBUeXBlQnVpbGRlCiAgICAgcmVzdWx0LT5hZGRJdGVtKGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
c2l6ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIENT
U1J1bGUqIHJ1bGUgPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwotICAgICAgICBpZiAocnVsZS0+aXNJ
bXBvcnRSdWxlKCkpIHsKKyAgICAgICAgaWYgKHJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpJTVBP
UlRfUlVMRSkgewogICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogaW1wb3J0ZWRTdHlsZVNoZWV0
ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpLT5zdHlsZVNoZWV0KCk7CiAgICAg
ICAgICAgICBpZiAoaW1wb3J0ZWRTdHlsZVNoZWV0KQogICAgICAgICAgICAgICAgIGNvbGxlY3RT
dHlsZVNoZWV0cyhpbXBvcnRlZFN0eWxlU2hlZXQsIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggMzJjYmU3Ni4uZWFi
MmViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1J1bGVMaXN0
PiBhc0NTU1J1bGVMaXN0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCiAgICAgVmVjdG9yPFJl
ZlB0cjxDU1NSdWxlPiA+JiBsaXN0UnVsZXMgPSBsaXN0LT5ydWxlcygpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDAsIHNpemUgPSBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkg
ewogICAgICAgICBDU1NSdWxlKiBpdGVtID0gc3R5bGVTaGVldC0+aXRlbShpKTsKLSAgICAgICAg
aWYgKGl0ZW0tPmlzQ2hhcnNldFJ1bGUoKSkKKyAgICAgICAgaWYgKGl0ZW0tPnR5cGUoKSA9PSBD
U1NSdWxlOjpDSEFSU0VUX1JVTEUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbGlz
dFJ1bGVzLmFwcGVuZChpdGVtKTsKICAgICB9CkBAIC0yMDIsMTAgKzIwMiwxMCBAQCBzdGF0aWMg
UGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxlKQogICAg
IGlmICghcnVsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAocnVsZS0+aXNNZWRpYVJ1
bGUoKSkKKyAgICBpZiAocnVsZS0+dHlwZSgpID09IENTU1J1bGU6Ok1FRElBX1JVTEUpCiAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsK
IAotICAgIGlmIChydWxlLT5pc0tleWZyYW1lc1J1bGUoKSkKKyAgICBpZiAocnVsZS0+dHlwZSgp
ID09IENTU1J1bGU6OldFQktJVF9LRVlGUkFNRVNfUlVMRSkKICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihydWxlKS0+Y3NzUnVsZXMoKTsKIAogICAg
IHJldHVybiAwOwpAQCAtMjE5LDExICsyMTksMTEgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlz
dENoYWluKENTU1J1bGUqIHJ1bGUsIEFycmF5PFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPioK
ICAgICB3aGlsZSAocGFyZW50UnVsZSkgewogICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRT
dHlsZVNoZWV0ID0gMDsKICAgICAgICAgYm9vbCBpc01lZGlhUnVsZSA9IHRydWU7Ci0gICAgICAg
IGlmIChwYXJlbnRSdWxlLT5pc01lZGlhUnVsZSgpKSB7CisgICAgICAgIGlmIChwYXJlbnRSdWxl
LT50eXBlKCkgPT0gQ1NTUnVsZTo6TUVESUFfUlVMRSkgewogICAgICAgICAgICAgQ1NTTWVkaWFS
dWxlKiBtZWRpYVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihwYXJlbnRSdWxlKTsK
ICAgICAgICAgICAgIG1lZGlhTGlzdCA9IG1lZGlhUnVsZS0+bWVkaWEoKTsKICAgICAgICAgICAg
IHBhcmVudFN0eWxlU2hlZXQgPSBtZWRpYVJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChwYXJlbnRSdWxlLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICB9IGVs
c2UgaWYgKHBhcmVudFJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpJTVBPUlRfUlVMRSkgewogICAg
ICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19jYXN0PENTU0ltcG9y
dFJ1bGUqPihwYXJlbnRSdWxlKTsKICAgICAgICAgICAgIG1lZGlhTGlzdCA9IGltcG9ydFJ1bGUt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBwYXJlbnRTdHlsZVNoZWV0ID0gaW1wb3J0UnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAppbmRl
eCAxOTU1NTA3Li42M2RiZDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cApAQCAtMjY2LDE2ICsyNjYsMTYgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NT
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBLVVIKICAgICAgICAg
fQogICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50
KCk7CiAgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRo
IHRoZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgotICAgICAgICBpZiAocnVsZS0+aXNJbXBv
cnRSdWxlKCkpIHsKKyAgICAgICAgaWYgKHJ1bGUtPnR5cGUoKSA9PSBDU1NSdWxlOjpJTVBPUlRf
UlVMRSkgewogICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19j
YXN0PENTU0ltcG9ydFJ1bGUqPihydWxlKTsKICAgICAgICAgICAgIEtVUkwgaW1wb3J0VVJMID0g
ZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CiAgICAgICAgICAgICBp
ZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOwotICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzRm9u
dEZhY2VSdWxlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT50eXBlKCkgPT0gQ1NTUnVs
ZTo6Rk9OVF9GQUNFX1JVTEUpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlm
IHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgogICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVk
IGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCi0gICAgICAgIH0gZWxzZSBpZiAocnVs
ZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT50eXBlKCkgPT0gQ1NT
UnVsZTo6U1RZTEVfUlVMRSkKICAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yUnVsZShz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKS0+c3R5bGVSdWxlKCksIGRvY3VtZW50KTsK
ICAgICB9CiAK
</data>
<flag name="review"
          id="191051"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>