<?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>24579</bug_id>
          
          <creation_ts>2009-03-13 10:50:15 -0700</creation_ts>
          <short_desc>Many V8*Event* files are misplaced.</short_desc>
          <delta_ts>2009-03-13 12:15:04 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="David Levin">levin</reporter>
          <assigned_to name="David Levin">levin</assigned_to>
          <cc>dglazkov</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113625</commentid>
    <comment_count>0</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-13 10:50:15 -0700</bug_when>
    <thetext>They are currently in the v8/custom directory which is for *custom bindings*.  The events code is infrastructure for supporting the bindings and should be in the bindings/v8 directory.

Of course, V8CustomEventListener.* should remain in the custom directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113626</commentid>
    <comment_count>1</comment_count>
      <attachid>28586</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-13 10:53:56 -0700</bug_when>
    <thetext>Created attachment 28586
Proposed fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113627</commentid>
    <comment_count>2</comment_count>
      <attachid>28586</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-13 10:54:55 -0700</bug_when>
    <thetext>Comment on attachment 28586
Proposed fix.

easy-peasy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113644</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-03-13 12:15:04 -0700</bug_when>
    <thetext>Committed in r41678.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28586</attachid>
            <date>2009-03-13 10:53:56 -0700</date>
            <delta_ts>2009-03-13 10:54:55 -0700</delta_ts>
            <desc>Proposed fix.</desc>
            <filename>bug24579.txt</filename>
            <type>text/plain</type>
            <size>81235</size>
            <attacher name="David Levin">levin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NDQ4ZWY1OS4uNDY5YWM5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAwOS0wMy0xMyAgRGF2aWQgTGV2aW4g
IDxsZXZpbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0
NTc5CisgICAgICAgIE1hbnkgVjgqRXZlbnQqIGZpbGVzIGFyZSBtaXNwbGFjZWQuCisKKyAgICAg
ICAgVGhpcyBjb2RlIGlzIGluZnJhc3RydWN0dXJlIGZvciBzdXBwb3J0aW5nIHRoZSBiaW5kaW5n
cyBhbmQgdGh1cyBzaG91bGQKKyAgICAgICAgYmUgaW4gdGhlIGJpbmRpbmdzL3Y4IGRpcmVjdG9y
eS4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcDog
UmVuYW1lZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RFdmVudExp
c3RlbmVyLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5l
ci5oOiBSZW5hbWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXIuaC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEV2ZW50Q3VzdG9tLmNwcDog
UmVuYW1lZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3Bw
LgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwOiBSZW5hbWVk
IGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMYXp5RXZlbnRMaXN0ZW5lci5jcHAu
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oOiBSZW5hbWVkIGZy
b20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMYXp5RXZlbnRMaXN0ZW5lci5oLgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5jcHA6IFJlbmFtZWQgZnJv
bSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE9iamVjdEV2ZW50TGlzdGVuZXIuY3BwLgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oOiBSZW5hbWVkIGZy
b20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhPYmplY3RFdmVudExpc3RlbmVyLmguCisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHA6IFJl
bmFtZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmNwcC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmg6IFJlbmFtZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRFdmVudExpc3RlbmVyLmguCisKIDIwMDktMDMtMTMgIEppYW4gTGkgIDxqaWFu
bGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIu
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0ZW5lci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3ZDZiMwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCkBAIC0w
LDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJUb2tlbml6
ZXIuaCIKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitW
OEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqIGZy
YW1lLCBib29sIGlzSW5saW5lKQorICAgIDogbV9pc0lubGluZShpc0lubGluZSkKKyAgICAsIG1f
ZnJhbWUoZnJhbWUpCisgICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAgICAsIG1fY29sdW1uTnVtYmVy
KDApCit7CisgICAgaWYgKCFtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHZXQg
dGhlIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgaWYgYW55LgorICAgIGlmIChtX2lzSW5saW5lICYm
IG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7CisgICAgICAgIG1fbGluZU51bWJl
ciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpLT5saW5lTnVtYmVyKCk7CisgICAg
ICAgIG1fY29sdW1uTnVtYmVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCktPmNv
bHVtbk51bWJlcigpOworICAgIH0KK30KKwordm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6
aW52b2tlRXZlbnRIYW5kbGVyKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIEV2ZW50
KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIC8vIEVudGVyIHRoZSBWOCBjb250
ZXh0IGluIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGV2ZW50IGhhbmRsaW5nLgorICAgIHY4OjpDb250
ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKKworICAgIC8vIEdldCB0aGUgVjggd3JhcHBlciBm
b3IgdGhlIGV2ZW50IG9iamVjdC4KKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9
IFY4UHJveHk6OkV2ZW50VG9WOE9iamVjdChldmVudCk7CisKKyAgICAvLyBGb3IgY29tcGF0aWJp
bGl0eSwgd2Ugc3RvcmUgdGhlIGV2ZW50IG9iamVjdCBhcyBhIHByb3BlcnR5IG9uIHRoZSB3aW5k
b3cgY2FsbGVkICJldmVudCIuICBCZWNhdXNlIHRoaXMgaXMgdGhlIGdsb2JhbCBuYW1lc3BhY2Us
IHdlIHNhdmUgYXdheSBhbnkKKyAgICAvLyBleGlzdGluZyAiZXZlbnQiIHByb3BlcnR5LCBhbmQg
dGhlbiByZXN0b3JlIGl0IGFmdGVyIGV4ZWN1dGluZyB0aGUgamF2YXNjcmlwdCBoYW5kbGVyLgor
ICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBldmVudFN5bWJvbCA9IHY4OjpTdHJpbmc6Ok5ld1N5
bWJvbCgiZXZlbnQiKTsKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXR1cm5WYWx1ZTsKKwor
ICAgIHsKKyAgICAgICAgLy8gQ2F0Y2ggZXhjZXB0aW9ucyB0aHJvd24gaW4gdGhlIGV2ZW50IGhh
bmRsZXIgc28gdGhleSBkbyBub3QgcHJvcGFnYXRlIHRvIGphdmFzY3JpcHQgY29kZSB0aGF0IGNh
dXNlZCB0aGUgZXZlbnQgdG8gZmlyZS4KKyAgICAgICAgLy8gU2V0dGluZyBhbmQgZ2V0dGluZyB0
aGUgJ2V2ZW50JyBwcm9wZXJ0eSBvbiB0aGUgZ2xvYmFsIG9iamVjdCBjYW4gdGhyb3cgZXhjZXB0
aW9ucyBhcyB3ZWxsIChmb3IgaW5zdGFuY2UgaWYgYWNjZXNzb3JzIHRoYXQKKyAgICAgICAgLy8g
dGhyb3cgZXhjZXB0aW9ucyBhcmUgZGVmaW5lZCBmb3IgJ2V2ZW50JyB1c2luZyBfX2RlZmluZUdl
dHRlcl9fIGFuZCBfX2RlZmluZVNldHRlcl9fIG9uIHRoZSBnbG9iYWwgb2JqZWN0KS4KKyAgICAg
ICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOworICAgICAgICB0cnlDYXRjaC5TZXRWZXJib3NlKHRy
dWUpOworCisgICAgICAgIC8vIFNhdmUgdGhlIG9sZCAnZXZlbnQnIHByb3BlcnR5IHNvIHdlIGNh
biByZXN0b3JlIGl0IGxhdGVyLgorICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzYXZlZEV2
ZW50ID0gY29udGV4dC0+R2xvYmFsKCktPkdldChldmVudFN5bWJvbCk7CisgICAgICAgIHRyeUNh
dGNoLlJlc2V0KCk7CisKKyAgICAgICAgLy8gTWFrZSB0aGUgZXZlbnQgYXZhaWxhYmxlIGluIHRo
ZSB3aW5kb3cgb2JqZWN0LgorICAgICAgICAvLworICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
IG5vdCB3b3JrIGFzIGl0IGRvZXMgd2l0aCBqc2MgYmluZGluZ3MgaWYgdGhlIHdpbmRvdy5ldmVu
dCBwcm9wZXJ0eSBpcyBhbHJlYWR5IHNldC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBwcm9w
ZXJ0eQorICAgICAgICAvLyBhY2Nlc3MgaXMgaW50ZXJjZXB0ZWQgY29ycmVjdGx5LgorICAgICAg
ICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KGV2ZW50U3ltYm9sLCBqc0V2ZW50KTsKKyAgICAgICAg
dHJ5Q2F0Y2guUmVzZXQoKTsKKworICAgICAgICAvLyBDYWxsIHRoZSBldmVudCBoYW5kbGVyLgor
ICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKGpzRXZlbnQsIGV2ZW50
LCBpc1dpbmRvd0V2ZW50KTsKKyAgICAgICAgdHJ5Q2F0Y2guUmVzZXQoKTsKKworICAgICAgICAv
LyBSZXN0b3JlIHRoZSBvbGQgZXZlbnQuIFRoaXMgbXVzdCBiZSBkb25lIGZvciBhbGwgZXhpdCBw
YXRocyB0aHJvdWdoIHRoaXMgbWV0aG9kLgorICAgICAgICBpZiAoc2F2ZWRFdmVudC5Jc0VtcHR5
KCkpCisgICAgICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KGV2ZW50U3ltYm9sLCB2ODo6
VW5kZWZpbmVkKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb250ZXh0LT5HbG9iYWwo
KS0+U2V0KGV2ZW50U3ltYm9sLCBzYXZlZEV2ZW50KTsKKyAgICAgICAgdHJ5Q2F0Y2guUmVzZXQo
KTsKKyAgICB9CisKKyAgICBBU1NFUlQoIVY4UHJveHk6OkhhbmRsZU91dE9mTWVtb3J5KCkgfHwg
cmV0dXJuVmFsdWUuSXNFbXB0eSgpKTsKKworICAgIGlmIChyZXR1cm5WYWx1ZS5Jc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcmV0dXJuVmFsdWUtPklzTnVsbCgpICYmICFy
ZXR1cm5WYWx1ZS0+SXNVbmRlZmluZWQoKSAmJiBldmVudC0+c3RvcmVzUmVzdWx0QXNTdHJpbmco
KSkKKyAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHRvV2ViQ29yZVN0cmluZyhyZXR1cm5WYWx1
ZSkpOworCisgICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbiBpZiB0aGUgcmV0dXJuIHZhbHVl
IGlzIGZhbHNlOworICAgIC8vIEZJWE1FOiBBZGQgZXhhbXBsZSwgYW5kIHJlZmVyZW5jZSB0byBi
dWcgZW50cnkuCisgICAgaWYgKG1faXNJbmxpbmUgJiYgcmV0dXJuVmFsdWUtPklzQm9vbGVhbigp
ICYmICFyZXR1cm5WYWx1ZS0+Qm9vbGVhblZhbHVlKCkpCisgICAgICAgIGV2ZW50LT5wcmV2ZW50
RGVmYXVsdCgpOworfQorCit2b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVu
dChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKK3sKKyAgICAvLyBFdmVudExpc3Rl
bmVyIGNvdWxkIGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBmcmFtZS4KKyAgICBpZiAoZGlzY29u
bmVjdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjYWxsYmFjayBmdW5jdGlv
biBvbiBYTUxIdHRwUmVxdWVzdCBjYW4gY2xlYXIgdGhlIGV2ZW50IGxpc3RlbmVyIGFuZCBkZXN0
cm95cyAndGhpcycgb2JqZWN0LiBLZWVwIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGl0LgorICAgIC8v
IFNlZSBpc3N1ZSA4ODk4MjkuCisgICAgUmVmUHRyPFY4QWJzdHJhY3RFdmVudExpc3RlbmVyPiBw
cm90ZWN0KHRoaXMpOworCisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAg
djg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQobV9m
cmFtZSk7CisgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBtX2ZyYW1lIGNhbiByZW1vdmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgcHJvdGVj
dCBpdCB1bnRpbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucy4KKyAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3RGcmFtZShtX2ZyYW1lKTsKKworICAgIGludm9rZUV2ZW50SGFuZGxlcihjb250
ZXh0LCBldmVudCwgaXNXaW5kb3dFdmVudCk7CisKKyAgICBEb2N1bWVudDo6dXBkYXRlRG9jdW1l
bnRzUmVuZGVyaW5nKCk7Cit9CisKK3ZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRpc3Bv
c2VMaXN0ZW5lck9iamVjdCgpCit7CisgICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkgewor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgVjhQcm94eTo6VW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0
aGlzLCBtX2xpc3RlbmVyKTsKKyNlbmRpZgorICAgICAgICBtX2xpc3RlbmVyLkRpc3Bvc2UoKTsK
KyAgICAgICAgbV9saXN0ZW5lci5DbGVhcigpOworICAgIH0KK30KKwordjg6OkxvY2FsPHY4OjpP
YmplY3Q+IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpnZXRSZWNlaXZlck9iamVjdChFdmVudCog
ZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKK3sKKyAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0
eSgpICYmICFtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB2ODo6TG9j
YWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3RlbmVyKTsKKworICAgIGlmIChpc1dpbmRvd0V2ZW50
KQorICAgICAgICByZXR1cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7CisK
KyAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBWOFByb3h5OjpFdmVudFRhcmdldFRvVjhPYmpl
Y3QodGFyZ2V0KTsKKyAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+KCk7CisgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0Pjo6
TmV3KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0
RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEFic3RyYWN0RXZlbnRMaXN0
ZW5lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhM2I3ZTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVy
LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhBYnN0cmFjdEV2
ZW50TGlzdGVuZXJfaAorI2RlZmluZSBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcl9oCisKKyNpbmNs
dWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgRXZlbnQ7CisgICAgY2xhc3MgRnJhbWU7CisKKyAgICAvLyBUaGVy
ZSBhcmUgdHdvIGtpbmRzIG9mIGV2ZW50IGxpc3RlbmVyczogSFRNTCBvciBub24tSE1UTC4gb25s
b2FkLCBvbmZvY3VzLCBldGMgKGF0dHJpYnV0ZXMpIGFyZSBhbHdheXMgSFRNTCBldmVudCBoYW5k
bGVyIHR5cGU7CisgICAgLy8gRXZlbnQgbGlzdGVuZXJzIGFkZGVkIGJ5IFdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyIG9yIEV2ZW50VGFyZ2V0Tm9kZTo6YWRkRXZlbnRMaXN0ZW5lciBhcmUgbm9uLUhU
TUwgdHlwZS4KKyAgICAvLworICAgIC8vIFdoeSBkb2VzIHRoaXMgbWF0dGVyPworICAgIC8vIFdl
YktpdCBkb2VzIG5vdCBhbGxvdyBkdXBsaWNhdGVkIEhUTUwgZXZlbnQgaGFuZGxlcnMgb2YgdGhl
IHNhbWUgdHlwZSwgYnV0IEFMTE9XcyBkdXBsaWNhdGVkIG5vbi1IVE1MIGV2ZW50IGhhbmRsZXJz
LgorICAgIGNsYXNzIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyIDogcHVibGljIEV2ZW50TGlzdGVu
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+VjhBYnN0cmFjdEV2ZW50TGlzdGVu
ZXIoKSB7IH0KKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBvd25lciBmcmFtZSBvZiB0aGUgbGlz
dGVuZXIuCisgICAgICAgIEZyYW1lKiBmcmFtZSgpIHsgcmV0dXJuIG1fZnJhbWU7IH0KKworICAg
ICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXZlbnQoRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQp
OworICAgICAgICB2b2lkIGludm9rZUV2ZW50SGFuZGxlcih2ODo6SGFuZGxlPHY4OjpDb250ZXh0
PiwgRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpOworCisgICAgICAgIC8vIFJldHVybnMgdGhl
IGxpc3RlbmVyIG9iamVjdCwgZWl0aGVyIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LgorICAgICAg
ICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRMaXN0ZW5lck9iamVjdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xp
c3RlbmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERpc3Bvc2UgbGlzdGVuZXIgb2JqZWN0
IGFuZCBjbGVhciB0aGUgaGFuZGxlLgorICAgICAgICB2b2lkIGRpc3Bvc2VMaXN0ZW5lck9iamVj
dCgpOworCisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQoKSBjb25zdCB7IHJldHVy
biAhbV9mcmFtZTsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6T2JqZWN0PiBtX2xpc3RlbmVyOworCisgICAgICAgIC8vIEluZGljYXRlcyBpZiB0aGlzIGlz
IGFuIEhUTUwgdHlwZSBsaXN0ZW5lci4KKyAgICAgICAgYm9vbCBtX2lzSW5saW5lOworCisgICAg
cHJpdmF0ZToKKyAgICAgICAgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCBib29sIGlz
SW5saW5lKTsKKworICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0
ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc2V2ZW50LCBFdmVudCosIGJvb2wg
aXNXaW5kb3dFdmVudCkgPSAwOworCisgICAgICAgIC8vIEdldCB0aGUgcmVjZWl2ZXIgb2JqZWN0
IHRvIHVzZSBmb3IgZXZlbnQgbGlzdGVuZXIgY2FsbC4KKyAgICAgICAgdjg6OkxvY2FsPHY4OjpP
YmplY3Q+IGdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKwor
ICAgICAgICAvLyBGcmFtZSB0byB3aGljaCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgYXR0YWNoZWQg
dG8uIEFuIGV2ZW50IGxpc3RlbmVyIG11c3QgYmUgZGVzdHJveWVkIGJlZm9yZSBpdHMgb3duZXIg
ZnJhbWUgaXMKKyAgICAgICAgLy8gZGVsZXRlZC4gU2VlIGZhc3QvZG9tL3JlcGxhY2VDaGlsZC5o
dG1sCisgICAgICAgIC8vIEZJWE1FOiB0aGlzIGNvdWxkIGhvbGQgbV9mcmFtZSBsaXZlIHVudGls
IHRoZSBldmVudCBsaXN0ZW5lciBpcyBkZWxldGVkLgorICAgICAgICBGcmFtZSogbV9mcmFtZTsK
KworICAgICAgICAvLyBQb3NpdGlvbiBpbiB0aGUgSFRNTCBzb3VyY2UgZm9yIEhUTUwgZXZlbnQg
bGlzdGVuZXJzLgorICAgICAgICBpbnQgbV9saW5lTnVtYmVyOworICAgICAgICBpbnQgbV9jb2x1
bW5OdW1iZXI7CisKKyAgICAgICAgZnJpZW5kIGNsYXNzIFY4RXZlbnRMaXN0ZW5lcjsKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFY4T2JqZWN0RXZlbnRMaXN0ZW5lcjsKKyAgICAgICAgZnJpZW5kIGNs
YXNzIFY4TGF6eUV2ZW50TGlzdGVuZXI7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEV2ZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhFdmVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRh
ZTg0NQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhFdmVudEN1c3Rv
bS5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRF
dmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitBQ0NFU1NPUl9TRVRURVIoRXZlbnRSZXR1cm5WYWx1ZSkK
K3sKKyAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+
KGluZm8uSG9sZGVyKCkpOworICAgIGV2ZW50LT5zZXREZWZhdWx0UHJldmVudGVkKCF2YWx1ZS0+
Qm9vbGVhblZhbHVlKCkpOworfQorCitBQ0NFU1NPUl9HRVRURVIoRXZlbnREYXRhVHJhbnNmZXIp
Cit7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50
PihpbmZvLkhvbGRlcigpKTsKKworICAgIGlmIChldmVudC0+aXNEcmFnRXZlbnQoKSkKKyAgICAg
ICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKKworICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX0dFVFRFUihFdmVudENsaXBib2FyZERh
dGEpCit7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTmF0aXZlPEV2
ZW50PihpbmZvLkhvbGRlcigpKTsKKworICAgIGlmIChldmVudC0+aXNDbGlwYm9hcmRFdmVudCgp
KQorICAgICAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBC
T0FSRCwgc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsK
KworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK0FDQ0VTU09SX0dFVFRFUihFdmVu
dFNyY0VsZW1lbnQpCit7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gVjhQcm94eTo6RXZlbnRU
YXJnZXRUb1Y4T2JqZWN0KGV2ZW50LT50YXJnZXQoKSk7Cit9CisKK0FDQ0VTU09SX0dFVFRFUihF
dmVudFJldHVyblZhbHVlKQoreworICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OkRPTVdyYXBw
ZXJUb05hdGl2ZTxFdmVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIGV2ZW50LT5kZWZh
dWx0UHJldmVudGVkKCkgPyB2ODo6RmFsc2UoKSA6IHY4OjpUcnVlKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZl
bnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNGM3OWQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TGF6eUV2ZW50TGlzdGVuZXIuY3BwCkBA
IC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlY4TGF6eUV2ZW50TGlzdGVuZXIuaCIKKworI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1Y4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6eUV2ZW50TGlzdGVuZXIoRnJhbWUg
KmZyYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKQor
ICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoZnJhbWUsIHRydWUpCisgICAgLCBtX2NvZGUo
Y29kZSkKKyAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9uTmFtZSkKKyAgICAsIG1fY29tcGls
ZWQoZmFsc2UpCisgICAgLCBtX3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVkKGZhbHNlKQoreworfQor
CitWOExhenlFdmVudExpc3RlbmVyOjp+VjhMYXp5RXZlbnRMaXN0ZW5lcigpCit7CisgICAgZGlz
cG9zZUxpc3RlbmVyT2JqZWN0KCk7CisKKyAgICAvLyBEaXNwb3NlIHdyYXBwZWQgZnVuY3Rpb24K
KyAgICBpZiAoIW1fd3JhcHBlZEZ1bmN0aW9uLklzRW1wdHkoKSkgeworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgVjhQcm94eTo6VW5yZWdpc3Rlckdsb2JhbEhhbmRsZSh0aGlzLCBtX3dyYXBwZWRG
dW5jdGlvbik7CisjZW5kaWYKKyAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24uRGlzcG9zZSgpOwor
ICAgICAgICBtX3dyYXBwZWRGdW5jdGlvbi5DbGVhcigpOworICAgIH0KK30KKwordjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Z2V0TGlzdGVuZXJGdW5jdGlvbigp
Cit7CisgICAgaWYgKG1fY29tcGlsZWQpIHsKKyAgICAgICAgQVNTRVJUKG1fbGlzdGVuZXIuSXNF
bXB0eSgpIHx8IG1fbGlzdGVuZXItPklzRnVuY3Rpb24oKSk7CisgICAgICAgIHJldHVybiBtX2xp
c3RlbmVyLklzRW1wdHkoKSA/IHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCkgOiB2ODo6TG9jYWw8
djg6OkZ1bmN0aW9uPjo6TmV3KHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46OkNhc3QobV9s
aXN0ZW5lcikpOworICAgIH0KKworICAgIG1fY29tcGlsZWQgPSB0cnVlOworCisgICAgQVNTRVJU
KG1fZnJhbWUpOworCisgICAgeworICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIGNvbnRleHQgb2Yg
bV9mcmFtZS4KKyAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgICAg
IC8vIFVzZSB0aGUgb3V0ZXIgc2NvcGUgdG8gaG9sZCBjb250ZXh0LgorICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6R2V0Q29udGV4dChtX2ZyYW1lKTsK
KyAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UgY291bGQgbm90IGdldCB0aGUgY29udGV4dC4KKyAg
ICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2Nh
bDx2ODo6RnVuY3Rpb24+KCk7CisKKyAgICAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNv
bnRleHQpOworCisgICAgICAgIC8vIFdyYXAgZnVuY3Rpb24gYXJvdW5kIHRoZSBldmVudCBjb2Rl
LiAgVGhlIHBhcmVudGhlc2lzIGFyb3VuZCB0aGUgZnVuY3Rpb24gYXJlIG5lZWRlZCBzbyB0aGF0
IGV2YWx1YXRpbmcgdGhlIGNvZGUgeWllbGRzCisgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB2YWx1
ZS4gIFdpdGhvdXQgdGhlIHBhcmVudGhlc2lzIHRoZSBmdW5jdGlvbiB2YWx1ZSBpcyB0aHJvd24g
YXdheS4KKworICAgICAgICAvLyBNYWtlIGl0IGFuIGFub255bW91cyBmdW5jdGlvbiB0byBhdm9p
ZCBuYW1lIGNvbmZsaWN0IGZvciBjYXNlcyBsaWtlCisgICAgICAgIC8vIDxib2R5IG9ubG9hZD0n
b25sb2FkKCknPgorICAgICAgICAvLyA8c2NyaXB0PiBmdW5jdGlvbiBvbmxvYWQoKSB7IGFsZXJ0
KCdoaScpOyB9IDwvc2NyaXB0Pi4KKyAgICAgICAgLy8gU2V0IGZ1bmN0aW9uIG5hbWUgdG8gZnVu
Y3Rpb24gb2JqZWN0IGluc3RlYWQuCisgICAgICAgIC8vIFNlZSBpc3N1ZSA5NDQ2OTAuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRoZSBFQ01BU2NyaXB0IHNwZWMgc2F5cyAodmVyeSBvYmxpcXVl
bHkpIHRoYXQgdGhlIHBhcmFtZXRlciB0byBhbiBldmVudCBoYW5kbGVyIGlzIG5hbWVkICJldnQi
LgorICAgICAgICBTdHJpbmcgY29kZSA9ICIoZnVuY3Rpb24gKGV2dCkge1xuIjsKKyAgICAgICAg
Y29kZS5hcHBlbmQobV9jb2RlKTsKKyAgICAgICAgY29kZS5hcHBlbmQoIlxufSkiKTsKKworICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJu
YWxTdHJpbmcoY29kZSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0g
VjhQcm94eTo6Q29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLCBtX2xpbmVOdW1iZXIgLSAxKTsKKyAgICAgICAgaWYgKCFzY3JpcHQuSXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZl
KG1fZnJhbWUpOworICAgICAgICAgICAgQVNTRVJUKHByb3h5KTsKKyAgICAgICAgICAgIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJveHktPlJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsK
KyAgICAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOworICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
RnVuY3Rpb24+IGxpc3RlbmVyRnVuY3Rpb24gPSB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6Q2Fz
dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgbGlzdGVuZXJGdW5jdGlvbi0+U2V0TmFtZSh2ODo6
U3RyaW5nOjpOZXcoRnJvbVdlYkNvcmVTdHJpbmcobV9mdW5jdGlvbk5hbWUpLCBtX2Z1bmN0aW9u
TmFtZS5sZW5ndGgoKSkpOworCisgICAgICAgICAgICAgICAgbV9saXN0ZW5lciA9IHY4OjpQZXJz
aXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhsaXN0ZW5lckZ1bmN0aW9uKTsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgICAgICAgICAgVjhQcm94eTo6UmVnaXN0ZXJHbG9iYWxIYW5kbGUoRVZFTlRf
TElTVEVORVIsIHRoaXMsIG1fbGlzdGVuZXIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQobV9saXN0ZW5lci5Jc0VtcHR5KCkgfHwgbV9saXN0
ZW5lci0+SXNGdW5jdGlvbigpKTsKKyAgICByZXR1cm4gbV9saXN0ZW5lci5Jc0VtcHR5KCkgPyB2
ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpIDogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyh2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1fbGlzdGVuZXIpKTsKK30KKwordjg6
OkxvY2FsPHY4OjpWYWx1ZT4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Y2FsbExpc3RlbmVyRnVuY3Rp
b24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2ZW50KiBldmVudCwgYm9vbCBpc1dp
bmRvd0V2ZW50KQoreworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGhhbmRsZXJGdW5jdGlv
biA9IGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7CisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHJlY2VpdmVyID0gZ2V0UmVjZWl2ZXJPYmplY3QoZXZlbnQsIGlzV2luZG93RXZlbnQpOwor
ICAgIGlmIChoYW5kbGVyRnVuY3Rpb24uSXNFbXB0eSgpIHx8IHJlY2VpdmVyLklzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6VmFsdWU+KCk7CisKKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sxXSA9IHsganNFdmVudCB9OworCisgICAgVjhQcm94eSog
cHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsKKyAgICByZXR1cm4gcHJveHktPkNh
bGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVyLCAxLCBwYXJhbWV0ZXJzKTsKK30K
Kwordjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6Z2V0V3JhcHBl
ZExpc3RlbmVyRnVuY3Rpb24oKQoreworICAgIGlmIChtX3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVk
KSB7CisgICAgICAgIEFTU0VSVChtX3dyYXBwZWRGdW5jdGlvbi5Jc0VtcHR5KCkgfHwgbV93cmFw
cGVkRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7CisgICAgICAgIHJldHVybiBtX3dyYXBwZWRGdW5j
dGlvbi5Jc0VtcHR5KCkgPyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpIDogdjg6OkxvY2FsPHY4
OjpGdW5jdGlvbj46Ok5ldyhtX3dyYXBwZWRGdW5jdGlvbik7CisgICAgfQorCisgICAgbV93cmFw
cGVkRnVuY3Rpb25Db21waWxlZCA9IHRydWU7CisKKyAgICB7CisgICAgICAgIC8vIFN3aXRjaCB0
byB0aGUgY29udGV4dCBvZiBtX2ZyYW1lLgorICAgICAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxl
U2NvcGU7CisKKyAgICAgICAgLy8gVXNlIHRoZSBvdXRlciBzY29wZSB0byBob2xkIGNvbnRleHQu
CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSBWOFByb3h5OjpHZXRD
b250ZXh0KG1fZnJhbWUpOworICAgICAgICAvLyBCYWlsIG91dCBpZiB3ZSBjYW5ub3QgZ2V0IHRo
ZSBjb250ZXh0LgorICAgICAgICBpZiAoY29udGV4dC5Jc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKKworICAgICAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUoY29udGV4dCk7CisKKyAgICAgICAgLy8gRklYTUU6IGNhY2hlIHRoZSB3cmFw
cGVyIGZ1bmN0aW9uLgorICAgICAgICBTdHJpbmcgY29kZSA9ICIoZnVuY3Rpb24gKGV2dCkge1xu
IjsKKworICAgICAgICAvLyBOb2RlcyBvdGhlciB0aGFuIHRoZSBkb2N1bWVudCBvYmplY3QsIHdo
ZW4gZXhlY3V0aW5nIGlubGluZSBldmVudCBoYW5kbGVycyBwdXNoIGRvY3VtZW50LCBmb3JtLCBh
bmQgdGhlIHRhcmdldCBub2RlIG9uIHRoZSBzY29wZSBjaGFpbi4KKyAgICAgICAgLy8gV2UgZG8g
dGhpcyBieSB1c2luZyAnd2l0aCcgc3RhdGVtZW50LgorICAgICAgICAvLyBTZWUgY2hyb21lL2Zh
c3QvZm9ybXMvZm9ybS1hY3Rpb24uaHRtbAorICAgICAgICAvLyAgICAgY2hyb21lL2Zhc3QvZm9y
bXMvc2VsZWN0ZWQtaW5kZXgtdmFsdWUuaHRtbAorICAgICAgICAvLyAgICAgYmFzZS9mYXN0L292
ZXJmbG93L29uc2Nyb2xsLWxheWVyLXNlbGYtZGVzdHJ1Y3QuaHRtbAorICAgICAgICBjb2RlLmFw
cGVuZCgiICB3aXRoICh0aGlzLm93bmVyRG9jdW1lbnQgPyB0aGlzLm93bmVyRG9jdW1lbnQgOiB7
fSkge1xuIik7CisgICAgICAgIGNvZGUuYXBwZW5kKCIgICAgd2l0aCAodGhpcy5mb3JtID8gdGhp
cy5mb3JtIDoge30pIHtcbiIpOworICAgICAgICBjb2RlLmFwcGVuZCgiICAgICAgd2l0aCAodGhp
cykge1xuIik7CisgICAgICAgIGNvZGUuYXBwZW5kKCIgICAgICAgIHJldHVybiAoZnVuY3Rpb24o
ZXZ0KXsiKTsKKyAgICAgICAgY29kZS5hcHBlbmQobV9jb2RlKTsKKyAgICAgICAgY29kZS5hcHBl
bmQoIlxufSkuY2FsbCh0aGlzLCBldnQpO1xuIik7CisgICAgICAgIGNvZGUuYXBwZW5kKCIgICAg
ICB9XG4iKTsKKyAgICAgICAgY29kZS5hcHBlbmQoIiAgICB9XG4iKTsKKyAgICAgICAgY29kZS5h
cHBlbmQoIiAgfVxuIik7CisgICAgICAgIGNvZGUuYXBwZW5kKCJ9KSIpOworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmco
Y29kZSk7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6
Q29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1fZnJhbWUtPmRvY3VtZW50KCktPnVy
bCgpLCBtX2xpbmVOdW1iZXIgLSA0KTsKKyAgICAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUp
OworICAgICAgICAgICAgQVNTRVJUKHByb3h5KTsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6
VmFsdWU+IHZhbHVlID0gcHJveHktPlJ1blNjcmlwdChzY3JpcHQsIGZhbHNlKTsKKyAgICAgICAg
ICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVl
LT5Jc0Z1bmN0aW9uKCkpOworCisgICAgICAgICAgICAgICAgbV93cmFwcGVkRnVuY3Rpb24gPSB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46
OkNhc3QodmFsdWUpKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICAgICAgVjhQcm94eTo6
UmVnaXN0ZXJHbG9iYWxIYW5kbGUoRVZFTlRfTElTVEVORVIsIHRoaXMsIG1fd3JhcHBlZEZ1bmN0
aW9uKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIG1fd3JhcHBlZEZ1bmN0aW9uLT5TZXROYW1l
KHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyhtX2Z1bmN0aW9uTmFtZSksIG1fZnVu
Y3Rpb25OYW1lLmxlbmd0aCgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyhtX3dyYXBwZWRGdW5jdGlv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhMYXp5RXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOExh
enlFdmVudExpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3
YmUzNAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhMYXp5RXZlbnRM
aXN0ZW5lci5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4TGF6
eUV2ZW50TGlzdGVuZXJfaAorI2RlZmluZSBWOExhenlFdmVudExpc3RlbmVyX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIu
aCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIEV2ZW50OworICAgIGNsYXNzIEZyYW1lOworCisg
ICAgLy8gVjhMYXp5RXZlbnRMaXN0ZW5lciBpcyBhIHdyYXBwZXIgZm9yIGEgSmF2YVNjcmlwdCBj
b2RlIHN0cmluZyB0aGF0IGlzIGNvbXBpbGVkIGFuZCBldmFsdWF0ZWQgd2hlbiBhbiBldmVudCBp
cyBmaXJlZC4KKyAgICAvLyBBIFY4TGF6eUV2ZW50TGlzdGVuZXIgaXMgYWx3YXlzIGEgSFRNTCBl
dmVudCBoYW5kbGVyLgorICAgIGNsYXNzIFY4TGF6eUV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhB
YnN0cmFjdEV2ZW50TGlzdGVuZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8VjhMYXp5RXZlbnRMaXN0ZW5lcj4gY3JlYXRlKEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBjb2RlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOExhenlFdmVudExpc3RlbmVyKGZyYW1lLCBjb2Rl
LCBmdW5jdGlvbk5hbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc0lu
bGluZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICAvLyBGb3IgbGF6eSBldmVu
dCBsaXN0ZW5lciwgdGhlIGxpc3RlbmVyIG9iamVjdCBpcyB0aGUgc2FtZSBhcyBpdHMgbGlzdGVu
ZXIKKyAgICAgICAgLy8gZnVuY3Rpb24gd2l0aG91dCBhZGRpdGlvbmFsIHNjb3BlIGNoYWlucy4K
KyAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0TGlzdGVuZXJPYmplY3Qo
KSB7IHJldHVybiBnZXRXcmFwcGVkTGlzdGVuZXJGdW5jdGlvbigpOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBWOExhenlFdmVudExpc3RlbmVyKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBjb2Rl
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHZpcnR1YWwgflY4TGF6eUV2
ZW50TGlzdGVuZXIoKTsKKworICAgICAgICBTdHJpbmcgbV9jb2RlOworICAgICAgICBTdHJpbmcg
bV9mdW5jdGlvbk5hbWU7CisgICAgICAgIGJvb2wgbV9jb21waWxlZDsKKworICAgICAgICAvLyBJ
ZiB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgb24gYSBub24tZG9jdW1lbnQgZG9tIG5vZGUsIHdlIGNv
bXBpbGUgdGhlIGZ1bmN0aW9uIHdpdGggc29tZSBpbXBsaWNpdCBzY29wZSBjaGFpbnMgYmVmb3Jl
IGl0LgorICAgICAgICBib29sIG1fd3JhcHBlZEZ1bmN0aW9uQ29tcGlsZWQ7CisgICAgICAgIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj4gbV93cmFwcGVkRnVuY3Rpb247CisKKyAgICAgICAg
djg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rpb24oKTsKKwor
ICAgICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGNhbGxMaXN0ZW5lckZ1bmN0aW9u
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCosIGJvb2wgaXNXaW5kb3dFdmVu
dCk7CisKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gZ2V0TGlzdGVuZXJGdW5jdGlv
bigpOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4TGF6
eUV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVj
dEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlz
dGVuZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDk2MmEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4T2JqZWN0RXZlbnRMaXN0ZW5l
ci5jcHAKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywg
MjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKKworI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyB2b2lkIHdlYWtPYmplY3RFdmVudExpc3RlbmVyQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6
OlZhbHVlPiwgdm9pZCogcGFyYW1ldGVyKQoreworICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPihwYXJhbWV0ZXIp
OworCisgICAgLy8gUmVtb3ZlIHRoZSB3cmFwcGVyCisgICAgRnJhbWUqIGZyYW1lID0gbGlzdGVu
ZXItPmZyYW1lKCk7CisgICAgaWYgKGZyYW1lKSB7CisgICAgICAgIFY4UHJveHkqIHByb3h5ID0g
VjhQcm94eTo6cmV0cmlldmUoZnJhbWUpOworICAgICAgICBpZiAocHJveHkpCisgICAgICAgICAg
ICBwcm94eS0+UmVtb3ZlT2JqZWN0RXZlbnRMaXN0ZW5lcihsaXN0ZW5lcik7CisKKyAgICAgICAg
Ly8gQmVjYXVzZSB0aGUgbGlzdGVuZXIgaXMgbm8gbG9uZ2VyIGluIHRoZSBsaXN0LCBpdCBtdXN0
IGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBmcmFtZSB0byBhdm9pZCBkYW5nbGluZyBmcmFtZSBw
b2ludGVyCisgICAgICAgIC8vIGluIHRoZSBkZXN0cnVjdG9yLgorICAgICAgICBsaXN0ZW5lci0+
ZGlzY29ubmVjdEZyYW1lKCk7CisgICAgfQorICAgIGxpc3RlbmVyLT5kaXNwb3NlTGlzdGVuZXJP
YmplY3QoKTsKK30KKworVjhPYmplY3RFdmVudExpc3RlbmVyOjpWOE9iamVjdEV2ZW50TGlzdGVu
ZXIoRnJhbWUqIGZyYW1lLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJ
bmxpbmUpCisgICAgOiBWOEV2ZW50TGlzdGVuZXIoZnJhbWUsIGxpc3RlbmVyLCBpc0lubGluZSkK
K3sKKyAgICBtX2xpc3RlbmVyLk1ha2VXZWFrKHRoaXMsIHdlYWtPYmplY3RFdmVudExpc3RlbmVy
Q2FsbGJhY2spOworfQorCitWOE9iamVjdEV2ZW50TGlzdGVuZXI6On5WOE9iamVjdEV2ZW50TGlz
dGVuZXIoKQoreworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIEFTU0VSVCghbV9saXN0ZW5l
ci5Jc0VtcHR5KCkpOworICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZl
KG1fZnJhbWUpOworICAgICAgICBpZiAocHJveHkpCisgICAgICAgICAgICBwcm94eS0+UmVtb3Zl
T2JqZWN0RXZlbnRMaXN0ZW5lcih0aGlzKTsKKyAgICB9CisKKyAgICBkaXNwb3NlTGlzdGVuZXJP
YmplY3QoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOE9iamVjdEV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhPYmplY3RFdmVudExpc3RlbmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNTAxYmRhYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhP
YmplY3RFdmVudExpc3RlbmVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgVjhPYmplY3RFdmVudExpc3RlbmVyX2gKKyNkZWZpbmUgVjhPYmplY3RFdmVudExpc3Rl
bmVyX2gKKworI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgPHY4
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisgICAgY2xhc3MgRnJhbWU7CisKKyAgICAvLyBWOE9iamVjdEV2ZW50TGlzdGVuZXIgaXMgYSBz
cGVjaWFsIGxpc3RlbmVyIHdyYXBwZXIgZm9yIG9iamVjdHMgbm90IGluIHRoZSBET00uICBJdCBr
ZWVwcyB0aGUgSlMgbGlzdGVuZXIgYXMgYSB3ZWFrIHBvaW50ZXIuCisgICAgY2xhc3MgVjhPYmpl
Y3RFdmVudExpc3RlbmVyIDogcHVibGljIFY4RXZlbnRMaXN0ZW5lciB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShG
cmFtZSogZnJhbWUsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGlu
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOE9iamVjdEV2
ZW50TGlzdGVuZXIoZnJhbWUsIGxpc3RlbmVyLCBpc0lubGluZSkpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCB2ODo6TG9j
YWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpOworICAgICAgICB2aXJ0dWFs
IH5WOE9iamVjdEV2ZW50TGlzdGVuZXIoKTsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBWOE9iamVjdEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1ZWUzYwotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAKQEAgLTAs
MCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIu
aCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcjo6VjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0
aW9uUHJveHkqIHByb3h5LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJ
bmxpbmUpCisgICAgOiBWOE9iamVjdEV2ZW50TGlzdGVuZXIoMCwgbGlzdGVuZXIsIGlzSW5saW5l
KQorICAgICwgbV9wcm94eShwcm94eSkKK3sKK30KKworVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0
ZW5lcjo6flY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKQoreworICAgIGlmIChtX3Byb3h5
KQorICAgICAgICBtX3Byb3h5LT5SZW1vdmVFdmVudExpc3RlbmVyKHRoaXMpOworICAgIGRpc3Bv
c2VMaXN0ZW5lck9iamVjdCgpOworfQorCit2b2lkIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVu
ZXI6OmhhbmRsZUV2ZW50KEV2ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQoreworICAg
IC8vIElzIHRoZSBFdmVudExpc3RlbmVyIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBmcmFtZT8KKyAg
ICBpZiAoZGlzY29ubmVjdGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjYWxs
YmFjayBmdW5jdGlvbiBvbiBYTUxIdHRwUmVxdWVzdCBjYW4gY2xlYXIgdGhlIGV2ZW50IGxpc3Rl
bmVyIGFuZCBkZXN0cm95cyAndGhpcycgb2JqZWN0LiBLZWVwIGEgbG9jYWwgcmVmZXJlbmNlIHRv
IGl0LgorICAgIC8vIFNlZSBpc3N1ZSA4ODk4MjkuCisgICAgUmVmUHRyPFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyPiBwcm90ZWN0KHRoaXMpOworCisgICAgdjg6OkxvY2tlciBsb2NrZXI7CisgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworCisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4
dD4gY29udGV4dCA9IG1fcHJveHktPkdldENvbnRleHQoKTsKKyAgICBpZiAoY29udGV4dC5Jc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludm9rZUV2ZW50SGFuZGxlcihjb250ZXh0
LCBldmVudCwgaXNXaW5kb3dFdmVudCk7Cit9CisKK3Y4OjpMb2NhbDx2ODo6VmFsdWU+IFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmNhbGxMaXN0ZW5lckZ1bmN0aW9uKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBqc0V2ZW50LCBFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKK3sK
KyAgICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBoYW5kbGVyRnVuY3Rpb24gPSBnZXRMaXN0ZW5l
ckZ1bmN0aW9uKCk7CisgICAgaWYgKGhhbmRsZXJGdW5jdGlvbi5Jc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB2ODo6TG9jYWw8djg6OlZhbHVlPigpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmpl
Y3Q+IHJlY2VpdmVyID0gZ2V0UmVjZWl2ZXJPYmplY3QoZXZlbnQsIGlzV2luZG93RXZlbnQpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwYXJhbWV0ZXJzWzFdID0geyBqc0V2ZW50IH07Cisg
ICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gcmVzdWx0ID0gaGFuZGxlckZ1bmN0aW9uLT5DYWxsKHJl
Y2VpdmVyLCAxLCBwYXJhbWV0ZXJzKTsKKworICAgIG1fcHJveHktPlRyYWNrRXZlbnQoZXZlbnQp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordjg6OkxvY2FsPHY4OjpPYmplY3Q+IFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiBldmVudCwg
Ym9vbCBpc1dpbmRvd0V2ZW50KQoreworICAgIGlmICghbV9saXN0ZW5lci5Jc0VtcHR5KCkgJiYg
IW1fbGlzdGVuZXItPklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6
T2JqZWN0Pjo6TmV3KG1fbGlzdGVuZXIpOworCisgICAgaWYgKGlzV2luZG93RXZlbnQpCisgICAg
ICAgIHJldHVybiB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpLT5HbG9iYWwoKTsKKworICAgIEV2
ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+Y3VycmVudFRhcmdldCgpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSA9IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6RXZlbnRU
YXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CisgICAgaWYgKHZhbHVlLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0PigpOworICAgIHJldHVybiB2ODo6TG9jYWw8
djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdPUktFUlMKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVkYWU0MQotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oCkBAIC0w
LDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFY4V29ya2VyQ29udGV4dEV2ZW50
TGlzdGVuZXJfaAorI2RlZmluZSBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyX2gKKworI2lm
IEVOQUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiVjhPYmplY3RFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBFdmVudDsKKyAgICBjbGFzcyBXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHk7CisKKyAgICBjbGFzcyBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyIDog
cHVibGljIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyPiBjcmVhdGUoV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5KiBwcm94eSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3Rl
bmVyLCBib29sIGlzSW5saW5lKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIocHJveHksIGxpc3RlbmVyLCBpc0lu
bGluZSkpOworICAgICAgICB9CisgICAgICAgIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIo
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Kiwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3Rl
bmVyLCBib29sIGlzSW5saW5lKTsKKworICAgICAgICB2aXJ0dWFsIH5WOFdvcmtlckNvbnRleHRF
dmVudExpc3RlbmVyKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVFdmVudChFdmVudCos
IGJvb2wgaXNXaW5kb3dFdmVudCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBkaXNjb25uZWN0ZWQo
KSBjb25zdCB7IHJldHVybiAhbV9wcm94eTsgfQorCisgICAgICAgIHZvaWQgZGlzY29ubmVjdCgp
IHsgbV9wcm94eSA9IDA7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gY2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGpzRXZlbnQsIEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpPYmplY3Q+IGdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50
KTsKKyAgICAgICAgV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5KiBtX3Byb3h5OworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdPUktFUlMKKworI2VuZGlm
IC8vIFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzZjdkNmIzLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJUb2tl
bml6ZXIuaCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1WOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoRnJhbWUq
IGZyYW1lLCBib29sIGlzSW5saW5lKQotICAgIDogbV9pc0lubGluZShpc0lubGluZSkKLSAgICAs
IG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2xpbmVOdW1iZXIoMCkKLSAgICAsIG1fY29sdW1uTnVt
YmVyKDApCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBH
ZXQgdGhlIHBvc2l0aW9uIGluIHRoZSBzb3VyY2UgaWYgYW55LgotICAgIGlmIChtX2lzSW5saW5l
ICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpKSB7Ci0gICAgICAgIG1fbGluZU51
bWJlciA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnRva2VuaXplcigpLT5saW5lTnVtYmVyKCk7Ci0g
ICAgICAgIG1fY29sdW1uTnVtYmVyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dG9rZW5pemVyKCkt
PmNvbHVtbk51bWJlcigpOwotICAgIH0KLX0KLQotdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5l
cjo6aW52b2tlRXZlbnRIYW5kbGVyKHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQsIEV2
ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQotewotICAgIC8vIEVudGVyIHRoZSBWOCBj
b250ZXh0IGluIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGV2ZW50IGhhbmRsaW5nLgotICAgIHY4OjpD
b250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKLQotICAgIC8vIEdldCB0aGUgVjggd3JhcHBl
ciBmb3IgdGhlIGV2ZW50IG9iamVjdC4KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVu
dCA9IFY4UHJveHk6OkV2ZW50VG9WOE9iamVjdChldmVudCk7Ci0KLSAgICAvLyBGb3IgY29tcGF0
aWJpbGl0eSwgd2Ugc3RvcmUgdGhlIGV2ZW50IG9iamVjdCBhcyBhIHByb3BlcnR5IG9uIHRoZSB3
aW5kb3cgY2FsbGVkICJldmVudCIuICBCZWNhdXNlIHRoaXMgaXMgdGhlIGdsb2JhbCBuYW1lc3Bh
Y2UsIHdlIHNhdmUgYXdheSBhbnkKLSAgICAvLyBleGlzdGluZyAiZXZlbnQiIHByb3BlcnR5LCBh
bmQgdGhlbiByZXN0b3JlIGl0IGFmdGVyIGV4ZWN1dGluZyB0aGUgamF2YXNjcmlwdCBoYW5kbGVy
LgotICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBldmVudFN5bWJvbCA9IHY4OjpTdHJpbmc6Ok5l
d1N5bWJvbCgiZXZlbnQiKTsKLSAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiByZXR1cm5WYWx1ZTsK
LQotICAgIHsKLSAgICAgICAgLy8gQ2F0Y2ggZXhjZXB0aW9ucyB0aHJvd24gaW4gdGhlIGV2ZW50
IGhhbmRsZXIgc28gdGhleSBkbyBub3QgcHJvcGFnYXRlIHRvIGphdmFzY3JpcHQgY29kZSB0aGF0
IGNhdXNlZCB0aGUgZXZlbnQgdG8gZmlyZS4KLSAgICAgICAgLy8gU2V0dGluZyBhbmQgZ2V0dGlu
ZyB0aGUgJ2V2ZW50JyBwcm9wZXJ0eSBvbiB0aGUgZ2xvYmFsIG9iamVjdCBjYW4gdGhyb3cgZXhj
ZXB0aW9ucyBhcyB3ZWxsIChmb3IgaW5zdGFuY2UgaWYgYWNjZXNzb3JzIHRoYXQKLSAgICAgICAg
Ly8gdGhyb3cgZXhjZXB0aW9ucyBhcmUgZGVmaW5lZCBmb3IgJ2V2ZW50JyB1c2luZyBfX2RlZmlu
ZUdldHRlcl9fIGFuZCBfX2RlZmluZVNldHRlcl9fIG9uIHRoZSBnbG9iYWwgb2JqZWN0KS4KLSAg
ICAgICAgdjg6OlRyeUNhdGNoIHRyeUNhdGNoOwotICAgICAgICB0cnlDYXRjaC5TZXRWZXJib3Nl
KHRydWUpOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIG9sZCAnZXZlbnQnIHByb3BlcnR5IHNvIHdl
IGNhbiByZXN0b3JlIGl0IGxhdGVyLgotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzYXZl
ZEV2ZW50ID0gY29udGV4dC0+R2xvYmFsKCktPkdldChldmVudFN5bWJvbCk7Ci0gICAgICAgIHRy
eUNhdGNoLlJlc2V0KCk7Ci0KLSAgICAgICAgLy8gTWFrZSB0aGUgZXZlbnQgYXZhaWxhYmxlIGlu
IHRoZSB3aW5kb3cgb2JqZWN0LgotICAgICAgICAvLwotICAgICAgICAvLyBGSVhNRTogVGhpcyBk
b2VzIG5vdCB3b3JrIGFzIGl0IGRvZXMgd2l0aCBqc2MgYmluZGluZ3MgaWYgdGhlIHdpbmRvdy5l
dmVudCBwcm9wZXJ0eSBpcyBhbHJlYWR5IHNldC4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBw
cm9wZXJ0eQotICAgICAgICAvLyBhY2Nlc3MgaXMgaW50ZXJjZXB0ZWQgY29ycmVjdGx5LgotICAg
ICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KGV2ZW50U3ltYm9sLCBqc0V2ZW50KTsKLSAgICAg
ICAgdHJ5Q2F0Y2guUmVzZXQoKTsKLQotICAgICAgICAvLyBDYWxsIHRoZSBldmVudCBoYW5kbGVy
LgotICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxMaXN0ZW5lckZ1bmN0aW9uKGpzRXZlbnQsIGV2
ZW50LCBpc1dpbmRvd0V2ZW50KTsKLSAgICAgICAgdHJ5Q2F0Y2guUmVzZXQoKTsKLQotICAgICAg
ICAvLyBSZXN0b3JlIHRoZSBvbGQgZXZlbnQuIFRoaXMgbXVzdCBiZSBkb25lIGZvciBhbGwgZXhp
dCBwYXRocyB0aHJvdWdoIHRoaXMgbWV0aG9kLgotICAgICAgICBpZiAoc2F2ZWRFdmVudC5Jc0Vt
cHR5KCkpCi0gICAgICAgICAgICBjb250ZXh0LT5HbG9iYWwoKS0+U2V0KGV2ZW50U3ltYm9sLCB2
ODo6VW5kZWZpbmVkKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250ZXh0LT5HbG9i
YWwoKS0+U2V0KGV2ZW50U3ltYm9sLCBzYXZlZEV2ZW50KTsKLSAgICAgICAgdHJ5Q2F0Y2guUmVz
ZXQoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIVY4UHJveHk6OkhhbmRsZU91dE9mTWVtb3J5KCkg
fHwgcmV0dXJuVmFsdWUuSXNFbXB0eSgpKTsKLQotICAgIGlmIChyZXR1cm5WYWx1ZS5Jc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcmV0dXJuVmFsdWUtPklzTnVsbCgpICYm
ICFyZXR1cm5WYWx1ZS0+SXNVbmRlZmluZWQoKSAmJiBldmVudC0+c3RvcmVzUmVzdWx0QXNTdHJp
bmcoKSkKLSAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHRvV2ViQ29yZVN0cmluZyhyZXR1cm5W
YWx1ZSkpOwotCi0gICAgLy8gUHJldmVudCBkZWZhdWx0IGFjdGlvbiBpZiB0aGUgcmV0dXJuIHZh
bHVlIGlzIGZhbHNlOwotICAgIC8vIEZJWE1FOiBBZGQgZXhhbXBsZSwgYW5kIHJlZmVyZW5jZSB0
byBidWcgZW50cnkuCi0gICAgaWYgKG1faXNJbmxpbmUgJiYgcmV0dXJuVmFsdWUtPklzQm9vbGVh
bigpICYmICFyZXR1cm5WYWx1ZS0+Qm9vbGVhblZhbHVlKCkpCi0gICAgICAgIGV2ZW50LT5wcmV2
ZW50RGVmYXVsdCgpOwotfQotCi12b2lkIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVF
dmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKLXsKLSAgICAvLyBFdmVudExp
c3RlbmVyIGNvdWxkIGJlIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBmcmFtZS4KLSAgICBpZiAoZGlz
Y29ubmVjdGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBjYWxsYmFjayBmdW5j
dGlvbiBvbiBYTUxIdHRwUmVxdWVzdCBjYW4gY2xlYXIgdGhlIGV2ZW50IGxpc3RlbmVyIGFuZCBk
ZXN0cm95cyAndGhpcycgb2JqZWN0LiBLZWVwIGEgbG9jYWwgcmVmZXJlbmNlIHRvIGl0LgotICAg
IC8vIFNlZSBpc3N1ZSA4ODk4MjkuCi0gICAgUmVmUHRyPFY4QWJzdHJhY3RFdmVudExpc3RlbmVy
PiBwcm90ZWN0KHRoaXMpOwotCi0gICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotCi0g
ICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCA9IFY4UHJveHk6OkdldENvbnRleHQo
bV9mcmFtZSk7Ci0gICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBtX2ZyYW1lIGNhbiByZW1vdmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgcHJv
dGVjdCBpdCB1bnRpbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucy4KLSAgICBSZWZQdHI8
RnJhbWU+IHByb3RlY3RGcmFtZShtX2ZyYW1lKTsKLQotICAgIGludm9rZUV2ZW50SGFuZGxlcihj
b250ZXh0LCBldmVudCwgaXNXaW5kb3dFdmVudCk7Ci0KLSAgICBEb2N1bWVudDo6dXBkYXRlRG9j
dW1lbnRzUmVuZGVyaW5nKCk7Ci19Ci0KLXZvaWQgVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmRp
c3Bvc2VMaXN0ZW5lck9iamVjdCgpCi17Ci0gICAgaWYgKCFtX2xpc3RlbmVyLklzRW1wdHkoKSkg
ewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVjhQcm94eTo6VW5yZWdpc3Rlckdsb2JhbEhhbmRs
ZSh0aGlzLCBtX2xpc3RlbmVyKTsKLSNlbmRpZgotICAgICAgICBtX2xpc3RlbmVyLkRpc3Bvc2Uo
KTsKLSAgICAgICAgbV9saXN0ZW5lci5DbGVhcigpOwotICAgIH0KLX0KLQotdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFY4QWJzdHJhY3RFdmVudExpc3RlbmVyOjpnZXRSZWNlaXZlck9iamVjdChFdmVu
dCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKLXsKLSAgICBpZiAoIW1fbGlzdGVuZXIuSXNF
bXB0eSgpICYmICFtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB2ODo6
TG9jYWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3RlbmVyKTsKLQotICAgIGlmIChpc1dpbmRvd0V2
ZW50KQotICAgICAgICByZXR1cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7
Ci0KLSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBWOFByb3h5OjpFdmVudFRhcmdldFRvVjhP
YmplY3QodGFyZ2V0KTsKLSAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
djg6OkxvY2FsPHY4OjpPYmplY3Q+KCk7Ci0gICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0
Pjo6TmV3KHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
QWJzdHJhY3RFdmVudExpc3RlbmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJh
M2I3ZTcuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFj
dEV2ZW50TGlzdGVuZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIFY4QWJzdHJhY3RFdmVudExpc3RlbmVyX2gKLSNkZWZpbmUgVjhBYnN0
cmFjdEV2ZW50TGlzdGVuZXJfaAotCi0jaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1
ZGUgPHY4Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEV2ZW50OwotICAg
IGNsYXNzIEZyYW1lOwotCi0gICAgLy8gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBldmVudCBsaXN0
ZW5lcnM6IEhUTUwgb3Igbm9uLUhNVEwuIG9ubG9hZCwgb25mb2N1cywgZXRjIChhdHRyaWJ1dGVz
KSBhcmUgYWx3YXlzIEhUTUwgZXZlbnQgaGFuZGxlciB0eXBlOwotICAgIC8vIEV2ZW50IGxpc3Rl
bmVycyBhZGRlZCBieSBXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciBvciBFdmVudFRhcmdldE5vZGU6
OmFkZEV2ZW50TGlzdGVuZXIgYXJlIG5vbi1IVE1MIHR5cGUuCi0gICAgLy8KLSAgICAvLyBXaHkg
ZG9lcyB0aGlzIG1hdHRlcj8KLSAgICAvLyBXZWJLaXQgZG9lcyBub3QgYWxsb3cgZHVwbGljYXRl
ZCBIVE1MIGV2ZW50IGhhbmRsZXJzIG9mIHRoZSBzYW1lIHR5cGUsIGJ1dCBBTExPV3MgZHVwbGlj
YXRlZCBub24tSFRNTCBldmVudCBoYW5kbGVycy4KLSAgICBjbGFzcyBWOEFic3RyYWN0RXZlbnRM
aXN0ZW5lciA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZp
cnR1YWwgflY4QWJzdHJhY3RFdmVudExpc3RlbmVyKCkgeyB9Ci0KLSAgICAgICAgLy8gUmV0dXJu
cyB0aGUgb3duZXIgZnJhbWUgb2YgdGhlIGxpc3RlbmVyLgotICAgICAgICBGcmFtZSogZnJhbWUo
KSB7IHJldHVybiBtX2ZyYW1lOyB9Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50
KEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKLSAgICAgICAgdm9pZCBpbnZva2VFdmVudEhh
bmRsZXIodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4sIEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50
KTsKLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSBsaXN0ZW5lciBvYmplY3QsIGVpdGhlciBhIGZ1
bmN0aW9uIG9yIGFuIG9iamVjdC4KLSAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gZ2V0TGlzdGVuZXJPYmplY3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcobV9saXN0ZW5lcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBEaXNwb3NlIGxpc3RlbmVyIG9iamVjdCBhbmQgY2xlYXIgdGhlIGhhbmRsZS4KLSAgICAg
ICAgdm9pZCBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wg
ZGlzY29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gIW1fZnJhbWU7IH0KLQotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9saXN0ZW5lcjsKLQotICAg
ICAgICAvLyBJbmRpY2F0ZXMgaWYgdGhpcyBpcyBhbiBIVE1MIHR5cGUgbGlzdGVuZXIuCi0gICAg
ICAgIGJvb2wgbV9pc0lubGluZTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFY4QWJzdHJhY3RF
dmVudExpc3RlbmVyKEZyYW1lKiwgYm9vbCBpc0lubGluZSk7Ci0KLSAgICAgICAgdmlydHVhbCB2
ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNldmVudCwgRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpID0gMDsKLQotICAgICAg
ICAvLyBHZXQgdGhlIHJlY2VpdmVyIG9iamVjdCB0byB1c2UgZm9yIGV2ZW50IGxpc3RlbmVyIGNh
bGwuCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBnZXRSZWNlaXZlck9iamVjdChFdmVu
dCosIGJvb2wgaXNXaW5kb3dFdmVudCk7Ci0KLSAgICAgICAgLy8gRnJhbWUgdG8gd2hpY2ggdGhl
IGV2ZW50IGxpc3RlbmVyIGlzIGF0dGFjaGVkIHRvLiBBbiBldmVudCBsaXN0ZW5lciBtdXN0IGJl
IGRlc3Ryb3llZCBiZWZvcmUgaXRzIG93bmVyIGZyYW1lIGlzCi0gICAgICAgIC8vIGRlbGV0ZWQu
IFNlZSBmYXN0L2RvbS9yZXBsYWNlQ2hpbGQuaHRtbAotICAgICAgICAvLyBGSVhNRTogdGhpcyBj
b3VsZCBob2xkIG1fZnJhbWUgbGl2ZSB1bnRpbCB0aGUgZXZlbnQgbGlzdGVuZXIgaXMgZGVsZXRl
ZC4KLSAgICAgICAgRnJhbWUqIG1fZnJhbWU7Ci0KLSAgICAgICAgLy8gUG9zaXRpb24gaW4gdGhl
IEhUTUwgc291cmNlIGZvciBIVE1MIGV2ZW50IGxpc3RlbmVycy4KLSAgICAgICAgaW50IG1fbGlu
ZU51bWJlcjsKLSAgICAgICAgaW50IG1fY29sdW1uTnVtYmVyOwotCi0gICAgICAgIGZyaWVuZCBj
bGFzcyBWOEV2ZW50TGlzdGVuZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBWOE9iamVjdEV2ZW50
TGlzdGVuZXI7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyOwotICAg
IH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZl
bnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkYWU4NDUuLjAwMDAwMDAKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZl
bnQuaCIKLQotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZEV2ZW50
LmgiCi0jaW5jbHVkZSAiTW91c2VFdmVudC5oIgotCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0j
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUFDQ0VTU09SX1NFVFRFUihFdmVudFJldHVyblZhbHVlKQotewot
ICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5m
by5Ib2xkZXIoKSk7Ci0gICAgZXZlbnQtPnNldERlZmF1bHRQcmV2ZW50ZWQoIXZhbHVlLT5Cb29s
ZWFuVmFsdWUoKSk7Ci19Ci0KLUFDQ0VTU09SX0dFVFRFUihFdmVudERhdGFUcmFuc2ZlcikKLXsK
LSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGlu
Zm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKGV2ZW50LT5pc0RyYWdFdmVudCgpKQotICAgICAgICBy
ZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOwotCi0gICAgcmV0dXJuIHY4
OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVSKEV2ZW50Q2xpcGJvYXJkRGF0YSkK
LXsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+
KGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKGV2ZW50LT5pc0NsaXBib2FyZEV2ZW50KCkpCi0g
ICAgICAgIHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJE
LCBzdGF0aWNfY2FzdDxDbGlwYm9hcmRFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOwotCi0g
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVSKEV2ZW50U3Jj
RWxlbWVudCkKLXsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpET01XcmFwcGVyVG9OYXRp
dmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOFByb3h5OjpFdmVudFRhcmdl
dFRvVjhPYmplY3QoZXZlbnQtPnRhcmdldCgpKTsKLX0KLQotQUNDRVNTT1JfR0VUVEVSKEV2ZW50
UmV0dXJuVmFsdWUpCi17Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gZXZlbnQtPmRlZmF1bHRQ
cmV2ZW50ZWQoKSA/IHY4OjpGYWxzZSgpIDogdjg6OlRydWUoKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMYXp5
RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExhenlFdmVu
dExpc3RlbmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA0Yzc5ZC4uMDAw
MDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExhenlFdmVudExpc3RlbmVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4TGF6eUV2ZW50TGlzdGVuZXIuaCIKLQotI2lu
Y2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94
eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVY4TGF6eUV2ZW50TGlzdGVuZXI6OlY4TGF6
eUV2ZW50TGlzdGVuZXIoRnJhbWUgKmZyYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25OYW1lKQotICAgIDogVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIoZnJhbWUs
IHRydWUpCi0gICAgLCBtX2NvZGUoY29kZSkKLSAgICAsIG1fZnVuY3Rpb25OYW1lKGZ1bmN0aW9u
TmFtZSkKLSAgICAsIG1fY29tcGlsZWQoZmFsc2UpCi0gICAgLCBtX3dyYXBwZWRGdW5jdGlvbkNv
bXBpbGVkKGZhbHNlKQotewotfQotCi1WOExhenlFdmVudExpc3RlbmVyOjp+VjhMYXp5RXZlbnRM
aXN0ZW5lcigpCi17Ci0gICAgZGlzcG9zZUxpc3RlbmVyT2JqZWN0KCk7Ci0KLSAgICAvLyBEaXNw
b3NlIHdyYXBwZWQgZnVuY3Rpb24KLSAgICBpZiAoIW1fd3JhcHBlZEZ1bmN0aW9uLklzRW1wdHko
KSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgVjhQcm94eTo6VW5yZWdpc3Rlckdsb2JhbEhh
bmRsZSh0aGlzLCBtX3dyYXBwZWRGdW5jdGlvbik7Ci0jZW5kaWYKLSAgICAgICAgbV93cmFwcGVk
RnVuY3Rpb24uRGlzcG9zZSgpOwotICAgICAgICBtX3dyYXBwZWRGdW5jdGlvbi5DbGVhcigpOwot
ICAgIH0KLX0KLQotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhMYXp5RXZlbnRMaXN0ZW5lcjo6
Z2V0TGlzdGVuZXJGdW5jdGlvbigpCi17Ci0gICAgaWYgKG1fY29tcGlsZWQpIHsKLSAgICAgICAg
QVNTRVJUKG1fbGlzdGVuZXIuSXNFbXB0eSgpIHx8IG1fbGlzdGVuZXItPklzRnVuY3Rpb24oKSk7
Ci0gICAgICAgIHJldHVybiBtX2xpc3RlbmVyLklzRW1wdHkoKSA/IHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+KCkgOiB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPjo6TmV3KHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvbj46OkNhc3QobV9saXN0ZW5lcikpOwotICAgIH0KLQotICAgIG1fY29tcGlsZWQg
PSB0cnVlOwotCi0gICAgQVNTRVJUKG1fZnJhbWUpOwotCi0gICAgewotICAgICAgICAvLyBTd2l0
Y2ggdG8gdGhlIGNvbnRleHQgb2YgbV9mcmFtZS4KLSAgICAgICAgdjg6OkhhbmRsZVNjb3BlIGhh
bmRsZVNjb3BlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgb3V0ZXIgc2NvcGUgdG8gaG9sZCBjb250
ZXh0LgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6
R2V0Q29udGV4dChtX2ZyYW1lKTsKLSAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UgY291bGQgbm90
IGdldCB0aGUgY29udGV4dC4KLSAgICAgICAgaWYgKGNvbnRleHQuSXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+KCk7Ci0KLSAgICAgICAgdjg6OkNv
bnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwotCi0gICAgICAgIC8vIFdyYXAgZnVuY3Rpb24g
YXJvdW5kIHRoZSBldmVudCBjb2RlLiAgVGhlIHBhcmVudGhlc2lzIGFyb3VuZCB0aGUgZnVuY3Rp
b24gYXJlIG5lZWRlZCBzbyB0aGF0IGV2YWx1YXRpbmcgdGhlIGNvZGUgeWllbGRzCi0gICAgICAg
IC8vIHRoZSBmdW5jdGlvbiB2YWx1ZS4gIFdpdGhvdXQgdGhlIHBhcmVudGhlc2lzIHRoZSBmdW5j
dGlvbiB2YWx1ZSBpcyB0aHJvd24gYXdheS4KLQotICAgICAgICAvLyBNYWtlIGl0IGFuIGFub255
bW91cyBmdW5jdGlvbiB0byBhdm9pZCBuYW1lIGNvbmZsaWN0IGZvciBjYXNlcyBsaWtlCi0gICAg
ICAgIC8vIDxib2R5IG9ubG9hZD0nb25sb2FkKCknPgotICAgICAgICAvLyA8c2NyaXB0PiBmdW5j
dGlvbiBvbmxvYWQoKSB7IGFsZXJ0KCdoaScpOyB9IDwvc2NyaXB0Pi4KLSAgICAgICAgLy8gU2V0
IGZ1bmN0aW9uIG5hbWUgdG8gZnVuY3Rpb24gb2JqZWN0IGluc3RlYWQuCi0gICAgICAgIC8vIFNl
ZSBpc3N1ZSA5NDQ2OTAuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoZSBFQ01BU2NyaXB0IHNw
ZWMgc2F5cyAodmVyeSBvYmxpcXVlbHkpIHRoYXQgdGhlIHBhcmFtZXRlciB0byBhbiBldmVudCBo
YW5kbGVyIGlzIG5hbWVkICJldnQiLgotICAgICAgICBTdHJpbmcgY29kZSA9ICIoZnVuY3Rpb24g
KGV2dCkge1xuIjsKLSAgICAgICAgY29kZS5hcHBlbmQobV9jb2RlKTsKLSAgICAgICAgY29kZS5h
cHBlbmQoIlxufSkiKTsKLQotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRl
cm5hbFN0cmluZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgICAgIHY4OjpIYW5kbGU8
djg6OlNjcmlwdD4gc2NyaXB0ID0gVjhQcm94eTo6Q29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxT
dHJpbmcsIG1fZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBtX2xpbmVOdW1iZXIgLSAxKTsKLSAg
ICAgICAgaWYgKCFzY3JpcHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWOFByb3h5KiBwcm94
eSA9IFY4UHJveHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAgICAgICAgICAgQVNTRVJUKHByb3h5
KTsKLSAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJveHktPlJ1blNj
cmlwdChzY3JpcHQsIGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwotICAgICAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGxpc3RlbmVyRnVuY3Rpb24gPSB2ODo6TG9j
YWw8djg6OkZ1bmN0aW9uPjo6Q2FzdCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgbGlzdGVuZXJG
dW5jdGlvbi0+U2V0TmFtZSh2ODo6U3RyaW5nOjpOZXcoRnJvbVdlYkNvcmVTdHJpbmcobV9mdW5j
dGlvbk5hbWUpLCBtX2Z1bmN0aW9uTmFtZS5sZW5ndGgoKSkpOwotCi0gICAgICAgICAgICAgICAg
bV9saXN0ZW5lciA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvbj46Ok5ldyhsaXN0ZW5lckZ1
bmN0aW9uKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICAgICAgVjhQcm94eTo6UmVnaXN0
ZXJHbG9iYWxIYW5kbGUoRVZFTlRfTElTVEVORVIsIHRoaXMsIG1fbGlzdGVuZXIpOwotI2VuZGlm
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQobV9saXN0ZW5l
ci5Jc0VtcHR5KCkgfHwgbV9saXN0ZW5lci0+SXNGdW5jdGlvbigpKTsKLSAgICByZXR1cm4gbV9s
aXN0ZW5lci5Jc0VtcHR5KCkgPyB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPigpIDogdjg6OkxvY2Fs
PHY4OjpGdW5jdGlvbj46Ok5ldyh2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpDYXN0KG1f
bGlzdGVuZXIpKTsKLX0KLQotdjg6OkxvY2FsPHY4OjpWYWx1ZT4gVjhMYXp5RXZlbnRMaXN0ZW5l
cjo6Y2FsbExpc3RlbmVyRnVuY3Rpb24odjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQsIEV2
ZW50KiBldmVudCwgYm9vbCBpc1dpbmRvd0V2ZW50KQotewotICAgIHY4OjpMb2NhbDx2ODo6RnVu
Y3Rpb24+IGhhbmRsZXJGdW5jdGlvbiA9IGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7Ci0g
ICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHJlY2VpdmVyID0gZ2V0UmVjZWl2ZXJPYmplY3QoZXZl
bnQsIGlzV2luZG93RXZlbnQpOwotICAgIGlmIChoYW5kbGVyRnVuY3Rpb24uSXNFbXB0eSgpIHx8
IHJlY2VpdmVyLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6VmFsdWU+
KCk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sxXSA9IHsganNFdmVu
dCB9OwotCi0gICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtX2ZyYW1lKTsK
LSAgICByZXR1cm4gcHJveHktPkNhbGxGdW5jdGlvbihoYW5kbGVyRnVuY3Rpb24sIHJlY2VpdmVy
LCAxLCBwYXJhbWV0ZXJzKTsKLX0KLQotdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gVjhMYXp5RXZl
bnRMaXN0ZW5lcjo6Z2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rpb24oKQotewotICAgIGlmIChtX3dy
YXBwZWRGdW5jdGlvbkNvbXBpbGVkKSB7Ci0gICAgICAgIEFTU0VSVChtX3dyYXBwZWRGdW5jdGlv
bi5Jc0VtcHR5KCkgfHwgbV93cmFwcGVkRnVuY3Rpb24tPklzRnVuY3Rpb24oKSk7Ci0gICAgICAg
IHJldHVybiBtX3dyYXBwZWRGdW5jdGlvbi5Jc0VtcHR5KCkgPyB2ODo6TG9jYWw8djg6OkZ1bmN0
aW9uPigpIDogdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46Ok5ldyhtX3dyYXBwZWRGdW5jdGlvbik7
Ci0gICAgfQotCi0gICAgbV93cmFwcGVkRnVuY3Rpb25Db21waWxlZCA9IHRydWU7Ci0KLSAgICB7
Ci0gICAgICAgIC8vIFN3aXRjaCB0byB0aGUgY29udGV4dCBvZiBtX2ZyYW1lLgotICAgICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBvdXRlciBz
Y29wZSB0byBob2xkIGNvbnRleHQuCi0gICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNv
bnRleHQgPSBWOFByb3h5OjpHZXRDb250ZXh0KG1fZnJhbWUpOwotICAgICAgICAvLyBCYWlsIG91
dCBpZiB3ZSBjYW5ub3QgZ2V0IHRoZSBjb250ZXh0LgotICAgICAgICBpZiAoY29udGV4dC5Jc0Vt
cHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4oKTsKLQot
ICAgICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4dCk7Ci0KLSAgICAgICAgLy8g
RklYTUU6IGNhY2hlIHRoZSB3cmFwcGVyIGZ1bmN0aW9uLgotICAgICAgICBTdHJpbmcgY29kZSA9
ICIoZnVuY3Rpb24gKGV2dCkge1xuIjsKLQotICAgICAgICAvLyBOb2RlcyBvdGhlciB0aGFuIHRo
ZSBkb2N1bWVudCBvYmplY3QsIHdoZW4gZXhlY3V0aW5nIGlubGluZSBldmVudCBoYW5kbGVycyBw
dXNoIGRvY3VtZW50LCBmb3JtLCBhbmQgdGhlIHRhcmdldCBub2RlIG9uIHRoZSBzY29wZSBjaGFp
bi4KLSAgICAgICAgLy8gV2UgZG8gdGhpcyBieSB1c2luZyAnd2l0aCcgc3RhdGVtZW50LgotICAg
ICAgICAvLyBTZWUgY2hyb21lL2Zhc3QvZm9ybXMvZm9ybS1hY3Rpb24uaHRtbAotICAgICAgICAv
LyAgICAgY2hyb21lL2Zhc3QvZm9ybXMvc2VsZWN0ZWQtaW5kZXgtdmFsdWUuaHRtbAotICAgICAg
ICAvLyAgICAgYmFzZS9mYXN0L292ZXJmbG93L29uc2Nyb2xsLWxheWVyLXNlbGYtZGVzdHJ1Y3Qu
aHRtbAotICAgICAgICBjb2RlLmFwcGVuZCgiICB3aXRoICh0aGlzLm93bmVyRG9jdW1lbnQgPyB0
aGlzLm93bmVyRG9jdW1lbnQgOiB7fSkge1xuIik7Ci0gICAgICAgIGNvZGUuYXBwZW5kKCIgICAg
d2l0aCAodGhpcy5mb3JtID8gdGhpcy5mb3JtIDoge30pIHtcbiIpOwotICAgICAgICBjb2RlLmFw
cGVuZCgiICAgICAgd2l0aCAodGhpcykge1xuIik7Ci0gICAgICAgIGNvZGUuYXBwZW5kKCIgICAg
ICAgIHJldHVybiAoZnVuY3Rpb24oZXZ0KXsiKTsKLSAgICAgICAgY29kZS5hcHBlbmQobV9jb2Rl
KTsKLSAgICAgICAgY29kZS5hcHBlbmQoIlxufSkuY2FsbCh0aGlzLCBldnQpO1xuIik7Ci0gICAg
ICAgIGNvZGUuYXBwZW5kKCIgICAgICB9XG4iKTsKLSAgICAgICAgY29kZS5hcHBlbmQoIiAgICB9
XG4iKTsKLSAgICAgICAgY29kZS5hcHBlbmQoIiAgfVxuIik7Ci0gICAgICAgIGNvZGUuYXBwZW5k
KCJ9KSIpOwotICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IGNvZGVFeHRlcm5hbFN0cmlu
ZyA9IHY4RXh0ZXJuYWxTdHJpbmcoY29kZSk7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OlNjcmlw
dD4gc2NyaXB0ID0gVjhQcm94eTo6Q29tcGlsZVNjcmlwdChjb2RlRXh0ZXJuYWxTdHJpbmcsIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBtX2xpbmVOdW1iZXIgLSA0KTsKLSAgICAgICAgaWYg
KCFzY3JpcHQuSXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBWOFByb3h5KiBwcm94eSA9IFY4UHJv
eHk6OnJldHJpZXZlKG1fZnJhbWUpOwotICAgICAgICAgICAgQVNTRVJUKHByb3h5KTsKLSAgICAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlID0gcHJveHktPlJ1blNjcmlwdChzY3Jp
cHQsIGZhbHNlKTsKLSAgICAgICAgICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHZhbHVlLT5Jc0Z1bmN0aW9uKCkpOwotCi0gICAgICAgICAgICAgICAg
bV93cmFwcGVkRnVuY3Rpb24gPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb24+OjpOZXcodjg6
OkxvY2FsPHY4OjpGdW5jdGlvbj46OkNhc3QodmFsdWUpKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ICAgICAgICAgICAgVjhQcm94eTo6UmVnaXN0ZXJHbG9iYWxIYW5kbGUoRVZFTlRfTElTVEVORVIs
IHRoaXMsIG1fd3JhcHBlZEZ1bmN0aW9uKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIG1fd3Jh
cHBlZEZ1bmN0aW9uLT5TZXROYW1lKHY4OjpTdHJpbmc6Ok5ldyhmcm9tV2ViQ29yZVN0cmluZyht
X2Z1bmN0aW9uTmFtZSksIG1fZnVuY3Rpb25OYW1lLmxlbmd0aCgpKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj46
Ok5ldyhtX3dyYXBwZWRGdW5jdGlvbik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TGF6eUV2ZW50TGlzdGVuZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TGF6eUV2ZW50TGlzdGVuZXIuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3YmUzNC4uMDAwMDAwMAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExhenlFdmVudExpc3RlbmVyLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw4MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBWOExhenlFdmVudExpc3Rl
bmVyX2gKLSNkZWZpbmUgVjhMYXp5RXZlbnRMaXN0ZW5lcl9oCi0KLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgotI2luY2x1ZGUgIlY4QWJzdHJhY3RFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVk
ZSA8djguaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLSAgICBjbGFzcyBFdmVudDsKLSAgICBjbGFzcyBGcmFtZTsKLQotICAgIC8vIFY4TGF6
eUV2ZW50TGlzdGVuZXIgaXMgYSB3cmFwcGVyIGZvciBhIEphdmFTY3JpcHQgY29kZSBzdHJpbmcg
dGhhdCBpcyBjb21waWxlZCBhbmQgZXZhbHVhdGVkIHdoZW4gYW4gZXZlbnQgaXMgZmlyZWQuCi0g
ICAgLy8gQSBWOExhenlFdmVudExpc3RlbmVyIGlzIGFsd2F5cyBhIEhUTUwgZXZlbnQgaGFuZGxl
ci4KLSAgICBjbGFzcyBWOExhenlFdmVudExpc3RlbmVyIDogcHVibGljIFY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4TGF6
eUV2ZW50TGlzdGVuZXI+IGNyZWF0ZShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgY29kZSwg
Y29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVjhMYXp5RXZlbnRMaXN0ZW5lcihmcmFtZSwgY29kZSwgZnVuY3Rpb25O
YW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgLy8gRm9yIGxhenkgZXZlbnQgbGlzdGVuZXIs
IHRoZSBsaXN0ZW5lciBvYmplY3QgaXMgdGhlIHNhbWUgYXMgaXRzIGxpc3RlbmVyCi0gICAgICAg
IC8vIGZ1bmN0aW9uIHdpdGhvdXQgYWRkaXRpb25hbCBzY29wZSBjaGFpbnMuCi0gICAgICAgIHZp
cnR1YWwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGdldExpc3RlbmVyT2JqZWN0KCkgeyByZXR1cm4g
Z2V0V3JhcHBlZExpc3RlbmVyRnVuY3Rpb24oKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
VjhMYXp5RXZlbnRMaXN0ZW5lcihGcmFtZSosIGNvbnN0IFN0cmluZyYgY29kZSwgY29uc3QgU3Ry
aW5nJiBmdW5jdGlvbk5hbWUpOwotICAgICAgICB2aXJ0dWFsIH5WOExhenlFdmVudExpc3RlbmVy
KCk7Ci0KLSAgICAgICAgU3RyaW5nIG1fY29kZTsKLSAgICAgICAgU3RyaW5nIG1fZnVuY3Rpb25O
YW1lOwotICAgICAgICBib29sIG1fY29tcGlsZWQ7Ci0KLSAgICAgICAgLy8gSWYgdGhlIGV2ZW50
IGxpc3RlbmVyIGlzIG9uIGEgbm9uLWRvY3VtZW50IGRvbSBub2RlLCB3ZSBjb21waWxlIHRoZSBm
dW5jdGlvbiB3aXRoIHNvbWUgaW1wbGljaXQgc2NvcGUgY2hhaW5zIGJlZm9yZSBpdC4KLSAgICAg
ICAgYm9vbCBtX3dyYXBwZWRGdW5jdGlvbkNvbXBpbGVkOwotICAgICAgICB2ODo6UGVyc2lzdGVu
dDx2ODo6RnVuY3Rpb24+IG1fd3JhcHBlZEZ1bmN0aW9uOwotCi0gICAgICAgIHY4OjpMb2NhbDx2
ODo6RnVuY3Rpb24+IGdldFdyYXBwZWRMaXN0ZW5lckZ1bmN0aW9uKCk7Ci0KLSAgICAgICAgdmly
dHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpOwotCi0gICAg
ICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb24+IGdldExpc3RlbmVyRnVuY3Rpb24oKTsKLSAgICB9
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBWOExhenlFdmVudExpc3Rl
bmVyX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4T2JqZWN0RXZl
bnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE9iamVjdEV2ZW50
TGlzdGVuZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODQ5NjJhLi4wMDAw
MDAwCi0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4T2JqZWN0RXZlbnRMaXN0ZW5l
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4T2JqZWN0RXZlbnRMaXN0ZW5lci5oIgotCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotc3RhdGljIHZvaWQgd2Vha09iamVjdEV2ZW50TGlzdGVuZXJDYWxsYmFjayh2ODo6
UGVyc2lzdGVudDx2ODo6VmFsdWU+LCB2b2lkKiBwYXJhbWV0ZXIpCi17Ci0gICAgVjhPYmplY3RF
dmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHBhcmFtZXRlcik7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIHdyYXBwZXIKLSAgICBGcmFtZSog
ZnJhbWUgPSBsaXN0ZW5lci0+ZnJhbWUoKTsKLSAgICBpZiAoZnJhbWUpIHsKLSAgICAgICAgVjhQ
cm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSk7Ci0gICAgICAgIGlmIChwcm94
eSkKLSAgICAgICAgICAgIHByb3h5LT5SZW1vdmVPYmplY3RFdmVudExpc3RlbmVyKGxpc3RlbmVy
KTsKLQotICAgICAgICAvLyBCZWNhdXNlIHRoZSBsaXN0ZW5lciBpcyBubyBsb25nZXIgaW4gdGhl
IGxpc3QsIGl0IG11c3QgYmUgZGlzY29ubmVjdGVkIGZyb20gdGhlIGZyYW1lIHRvIGF2b2lkIGRh
bmdsaW5nIGZyYW1lIHBvaW50ZXIKLSAgICAgICAgLy8gaW4gdGhlIGRlc3RydWN0b3IuCi0gICAg
ICAgIGxpc3RlbmVyLT5kaXNjb25uZWN0RnJhbWUoKTsKLSAgICB9Ci0gICAgbGlzdGVuZXItPmRp
c3Bvc2VMaXN0ZW5lck9iamVjdCgpOwotfQotCi1WOE9iamVjdEV2ZW50TGlzdGVuZXI6OlY4T2Jq
ZWN0RXZlbnRMaXN0ZW5lcihGcmFtZSogZnJhbWUsIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBsaXN0
ZW5lciwgYm9vbCBpc0lubGluZSkKLSAgICA6IFY4RXZlbnRMaXN0ZW5lcihmcmFtZSwgbGlzdGVu
ZXIsIGlzSW5saW5lKQotewotICAgIG1fbGlzdGVuZXIuTWFrZVdlYWsodGhpcywgd2Vha09iamVj
dEV2ZW50TGlzdGVuZXJDYWxsYmFjayk7Ci19Ci0KLVY4T2JqZWN0RXZlbnRMaXN0ZW5lcjo6flY4
T2JqZWN0RXZlbnRMaXN0ZW5lcigpCi17Ci0gICAgaWYgKG1fZnJhbWUpIHsKLSAgICAgICAgQVNT
RVJUKCFtX2xpc3RlbmVyLklzRW1wdHkoKSk7Ci0gICAgICAgIFY4UHJveHkqIHByb3h5ID0gVjhQ
cm94eTo6cmV0cmlldmUobV9mcmFtZSk7Ci0gICAgICAgIGlmIChwcm94eSkKLSAgICAgICAgICAg
IHByb3h5LT5SZW1vdmVPYmplY3RFdmVudExpc3RlbmVyKHRoaXMpOwotICAgIH0KLQotICAgIGRp
c3Bvc2VMaXN0ZW5lck9iamVjdCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE9iamVjdEV2ZW50TGlzdGVuZXIu
aCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFiZGFjLi4wMDAwMDAwCi0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4T2JqZWN0RXZlbnRMaXN0ZW5lci5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhPYmplY3RFdmVu
dExpc3RlbmVyX2gKLSNkZWZpbmUgVjhPYmplY3RFdmVudExpc3RlbmVyX2gKLQotI2luY2x1ZGUg
IlY4Q3VzdG9tRXZlbnRMaXN0ZW5lci5oIgotI2luY2x1ZGUgPHY4Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgRnJhbWU7
Ci0KLSAgICAvLyBWOE9iamVjdEV2ZW50TGlzdGVuZXIgaXMgYSBzcGVjaWFsIGxpc3RlbmVyIHdy
YXBwZXIgZm9yIG9iamVjdHMgbm90IGluIHRoZSBET00uICBJdCBrZWVwcyB0aGUgSlMgbGlzdGVu
ZXIgYXMgYSB3ZWFrIHBvaW50ZXIuCi0gICAgY2xhc3MgVjhPYmplY3RFdmVudExpc3RlbmVyIDog
cHVibGljIFY4RXZlbnRMaXN0ZW5lciB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxWOE9iamVjdEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShGcmFtZSogZnJhbWUsIHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBsaXN0ZW5lciwgYm9vbCBpc0lubGluZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOE9iamVjdEV2ZW50TGlzdGVuZXIoZnJhbWUs
IGxpc3RlbmVyLCBpc0lubGluZSkpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBWOE9iamVjdEV2ZW50TGlzdGVuZXIoRnJhbWUqLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlz
dGVuZXIsIGJvb2wgaXNJbmxpbmUpOwotICAgICAgICB2aXJ0dWFsIH5WOE9iamVjdEV2ZW50TGlz
dGVuZXIoKTsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBW
OE9iamVjdEV2ZW50TGlzdGVuZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYmY1ZWUzYy4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVudExp
c3RlbmVyLmgiCi0KLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVY4V29ya2VyQ29udGV4
dEV2ZW50TGlzdGVuZXI6OlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5KiBwcm94eSwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGxpc3RlbmVyLCBi
b29sIGlzSW5saW5lKQotICAgIDogVjhPYmplY3RFdmVudExpc3RlbmVyKDAsIGxpc3RlbmVyLCBp
c0lubGluZSkKLSAgICAsIG1fcHJveHkocHJveHkpCi17Ci19Ci0KLVY4V29ya2VyQ29udGV4dEV2
ZW50TGlzdGVuZXI6On5WOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyKCkKLXsKLSAgICBpZiAo
bV9wcm94eSkKLSAgICAgICAgbV9wcm94eS0+UmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzKTsKLSAg
ICBkaXNwb3NlTGlzdGVuZXJPYmplY3QoKTsKLX0KLQotdm9pZCBWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudChFdmVudCogZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkK
LXsKLSAgICAvLyBJcyB0aGUgRXZlbnRMaXN0ZW5lciBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZnJh
bWU/Ci0gICAgaWYgKGRpc2Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBU
aGUgY2FsbGJhY2sgZnVuY3Rpb24gb24gWE1MSHR0cFJlcXVlc3QgY2FuIGNsZWFyIHRoZSBldmVu
dCBsaXN0ZW5lciBhbmQgZGVzdHJveXMgJ3RoaXMnIG9iamVjdC4gS2VlcCBhIGxvY2FsIHJlZmVy
ZW5jZSB0byBpdC4KLSAgICAvLyBTZWUgaXNzdWUgODg5ODI5LgotICAgIFJlZlB0cjxWOEFic3Ry
YWN0RXZlbnRMaXN0ZW5lcj4gcHJvdGVjdCh0aGlzKTsKLQotICAgIHY4OjpMb2NrZXIgbG9ja2Vy
OwotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLQotICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IGNvbnRleHQgPSBtX3Byb3h5LT5HZXRDb250ZXh0KCk7Ci0gICAgaWYgKGNvbnRl
eHQuSXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnZva2VFdmVudEhhbmRsZXIo
Y29udGV4dCwgZXZlbnQsIGlzV2luZG93RXZlbnQpOwotfQotCi12ODo6TG9jYWw8djg6OlZhbHVl
PiBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpjYWxsTGlzdGVuZXJGdW5jdGlvbih2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqIGV2ZW50LCBib29sIGlzV2luZG93RXZl
bnQpCi17Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4gaGFuZGxlckZ1bmN0aW9uID0gZ2V0
TGlzdGVuZXJGdW5jdGlvbigpOwotICAgIGlmIChoYW5kbGVyRnVuY3Rpb24uSXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpWYWx1ZT4oKTsKLQotICAgIHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiByZWNlaXZlciA9IGdldFJlY2VpdmVyT2JqZWN0KGV2ZW50LCBpc1dpbmRvd0V2
ZW50KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcGFyYW1ldGVyc1sxXSA9IHsganNFdmVu
dCB9OwotICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHJlc3VsdCA9IGhhbmRsZXJGdW5jdGlvbi0+
Q2FsbChyZWNlaXZlciwgMSwgcGFyYW1ldGVycyk7Ci0KLSAgICBtX3Byb3h5LT5UcmFja0V2ZW50
KGV2ZW50KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXY4OjpMb2NhbDx2ODo6T2JqZWN0
PiBWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyOjpnZXRSZWNlaXZlck9iamVjdChFdmVudCog
ZXZlbnQsIGJvb2wgaXNXaW5kb3dFdmVudCkKLXsKLSAgICBpZiAoIW1fbGlzdGVuZXIuSXNFbXB0
eSgpICYmICFtX2xpc3RlbmVyLT5Jc0Z1bmN0aW9uKCkpCi0gICAgICAgIHJldHVybiB2ODo6TG9j
YWw8djg6Ok9iamVjdD46Ok5ldyhtX2xpc3RlbmVyKTsKLQotICAgIGlmIChpc1dpbmRvd0V2ZW50
KQotICAgICAgICByZXR1cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7Ci0K
LSAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKLSAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OkV2ZW50VGFyZ2V0VG9WOE9iamVjdCh0YXJnZXQpOwotICAgIGlmICh2YWx1ZS5Jc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD4oKTsKLSAgICByZXR1cm4gdjg6
OkxvY2FsPHY4OjpPYmplY3Q+OjpOZXcodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1
ZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBXT1JLRVJTCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRF
dmVudExpc3RlbmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZGFlNDEuLjAw
MDAwMDAKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcl9oCi0jZGVmaW5lIFY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXJfaAotCi0jaWYgRU5BQkxFKFdPUktFUlMpCi0KLSNpbmNs
dWRlICJWOE9iamVjdEV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlIDx2OC5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEV2
ZW50OwotICAgIGNsYXNzIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTsKLQotICAgIGNsYXNz
IFY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgVjhPYmplY3RFdmVudExpc3Rl
bmVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXI+IGNyZWF0ZShXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkqIHBy
b3h5LCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVjhXb3JrZXJDb250ZXh0RXZl
bnRMaXN0ZW5lcihwcm94eSwgbGlzdGVuZXIsIGlzSW5saW5lKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lcihXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkqLCB2ODo6TG9jYWw8djg6Ok9iamVjdD4gbGlzdGVuZXIsIGJvb2wgaXNJbmxpbmUpOwotCi0g
ICAgICAgIHZpcnR1YWwgflY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIoKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KEV2ZW50KiwgYm9vbCBpc1dpbmRvd0V2ZW50KTsKLSAg
ICAgICAgdmlydHVhbCBib29sIGRpc2Nvbm5lY3RlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3Byb3h5
OyB9Ci0KLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCkgeyBtX3Byb3h5ID0gMDsgfQotCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OlZhbHVlPiBjYWxsTGlzdGVu
ZXJGdW5jdGlvbih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCwgRXZlbnQqLCBib29sIGlz
V2luZG93RXZlbnQpOwotICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gZ2V0UmVjZWl2ZXJP
YmplY3QoRXZlbnQqLCBib29sIGlzV2luZG93RXZlbnQpOwotICAgICAgICBXb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkqIG1fcHJveHk7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gV09SS0VSUwotCi0jZW5kaWYgLy8gVjhXb3JrZXJDb250ZXh0RXZlbnRM
aXN0ZW5lcl9oCg==
</data>
<flag name="review"
          id="14066"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>