<?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>156153</bug_id>
          
          <creation_ts>2016-04-03 22:17:04 -0700</creation_ts>
          <short_desc>Add SPI to allow install script message handlers in isolated worlds</short_desc>
          <delta_ts>2016-04-04 16:40:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jh718.park</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1180271</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-04-03 22:17:04 -0700</bug_when>
    <thetext>Add SPI to allow install script message handlers in isolated worlds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180275</commentid>
    <comment_count>1</comment_count>
      <attachid>275530</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-04-03 22:37:46 -0700</bug_when>
    <thetext>Created attachment 275530
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180278</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-03 22:39:40 -0700</bug_when>
    <thetext>Attachment 275530 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/UserContent/WebScriptMessageHandler.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebKit2/WebProcess/UserContent/WebUserContentController.cpp:310:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:132:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:134:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:137:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebKit2Cocoa/UserContentController.mm:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 10 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180392</commentid>
    <comment_count>3</comment_count>
      <attachid>275530</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2016-04-04 09:46:11 -0700</bug_when>
    <thetext>Comment on attachment 275530
Patch

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

&gt; Source/WebCore/page/UserMessageHandlersNamespace.cpp:53
&gt; +    decltype(m_messageHandlers) oldMap = WTFMove(m_messageHandlers);

auto oldMap =

&gt; Source/WebKit2/UIProcess/UserContent/WebScriptMessageHandler.h:40
&gt; +    class UserContentWorld;

Don&apos;t indent this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180486</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-04-04 14:03:21 -0700</bug_when>
    <thetext>Committed r199020: &lt;http://trac.webkit.org/changeset/199020&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1180572</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-04-04 16:40:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Committed r199020: &lt;http://trac.webkit.org/changeset/199020&gt;

This broke the GTK+ build:

https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Build%29/builds/68074/steps/compile-webkit/logs/stdio/text</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275530</attachid>
            <date>2016-04-03 22:37:46 -0700</date>
            <delta_ts>2016-04-04 09:46:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156153-20160403223825.patch</filename>
            <type>text/plain</type>
            <size>67943</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkyIEBACisyMDE2LTA0LTAzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFNQSSB0byBhbGxvdyBpbnN0YWxs
IHNjcmlwdCBtZXNzYWdlIGhhbmRsZXJzIGluIGlzb2xhdGVkIHdvcmxkcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MTUzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgQVBJIFRlc3Q6IFdLVXNl
ckNvbnRlbnRDb250cm9sbGVyLlNjcmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0SXNvbGF0ZWRX
b3JsZAorCisgICAgICAgIC0gQ2hhbmdlcyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBtZXRob2QgaW4g
VXNlckNvbnRlbnRQcm92aWRlciB0byBnZXQgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMK
KyAgICAgICAgICB0byBtYXRjaCB0aGF0IG9mIFVzZXJTY3JpcHRzIGFuZCBVc2VyU3R5bGVTaGVl
dHMuCisgICAgICAgIC0gUmVtb3ZlcyB0aGUgbmVlZCBmb3IgVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcjo6Q2xpZW50IGJ5IG1ha2luZyBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yCisg
ICAgICAgICAgZGlyZWN0bHkgc3ViY2xhc3NhYmxlLgorICAgICAgICAtIENoYW5nZXMgaW52YWxp
ZGF0aW9uIG1vZGVsIG9mIFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UgdG8gYmUgbW9yZSBk
aXJlY3QgYnkgYWxsb3dpbmcgaXQgdG8KKyAgICAgICAgICByZWdpc3RlciBmb3IgaW52YWxpZGF0
aW9uIG5vdGlmaWNhdGlvbnMsIHJhdGhlciB0aGFuIGFsd2F5cyBjaGVja2luZyBpZiBoYW5kbGVy
IGhhcyBiZWVuIHJlbW92ZWQKKyAgICAgICAgICBvbiBlYWNoIGludm9jYXRpb24uCisKKyAgICAg
ICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmNwcDoKKyAgICAgICAgVXBkYXRlIGZvciBuZXcgc2ln
bmF0dXJlLgorCisgICAgICAgICogcGFnZS9ET01XaW5kb3cuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RE9NV2luZG93OjpzaG91bGRIYXZlV2ViS2l0TmFtZXNwYWNlRm9yV29ybGQpOgorICAgICAg
ICBTd2l0Y2ggdG8gdXNpbmcgZm9yRWFjaFVzZXJNZXNzYWdlSGFuZGxlci4KKworICAgICAgICAo
V2ViQ29yZTo6RE9NV2luZG93Ojp3ZWJraXROYW1lc3BhY2UpOgorICAgICAgICBQYXNzIHRoZSBV
c2VyQ29udGVudFByb3ZpZGVyIHRvIHRoZSBuYW1lc3BhY2Ugb24gY3JlYXRpb24sIHNvIHRoZSBV
c2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlCisgICAgICAgIGNhbiB1c2UgaXQgdG8gcmVnaXN0
ZXIgdG8gbGlzdGVuIGZvciBVc2VyTWVzc2FnZUhhbmRsZXIgY2hhbmdlcy4KKworICAgICAgICAq
IHBhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmg6CisgICAgICAgICogcGFnZS9Vc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVy
Ojpmb3JFYWNoVXNlclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRD
b250cm9sbGVyOjpmb3JFYWNoVXNlck1lc3NhZ2VIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyk6CisgICAgICAg
IChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlck1lc3NhZ2VI
YW5kbGVyRGVzY3JpcHRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVu
dENvbnRyb2xsZXI6OnJlbW92ZVVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyQ29udGVu
dEV4dGVuc2lvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudENvbnRy
b2xsZXI6OnJlbW92ZVVzZXJDb250ZW50RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlckNvbnRlbnRFeHRlbnNp
b25zKTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlZCB1bnVzZWQgZnVuY3Rpb25zLCBhbGwgdGhl
IFVzZXJNZXNzYWdlSGFuZGxlciBhbmQgVXNlckNvbnRlbnRFeHRlbnNpb24gb25lcy4gVXNlckNv
bnRlbnRDb250cm9sbGVyCisgICAgICAgIGlzIG9ubHkgdXNlZCBmb3IgTGVnYWN5IFdlYktpdCB3
aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgbm90IGV4cG9zZWQuCisKKyAgICAgICAgKiBwYWdlL1Vz
ZXJDb250ZW50UHJvdmlkZXIuaDoKKyAgICAgICAgKiBwYWdlL1VzZXJDb250ZW50UHJvdmlkZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlcjo6cmVnaXN0ZXJGb3JV
c2VyTWVzc2FnZUhhbmRsZXJJbnZhbGlkYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6VXNlckNv
bnRlbnRQcm92aWRlcjo6dW5yZWdpc3RlckZvclVzZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyQ29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlQWxs
UmVnaXN0ZXJlZFVzZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbkNsaWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlckludmFsaWRhdGlvbkNsaWVudDo6flVzZXJD
b250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQpOgorICAgICAgICBVcGRhdGUgc2lnbmF0
dXJlIGZvciBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yIGFjY2VzcyB0byBtYXRjaCBVc2Vy
U2NyaXB0IGFuZCBVc2VyU3R5bGVTaGVldC4KKyAgICAgICAgQWRkcyBleHBsaWNpdCBpbnZhbGlk
YXRpb24gZm9yIFVzZXJNZXNzYWdlSGFuZGxlcnMuCisKKyAgICAgICAgKiBwYWdlL1VzZXJNZXNz
YWdlSGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXI6OlVz
ZXJNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXI6
OnBvc3RNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcjo6bmFt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXI6Ondvcmxk
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL1VzZXJNZXNzYWdlSGFuZGxlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyOjpkZXNjcmlwdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcjo6aW52YWxpZGF0ZURlc2NyaXB0b3IpOgorICAgICAg
ICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6
On5Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJN
ZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6d29ybGQpOgorICAgICAgICAqIHBhZ2UvVXNlck1lc3Nh
Z2VIYW5kbGVyRGVzY3JpcHRvci5oOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcjo6Q2xpZW50Ojp+Q2xpZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpjbGllbnQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6aW52
YWxpZGF0ZUNsaWVudCk6IERlbGV0ZWQuCisgICAgICAgIFNpbXBsaWZ5IGJ5IHJlbW92aW5nIHRo
ZSBDbGllbnQuIE5vdywgd2hlbiB0aGUgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciBpcyBu
byBsb25nZXIKKyAgICAgICAgYWN0aXZlLCBpdCBnZXRzIG51bGxlZCBvdXQgaW4gdGhlIFVzZXJN
ZXNzYWdlSGFuZGxlci4KKworICAgICAgICAqIHBhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVz
cGFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNl
OjpVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlVzZXJN
ZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6On5Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6OmRpZEludmFs
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6
aGFuZGxlcik6CisgICAgICAgICogcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlLmg6
CisgICAgICAgIENoYW5nZSB0aGUgbG9naWMgdG8gbGlzdGVuIGZvciBpbnZhbGlkYXRpb25zIG9m
IHRoZSBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yIG1hcC4gV2hlbiBpdAorICAgICAgICBp
cyBpbnZhbGlkYXRlZCwgcmUtYnVpbGQgdGhlIG1hcCBvZiBjYWNoZWQgVXNlck1lc3NhZ2VIYW5k
bGVycyBmcm9tIHRoZSBVc2VyQ29udGVudFByb3ZpZGVyLAorICAgICAgICBhbmQgaW52YWxpZGF0
ZSBhbnkgcmVtYWluaW5nIFVzZXJNZXNzYWdlSGFuZGxlcnMgdGhhdCBubyBsb25nZXIgZXhpc3Qg
aW4gdGhlIFVzZXJDb250ZW50UHJvdmlkZXIuCisKKyAgICAgICAgKiBwYWdlL1dlYktpdE5hbWVz
cGFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXROYW1lc3BhY2U6OldlYktpdE5hbWVz
cGFjZSk6CisgICAgICAgICogcGFnZS9XZWJLaXROYW1lc3BhY2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldlYktpdE5hbWVzcGFjZTo6Y3JlYXRlKToKKyAgICAgICAgUGFzcyB0aHJvdWdoIHRoZSBV
c2VyQ29udGVudFByb3ZpZGVyLgorCiAyMDE2LTA0LTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdW5uZWVkZWQgVXNlUG9pbnRlcnNFdmVuRm9yTm9u
TnVsbGFibGVPYmplY3RBcmd1bWVudHMgaW4gV2ViS2l0Q1NTTWF0cml4LmlkbApJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDEsNyArMTAxLDcgQEAgY2xhc3MgRW1wdHlVc2VyQ29udGVudFByb3ZpZGVyIGZpbmFsIDogcAog
ICAgIHZvaWQgZm9yRWFjaFVzZXJTY3JpcHQoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKERPTVdy
YXBwZXJXb3JsZCYsIGNvbnN0IFVzZXJTY3JpcHQmKT4mKSBjb25zdCBvdmVycmlkZSB7IH0KICAg
ICB2b2lkIGZvckVhY2hVc2VyU3R5bGVTaGVldChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29u
c3QgVXNlclN0eWxlU2hlZXQmKT4mKSBjb25zdCBvdmVycmlkZSB7IH0KICNpZiBFTkFCTEUoVVNF
Ul9NRVNTQUdFX0hBTkRMRVJTKQotICAgIGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0
b3JNYXAmIHVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzKCkgY29uc3Qgb3ZlcnJpZGUgeyBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcD4gbWFw
OyByZXR1cm4gbWFwLmdldCgpOyB9CisgICAgdm9pZCBmb3JFYWNoVXNlck1lc3NhZ2VIYW5kbGVy
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yJik+JikgY29uc3Qgb3ZlcnJpZGUgeyB9CiAjZW5kaWYKICNpZiBFTkFCTEUoQ09OVEVOVF9F
WFRFTlNJT05TKQogICAgIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgc3RhdGljIE5ldmVy
RGVzdHJveWVkPENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQ+IGJh
Y2tlbmQ7IHJldHVybiBiYWNrZW5kLmdldCgpOyB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmNwcAkocmV2aXNpb24gMTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjEsMjAgKzc2MSwyNiBAQCBib29sIERPTVdpbmRv
dzo6c2hvdWxkSGF2ZVdlYktpdE5hbWVzcGFjCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBmb3IgKGF1dG8mIGRlc2NyaXB0b3IgOiBwYWdlLT51c2VyQ29udGVu
dFByb3ZpZGVyKCkudXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMoKS52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoJmRlc2NyaXB0b3ItPndvcmxkKCkgPT0gJndvcmxkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGJvb2wgaGFzVXNlck1lc3NhZ2VIYW5kbGVyID0gZmFs
c2U7CisgICAgcGFnZS0+dXNlckNvbnRlbnRQcm92aWRlcigpLmZvckVhY2hVc2VyTWVzc2FnZUhh
bmRsZXIoWyZdKGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3Ip
IHsKKyAgICAgICAgaWYgKCZkZXNjcmlwdG9yLndvcmxkKCkgPT0gJndvcmxkKSB7CisgICAgICAg
ICAgICBoYXNVc2VyTWVzc2FnZUhhbmRsZXIgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGhhc1Vz
ZXJNZXNzYWdlSGFuZGxlcjsKIH0KIAogV2ViS2l0TmFtZXNwYWNlKiBET01XaW5kb3c6OndlYmtp
dE5hbWVzcGFjZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJh
bWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byogcGFnZSA9IG1fZnJhbWUt
PnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
ICghbV93ZWJraXROYW1lc3BhY2UpCi0gICAgICAgIG1fd2Via2l0TmFtZXNwYWNlID0gV2ViS2l0
TmFtZXNwYWNlOjpjcmVhdGUoKm1fZnJhbWUpOworICAgICAgICBtX3dlYmtpdE5hbWVzcGFjZSA9
IFdlYktpdE5hbWVzcGFjZTo6Y3JlYXRlKCptX2ZyYW1lLCBwYWdlLT51c2VyQ29udGVudFByb3Zp
ZGVyKCkpOwogICAgIHJldHVybiBtX3dlYmtpdE5hbWVzcGFjZS5nZXQoKTsKIH0KICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudENvbnRy
b2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsNiBAQAogI2luY2x1ZGUgPHJ1
bnRpbWUvSlNDZWxsSW5saW5lcy5oPgogI2luY2x1ZGUgPHJ1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oPgogCi0jaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSNpbmNsdWRlICJVc2Vy
TWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmgiCi0jZW5kaWYKLQogI2lmIEVOQUJMRShDT05URU5U
X0VYVEVOU0lPTlMpCiAjaW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjZW5k
aWYKQEAgLTcyLDYgKzY4LDEyIEBAIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpmb3JFYWNo
VXNlclMKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQordm9p
ZCBVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2VyTWVzc2FnZUhhbmRsZXIoY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKT4m
KSBjb25zdAoreworfQorI2VuZGlmCisKIHZvaWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRV
c2VyU2NyaXB0KERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIHN0ZDo6dW5pcXVlX3B0cjxVc2VyU2Ny
aXB0PiB1c2VyU2NyaXB0KQogewogICAgIGF1dG8mIHNjcmlwdHNJbldvcmxkID0gbV91c2VyU2Ny
aXB0cy5lbnN1cmUoJndvcmxkLCBbJl0geyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxVc2VyU2Ny
aXB0VmVjdG9yPigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CkBAIC0xNDEsMzUgKzE0Myw2IEBAIHZv
aWQgVXNlckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyU3QKICAgICBpbnZhbGlkYXRlSW5q
ZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKIH0KIAotI2lmIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6
YWRkVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKQotewotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMu
YWRkKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgp
KSwgJmRlc2NyaXB0b3IpOwotfQotCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yKQotewotICAgIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVt
b3ZlKHN0ZDo6bWFrZV9wYWlyKGRlc2NyaXB0b3IubmFtZSgpLCAmZGVzY3JpcHRvci53b3JsZCgp
KSk7Ci19Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCi12b2lkIFVz
ZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lLCBSZWZQdHI8Q29udGVudEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lv
bj4gY29udGVudEV4dGVuc2lvbikKLXsKLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNrZW5kLmFk
ZENvbnRlbnRFeHRlbnNpb24obmFtZSwgY29udGVudEV4dGVuc2lvbik7Ci19Ci0KLXZvaWQgVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVVc2VyQ29udGVudEV4dGVuc2lvbihjb25zdCBTdHJp
bmcmIG5hbWUpCi17Ci0gICAgbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZC5yZW1vdmVDb250ZW50
RXh0ZW5zaW9uKG5hbWUpOwotfQotCi12b2lkIFVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
QWxsVXNlckNvbnRlbnRFeHRlbnNpb25zKCkKLXsKLSAgICBtX2NvbnRlbnRFeHRlbnNpb25CYWNr
ZW5kLnJlbW92ZUFsbENvbnRlbnRFeHRlbnNpb25zKCk7Ci19Ci0jZW5kaWYKLQogdm9pZCBVc2Vy
Q29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbFVzZXJDb250ZW50KCkKIHsKICAgICBtX3VzZXJT
Y3JpcHRzLmNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50Q29u
dHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRD
b250cm9sbGVyLmgJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ckNvbnRlbnRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE3ICs0NSw2IEBAIHB1
YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlQWxsVXNlckNvbnRlbnQoKTsK
IAotI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBhZGRVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3ImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZVVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3IoVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYpOwotI2VuZGlmCi0K
LSNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YWRkVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8Q29udGVu
dEV4dGVuc2lvbnM6OkNvbXBpbGVkQ29udGVudEV4dGVuc2lvbj4pOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVtb3ZlVXNlckNvbnRlbnRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZUFsbFVzZXJDb250ZW50RXh0ZW5zaW9ucygp
OwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAgVXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAKQEAg
LTYzLDcgKzUyLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZvckVhY2hVc2VyU2NyaXB0KGNvbnN0
IHN0ZDo6ZnVuY3Rpb248dm9pZChET01XcmFwcGVyV29ybGQmLCBjb25zdCBVc2VyU2NyaXB0Jik+
JikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBmb3JFYWNoVXNlclN0eWxlU2hlZXQoY29uc3Qg
c3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFVzZXJTdHlsZVNoZWV0Jik+JikgY29uc3Qgb3ZlcnJp
ZGU7CiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBjb25zdCBVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7
IH0KKyAgICB2b2lkIGZvckVhY2hVc2VyTWVzc2FnZUhhbmRsZXIoY29uc3Qgc3RkOjpmdW5jdGlv
bjx2b2lkKGNvbnN0IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKT4mKSBjb25zdCBvdmVy
cmlkZTsKICNlbmRpZgogI2lmIEVOQUJMRShDT05URU5UX0VYVEVOU0lPTlMpCiAgICAgQ29udGVu
dEV4dGVuc2lvbnM6OkNvbnRlbnRFeHRlbnNpb25zQmFja2VuZCYgdXNlckNvbnRlbnRFeHRlbnNp
b25CYWNrZW5kKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9jb250ZW50RXh0ZW5zaW9uQmFja2VuZDsg
fQpAQCAtNzEsOSArNjAsNiBAQCBwcml2YXRlOgogCiAgICAgVXNlclNjcmlwdE1hcCBtX3VzZXJT
Y3JpcHRzOwogICAgIFVzZXJTdHlsZVNoZWV0TWFwIG1fdXNlclN0eWxlU2hlZXRzOwotI2lmIEVO
QUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzOwotI2VuZGlmCiAjaWYgRU5B
QkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBDb250ZW50RXh0ZW5zaW9uczo6Q29udGVudEV4
dGVuc2lvbnNCYWNrZW5kIG1fY29udGVudEV4dGVuc2lvbkJhY2tlbmQ7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlckNvbnRlbnRQcm92aWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcAkocmV2aXNpb24g
MTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMjYgQEAgdm9pZCBVc2VyQ29udGVudFByb3ZpZGVy
OjpyZW1vdmVQYWdlKFBhZwogICAgIG1fcGFnZXMucmVtb3ZlKCZwYWdlKTsKIH0KIAordm9pZCBV
c2VyQ29udGVudFByb3ZpZGVyOjpyZWdpc3RlckZvclVzZXJNZXNzYWdlSGFuZGxlckludmFsaWRh
dGlvbihVc2VyQ29udGVudFByb3ZpZGVySW52YWxpZGF0aW9uQ2xpZW50JiBpbnZhbGlkYXRpb25D
bGllbnQpCit7CisgICAgQVNTRVJUKCFtX3VzZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbkNs
aWVudHMuY29udGFpbnMoJmludmFsaWRhdGlvbkNsaWVudCkpOworCisgICAgbV91c2VyTWVzc2Fn
ZUhhbmRsZXJJbnZhbGlkYXRpb25DbGllbnRzLmFkZCgmaW52YWxpZGF0aW9uQ2xpZW50KTsKK30K
Kwordm9pZCBVc2VyQ29udGVudFByb3ZpZGVyOjp1bnJlZ2lzdGVyRm9yVXNlck1lc3NhZ2VIYW5k
bGVySW52YWxpZGF0aW9uKFVzZXJDb250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQmIGlu
dmFsaWRhdGlvbkNsaWVudCkKK3sKKyAgICBBU1NFUlQobV91c2VyTWVzc2FnZUhhbmRsZXJJbnZh
bGlkYXRpb25DbGllbnRzLmNvbnRhaW5zKCZpbnZhbGlkYXRpb25DbGllbnQpKTsKKworICAgIG1f
dXNlck1lc3NhZ2VIYW5kbGVySW52YWxpZGF0aW9uQ2xpZW50cy5yZW1vdmUoJmludmFsaWRhdGlv
bkNsaWVudCk7Cit9CisKK3ZvaWQgVXNlckNvbnRlbnRQcm92aWRlcjo6aW52YWxpZGF0ZUFsbFJl
Z2lzdGVyZWRVc2VyTWVzc2FnZUhhbmRsZXJJbnZhbGlkYXRpb25DbGllbnRzKCkKK3sKKyAgICBm
b3IgKGF1dG8mIGNsaWVudCA6IG1fdXNlck1lc3NhZ2VIYW5kbGVySW52YWxpZGF0aW9uQ2xpZW50
cykKKyAgICAgICAgY2xpZW50LT5kaWRJbnZhbGlkYXRlKCp0aGlzKTsKK30KKwogdm9pZCBVc2Vy
Q29udGVudFByb3ZpZGVyOjppbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMoKQogewogICAgIGZvciAoYXV0byYgcGFnZSA6IG1fcGFnZXMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJDb250ZW50UHJvdmlkZXIuaAkocmV2aXNpb24gMTk4
OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyQ29udGVudFByb3ZpZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDE3IEBAIGNsYXNzIENvbnRlbnRFeHRlbnNpb25zQmFja2Vu
ZDsKIHN0cnVjdCBBY3Rpb247CiB9CiAKK2NsYXNzIFVzZXJDb250ZW50UHJvdmlkZXI7CisKK2Ns
YXNzIFVzZXJDb250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQgeworcHVibGljOgorICAg
IHZpcnR1YWwgflVzZXJDb250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGRpZEludmFsaWRhdGUoVXNlckNvbnRlbnRQ
cm92aWRlciYpID0gMDsKK307CisKIGNsYXNzIFVzZXJDb250ZW50UHJvdmlkZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxVc2VyQ29udGVudFByb3ZpZGVyPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgVXNlckNvbnRlbnRQcm92aWRlcigpOwpAQCAtNjUsMTkgKzc2LDE5IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoRE9NV3JhcHBlcldvcmxkJiwgY29uc3QgVXNlclNjcmlwdCYpPiYpIGNvbnN0ID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBVc2VyU3R5bGVTaGVldCYpPiYpIGNvbnN0ID0gMDsKLQogI2lmIEVOQUJM
RShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgdmlydHVhbCBjb25zdCBVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yTWFwJiB1c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9ycygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaFVzZXJNZXNzYWdlSGFuZGxlcihjb25zdCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYpPiYp
IGNvbnN0ID0gMDsKICNlbmRpZgotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAg
ICB2aXJ0dWFsIENvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQmIHVz
ZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpID0gMDsKICNlbmRpZgogCisgICAgdm9pZCByZWdp
c3RlckZvclVzZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbihVc2VyQ29udGVudFByb3ZpZGVy
SW52YWxpZGF0aW9uQ2xpZW50Jik7CisgICAgdm9pZCB1bnJlZ2lzdGVyRm9yVXNlck1lc3NhZ2VI
YW5kbGVySW52YWxpZGF0aW9uKFVzZXJDb250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQm
KTsKKwogICAgIHZvaWQgYWRkUGFnZShQYWdlJik7CiAgICAgdm9pZCByZW1vdmVQYWdlKFBhZ2Um
KTsKIAotCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICAvLyBGSVhNRTogVGhl
c2UgZG9uJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLiBUaGV5IHNob3VsZCBwcm9iYWJseSBidW5kbGVk
IHVwIGluIHRoZSBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQKICAgICAvLyB3aGljaCBzaG91bGQg
YWx3YXlzIGV4aXN0LgpAQCAtODYsMTAgKzk3LDEyIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcm90
ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFVz
ZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbkNsaWVudHMoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJhbWVzSW5BbGxQ
YWdlcygpOwogCiBwcml2YXRlOgogICAgIEhhc2hTZXQ8UGFnZSo+IG1fcGFnZXM7CisgICAgSGFz
aFNldDxVc2VyQ29udGVudFByb3ZpZGVySW52YWxpZGF0aW9uQ2xpZW50Kj4gbV91c2VyTWVzc2Fn
ZUhhbmRsZXJJbnZhbGlkYXRpb25DbGllbnRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmNwcAkocmV2
aXNpb24gMTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogVXNlck1lc3NhZ2VIYW5kbGVyOjpVc2VyTWVzc2FnZUhhbmRsZXIoRnJhbWUmIGZyYW1lLCBV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogICAgIDogRnJhbWVEZXN0
cnVjdGlvbk9ic2VydmVyKCZmcmFtZSkKLSAgICAsIG1fZGVzY3JpcHRvcihkZXNjcmlwdG9yKQor
ICAgICwgbV9kZXNjcmlwdG9yKCZkZXNjcmlwdG9yKQogewogfQogCkBAIC00OCwyMiArNDgsMTIg
QEAgdm9pZCBVc2VyTWVzc2FnZUhhbmRsZXI6OnBvc3RNZXNzYWdlKFBhcwogewogICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB0aGUgZGVzY3JpcHRvciBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGNhbiBo
YXBwZW4gaWYgdGhlIGhvc3QgYXBwbGljYXRpb24gaGFzCiAgICAgLy8gcmVtb3ZlZCB0aGUgbmFt
ZWQgbWVzc2FnZSBoYW5kbGVyIGF0IHRoZSBXZWJLaXQyIEFQSSBsZXZlbC4KLSAgICBpZiAoIW1f
ZGVzY3JpcHRvci0+Y2xpZW50KCkpIHsKKyAgICBpZiAoIW1fZGVzY3JpcHRvcikgewogICAgICAg
ICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fZGVzY3JpcHRvci0+Y2xpZW50KCktPmRpZFBvc3RNZXNzYWdlKCp0aGlzLCB2YWx1ZS5nZXQo
KSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgVXNlck1lc3NhZ2VIYW5kbGVyOjpuYW1lKCkK
LXsKLSAgICByZXR1cm4gbV9kZXNjcmlwdG9yLT5uYW1lKCk7Ci19Ci0KLURPTVdyYXBwZXJXb3Js
ZCYgVXNlck1lc3NhZ2VIYW5kbGVyOjp3b3JsZCgpCi17Ci0gICAgcmV0dXJuIG1fZGVzY3JpcHRv
ci0+d29ybGQoKTsKKyAgICBtX2Rlc2NyaXB0b3ItPmRpZFBvc3RNZXNzYWdlKCp0aGlzLCB2YWx1
ZS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaAkocmV2aXNpb24gMTk4OTk1KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNiBAQAogCiAjaW5jbHVkZSAiRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5j
bHVkZSAiVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5oIgotI2luY2x1ZGUgPGJpbmRpbmdz
L1NjcmlwdFZhbHVlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMTQgKzQ1LDEz
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdE1lc3NhZ2UoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUoKTsKLSAgICBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7Ci0gICAgY29uc3QgVXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGVz
Y3JpcHRvci5nZXQoKTsgfQorICAgIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IqIGRlc2Ny
aXB0b3IoKSB7IHJldHVybiBtX2Rlc2NyaXB0b3IuZ2V0KCk7IH0KKyAgICB2b2lkIGludmFsaWRh
dGVEZXNjcmlwdG9yKCkgeyBtX2Rlc2NyaXB0b3IgPSBudWxscHRyOyB9CiAKIHByaXZhdGU6CiAg
ICAgVXNlck1lc3NhZ2VIYW5kbGVyKEZyYW1lJiwgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
ciYpOwogICAgIAotICAgIFJlZjxVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yPiBtX2Rlc2Ny
aXB0b3I7CisgICAgUmVmUHRyPFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I+IG1fZGVzY3Jp
cHRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLmNwcAkocmV2aXNp
b24gMTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Vc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDkgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRE9NV3JhcHBlcldvcmxk
JiB3b3JsZCwgQ2xpZW50JiBjbGllbnQpCitVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgRE9N
V3JhcHBlcldvcmxkJiB3b3JsZCkKICAgICA6IG1fbmFtZShuYW1lKQogICAgICwgbV93b3JsZCh3
b3JsZCkKLSAgICAsIG1fY2xpZW50KCZjbGllbnQpCiB7CiB9CiAKQEAgLTQzLDcgKzQyLDcgQEAg
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcjo6flVzZXJNZXNzYQogewogfQogCi1jb25zdCBB
dG9taWNTdHJpbmcmIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6Om5hbWUoKQorY29uc3Qg
QXRvbWljU3RyaW5nJiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpuYW1lKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9uYW1lOwogfQpAQCAtNTMsNiArNTIsMTEgQEAgRE9NV3JhcHBlcldv
cmxkJiBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcgogICAgIHJldHVybiBtX3dvcmxkLmdldCgpOwog
fQogCitjb25zdCBET01XcmFwcGVyV29ybGQmIFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6
OndvcmxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV93b3JsZC5nZXQoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVS
UykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1Vz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNDQgKzI4
LDMwIEBACiAKICNpZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogCi0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7CiBj
bGFzcyBET01XcmFwcGVyV29ybGQ7Ci1jbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXI7CiBjbGFzcyBT
ZXJpYWxpemVkU2NyaXB0VmFsdWU7CitjbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXI7CiAKIGNsYXNz
IFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yPiB7CiBwdWJsaWM6Ci0gICAgY2xhc3MgQ2xpZW50IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlkUG9zdE1lc3NhZ2UoVXNlck1lc3NhZ2VIYW5kbGVyJiwgU2VyaWFsaXplZFNjcmlw
dFZhbHVlKikgPSAwOwotICAgIH07Ci0KLSAgICBzdGF0aWMgUmVmPFVzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3I+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIERPTVdyYXBwZXJX
b3JsZCYgd29ybGQsIENsaWVudCYgY2xpZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcihuYW1lLCB3b3JsZCwgY2xpZW50
KSk7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIH5Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgZXhwbGljaXQgVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcihjb25zdCBBdG9taWNTdHJpbmcmLCBET01XcmFwcGVyV29ybGQmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5Vc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKCk7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBET01XcmFwcGVyV29ybGQmIHdvcmxkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
RE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIGNvbnN0OwogCi0gICAgQ2xpZW50KiBjbGllbnQoKSBj
b25zdCB7IHJldHVybiBtX2NsaWVudDsgfQotICAgIHZvaWQgaW52YWxpZGF0ZUNsaWVudCgpIHsg
bV9jbGllbnQgPSBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFBvc3RNZXNzYWdlKFVz
ZXJNZXNzYWdlSGFuZGxlciYsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSopID0gMDsKIAogcHJpdmF0
ZToKLSAgICBXRUJDT1JFX0VYUE9SVCBleHBsaWNpdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERPTVdyYXBwZXJXb3JsZCYsIENsaWVudCYpOwotCiAg
ICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKICAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxk
OwotICAgIENsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05h
bWVzcGFjZS5jcHAJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNl
ck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDQ5ICsz
Miw2MyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlVzZXJDb250ZW50Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlVzZXJNZXNzYWdlSGFuZGxlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6
OlVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UoRnJhbWUmIGZyYW1lKQorVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZTo6VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZShGcmFtZSYgZnJh
bWUsIFVzZXJDb250ZW50UHJvdmlkZXImIHVzZXJDb250ZW50UHJvdmlkZXIpCiAgICAgOiBGcmFt
ZURlc3RydWN0aW9uT2JzZXJ2ZXIoJmZyYW1lKQorICAgICwgbV91c2VyQ29udGVudFByb3ZpZGVy
KHVzZXJDb250ZW50UHJvdmlkZXIpCiB7CisgICAgbV91c2VyQ29udGVudFByb3ZpZGVyLT5yZWdp
c3RlckZvclVzZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbigqdGhpcyk7CiB9CiAKIFVzZXJN
ZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U6On5Vc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlKCkK
IHsKKyAgICBtX3VzZXJDb250ZW50UHJvdmlkZXItPnVucmVnaXN0ZXJGb3JVc2VyTWVzc2FnZUhh
bmRsZXJJbnZhbGlkYXRpb24oKnRoaXMpOworfQorCit2b2lkIFVzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2U6OmRpZEludmFsaWRhdGUoVXNlckNvbnRlbnRQcm92aWRlciYgcHJvdmlkZXIpCit7
CisgICAgZGVjbHR5cGUobV9tZXNzYWdlSGFuZGxlcnMpIG9sZE1hcCA9IFdURk1vdmUobV9tZXNz
YWdlSGFuZGxlcnMpOworCisgICAgcHJvdmlkZXIuZm9yRWFjaFVzZXJNZXNzYWdlSGFuZGxlcihb
Jl0oY29uc3QgVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikgeworICAg
ICAgICBhdXRvIHVzZXJNZXNzYWdlSGFuZGxlciA9IG9sZE1hcC50YWtlKHN0ZDo6bWFrZV9wYWly
KGRlc2NyaXB0b3IubmFtZSgpLCBjb25zdF9jYXN0PERPTVdyYXBwZXJXb3JsZCo+KCZkZXNjcmlw
dG9yLndvcmxkKCkpKSk7CisgICAgICAgIGlmICh1c2VyTWVzc2FnZUhhbmRsZXIpIHsKKyAgICAg
ICAgICAgIG1fbWVzc2FnZUhhbmRsZXJzLmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5h
bWUoKSwgY29uc3RfY2FzdDxET01XcmFwcGVyV29ybGQqPigmZGVzY3JpcHRvci53b3JsZCgpKSks
IHVzZXJNZXNzYWdlSGFuZGxlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9KTsKKworICAgIGZvciAoYXV0byYgdXNlck1lc3NhZ2VIYW5kbGVyIDogb2xkTWFwLnZhbHVl
cygpKQorICAgICAgICB1c2VyTWVzc2FnZUhhbmRsZXItPmludmFsaWRhdGVEZXNjcmlwdG9yKCk7
CiB9CiAKIFVzZXJNZXNzYWdlSGFuZGxlciogVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZTo6
aGFuZGxlcihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIERPTVdyYXBwZXJXb3JsZCYgd29ybGQp
CiB7Ci0gICAgaWYgKCFmcmFtZSgpKQorICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7
CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBQYWdlKiBw
YWdlID0gZnJhbWUoKS0+cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwog
ICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byYg
ZGVzY3JpcHRvcnMgPSBwYWdlLT51c2VyQ29udGVudFByb3ZpZGVyKCkudXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnMoKTsKLSAgICAKLSAgICBSZWZQdHI8VXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvcj4gZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JzLmdldChzdGQ6Om1ha2VfcGFpcihuYW1l
LCAmd29ybGQpKTsKLSAgICBpZiAoIWRlc2NyaXB0b3IpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgZm9yIChhdXRvJiBoYW5kbGVyIDogbV9tZXNzYWdlSGFuZGxlcnMpIHsKLSAgICAg
ICAgaWYgKCZoYW5kbGVyLT5kZXNjcmlwdG9yKCkgPT0gZGVzY3JpcHRvci5nZXQoKSkKLSAgICAg
ICAgICAgIHJldHVybiAmaGFuZGxlci5nZXQoKTsKLSAgICB9Ci0KLSAgICBhdXRvIGxpdmVIYW5k
bGVycyA9IGRlc2NyaXB0b3JzLnZhbHVlcygpOwotICAgIG1fbWVzc2FnZUhhbmRsZXJzLnJlbW92
ZUFsbE1hdGNoaW5nKFtsaXZlSGFuZGxlcnNdKGNvbnN0IFJlZjxVc2VyTWVzc2FnZUhhbmRsZXI+
JiBoYW5kbGVyKSB7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgbGl2ZUhhbmRsZXIgOiBsaXZl
SGFuZGxlcnMpIHsKLSAgICAgICAgICAgIGlmIChsaXZlSGFuZGxlci5nZXQoKSA9PSAmaGFuZGxl
ci0+ZGVzY3JpcHRvcigpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBVc2VyTWVzc2FnZUhhbmRsZXIqIGhhbmRsZXIg
PSBtX21lc3NhZ2VIYW5kbGVycy5nZXQoc3RkOjpwYWlyPEF0b21pY1N0cmluZywgUmVmUHRyPERP
TVdyYXBwZXJXb3JsZD4+KG5hbWUsICZ3b3JsZCkpOworICAgIGlmIChoYW5kbGVyKQorICAgICAg
ICByZXR1cm4gaGFuZGxlcjsKKworICAgIHBhZ2UtPnVzZXJDb250ZW50UHJvdmlkZXIoKS5mb3JF
YWNoVXNlck1lc3NhZ2VIYW5kbGVyKFsmXShjb25zdCBVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yLm5hbWUoKSAhPSBuYW1l
IHx8ICZkZXNjcmlwdG9yLndvcmxkKCkgIT0gJndvcmxkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFoYW5kbGVyKTsKKworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fbWVzc2FnZUhhbmRsZXJzLmFkZChzdGQ6Om1ha2VfcGFpcihkZXNjcmlwdG9yLm5h
bWUoKSwgY29uc3RfY2FzdDxET01XcmFwcGVyV29ybGQqPigmZGVzY3JpcHRvci53b3JsZCgpKSks
IFVzZXJNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKCpmcmFtZSwgY29uc3RfY2FzdDxVc2VyTWVzc2Fn
ZUhhbmRsZXJEZXNjcmlwdG9yJj4oZGVzY3JpcHRvcikpKTsKKyAgICAgICAgaGFuZGxlciA9IGFk
ZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7CiAgICAgfSk7CiAKLSAgICBtX21lc3NhZ2VI
YW5kbGVycy5hcHBlbmQoVXNlck1lc3NhZ2VIYW5kbGVyOjpjcmVhdGUoKmZyYW1lKCksICpkZXNj
cmlwdG9yKSk7Ci0gICAgcmV0dXJuICZtX21lc3NhZ2VIYW5kbGVycy5sYXN0KCkuZ2V0KCk7Cisg
ICAgcmV0dXJuIGhhbmRsZXI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZS5o
CShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1VzZXJNZXNzYWdlSGFu
ZGxlcnNOYW1lc3BhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEzIEBACiAjaWYg
RU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKIAogI2luY2x1ZGUgIkZyYW1lRGVzdHJ1Y3Rp
b25PYnNlcnZlci5oIgorI2luY2x1ZGUgIlVzZXJDb250ZW50UHJvdmlkZXIuaCIKICNpbmNsdWRl
ICJVc2VyTWVzc2FnZUhhbmRsZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDEsMTEgKzQzLDExIEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgVXNlck1lc3NhZ2VIYW5k
bGVyOwogY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogCi1jbGFzcyBVc2VyTWVzc2FnZUhhbmRsZXJz
TmFtZXNwYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFj
ZT4sIHB1YmxpYyBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgeworY2xhc3MgVXNlck1lc3NhZ2VI
YW5kbGVyc05hbWVzcGFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFVzZXJNZXNzYWdlSGFuZGxlcnNO
YW1lc3BhY2U+LCBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyLCBwdWJsaWMgVXNlckNv
bnRlbnRQcm92aWRlckludmFsaWRhdGlvbkNsaWVudCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlPiBjcmVhdGUoRnJhbWUmIGZyYW1lKQorICAg
IHN0YXRpYyBSZWY8VXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZT4gY3JlYXRlKEZyYW1lJiBm
cmFtZSwgVXNlckNvbnRlbnRQcm92aWRlciYgdXNlckNvbnRlbnRQcm92aWRlcikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2Uo
ZnJhbWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVXNlck1lc3NhZ2VIYW5kbGVy
c05hbWVzcGFjZShmcmFtZSwgdXNlckNvbnRlbnRQcm92aWRlcikpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgflVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2UoKTsKQEAgLTUzLDkgKzU1LDEzIEBA
IHB1YmxpYzoKICAgICBVc2VyTWVzc2FnZUhhbmRsZXIqIGhhbmRsZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiwgRE9NV3JhcHBlcldvcmxkJik7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgVXNlck1l
c3NhZ2VIYW5kbGVyc05hbWVzcGFjZShGcmFtZSYpOworICAgIGV4cGxpY2l0IFVzZXJNZXNzYWdl
SGFuZGxlcnNOYW1lc3BhY2UoRnJhbWUmLCBVc2VyQ29udGVudFByb3ZpZGVyJik7CiAKLSAgICBW
ZWN0b3I8UmVmPFVzZXJNZXNzYWdlSGFuZGxlcj4+IG1fbWVzc2FnZUhhbmRsZXJzOworICAgIC8v
IFVzZXJDb250ZW50UHJvdmlkZXJJbnZhbGlkYXRpb25DbGllbnQKKyAgICB2b2lkIGRpZEludmFs
aWRhdGUoVXNlckNvbnRlbnRQcm92aWRlciYpIG92ZXJyaWRlOworCisgICAgUmVmPFVzZXJDb250
ZW50UHJvdmlkZXI+IG1fdXNlckNvbnRlbnRQcm92aWRlcjsKKyAgICBIYXNoTWFwPHN0ZDo6cGFp
cjxBdG9taWNTdHJpbmcsIFJlZlB0cjxET01XcmFwcGVyV29ybGQ+PiwgUmVmUHRyPFVzZXJNZXNz
YWdlSGFuZGxlcj4+IG1fbWVzc2FnZUhhbmRsZXJzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9XZWJLaXROYW1lc3BhY2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2ViS2l0TmFtZXNwYWNlLmNwcAkocmV2aXNp
b24gMTk4OTk1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9XZWJLaXROYW1lc3BhY2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViS2l0TmFtZXNwYWNlOjpXZWJLaXROYW1lc3BhY2UoRnJhbWUmIGZyYW1lKQorV2ViS2l0TmFt
ZXNwYWNlOjpXZWJLaXROYW1lc3BhY2UoRnJhbWUmIGZyYW1lLCBVc2VyQ29udGVudFByb3ZpZGVy
JiB1c2VyQ29udGVudFByb3ZpZGVyKQogICAgIDogRE9NV2luZG93UHJvcGVydHkoJmZyYW1lKQot
ICAgICwgbV9tZXNzYWdlSGFuZGxlck5hbWVzcGFjZShVc2VyTWVzc2FnZUhhbmRsZXJzTmFtZXNw
YWNlOjpjcmVhdGUoZnJhbWUpKQorICAgICwgbV9tZXNzYWdlSGFuZGxlck5hbWVzcGFjZShVc2Vy
TWVzc2FnZUhhbmRsZXJzTmFtZXNwYWNlOjpjcmVhdGUoZnJhbWUsIHVzZXJDb250ZW50UHJvdmlk
ZXIpKQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1dlYktpdE5hbWVzcGFjZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2ViS2l0TmFtZXNwYWNlLmgJKHJl
dmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvV2ViS2l0TmFtZXNwYWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBGcmFtZTsKK2NsYXNzIFVzZXJDb250ZW50UHJvdmlkZXI7CiBjbGFzcyBVc2VyTWVz
c2FnZUhhbmRsZXJzTmFtZXNwYWNlOwogCiBjbGFzcyBXZWJLaXROYW1lc3BhY2UgOiBwdWJsaWMg
RE9NV2luZG93UHJvcGVydHksIHB1YmxpYyBSZWZDb3VudGVkPFdlYktpdE5hbWVzcGFjZT4gewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViS2l0TmFtZXNwYWNlPiBjcmVhdGUoRnJhbWUmIGZy
YW1lKQorICAgIHN0YXRpYyBSZWY8V2ViS2l0TmFtZXNwYWNlPiBjcmVhdGUoRnJhbWUmIGZyYW1l
LCBVc2VyQ29udGVudFByb3ZpZGVyJiB1c2VyQ29udGVudFByb3ZpZGVyKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViS2l0TmFtZXNwYWNlKGZyYW1lKSk7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYktpdE5hbWVzcGFjZShmcmFtZSwgdXNlckNvbnRlbnRQ
cm92aWRlcikpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfldlYktpdE5hbWVzcGFjZSgpOwpAQCAt
NDksNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgVXNlck1lc3NhZ2VIYW5kbGVyc05hbWVzcGFjZSog
bWVzc2FnZUhhbmRsZXJzKCk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViS2l0TmFtZXNw
YWNlKEZyYW1lJik7CisgICAgZXhwbGljaXQgV2ViS2l0TmFtZXNwYWNlKEZyYW1lJiwgVXNlckNv
bnRlbnRQcm92aWRlciYpOwogCiAgICAgUmVmPFVzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2U+
IG1fbWVzc2FnZUhhbmRsZXJOYW1lc3BhY2U7CiB9OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
MTk4OTk1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsODMgQEAKKzIwMTYtMDQtMDMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBBZGQgU1BJIHRvIGFsbG93IGluc3RhbGwgc2NyaXB0IG1lc3NhZ2UgaGFuZGxlcnMg
aW4gaXNvbGF0ZWQgd29ybGRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTYxNTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAoaGVhZGVy
c19mb3JfdHlwZSk6CisgICAgICAgICogU2hhcmVkL1dlYlVzZXJDb250ZW50Q29udHJvbGxlckRh
dGFUeXBlcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0
YTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRh
OjpkZWNvZGUpOgorICAgICAgICAqIFNoYXJlZC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRh
VHlwZXMuaDoKKyAgICAgICAgQWRkIFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRh
LCBtYXRjaGluZyBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhIGFuZAorICAgICAgICBXZWJLaXQ6
OldlYlVzZXJTdHlsZVNoZWV0RGF0YS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tVc2VyQ29udGVudENvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dLVXNlckNvbnRlbnRDb250
cm9sbGVyIGFkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm5hbWU6XSk6CisgICAgICAgICgtW1dLVXNl
ckNvbnRlbnRDb250cm9sbGVyIHJlbW92ZVNjcmlwdE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTpdKToK
KyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZUFsbFVzZXJTdHlsZVNo
ZWV0c0Fzc29jaWF0ZWRXaXRoVXNlckNvbnRlbnRXb3JsZDpdKToKKyAgICAgICAgKC1bV0tVc2Vy
Q29udGVudENvbnRyb2xsZXIgX2FkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOm5hbWU6dXNlckNvbnRl
bnRXb3JsZDpdKToKKyAgICAgICAgKC1bV0tVc2VyQ29udGVudENvbnRyb2xsZXIgX3JlbW92ZVNj
cmlwdE1lc3NhZ2VIYW5kbGVyRm9yTmFtZTp1c2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAo
LVtXS1VzZXJDb250ZW50Q29udHJvbGxlciBfcmVtb3ZlQWxsU2NyaXB0TWVzc2FnZUhhbmRsZXJz
QXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOl0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmg6CisgICAgICAgIEFkZCBT
UEkgZm9yIGFkZGluZyBhbmQgcmVtb3ZpbmcgU2NyaXB0TWVzc2FnZUhhbmRsZXJzIGFzc29jaWF0
ZWQgd2l0aCBhIHdvcmxkLgorCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlNj
cmlwdE1lc3NhZ2VIYW5kbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2Fn
ZUhhbmRsZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5k
bGVyOjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVySGFuZGxlOjplbmNvZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZTo6ZGVjb2RlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OmlkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6bmFtZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjp1c2VyQ29udGVudFdvcmxkKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNsaWVudCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpoYW5kbGUpOiBEZWxldGVkLgorICAgICAg
ICBBZGQgdGhlIHdvcmxkIGFuZCBtb3ZlIHRoZSBkYXRhIG9iamVjdCB0byBXZWJVc2VyQ29udGVu
dENvbnRyb2xsZXJEYXRhVHlwZXMuaAorCisgICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OmFkZFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5k
bGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6OnJl
bW92ZVVzZXJNZXNzYWdlSGFuZGxlckZvck5hbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQWxsVXNlck1lc3NhZ2VIYW5kbGVycyk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlclBy
b3h5Lmg6CisgICAgICAgIFVwZGF0ZSBmb3Igd29ybGRzLCBtYXRjaGluZyBVc2VyU2NyaXB0L1Vz
ZXJTdHlsZVNoZWV0IG1vZGVsLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1VzZXJDb250
ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eTo6V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVz
Y3JpcHRvclByb3h5KToKKyAgICAgICAgQ2hhbmdlIHRvIGluaGVyaXQgZGlyZWN0bHkgZnJvbSBX
ZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yLgorCisgICAgICAgIChXZWJLaXQ6
OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyk6
CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNj
cmlwdE1lc3NhZ2VIYW5kbGVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpyZW1vdmVBbGxVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRs
ZXJJbnRlcm5hbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6
cmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySW50ZXJuYWwpOgorICAgICAgICBBZGQgc3Vw
cG9ydCBmb3Igd29ybGRzLCBtYXRjaGluZyBVc2VyU2NyaXB0L1VzZXJTdHlsZVNoZWV0IG1vZGVs
LgorCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclN0
eWxlU2hlZXRzKToKKyAgICAgICAgQWRkIG1pc3NpbmcgY2FsbCB0byBpbnZhbGlkYXRlSW5qZWN0
ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKQorCisgICAgICAgIChXZWJL
aXQ6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKToK
KyAgICAgICAgU3dpdGNoIHRvIG9ubHkgY2FsbGluZyBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNo
ZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKSBvbmNlCisgICAgICAgIGFmdGVyIHRoZSBs
b29wIGFuZCBvbmx5IGlmIGFueSBzdHlsZXNoZWV0cyB3ZXJlIHJlbW92ZWQuCisgICAgICAgIAor
ICAgICAgICAoV2ViS2l0OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNo
ZWV0SW50ZXJuYWwpOgorICAgICAgICBSZW1vdmUgY2FsbCB0byBpbnZhbGlkYXRlSW5qZWN0ZWRT
dHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKSwgbWFrZQorICAgICAgICBjYWxs
ZXJzIGNhbGwgaXQuIFRoaXMgYWxsb3dzIHVzIHRvIGF2b2lkIGNhbGxpbmcgaXQgcmVwZWF0ZWRs
eSBpbiByZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKS4KKworICAgICAgICAoV2ViS2l0OjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KToKKyAgICAgICAgQ2FsbCBp
bnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKSBl
eHBsaWNpdGx5IHNpbmNlIGl0CisgICAgICAgIGlzIG5vIGxvbmdlciBjYWxsZWQgaW4gYWRkVXNl
clN0eWxlU2hlZXRJbnRlcm5hbCgpLgorCisgICAgICAgIChXZWJLaXQ6OldlYlVzZXJDb250ZW50
Q29udHJvbGxlcjo6Zm9yRWFjaFVzZXJNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIEltcGxlbWVu
dCBieSBpdGVyYXRpbmcgdGhlIG1fdXNlck1lc3NhZ2VIYW5kbGVycyBtYXAuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdl
cy5pbjoKKyAgICAgICAgVXBkYXRlIGZvciB3b3JsZHMsIG1hdGNoaW5nIFVzZXJTY3JpcHQvVXNl
clN0eWxlU2hlZXQgbW9kZWwuCisKIDIwMTYtMDQtMDIgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxOTg5MzMpOiBXZWIgSW5zcGVjdG9y
IGFuZCBpbnNwZWN0ZWQgcGFnZSBoYW5nIGluIGxvY2FsIGJ1aWxkcwpJbmRleDogU291cmNlL1dl
YktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNv
dXJjZS9XZWJLaXQyL1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zNzcsOSArMzc3LDkgQEAgZGVmIGhlYWRlcnNfZm9yX3R5cGUodHlwZSk6CiAgICAgICAgICdX
ZWJLaXQ6OldlYk1vdXNlRXZlbnQnOiBbJyJXZWJFdmVudC5oIiddLAogICAgICAgICAnV2ViS2l0
OjpXZWJUb3VjaEV2ZW50JzogWyciV2ViRXZlbnQuaCInXSwKICAgICAgICAgJ1dlYktpdDo6V2Vi
V2hlZWxFdmVudCc6IFsnIldlYkV2ZW50LmgiJ10sCi0gICAgICAgICdXZWJLaXQ6OldlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVySGFuZGxlJzogWyciV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuaCInXSwK
ICAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlVzZXJTY3JpcHREYXRhJzogWyciV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgiJ10sCiAgICAgICAgICdzdHJ1Y3QgV2ViS2l0OjpX
ZWJVc2VyU3R5bGVTaGVldERhdGEnOiBbJyJXZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlw
ZXMuaCInXSwKKyAgICAgICAgJ3N0cnVjdCBXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVy
RGF0YSc6IFsnIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oIiddLAogICAgICAg
ICAnc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCc6IFsnPGNocm9ubz4nXSwK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJVc2VyQ29udGVudENvbnRy
b2xsZXJEYXRhVHlwZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXJEYXRhVHlwZXMuY3BwCShyZXZpc2lvbiAxOTg5OTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNCArNjYsMjQgQEAgYm9vbCBXZWJVc2VyU3R5bGVT
aGVldERhdGE6OmRlY29kZShJUEM6OgogICAgIHJldHVybiB0cnVlOwogfQogCisKK3ZvaWQgV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Cit7CisgICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOworICAgIGVuY29kZXIg
PDwgd29ybGRJZGVudGlmaWVyOworICAgIGVuY29kZXIgPDwgbmFtZTsKK30KKworYm9vbCBXZWJT
Y3JpcHRNZXNzYWdlSGFuZGxlckRhdGE6OmRlY29kZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVj
b2RlciwgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJEYXRhJiBkYXRhKQoreworICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoZGF0YS5pZGVudGlmaWVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghZGVjb2Rlci5kZWNvZGUoZGF0YS53b3JsZElkZW50aWZpZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShkYXRhLm5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
RGF0YVR5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYlVzZXJD
b250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5oCShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyRGF0YVR5cGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU0LDYgKzU0LDE1IEBAIHN0cnVjdCBXZWJVc2VyU3R5bGVTaGVldERhdGEg
ewogICAgIFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHVzZXJTdHlsZVNoZWV0OwogfTsKIAorc3Ry
dWN0IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyRGF0YSB7CisgICAgdm9pZCBlbmNvZGUoSVBDOjpB
cmd1bWVudEVuY29kZXImKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1
bWVudERlY29kZXImLCBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGEmKTsKKworICAgIHVpbnQ2
NF90IGlkZW50aWZpZXI7CisgICAgdWludDY0X3Qgd29ybGRJZGVudGlmaWVyOworICAgIFN0cmlu
ZyBuYW1lOworfTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJEYXRhVHlwZXNfaApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1VzZXJDb250ZW50Q29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVy
Lm1tCShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgV0tfQVBJX0VOQUJMRUQKIAogI2ltcG9ydCAiQVBJU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmgiCisjaW1wb3J0ICJBUElVc2VyQ29udGVudFdvcmxkLmgiCiAjaW1wb3J0ICJXS0Zy
YW1lSW5mb0ludGVybmFsLmgiCiAjaW1wb3J0ICJXS05TQXJyYXkuaCIKICNpbXBvcnQgIldLU2Ny
aXB0TWVzc2FnZUhhbmRsZXIuaCIKQEAgLTExOCwxNCArMTE5LDE0IEBAIHByaXZhdGU6CiAKIC0g
KHZvaWQpYWRkU2NyaXB0TWVzc2FnZUhhbmRsZXI6KGlkIDxXS1NjcmlwdE1lc3NhZ2VIYW5kbGVy
PilzY3JpcHRNZXNzYWdlSGFuZGxlciBuYW1lOihOU1N0cmluZyAqKW5hbWUKIHsKLSAgICBSZWZQ
dHI8V2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcj4gaGFuZGxlciA9IFdlYktpdDo6V2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXI6OmNyZWF0ZShzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyRGVsZWdhdGU+KHNlbGYsIHNjcmlwdE1lc3NhZ2VIYW5kbGVyLCBuYW1lKSwgbmFt
ZSk7CisgICAgYXV0byBoYW5kbGVyID0gV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6
Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0TWVzc2FnZUhhbmRsZXJEZWxlZ2F0ZT4oc2Vs
Ziwgc2NyaXB0TWVzc2FnZUhhbmRsZXIsIG5hbWUpLCBuYW1lLCBBUEk6OlVzZXJDb250ZW50V29y
bGQ6Om5vcm1hbFdvcmxkKCkpOwogICAgIGlmICghX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5
LT5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIoaGFuZGxlci5nZXQoKSkpCiAgICAgICAgIFtO
U0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRl
bXB0IHRvIGFkZCBzY3JpcHQgbWVzc2FnZSBoYW5kbGVyIHdpdGggbmFtZSAnJUAnIHdoZW4gb25l
IGFscmVhZHkgZXhpc3RzLiIsIG5hbWVdOwogfQogCiAtICh2b2lkKXJlbW92ZVNjcmlwdE1lc3Nh
Z2VIYW5kbGVyRm9yTmFtZTooTlNTdHJpbmcgKiluYW1lCiB7Ci0gICAgX3VzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5LT5yZW1vdmVVc2VyTWVzc2FnZUhhbmRsZXJGb3JOYW1lKG5hbWUpOworICAg
IF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRm9y
TmFtZShuYW1lLCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxkKCkpOwogfQogCiAj
cHJhZ21hIG1hcmsgV0tPYmplY3QgcHJvdG9jb2wgaW1wbGVtZW50YXRpb24KQEAgLTE5NSw2ICsx
OTYsMjMgQEAgLSAodm9pZClfcmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzQXNzb2NpYQogICAgIF91
c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKCp1c2Vy
Q29udGVudFdvcmxkLT5fdXNlckNvbnRlbnRXb3JsZCk7CiB9CiAKKy0gKHZvaWQpX2FkZFNjcmlw
dE1lc3NhZ2VIYW5kbGVyOihpZCA8V0tTY3JpcHRNZXNzYWdlSGFuZGxlcj4pc2NyaXB0TWVzc2Fn
ZUhhbmRsZXIgbmFtZTooTlNTdHJpbmcgKiluYW1lIHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJD
b250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxkCit7CisgICAgYXV0byBoYW5kbGVyID0gV2Vi
S2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcjo6Y3JlYXRlKHN0ZDo6bWFrZV91bmlxdWU8U2Ny
aXB0TWVzc2FnZUhhbmRsZXJEZWxlZ2F0ZT4oc2VsZiwgc2NyaXB0TWVzc2FnZUhhbmRsZXIsIG5h
bWUpLCBuYW1lLCAqdXNlckNvbnRlbnRXb3JsZC0+X3VzZXJDb250ZW50V29ybGQpOworICAgIGlm
ICghX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5hZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRs
ZXIoaGFuZGxlci5nZXQoKSkpCisgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludmFsaWRB
cmd1bWVudEV4Y2VwdGlvbiBmb3JtYXQ6QCJBdHRlbXB0IHRvIGFkZCBzY3JpcHQgbWVzc2FnZSBo
YW5kbGVyIHdpdGggbmFtZSAnJUAnIHdoZW4gb25lIGFscmVhZHkgZXhpc3RzLiIsIG5hbWVdOwor
fQorCistICh2b2lkKV9yZW1vdmVTY3JpcHRNZXNzYWdlSGFuZGxlckZvck5hbWU6KE5TU3RyaW5n
ICopbmFtZSB1c2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVudFdvcmxkICopdXNlckNvbnRl
bnRXb3JsZAoreworICAgIF91c2VyQ29udGVudENvbnRyb2xsZXJQcm94eS0+cmVtb3ZlVXNlck1l
c3NhZ2VIYW5kbGVyRm9yTmFtZShuYW1lLCAqdXNlckNvbnRlbnRXb3JsZC0+X3VzZXJDb250ZW50
V29ybGQpOworfQorCistICh2b2lkKV9yZW1vdmVBbGxTY3JpcHRNZXNzYWdlSGFuZGxlcnNBc3Nv
Y2lhdGVkV2l0aFVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29u
dGVudFdvcmxkCit7CisgICAgX3VzZXJDb250ZW50Q29udHJvbGxlclByb3h5LT5yZW1vdmVBbGxV
c2VyTWVzc2FnZUhhbmRsZXJzKCp1c2VyQ29udGVudFdvcmxkLT5fdXNlckNvbnRlbnRXb3JsZCk7
Cit9CisKIEBlbmQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQ
cml2YXRlLmgJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tVc2VyQ29udGVudENvbnRyb2xsZXJQcml2YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDYgKzQ3LDEwIEBACiAtICh2b2lkKV9yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMgV0tf
QVZBSUxBQkxFKFdLX01BQ19UQkEsIFdLX0lPU19UQkEpOwogLSAodm9pZClfcmVtb3ZlQWxsVXNl
clN0eWxlU2hlZXRzQXNzb2NpYXRlZFdpdGhVc2VyQ29udGVudFdvcmxkOihfV0tVc2VyQ29udGVu
dFdvcmxkICopdXNlckNvbnRlbnRXb3JsZCBXS19BVkFJTEFCTEUoV0tfTUFDX1RCQSwgV0tfSU9T
X1RCQSk7CiAKKy0gKHZvaWQpX2FkZFNjcmlwdE1lc3NhZ2VIYW5kbGVyOihpZCA8V0tTY3JpcHRN
ZXNzYWdlSGFuZGxlcj4pc2NyaXB0TWVzc2FnZUhhbmRsZXIgbmFtZTooTlNTdHJpbmcgKiluYW1l
IHVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdvcmxk
OworLSAodm9pZClfcmVtb3ZlU2NyaXB0TWVzc2FnZUhhbmRsZXJGb3JOYW1lOihOU1N0cmluZyAq
KW5hbWUgdXNlckNvbnRlbnRXb3JsZDooX1dLVXNlckNvbnRlbnRXb3JsZCAqKXVzZXJDb250ZW50
V29ybGQ7CistICh2b2lkKV9yZW1vdmVBbGxTY3JpcHRNZXNzYWdlSGFuZGxlcnNBc3NvY2lhdGVk
V2l0aFVzZXJDb250ZW50V29ybGQ6KF9XS1VzZXJDb250ZW50V29ybGQgKil1c2VyQ29udGVudFdv
cmxkOworCiBAZW5kCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Vz
ZXJDb250ZW50L1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIu
Y3BwCShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNv
bnRlbnQvV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwy
NyArMjYsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJTY3JpcHRNZXNz
YWdlSGFuZGxlci5oIgogCi0jaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJB
UElVc2VyQ29udGVudFdvcmxkLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi12b2lkIFdlYlNj
cmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxlOjplbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImIGVu
Y29kZXIpIGNvbnN0Ci17Ci0gICAgZW5jb2RlciA8PCBpZGVudGlmaWVyOwotICAgIGVuY29kZXIg
PDwgbmFtZTsKLX0KLQotYm9vbCBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZTo6ZGVjb2Rl
KElQQzo6QXJndW1lbnREZWNvZGVyJiBkZWNvZGVyLCBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhh
bmRsZSYgaGFuZGxlKQotewotICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaGFuZGxlLmlkZW50aWZp
ZXIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGhh
bmRsZS5uYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZUlkZW50aWZpZXIoKQogewogICAgIHN0YXRpYyB1
aW50NjRfdCBpZGVudGlmaWVyOwpAQCAtNTQsMTUgKzM3LDE2IEBAIHN0YXRpYyB1aW50NjRfdCBn
ZW5lcmF0ZUlkZW50aWZpZXIoKQogICAgIHJldHVybiArK2lkZW50aWZpZXI7CiB9CiAKLVBhc3NS
ZWZQdHI8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI+IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPENsaWVudD4gY2xpZW50LCBjb25zdCBTdHJpbmcmIG5hbWUp
CitSZWY8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI+IFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPENsaWVudD4gY2xpZW50LCBjb25zdCBTdHJpbmcmIG5hbWUs
IEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgd29ybGQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGNsaWVudCksIG5hbWUpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcihXVEZNb3ZlKGNsaWVu
dCksIG5hbWUsIHdvcmxkKSk7CiB9CiAKLVdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50PiBjbGllbnQsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyOjpXZWJTY3JpcHRNZXNzYWdlSGFu
ZGxlcihzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50PiBjbGllbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
QVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3JsZCkKICAgICA6IG1faWRlbnRpZmllcihnZW5lcmF0
ZUlkZW50aWZpZXIoKSkKICAgICAsIG1fY2xpZW50KFdURk1vdmUoY2xpZW50KSkKICAgICAsIG1f
bmFtZShuYW1lKQorICAgICwgbV93b3JsZCh3b3JsZCkKIHsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1VzZXJDb250ZW50L1dlYlNjcmlw
dE1lc3NhZ2VIYW5kbGVyLmgJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJTY3JpcHRNZXNzYWdlSGFuZGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwzMyArMjYsMjUgQEAKICNpZm5kZWYgV2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJf
aAogI2RlZmluZSBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcl9oCiAKLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgIldlYlVzZXJDb250ZW50Q29udHJvbGxlckRhdGFUeXBlcy5o
IgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1uYW1lc3BhY2UgSVBDIHsKLWNsYXNzIEFy
Z3VtZW50RGVjb2RlcjsKLWNsYXNzIEFyZ3VtZW50RW5jb2RlcjsKLX0KLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogc3RydWN0IFNlY3VyaXR5T3JpZ2luRGF0YTsKIGNsYXNzIFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZTsKIH0KIAorbmFtZXNwYWNlIEFQSSB7CisgICAgY2xhc3MgVXNlckNvbnRlbnRXb3Js
ZDsKK30KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIGNsYXNz
IFdlYkZyYW1lUHJveHk7CiAKLXN0cnVjdCBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRsZSB7
Ci0gICAgdm9pZCBlbmNvZGUoSVBDOjpBcmd1bWVudEVuY29kZXImKSBjb25zdDsKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoSVBDOjpBcmd1bWVudERlY29kZXImLCBXZWJTY3JpcHRNZXNzYWdlSGFu
ZGxlckhhbmRsZSYpOwotCi0gICAgdWludDY0X3QgaWRlbnRpZmllcjsKLSAgICBTdHJpbmcgbmFt
ZTsKLX07Ci0KIGNsYXNzIFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI+IHsKIHB1YmxpYzoKICAgICBjbGFzcyBDbGllbnQg
ewpAQCAtNjEsMjMgKzUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFBv
c3RNZXNzYWdlKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBjb25zdCBXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbkRhdGEmLCBXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWUmKSA9IDA7
CiAgICAgfTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVy
PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENsaWVudD4sIGNvbnN0IFN0cmluZyYgbmFtZSk7ICAg
IAorICAgIHN0YXRpYyBSZWY8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXI+IGNyZWF0ZShzdGQ6OnVu
aXF1ZV9wdHI8Q2xpZW50PiwgY29uc3QgU3RyaW5nJiBuYW1lLCBBUEk6OlVzZXJDb250ZW50V29y
bGQmKTsKICAgICB2aXJ0dWFsIH5XZWJTY3JpcHRNZXNzYWdlSGFuZGxlcigpOwogCi0gICAgV2Vi
U2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGUgaGFuZGxlKCkgeyByZXR1cm4geyBtX2lkZW50aWZp
ZXIsIG1fbmFtZSB9OyB9Ci0KICAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVudGlmaWVyOyB9CiAgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KIAorICAgIGNvbnN0IEFQSTo6VXNlckNvbnRlbnRXb3JsZCYgdXNlckNvbnRlbnRXb3Js
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGQ7IH0KKyAgICBBUEk6OlVzZXJDb250ZW50V29ybGQm
IHVzZXJDb250ZW50V29ybGQoKSB7IHJldHVybiBtX3dvcmxkOyB9CisKICAgICBDbGllbnQmIGNs
aWVudCgpIGNvbnN0IHsgcmV0dXJuICptX2NsaWVudDsgfQogCiBwcml2YXRlOgotICAgIFdlYlNj
cmlwdE1lc3NhZ2VIYW5kbGVyKHN0ZDo6dW5pcXVlX3B0cjxDbGllbnQ+LCBjb25zdCBTdHJpbmcm
KTsKKyAgICBXZWJTY3JpcHRNZXNzYWdlSGFuZGxlcihzdGQ6OnVuaXF1ZV9wdHI8Q2xpZW50Piwg
Y29uc3QgU3RyaW5nJiwgQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CiAgICAgCiAgICAgdWludDY0
X3QgbV9pZGVudGlmaWVyOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENsaWVudD4gbV9jbGllbnQ7
CiAgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBSZWY8QVBJOjpVc2VyQ29udGVudFdvcmxkPiBtX3dv
cmxkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDE5ODk5NSkKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxLDEwICs5MSwxMCBAQCB2b2lkIFdlYlVzZXJDb250ZW50
Q29udHJvbGxlclByb3h5OjphZGRQCiAgICAgICAgIHVzZXJTdHlsZVNoZWV0cy5hcHBlbmQoeyB1
c2VyU3R5bGVTaGVldC0+aWRlbnRpZmllcigpLCB1c2VyU3R5bGVTaGVldC0+dXNlckNvbnRlbnRX
b3JsZCgpLmlkZW50aWZpZXIoKSwgdXNlclN0eWxlU2hlZXQtPnVzZXJTdHlsZVNoZWV0KCkgfSk7
CiAgICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU3R5bGVTaGVldHModXNlclN0eWxlU2hlZXRzKSwg
bV9pZGVudGlmaWVyKTsKIAotICAgIFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckhhbmRs
ZT4gbWVzc2FnZUhhbmRsZXJIYW5kbGVzOworICAgIFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFu
ZGxlckRhdGE+IG1lc3NhZ2VIYW5kbGVyczsKICAgICBmb3IgKGF1dG8mIGhhbmRsZXIgOiBtX3Nj
cmlwdE1lc3NhZ2VIYW5kbGVycy52YWx1ZXMoKSkKLSAgICAgICAgbWVzc2FnZUhhbmRsZXJIYW5k
bGVzLmFwcGVuZChoYW5kbGVyLT5oYW5kbGUoKSk7Ci0gICAgd2ViUHJvY2Vzc1Byb3h5LmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2Vy
U2NyaXB0TWVzc2FnZUhhbmRsZXJzKG1lc3NhZ2VIYW5kbGVySGFuZGxlcyksIG1faWRlbnRpZmll
cik7CisgICAgICAgIG1lc3NhZ2VIYW5kbGVycy5hcHBlbmQoeyBoYW5kbGVyLT5pZGVudGlmaWVy
KCksIGhhbmRsZXItPnVzZXJDb250ZW50V29ybGQoKS5pZGVudGlmaWVyKCksIGhhbmRsZXItPm5h
bWUoKSB9KTsKKyAgICB3ZWJQcm9jZXNzUHJveHkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OkFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcnMo
bWVzc2FnZUhhbmRsZXJzKSwgbV9pZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShDT05URU5UX0VY
VEVOU0lPTlMpCiAgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYkNvbXBpbGVkQ29udGVu
dEV4dGVuc2lvbkRhdGE+PiB1c2VyQ29udGVudEV4dGVuc2lvbnM7CkBAIC0yNzAsMzMgKzI3MCw1
NyBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vCiAgICAgcmVtb3Zl
VXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGRzKTsKIH0KIAotYm9vbCBXZWJVc2VyQ29udGVudENv
bnRyb2xsZXJQcm94eTo6YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3Nh
Z2VIYW5kbGVyKiBoYW5kbGVyKQorYm9vbCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6
YWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVyJiBoYW5k
bGVyKQogeworICAgIFJlZjxBUEk6OlVzZXJDb250ZW50V29ybGQ+IHdvcmxkID0gaGFuZGxlci51
c2VyQ29udGVudFdvcmxkKCk7CisKICAgICBmb3IgKGF1dG8mIGV4aXN0aW5nSGFuZGxlciA6IG1f
c2NyaXB0TWVzc2FnZUhhbmRsZXJzLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChleGlzdGluZ0hh
bmRsZXItPm5hbWUoKSA9PSBoYW5kbGVyLT5uYW1lKCkpCisgICAgICAgIGlmIChleGlzdGluZ0hh
bmRsZXItPm5hbWUoKSA9PSBoYW5kbGVyLm5hbWUoKSAmJiAmZXhpc3RpbmdIYW5kbGVyLT51c2Vy
Q29udGVudFdvcmxkKCkgPT0gd29ybGQucHRyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMuYWRkKGhhbmRsZXItPmlkZW50
aWZpZXIoKSwgaGFuZGxlcik7CisgICAgYWRkVXNlckNvbnRlbnRXb3JsZFVzZSh3b3JsZC5nZXQo
KSk7CisKKyAgICBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5hZGQoaGFuZGxlci5pZGVudGlmaWVy
KCksICZoYW5kbGVyKTsKIAogICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzIDogbV9w
cm9jZXNzZXMpCi0gICAgICAgIHByb2Nlc3MtPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKHsg
aGFuZGxlci0+aGFuZGxlKCkgfSksIG1faWRlbnRpZmllcik7CisgICAgICAgIHByb2Nlc3MtPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpBZGRV
c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKHsgeyBoYW5kbGVyLmlkZW50aWZpZXIoKSwgd29ybGQt
PmlkZW50aWZpZXIoKSwgaGFuZGxlci5uYW1lKCkgfSB9KSwgbV9pZGVudGlmaWVyKTsKICAgICAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6cmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRm9yTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpyZW1vdmVVc2VyTWVzc2FnZUhhbmRs
ZXJGb3JOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSwgQVBJOjpVc2VyQ29udGVudFdvcmxkJiB3b3Js
ZCkKIHsKICAgICBmb3IgKGF1dG8gaXQgPSBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5iZWdpbigp
LCBlbmQgPSBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lKSB7CisgICAgICAgIGlmIChp
dC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lICYmICZpdC0+dmFsdWUtPnVzZXJDb250ZW50V29ybGQo
KSA9PSAmd29ybGQpIHsKICAgICAgICAgICAgIGZvciAoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNz
IDogbV9wcm9jZXNzZXMpCi0gICAgICAgICAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHRN
ZXNzYWdlSGFuZGxlcihpdC0+dmFsdWUtPmlkZW50aWZpZXIoKSksIG1faWRlbnRpZmllcik7Cisg
ICAgICAgICAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcih3b3Js
ZC5pZGVudGlmaWVyKCksIGl0LT52YWx1ZS0+aWRlbnRpZmllcigpKSwgbV9pZGVudGlmaWVyKTsK
KwogICAgICAgICAgICAgbV9zY3JpcHRNZXNzYWdlSGFuZGxlcnMucmVtb3ZlKGl0KTsKKworICAg
ICAgICAgICAgcmVtb3ZlVXNlckNvbnRlbnRXb3JsZFVzZXMod29ybGQsIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogfQogCit2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OjpyZW1vdmVBbGxVc2VyTWVzc2FnZUhhbmRsZXJzKEFQSTo6VXNlckNvbnRl
bnRXb3JsZCYgd29ybGQpCit7CisgICAgZm9yIChXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MgOiBt
X3Byb2Nlc3NlcykKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OlJlbW92ZUFsbFVzZXJTY3JpcHRNZXNzYWdlSGFu
ZGxlcnMoeyB3b3JsZC5pZGVudGlmaWVyKCkgfSksIG1faWRlbnRpZmllcik7CisKKyAgICB1bnNp
Z25lZCBudW1iZXJSZW1vdmVkID0gMDsKKyAgICBtX3NjcmlwdE1lc3NhZ2VIYW5kbGVycy5yZW1v
dmVJZihbJl0oSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlNjcmlwdE1lc3NhZ2VIYW5kbGVy
Pj46OktleVZhbHVlUGFpclR5cGUmIGVudHJ5KSB7CisgICAgICAgIGlmICgmZW50cnkudmFsdWUt
PnVzZXJDb250ZW50V29ybGQoKSA9PSAmd29ybGQpIHsKKyAgICAgICAgICAgICsrbnVtYmVyUmVt
b3ZlZDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9KTsKKworICAgIHJlbW92ZVVzZXJDb250ZW50V29ybGRVc2VzKHdvcmxk
LCBudW1iZXJSZW1vdmVkKTsKK30KKwogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6ZGlkUG9zdE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1aW50NjRfdCBw
YWdlSUQsIHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0
YSYgc2VjdXJpdHlPcmlnaW4sIHVpbnQ2NF90IG1lc3NhZ2VIYW5kbGVySUQsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgZGF0YVJlZmVyZW5jZSkKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2Ug
PSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UocGFnZUlEKTsKQEAgLTMxNSw4ICszMzksNyBAQCB2
b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5OjpkaWRQCiAgICAgaWYgKCFoYW5kbGVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBoYW5kbGVyLT5jbGllbnQoKS5kaWRQb3N0TWVzc2Fn
ZSgqcGFnZSwgKmZyYW1lLCBzZWN1cml0eU9yaWdpbiwKLSAgICAgICAgV2ViQ29yZTo6U2VyaWFs
aXplZFNjcmlwdFZhbHVlOjphZG9wdChkYXRhUmVmZXJlbmNlLnZlY3RvcigpKSk7CisgICAgaGFu
ZGxlci0+Y2xpZW50KCkuZGlkUG9zdE1lc3NhZ2UoKnBhZ2UsICpmcmFtZSwgc2VjdXJpdHlPcmln
aW4sIFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6YWRvcHQoZGF0YVJlZmVyZW5jZS52
ZWN0b3IoKSkpOwogfQogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xs
ZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Vc2VyQ29u
dGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eS5oCShyZXZpc2lvbiAxOTg5OTUpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudChBUEk6OlVzZXJDb250ZW50V29ybGQmKTsKIAog
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlcmUgd2FzIGEgbmFtZSBjb25mbGljdC4KLSAgICBi
b29sIGFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihXZWJTY3JpcHRNZXNzYWdlSGFuZGxlciop
OwotICAgIHZvaWQgcmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRm9yTmFtZShjb25zdCBTdHJpbmcm
KTsKKyAgICBib29sIGFkZFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlcihXZWJTY3JpcHRNZXNzYWdl
SGFuZGxlciYpOworICAgIHZvaWQgcmVtb3ZlVXNlck1lc3NhZ2VIYW5kbGVyRm9yTmFtZShjb25z
dCBTdHJpbmcmLCBBUEk6OlVzZXJDb250ZW50V29ybGQmKTsKKyAgICB2b2lkIHJlbW92ZUFsbFVz
ZXJNZXNzYWdlSGFuZGxlcnMoQVBJOjpVc2VyQ29udGVudFdvcmxkJik7CiAKICNpZiBFTkFCTEUo
Q09OVEVOVF9FWFRFTlNJT05TKQogICAgIHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb24oQVBJ
OjpVc2VyQ29udGVudEV4dGVuc2lvbiYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gMTk4OTk1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzEsNiArMTcxLDggQEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVz
ZXJTdAogICAgICAgICBVc2VyU3R5bGVTaGVldCBzaGVldCA9IHVzZXJTdHlsZVNoZWV0RGF0YS51
c2VyU3R5bGVTaGVldDsKICAgICAgICAgYWRkVXNlclN0eWxlU2hlZXRJbnRlcm5hbCgqaXQtPnZh
bHVlLmZpcnN0LCB1c2VyU3R5bGVTaGVldERhdGEuaWRlbnRpZmllciwgV1RGTW92ZShzaGVldCkp
OwogICAgIH0KKworICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNoZUluQWxsRnJh
bWVzSW5BbGxQYWdlcygpOwogfQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVt
b3ZlVXNlclN0eWxlU2hlZXQodWludDY0X3Qgd29ybGRJZGVudGlmaWVyLCB1aW50NjRfdCB1c2Vy
U3R5bGVTaGVldElkZW50aWZpZXIpCkBAIC0xODYsNiArMTg4LDcgQEAgdm9pZCBXZWJVc2VyQ29u
dGVudENvbnRyb2xsZXI6OnJlbW92ZVVzZQogCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6cmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mIHdvcmxk
SWRlbnRpZmllcnMpCiB7CisgICAgYm9vbCBzaGVldHNDaGFuZ2VkID0gZmFsc2U7CiAgICAgZm9y
IChhdXRvJiB3b3JsZElkZW50aWZpZXIgOiB3b3JsZElkZW50aWZpZXJzKSB7CiAgICAgICAgIGF1
dG8gaXQgPSB3b3JsZE1hcCgpLmZpbmQod29ybGRJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKGl0
ID09IHdvcmxkTWFwKCkuZW5kKCkpIHsKQEAgLTE5MywyNSArMTk2LDM4IEBAIHZvaWQgV2ViVXNl
ckNvbnRlbnRDb250cm9sbGVyOjpyZW1vdmVBbGwKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIHJlbW92ZVVzZXJTdHlsZVNoZWV0cygqaXQtPnZhbHVlLmZpcnN0KTsK
KyAgICAgICAgaWYgKG1fdXNlclN0eWxlU2hlZXRzLnJlbW92ZShpdC0+dmFsdWUuZmlyc3QuZ2V0
KCkpKQorICAgICAgICAgICAgc2hlZXRzQ2hhbmdlZCA9IHRydWU7CiAgICAgfQorCisgICAgaWYg
KHNoZWV0c0NoYW5nZWQpCisgICAgICAgIGludmFsaWRhdGVJbmplY3RlZFN0eWxlU2hlZXRDYWNo
ZUluQWxsRnJhbWVzSW5BbGxQYWdlcygpOwogfQogCiAjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9I
QU5ETEVSUykKLWNsYXNzIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eSA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4sIHB1
YmxpYyBXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yOjpDbGllbnQgeworY2xh
c3MgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5IDogcHVibGljIFdlYkNvcmU6
OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4gY3JlYXRlKFdlYlVz
ZXJDb250ZW50Q29udHJvbGxlciogY29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50
NjRfdCBpZGVudGlmaWVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlVzZXJNZXNzYWdlSGFu
ZGxlckRlc2NyaXB0b3JQcm94eT4gY3JlYXRlKFdlYlVzZXJDb250ZW50Q29udHJvbGxlciogY29u
dHJvbGxlciwgY29uc3QgU3RyaW5nJiBuYW1lLCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3
b3JsZCwgdWludDY0X3QgaWRlbnRpZmllcikKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5KGNvbnRyb2xsZXIsIG5h
bWUsIGlkZW50aWZpZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJVc2VyTWVz
c2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHkoY29udHJvbGxlciwgbmFtZSwgd29ybGQsIGlkZW50
aWZpZXIpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5XZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNj
cmlwdG9yUHJveHkoKQogICAgIHsKLSAgICAgICAgbV9kZXNjcmlwdG9yLT5pbnZhbGlkYXRlQ2xp
ZW50KCk7CiAgICAgfQogCi0gICAgLy8gV2ViQ29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvcjo6Q2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGRpZFBvc3RNZXNzYWdlKFdlYkNvcmU6OlVz
ZXJNZXNzYWdlSGFuZGxlciYgaGFuZGxlciwgV2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVl
KiB2YWx1ZSkKKyAgICB1aW50NjRfdCBpZGVudGlmaWVyKCkgeyByZXR1cm4gbV9pZGVudGlmaWVy
OyB9CisKK3ByaXZhdGU6CisgICAgV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvclByb3h5
KFdlYlVzZXJDb250ZW50Q29udHJvbGxlciogY29udHJvbGxlciwgY29uc3QgU3RyaW5nJiBuYW1l
LCBJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3JsZCwgdWludDY0X3QgaWRlbnRpZmllcikK
KyAgICAgICAgOiBXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yKG5hbWUsIHdv
cmxkLmNvcmVXb3JsZCgpKQorICAgICAgICAsIG1fY29udHJvbGxlcihjb250cm9sbGVyKQorICAg
ICAgICAsIG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBX
ZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yCisgICAgdm9pZCBkaWRQb3N0TWVz
c2FnZShXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXImIGhhbmRsZXIsIFdlYkNvcmU6OlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSogdmFsdWUpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBoYW5kbGVyLmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJhbWUpCkBA
IC0yMjgsNTQgKzI0NCw5OSBAQCBwdWJsaWM6CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlclByb3h5OjpEaWRQb3N0TWVzc2FnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgd2Vi
RnJhbWUtPmZyYW1lSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tRnJhbWUoZnJhbWUpLCBt
X2lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSh2YWx1ZS0+ZGF0YSgpKSksIG1fY29udHJv
bGxlci0+aWRlbnRpZmllcigpKTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKCkgeyByZXR1cm4gKm1fZGVzY3JpcHRvcjsgfQot
ICAgIHVpbnQ2NF90IGlkZW50aWZpZXIoKSB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQotcHJp
dmF0ZToKLSAgICBXZWJVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yUHJveHkoV2ViVXNlckNv
bnRlbnRDb250cm9sbGVyKiBjb250cm9sbGVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90
IGlkZW50aWZpZXIpCi0gICAgICAgIDogbV9jb250cm9sbGVyKGNvbnRyb2xsZXIpCi0gICAgICAg
ICwgbV9kZXNjcmlwdG9yKFVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3I6OmNyZWF0ZShuYW1l
LCBtYWluVGhyZWFkTm9ybWFsV29ybGQoKSwgKnRoaXMpKQotICAgICAgICAsIG1faWRlbnRpZmll
cihpZGVudGlmaWVyKQotICAgIHsKLSAgICB9Ci0KICAgICBSZWZQdHI8V2ViVXNlckNvbnRlbnRD
b250cm9sbGVyPiBtX2NvbnRyb2xsZXI7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3I+IG1fZGVzY3JpcHRvcjsKICAgICB1aW50NjRfdCBtX2lkZW50aWZp
ZXI7CiB9OwogI2VuZGlmCiAKLXZvaWQgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjphZGRVc2Vy
U2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxXZWJTY3JpcHRNZXNzYWdlSGFuZGxl
ckhhbmRsZT4mIHNjcmlwdE1lc3NhZ2VIYW5kbGVycykKK3ZvaWQgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjphZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJzKGNvbnN0IFZlY3RvcjxXZWJTY3Jp
cHRNZXNzYWdlSGFuZGxlckRhdGE+JiBzY3JpcHRNZXNzYWdlSGFuZGxlcnMpCiB7CiAjaWYgRU5B
QkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBmb3IgKGF1dG8mIGhhbmRsZSA6IHNjcmlw
dE1lc3NhZ2VIYW5kbGVycykgewotICAgICAgICBSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVy
RGVzY3JpcHRvclByb3h5PiBkZXNjcmlwdG9yID0gV2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclByb3h5OjpjcmVhdGUodGhpcywgaGFuZGxlLm5hbWUsIGhhbmRsZS5pZGVudGlmaWVyKTsK
LQotICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JzLmFkZChkZXNjcmlwdG9y
LT5pZGVudGlmaWVyKCksIGRlc2NyaXB0b3IpOworICAgIGZvciAoYXV0byYgaGFuZGxlciA6IHNj
cmlwdE1lc3NhZ2VIYW5kbGVycykgeworICAgICAgICBhdXRvIGl0ID0gd29ybGRNYXAoKS5maW5k
KGhhbmRsZXIud29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKGl0ID09IHdvcmxkTWFwKCku
ZW5kKCkpIHsKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIGFkZCBhIFVzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlciB0byBhIFVzZXJDb250ZW50V29ybGQgKGlkPSUiIFBSSXU2NCAi
KSB0aGF0IGRvZXMgbm90IGV4aXN0LiIsIGhhbmRsZXIud29ybGRJZGVudGlmaWVyKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgYXV0byYgY29yZURlc2NyaXB0
b3IgPSBkZXNjcmlwdG9yLT5kZXNjcmlwdG9yKCk7Ci0gICAgICAgIG1fdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnNNYXAuYWRkKHN0ZDo6bWFrZV9wYWlyKGNvcmVEZXNjcmlwdG9yLm5hbWUo
KSwgJmNvcmVEZXNjcmlwdG9yLndvcmxkKCkpLCAmY29yZURlc2NyaXB0b3IpOworICAgICAgICBh
ZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0LCBoYW5k
bGVyLmlkZW50aWZpZXIsIGhhbmRsZXIubmFtZSk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oc2NyaXB0TWVzc2FnZUhhbmRsZXJzKTsKICNlbmRpZgogfQogCi12b2lkIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVyKHVpbnQ2NF90
IGlkZW50aWZpZXIpCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3ZlVXNlclNj
cmlwdE1lc3NhZ2VIYW5kbGVyKHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNl
clNjcmlwdE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllcikKIHsKICNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQotICAgIGF1dG8gaXQgPSBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0
b3JzLmZpbmQoaWRlbnRpZmllcik7Ci0gICAgQVNTRVJUKGl0ICE9IG1fdXNlck1lc3NhZ2VIYW5k
bGVyRGVzY3JpcHRvcnMuZW5kKCkpOwotCi0gICAgYXV0byYgY29yZURlc2NyaXB0b3IgPSBpdC0+
dmFsdWUtPmRlc2NyaXB0b3IoKTsKLSAgICBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
TWFwLnJlbW92ZShzdGQ6Om1ha2VfcGFpcihjb3JlRGVzY3JpcHRvci5uYW1lKCksICZjb3JlRGVz
Y3JpcHRvci53b3JsZCgpKSk7CisgICAgYXV0byBpdCA9IHdvcmxkTWFwKCkuZmluZCh3b3JsZElk
ZW50aWZpZXIpOworICAgIGlmIChpdCA9PSB3b3JsZE1hcCgpLmVuZCgpKSB7CisgICAgICAgIFdU
RkxvZ0Fsd2F5cygiVHJ5aW5nIHRvIHJlbW92ZSBhIFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlciBm
cm9tIGEgVXNlckNvbnRlbnRXb3JsZCAoaWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhp
c3QuIiwgd29ybGRJZGVudGlmaWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIG1f
dXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMucmVtb3ZlKGl0KTsKKyAgICByZW1vdmVVc2Vy
U2NyaXB0TWVzc2FnZUhhbmRsZXJJbnRlcm5hbCgqaXQtPnZhbHVlLmZpcnN0LCB1c2VyU2NyaXB0
TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlkZW50
aWZpZXIpOworICAgIFVOVVNFRF9QQVJBTSh1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlm
aWVyKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6cmVtb3Zl
QWxsVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhjb25zdCBWZWN0b3I8dWludDY0X3Q+JiB3b3Js
ZElkZW50aWZpZXJzKQoreworI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCisgICAg
Ym9vbCB1c2VyTWVzc2FnZUhhbmRsZXJzQ2hhbmdlZCA9IGZhbHNlOworICAgIGZvciAoYXV0byYg
d29ybGRJZGVudGlmaWVyIDogd29ybGRJZGVudGlmaWVycykgeworICAgICAgICBhdXRvIGl0ID0g
d29ybGRNYXAoKS5maW5kKHdvcmxkSWRlbnRpZmllcik7CisgICAgICAgIGlmIChpdCA9PSB3b3Js
ZE1hcCgpLmVuZCgpKSB7CisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIlRyeWluZyB0byByZW1v
dmUgYWxsIFVzZXJTY3JpcHRNZXNzYWdlSGFuZGxlciBmcm9tIGEgVXNlckNvbnRlbnRXb3JsZCAo
aWQ9JSIgUFJJdTY0ICIpIHRoYXQgZG9lcyBub3QgZXhpc3QuIiwgd29ybGRJZGVudGlmaWVyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX3VzZXJNZXNz
YWdlSGFuZGxlcnMucmVtb3ZlKGl0LT52YWx1ZS5maXJzdC5nZXQoKSkpCisgICAgICAgICAgICB1
c2VyTWVzc2FnZUhhbmRsZXJzQ2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKHVzZXJN
ZXNzYWdlSGFuZGxlcnNDaGFuZ2VkKQorICAgICAgICBpbnZhbGlkYXRlQWxsUmVnaXN0ZXJlZFVz
ZXJNZXNzYWdlSGFuZGxlckludmFsaWRhdGlvbkNsaWVudHMoKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHdvcmxkSWRlbnRpZmllcnMpOwogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoVVNFUl9N
RVNTQUdFX0hBTkRMRVJTKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJT
Y3JpcHRNZXNzYWdlSGFuZGxlckludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdv
cmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyLCBjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgYXV0byYgbWVzc2FnZUhhbmRsZXJzSW5Xb3JsZCA9IG1fdXNl
ck1lc3NhZ2VIYW5kbGVycy5lbnN1cmUoJndvcmxkLCBbXSB7IHJldHVybiBWZWN0b3I8UmVmUHRy
PFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQcm94eT4+KCk7IH0pLml0ZXJhdG9yLT52
YWx1ZTsKKyAgICBtZXNzYWdlSGFuZGxlcnNJbldvcmxkLmFwcGVuZChXZWJVc2VyTWVzc2FnZUhh
bmRsZXJEZXNjcmlwdG9yUHJveHk6OmNyZWF0ZSh0aGlzLCBuYW1lLCB3b3JsZCwgdXNlclNjcmlw
dE1lc3NhZ2VIYW5kbGVySWRlbnRpZmllcikpOworfQorCit2b2lkIFdlYlVzZXJDb250ZW50Q29u
dHJvbGxlcjo6cmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySW50ZXJuYWwoSW5qZWN0ZWRC
dW5kbGVTY3JpcHRXb3JsZCYgd29ybGQsIHVpbnQ2NF90IHVzZXJTY3JpcHRNZXNzYWdlSGFuZGxl
cklkZW50aWZpZXIpCit7CisgICAgYXV0byBpdCA9IG1fdXNlck1lc3NhZ2VIYW5kbGVycy5maW5k
KCZ3b3JsZCk7CisgICAgaWYgKGl0ID09IG1fdXNlck1lc3NhZ2VIYW5kbGVycy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byYgdXNlck1lc3NhZ2VIYW5kbGVycyA9IGl0LT52YWx1
ZTsKKworICAgIGJvb2wgdXNlck1lc3NhZ2VIYW5kbGVyc0NoYW5nZWQgPSBmYWxzZTsKKyAgICBm
b3IgKGludCBpID0gdXNlck1lc3NhZ2VIYW5kbGVycy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICBpZiAodXNlck1lc3NhZ2VIYW5kbGVyc1tpXS0+aWRlbnRpZmllcigpID09IHVz
ZXJTY3JpcHRNZXNzYWdlSGFuZGxlcklkZW50aWZpZXIpIHsKKyAgICAgICAgICAgIHVzZXJNZXNz
YWdlSGFuZGxlcnMucmVtb3ZlKGkpOworICAgICAgICAgICAgdXNlck1lc3NhZ2VIYW5kbGVyc0No
YW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCF1c2VyTWVzc2FnZUhh
bmRsZXJzQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHVzZXJNZXNzYWdlSGFu
ZGxlcnMuaXNFbXB0eSgpKQorICAgICAgICBtX3VzZXJNZXNzYWdlSGFuZGxlcnMucmVtb3ZlKGl0
KTsKKworICAgIGludmFsaWRhdGVBbGxSZWdpc3RlcmVkVXNlck1lc3NhZ2VIYW5kbGVySW52YWxp
ZGF0aW9uQ2xpZW50cygpOworfQorI2VuZGlmCisKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJ
T05TKQogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJDb250ZW50RXh0ZW5z
aW9ucyhjb25zdCBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgV2ViQ29tcGlsZWRDb250ZW50RXh0
ZW5zaW9uRGF0YT4+JiB1c2VyQ29udGVudEV4dGVuc2lvbnMpCiB7CkBAIC0yOTgsOCArMzU5LDYg
QEAgdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJlbW92ZUFsbAogfQogI2VuZGlmCiAK
LQotCiB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdEludGVybmFs
KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQmIHdvcmxkLCB1aW50NjRfdCB1c2VyU2NyaXB0SWRl
bnRpZmllciwgVXNlclNjcmlwdCYmIHVzZXJTY3JpcHQpCiB7CiAgICAgYXV0byYgc2NyaXB0c0lu
V29ybGQgPSBtX3VzZXJTY3JpcHRzLmVuc3VyZSgmd29ybGQsIFtdIHsgcmV0dXJuIFZlY3Rvcjxz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OlVzZXJTY3JpcHQ+PigpOyB9KS5pdGVyYXRvci0+
dmFsdWU7CkBAIC0zNTIsMTMgKzQxMSwxMiBAQCB2b2lkIFdlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6YWRkVXNlclN0CiB7CiAgICAgYXV0byYgc3R5bGVTaGVldHNJbldvcmxkID0gbV91c2VyU3R5
bGVTaGVldHMuZW5zdXJlKCZ3b3JsZCwgW10geyByZXR1cm4gVmVjdG9yPHN0ZDo6cGFpcjx1aW50
NjRfdCwgV2ViQ29yZTo6VXNlclN0eWxlU2hlZXQ+PigpOyB9KS5pdGVyYXRvci0+dmFsdWU7CiAg
ICAgc3R5bGVTaGVldHNJbldvcmxkLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih1c2VyU3R5bGVTaGVl
dElkZW50aWZpZXIsIFdURk1vdmUodXNlclN0eWxlU2hlZXQpKSk7Ci0KLSAgICBpbnZhbGlkYXRl
SW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZyYW1lc0luQWxsUGFnZXMoKTsKIH0KIAogdm9p
ZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVu
ZGxlU2NyaXB0V29ybGQmIHdvcmxkLCBVc2VyU3R5bGVTaGVldCYmIHVzZXJTdHlsZVNoZWV0KQog
ewogICAgIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwod29ybGQsIDAsIFdURk1vdmUodXNlclN0
eWxlU2hlZXQpKTsKKyAgICBpbnZhbGlkYXRlSW5qZWN0ZWRTdHlsZVNoZWV0Q2FjaGVJbkFsbEZy
YW1lc0luQWxsUGFnZXMoKTsKIH0KIAogdm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OnJl
bW92ZVVzZXJTdHlsZVNoZWV0V2l0aFVSTChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiB3b3Js
ZCwgY29uc3QgVVJMJiB1cmwpCkBAIC00NDYsNCArNTA0LDE0IEBAIHZvaWQgV2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjpmb3JFYWNoVXMKICAgICB9CiB9CiAKKyNpZiBFTkFCTEUoVVNFUl9NRVNT
QUdFX0hBTkRMRVJTKQordm9pZCBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6OmZvckVhY2hVc2Vy
TWVzc2FnZUhhbmRsZXIoY29uc3Qgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlVz
ZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImKT4mIGZ1bmN0b3IpIGNvbnN0Cit7CisgICAgZm9y
IChjb25zdCBhdXRvJiB1c2VyTWVzc2FnZUhhbmRsZXJWZWN0b3IgOiBtX3VzZXJNZXNzYWdlSGFu
ZGxlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB1c2VyTWVzc2FnZUhh
bmRsZXIgOiB1c2VyTWVzc2FnZUhhbmRsZXJWZWN0b3IpCisgICAgICAgICAgICBmdW5jdG9yKCp1
c2VyTWVzc2FnZUhhbmRsZXIuZ2V0KCkpOworICAgIH0KK30KKyNlbmRpZgorCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTk4OTk1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJV
c2VyQ29udGVudENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQ7CiBj
bGFzcyBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhOwotCi0jaWYgRU5BQkxFKFVTRVJf
TUVTU0FHRV9IQU5ETEVSUykKIGNsYXNzIFdlYlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3JQ
cm94eTsKLSNlbmRpZgogCiBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXIgZmluYWwgOiBw
dWJsaWMgV2ViQ29yZTo6VXNlckNvbnRlbnRQcm92aWRlciwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CiBwdWJsaWM6CkBAIC03Myw3ICs3MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBm
b3JFYWNoVXNlclNjcmlwdChjb25zdCBzdGQ6OmZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6RE9NV3Jh
cHBlcldvcmxkJiwgY29uc3QgV2ViQ29yZTo6VXNlclNjcmlwdCYpPiYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZvaWQgZm9yRWFjaFVzZXJTdHlsZVNoZWV0KGNvbnN0IHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBXZWJDb3JlOjpVc2VyU3R5bGVTaGVldCYpPiYpIGNvbnN0IG92ZXJyaWRlOwogI2lm
IEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExFUlMpCi0gICAgY29uc3QgV2ViQ29yZTo6VXNlck1l
c3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCYgdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnMo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3Jz
TWFwOyB9CisgICAgdm9pZCBmb3JFYWNoVXNlck1lc3NhZ2VIYW5kbGVyKGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpVc2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJik+
JikgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tl
bmQmIHVzZXJDb250ZW50RXh0ZW5zaW9uQmFja2VuZCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fY29u
dGVudEV4dGVuc2lvbkJhY2tlbmQ7IH0KQEAgLTkzLDggKzkwLDkgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0
X3QgdXNlclNjcmlwdElkZW50aWZpZXIpOwogICAgIHZvaWQgcmVtb3ZlQWxsVXNlclN0eWxlU2hl
ZXRzKGNvbnN0IFZlY3Rvcjx1aW50NjRfdD4mKTsKIAotICAgIHZvaWQgYWRkVXNlclNjcmlwdE1l
c3NhZ2VIYW5kbGVycyhjb25zdCBWZWN0b3I8V2ViU2NyaXB0TWVzc2FnZUhhbmRsZXJIYW5kbGU+
Jik7Ci0gICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0TWVzc2FnZUhhbmRsZXIodWludDY0X3QpOwor
ICAgIHZvaWQgYWRkVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhjb25zdCBWZWN0b3I8V2ViU2Ny
aXB0TWVzc2FnZUhhbmRsZXJEYXRhPiYpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdE1lc3Nh
Z2VIYW5kbGVyKHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgdXNlclNjcmlwdElk
ZW50aWZpZXIpOworICAgIHZvaWQgcmVtb3ZlQWxsVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhj
b25zdCBWZWN0b3I8dWludDY0X3Q+Jik7CiAKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05T
KQogICAgIHZvaWQgYWRkVXNlckNvbnRlbnRFeHRlbnNpb25zKGNvbnN0IFZlY3RvcjxzdGQ6OnBh
aXI8U3RyaW5nLCBXZWJDb21waWxlZENvbnRlbnRFeHRlbnNpb25EYXRhPj4mKTsKQEAgLTEwMiwx
MiArMTAwLDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZW1vdmVBbGxVc2VyQ29udGVudEV4dGVu
c2lvbnMoKTsKICNlbmRpZgogCi0KICAgICB2b2lkIGFkZFVzZXJTY3JpcHRJbnRlcm5hbChJbmpl
Y3RlZEJ1bmRsZVNjcmlwdFdvcmxkJiwgdWludDY0X3QgdXNlclNjcmlwdElkZW50aWZpZXIsIFdl
YkNvcmU6OlVzZXJTY3JpcHQmJik7CiAgICAgdm9pZCByZW1vdmVVc2VyU2NyaXB0SW50ZXJuYWwo
SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRJZGVudGlmaWVy
KTsKICAgICB2b2lkIGFkZFVzZXJTdHlsZVNoZWV0SW50ZXJuYWwoSW5qZWN0ZWRCdW5kbGVTY3Jp
cHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTdHlsZVNoZWV0SWRlbnRpZmllciwgV2ViQ29yZTo6VXNl
clN0eWxlU2hlZXQmJik7CiAgICAgdm9pZCByZW1vdmVVc2VyU3R5bGVTaGVldEludGVybmFsKElu
amVjdGVkQnVuZGxlU2NyaXB0V29ybGQmLCB1aW50NjRfdCB1c2VyU3R5bGVTaGVldElkZW50aWZp
ZXIpOwotCisjaWYgRU5BQkxFKFVTRVJfTUVTU0FHRV9IQU5ETEVSUykKKyAgICB2b2lkIGFkZFVz
ZXJTY3JpcHRNZXNzYWdlSGFuZGxlckludGVybmFsKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQm
LCB1aW50NjRfdCB1c2VyU2NyaXB0TWVzc2FnZUhhbmRsZXJJZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVySW50ZXJu
YWwoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCYsIHVpbnQ2NF90IHVzZXJTY3JpcHRNZXNzYWdl
SGFuZGxlcklkZW50aWZpZXIpOworI2VuZGlmCiAKICAgICB1aW50NjRfdCBtX2lkZW50aWZpZXI7
CiAKQEAgLTExOCw4ICsxMTgsOCBAQCBwcml2YXRlOgogICAgIFdvcmxkVG9Vc2VyU3R5bGVTaGVl
dE1hcCBtX3VzZXJTdHlsZVNoZWV0czsKIAogI2lmIEVOQUJMRShVU0VSX01FU1NBR0VfSEFORExF
UlMpCi0gICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYlVzZXJNZXNzYWdlSGFuZGxlckRl
c2NyaXB0b3JQcm94eT4+IG1fdXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvcnM7Ci0gICAgV2Vi
Q29yZTo6VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxl
ckRlc2NyaXB0b3JzTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8SW5qZWN0ZWRCdW5k
bGVTY3JpcHRXb3JsZD4sIFZlY3RvcjxSZWZQdHI8V2ViVXNlck1lc3NhZ2VIYW5kbGVyRGVzY3Jp
cHRvclByb3h5Pj4+IFdvcmxkVG9Vc2VyTWVzc2FnZUhhbmRsZXJWZWN0b3JNYXA7CisgICAgV29y
bGRUb1VzZXJNZXNzYWdlSGFuZGxlclZlY3Rvck1hcCBtX3VzZXJNZXNzYWdlSGFuZGxlcnM7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQogICAgIFdlYkNvcmU6OkNvbnRl
bnRFeHRlbnNpb25zOjpDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQgbV9jb250ZW50RXh0ZW5zaW9u
QmFja2VuZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAxOTg5OTUpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsOCArMzUsOSBAQCBtZXNzYWdlcyAtPiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXIgewogICAgIFJlbW92ZVVzZXJTdHlsZVNoZWV0KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmll
ciwgdWludDY0X3QgaWRlbnRpZmllcik7CiAgICAgUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKFZl
Y3Rvcjx1aW50NjRfdD4gd29ybGRJZGVudGlmaWVycyk7CiAKLSAgICBBZGRVc2VyU2NyaXB0TWVz
c2FnZUhhbmRsZXJzKFZlY3RvcjxXZWJLaXQ6OldlYlNjcmlwdE1lc3NhZ2VIYW5kbGVySGFuZGxl
PiBzY3JpcHRNZXNzYWdlSGFuZGxlcnMpOwotICAgIFJlbW92ZVVzZXJTY3JpcHRNZXNzYWdlSGFu
ZGxlcih1aW50NjRfdCBpZGVudGlmaWVyKTsKKyAgICBBZGRVc2VyU2NyaXB0TWVzc2FnZUhhbmRs
ZXJzKFZlY3RvcjxzdHJ1Y3QgV2ViS2l0OjpXZWJTY3JpcHRNZXNzYWdlSGFuZGxlckRhdGE+IHNj
cmlwdE1lc3NhZ2VIYW5kbGVycyk7CisgICAgUmVtb3ZlVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVy
KHVpbnQ2NF90IHdvcmxkSWRlbnRpZmllciwgdWludDY0X3QgaWRlbnRpZmllcik7CisgICAgUmVt
b3ZlQWxsVXNlclNjcmlwdE1lc3NhZ2VIYW5kbGVycyhWZWN0b3I8dWludDY0X3Q+IHdvcmxkSWRl
bnRpZmllcnMpOwogCiAjaWYgRU5BQkxFKENPTlRFTlRfRVhURU5TSU9OUykKICAgICBBZGRVc2Vy
Q29udGVudEV4dGVuc2lvbnMoVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFdlYktpdDo6V2ViQ29t
cGlsZWRDb250ZW50RXh0ZW5zaW9uRGF0YT4+IHVzZXJDb250ZW50RmlsdGVycyk7CkluZGV4OiBU
b29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
OTg5OTUpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAxNi0wNC0wMyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIEFk
ZCBTUEkgdG8gYWxsb3cgaW5zdGFsbCBzY3JpcHQgbWVzc2FnZSBoYW5kbGVycyBpbiBpc29sYXRl
ZCB3b3JsZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NjE1MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVy
Lm1tOgorICAgICAgICBBZGQgbmV3IHRlc3QsIFdLVXNlckNvbnRlbnRDb250cm9sbGVyLlNjcmlw
dE1lc3NhZ2VIYW5kbGVyQmFzaWNQb3N0SXNvbGF0ZWRXb3JsZAorCiAyMDE2LTA0LTAzICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHRoZSBjb3JyZWN0IHZh
bHVlIGZvciB0aGUgZmlyc3QgbmlnaHRseSBidWlsZCB3aXRoIGZyYW1ld29ya3MgYnVpbHQgZm9y
IE9TIFggMTAuMTEuCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2Nv
YS9Vc2VyQ29udGVudENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyQ29jb2EvVXNlckNvbnRlbnRDb250cm9sbGVyLm1tCShyZXZpc2lv
biAxOTg5OTUpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJDb2NvYS9Vc2Vy
Q29udGVudENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDU1IEBAIFRF
U1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFNjcmlwdE1lc3MKICAgICBFWFBFQ1RfV0tfU1RS
RVEoQCJIZWxsbyIsIChOU1N0cmluZyAqKVtsYXN0U2NyaXB0TWVzc2FnZSBib2R5XSk7CiB9CiAK
K1RFU1QoV0tVc2VyQ29udGVudENvbnRyb2xsZXIsIFNjcmlwdE1lc3NhZ2VIYW5kbGVyQmFzaWNQ
b3N0SXNvbGF0ZWRXb3JsZCkKK3sKKyAgICBSZXRhaW5QdHI8X1dLVXNlckNvbnRlbnRXb3JsZD4g
d29ybGQgPSBhZG9wdE5TKFtfV0tVc2VyQ29udGVudFdvcmxkIHdvcmxkV2l0aE5hbWU6QCJUZXN0
V29ybGQiXSk7CisKKyAgICBSZXRhaW5QdHI8U2NyaXB0TWVzc2FnZUhhbmRsZXI+IGhhbmRsZXIg
PSBhZG9wdE5TKFtbU2NyaXB0TWVzc2FnZUhhbmRsZXIgYWxsb2NdIGluaXRdKTsKKyAgICBSZXRh
aW5QdHI8V0tVc2VyU2NyaXB0PiB1c2VyU2NyaXB0ID0gYWRvcHROUyhbW1dLVXNlclNjcmlwdCBh
bGxvY10gX2luaXRXaXRoU291cmNlOkAid2luZG93LndlYmtpdC5tZXNzYWdlSGFuZGxlcnMudGVz
dEhhbmRsZXIucG9zdE1lc3NhZ2UoJ0hlbGxvJykiIGluamVjdGlvblRpbWU6V0tVc2VyU2NyaXB0
SW5qZWN0aW9uVGltZUF0RG9jdW1lbnRTdGFydCBmb3JNYWluRnJhbWVPbmx5Ok5PIGxlZ2FjeVdo
aXRlbGlzdDpAW10gbGVnYWN5QmxhY2tsaXN0OkBbXSB1c2VyQ29udGVudFdvcmxkOndvcmxkLmdl
dCgpXSk7CisKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3Q29uZmlndXJhdGlvbj4gY29uZmlndXJh
dGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7Cisg
ICAgW1tjb25maWd1cmF0aW9uIHVzZXJDb250ZW50Q29udHJvbGxlcl0gX2FkZFNjcmlwdE1lc3Nh
Z2VIYW5kbGVyOmhhbmRsZXIuZ2V0KCkgbmFtZTpAInRlc3RIYW5kbGVyIiB1c2VyQ29udGVudFdv
cmxkOndvcmxkLmdldCgpXTsKKyAgICBbW2NvbmZpZ3VyYXRpb24gdXNlckNvbnRlbnRDb250cm9s
bGVyXSBhZGRVc2VyU2NyaXB0OnVzZXJTY3JpcHQuZ2V0KCldOworCisgICAgUmV0YWluUHRyPFdL
V2ViVmlldz4gd2ViVmlldyA9IGFkb3B0TlMoW1tXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6TlNNYWtlUmVjdCgwLCAwLCA4MDAsIDYwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9u
LmdldCgpXSk7CisKKyAgICBSZXRhaW5QdHI8U2ltcGxlTmF2aWdhdGlvbkRlbGVnYXRlPiBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tTaW1wbGVOYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsK
KyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOworCisg
ICAgTlNVUkxSZXF1ZXN0ICpyZXF1ZXN0ID0gW05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpb
W05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5z
aW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXV07CisK
KyAgICBpc0RvbmVXaXRoTmF2aWdhdGlvbiA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGxvYWRSZXF1
ZXN0OnJlcXVlc3RdOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZyZWNlaXZlZFNj
cmlwdE1lc3NhZ2UpOworICAgIHJlY2VpdmVkU2NyaXB0TWVzc2FnZSA9IGZhbHNlOworCisgICAg
RVhQRUNUX1dLX1NUUkVRKEAiSGVsbG8iLCAoTlNTdHJpbmcgKilbbGFzdFNjcmlwdE1lc3NhZ2Ug
Ym9keV0pOworCisgICAgaWYgKCFpc0RvbmVXaXRoTmF2aWdhdGlvbikKKyAgICAgICAgVGVzdFdl
YktpdEFQSTo6VXRpbDo6cnVuKCZpc0RvbmVXaXRoTmF2aWdhdGlvbik7CisKKyAgICBfX2Jsb2Nr
IGJvb2wgaXNEb25lRXZhbHVhdGluZ1NjcmlwdCA9IGZhbHNlOworICAgIF9fYmxvY2sgTlNTdHJp
bmcgKnJlc3VsdFZhbHVlID0gQCIiOworICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDoK
KyAgICAgICAgQCJ2YXIgcmVzdWx0OyIKKyAgICAgICAgICJpZiAod2luZG93LndlYmtpdCAmJiB3
aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5kbGVycyAmJiB3aW5kb3cud2Via2l0Lm1lc3NhZ2VIYW5k
bGVycy50ZXN0SGFuZGxlcikgeyIKKyAgICAgICAgICIgICAgcmVzdWx0ID0geyAncmVzdWx0Jzog
J0ZBSUwnIH07IgorICAgICAgICAgIn0gZWxzZSB7IgorICAgICAgICAgIiAgICByZXN1bHQgPSB7
ICdyZXN1bHQnOiAnUEFTUycgfTsiCisgICAgICAgICAifSAiIAorICAgICAgICAgInJlc3VsdDsi
CisgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcjpeKGlkIHZhbHVlLCBOU0Vycm9yICplcnJvcikg
eworICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBbKChOU0RpY3Rpb25hcnkgKil2YWx1ZSlbQCJy
ZXN1bHQiXSBjb3B5XTsKKyAgICAgICAgICAgIGlzRG9uZUV2YWx1YXRpbmdTY3JpcHQgPSB0cnVl
OworICAgICAgICB9XTsKKworICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmaXNEb25lRXZh
bHVhdGluZ1NjcmlwdCk7CisKKyAgICBFWFBFQ1RfV0tfU1RSRVEoQCJQQVNTIiwgcmVzdWx0VmFs
dWUpOworfQorCiBURVNUKFdLVXNlckNvbnRlbnRDb250cm9sbGVyLCBTY3JpcHRNZXNzYWdlSGFu
ZGxlckJhc2ljUmVtb3ZlKQogewogICAgIFJldGFpblB0cjxTY3JpcHRNZXNzYWdlSGFuZGxlcj4g
aGFuZGxlciA9IGFkb3B0TlMoW1tTY3JpcHRNZXNzYWdlSGFuZGxlciBhbGxvY10gaW5pdF0pOwo=
</data>
<flag name="review"
          id="299853"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>