<?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>269540</bug_id>
          
          <creation_ts>2024-02-15 19:33:59 -0800</creation_ts>
          <short_desc>REGRESSION(274647@main): MotionMark 3-4% regression</short_desc>
          <delta_ts>2024-02-15 19:43:16 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>269366</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>cdumez</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2014280</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-15 19:33:59 -0800</bug_when>
    <thetext>https://commits.webkit.org/274647@main introduced a regression:
MotionMark 3-4% regression

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014282</commentid>
    <comment_count>1</comment_count>
      <attachid>469911</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2024-02-15 19:34:05 -0800</bug_when>
    <thetext>Created attachment 469911
REVERT of 274647@main

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the revert will be successful.  This process takes approximately 15 minutes.

If you would like to land the revert faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014285</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-02-15 19:42:02 -0800</bug_when>
    <thetext>Committed 274790@main (d013afbb366c): &lt;https://commits.webkit.org/274790@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 469911.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2014286</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-02-15 19:43:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/123061185&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469911</attachid>
            <date>2024-02-15 19:34:05 -0800</date>
            <delta_ts>2024-02-15 19:42:03 -0800</delta_ts>
            <desc>REVERT of 274647@main</desc>
            <filename>bug-269540-20240216033405.patch</filename>
            <type>text/plain</type>
            <size>286884</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">RnJvbSBmOWZiZWUwYmQ3Njg4OTAyMzQ4ODFiNjk0NGViNGFmNjc3YTdkMWY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBDb21taXQgUXVldWUgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3Jn
PgpEYXRlOiBGcmksIDE2IEZlYiAyMDI0IDAzOjM0OjAzICswMDAwClN1YmplY3Q6IFtQQVRDSF0g
VW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIDI3NDY0N0BtYWluLgogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI2OTU0MAoKTW90aW9uTWFyayAzLTQlIHJlZ3Jlc3Npb24KClJl
dmVydGVkIGNoYW5nZXNldDoKCiJBZG9wdCBtb3JlIHNtYXJ0IHBvaW50ZXJzIGluIFdlYkNvcmUv
YmluZGluZ3MiCmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjkzNjYK
aHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvMjc0NjQ3QG1haW4KLS0tCiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oICAgICAgfCAgIDIgKy0KIFNvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9XZWJBbmltYXRpb24uY3BwICAgICB8ICAgOCArLQogU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5oICAgICAgIHwgICA0ICstCiAuLi4vYmluZGluZ3MvanMv
Q2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcCAgfCAgMTUgKy0KIC4uLi9iaW5kaW5ncy9qcy9D
YWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oICB8ICAxNCArLQogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvQ29tbW9uVk0uY3BwICAgICAgIHwgIDEzICstCiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9Db21tb25WTS5oICAgICAgICAgfCAgIDIgLQogLi4uL2JpbmRpbmdzL2pzL0RPTUdD
T3V0cHV0Q29uc3RyYWludC5oICAgICAgIHwgICA0ICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9ET01Qcm9taXNlUHJveHkuaCAgfCAgIDYgKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVdyYXBwZXJXb3JsZC5jcHAgICB8ICAxNCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NV3JhcHBlcldvcmxkLmggIHwgICA2ICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9HQ0NvbnRyb2xsZXIuY3BwICAgfCAgMTYgKy0KIC4uLi9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmNwcCAgICAgICB8ICA0NSArKystLS0KIC4uLi9iaW5kaW5ncy9qcy9JbnRlcm5h
bFJlYWRhYmxlU3RyZWFtLmNwcCAgICB8ICA0NyArKystLS0KIC4uLi9iaW5kaW5ncy9qcy9JbnRl
cm5hbFdyaXRhYmxlU3RyZWFtLmNwcCAgICB8ICAyOSArKy0tCiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAgfCAgIDggKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2UuY3BwICB8ICA0NiArKystLS0KIC4uLi9qcy9KU0N1c3RvbUVs
ZW1lbnRSZWdpc3RyeUN1c3RvbS5jcHAgICAgICB8ICAzNSArKy0tLQogLi4uL2JpbmRpbmdzL2pz
L0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwICAgICAgIHwgICAzICstCiAuLi4vYmluZGluZ3MvanMv
SlNET01BYnN0cmFjdE9wZXJhdGlvbnMuaCAgICAgfCAgIDQgKy0KIC4uLi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQXN5bmNJdGVyYXRvci5oICB8ICAyMiArLS0KIC4uLi9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmdTZWN1cml0eS5jcHAgICAgICB8ICAyOSArKy0tCiAuLi4vYmluZGluZ3MvanMv
SlNET01CaW5kaW5nU2VjdXJpdHlJbmxpbmVzLmggfCAgIDIgKy0KIC4uLi9iaW5kaW5ncy9qcy9K
U0RPTUJ1aWx0aW5Db25zdHJ1Y3Rvci5oICAgICB8ICAgMiArLQogLi4uL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01DYXN0VGhpc1ZhbHVlLmggIHwgICA2ICstCiAuLi4vYmluZGluZ3MvanMvSlNE
T01Db25zdHJ1Y3RvckJhc2UuY3BwICAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydEFueS5oICB8ICAgMiArLQogLi4uL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEJ1ZmZlclNvdXJjZS5oICAgIHwgICAyICstCiAuLi4vYmluZGluZ3MvanMvSlNET01D
b252ZXJ0Q2FsbGJhY2tzLmggICAgICAgfCAgIDQgKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydERhdGUuY3BwICB8ICAgNCArLQogLi4uL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydEVudW1lcmF0aW9uLmggICAgIHwgICAyICstCiAuLi4vYmluZGluZ3MvanMvSlNET01Db252
ZXJ0RXZlbnRMaXN0ZW5lci5oICAgfCAgIDMgKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0RPTUV4Y2Vw
dGlvbkhhbmRsaW5nLmNwcCAgICB8ICAyNiArKy0tCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUdsb2JhbE9iamVjdC5jcHAgfCAgNTggKysrLS0tLQogLi4uL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01HbG9iYWxPYmplY3QuaCAgIHwgICAyIC0KIC4uLi9iaW5kaW5ncy9qcy9KU0RPTUd1
YXJkZWRPYmplY3QuY3BwICAgICAgICB8ICAgNSArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01JdGVyYXRvci5jcHAgIHwgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUl0ZXJhdG9yLmggICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NTWFwTGlrZS5oICAgICB8ICA0MiArKystLS0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NTWljcm90YXNrLmNwcCB8ICAgNiArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01PcGVyYXRpb24uaCAgIHwgICAzICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVByb21pc2UuY3BwICAgfCAgIDggKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0RPTVByb21p
c2VEZWZlcnJlZC5jcHAgICAgICB8ICA0OCArKystLS0KIC4uLi9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2VEZWZlcnJlZC5oICAgICAgICB8ICAzNCArKy0tLQogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TZXRMaWtlLmNwcCAgIHwgIDEzICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTVNldExpa2UuaCAgICAgfCAgNDAgKystLS0KIC4uLi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAgICB8ICAzMiArKy0tCiAuLi4vYmluZGluZ3MvanMvSlNE
T01XaW5kb3dQcm9wZXJ0aWVzLmNwcCAgICAgfCAgMTggKy0tCiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwICAgfCAgIDIgKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV3JhcHBlckNhY2hlLmggICB8ICAgMiArLQogLi4uL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNEb2N1bWVudEN1c3RvbS5jcHAgIHwgIDEyICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0VsZW1lbnRDdXN0b20uY3BwICAgfCAgIDggKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0VsZW1l
bnRJbnRlcm5hbHNDdXN0b20uY3BwICB8ICAgOCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFcnJvckhhbmRsZXIuY3BwIHwgICA4ICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50TGlzdGVuZXIuY3BwICAgfCAgMTIgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRMaXN0ZW5lci5oICB8ICAxMCArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldEN1c3RvbS5oIHwgICA5ICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V4ZWNTdGF0ZS5jcHAgICAgfCAgIDQgKy0KIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXhlY1N0YXRlLmggICAgICB8ICAxNiArLQogLi4uL2pzL0pTRXh0ZW5kYWJsZU1lc3NhZ2VFdmVu
dEN1c3RvbS5jcHAgICAgIHwgICA0ICstCiAuLi4vYmluZGluZ3MvanMvSlNIVE1MQWxsQ29sbGVj
dGlvbkN1c3RvbS5jcHAgfCAgIDcgKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50Q3Vz
dG9tLmNwcCAgICAgICB8ICAxMCArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5
Q3VzdG9tLmNwcCAgIHwgICAzICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ltYWdlRGF0
YUN1c3RvbS5jcHAgfCAgIDQgKy0KIC4uLi9iaW5kaW5ncy9qcy9KU0tleWZyYW1lRWZmZWN0Q3Vz
dG9tLmNwcCAgICB8ICAgMiArLQogLi4uL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwICAgICAgIHwgIDE4ICstLQogLi4uL2JpbmRpbmdzL2pzL0pTTG9jYWxET01XaW5kb3dDdXN0
b20uY3BwICAgIHwgIDg5ICsrKysrKy0tLS0tCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xv
Y2F0aW9uQ3VzdG9tLmNwcCAgfCAgMjggKystLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
aWNyb3Rhc2tDYWxsYmFjay5oIHwgICAyICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U05vZGVDdXN0b20uY3BwICAgfCAgIDIgKy0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Jz
ZXJ2YWJsZUFycmF5LmNwcCB8ICAyMiArLS0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2Jz
ZXJ2YWJsZUFycmF5LmggICB8ICAgMiArLQogLi4uL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVu
dEN1c3RvbS5jcHAgICAgIHwgIDE2ICstCiAuLi4vanMvSlNSVENSdHBTRnJhbWVUcmFuc2Zvcm1D
dXN0b20uY3BwICAgICAgfCAgIDQgKy0KIC4uLi9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNlQ3Vz
dG9tLmNwcCAgICAgICB8ICAgNiArLQogLi4uL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93
QmFzZS5jcHAgICAgIHwgICA1IC0KIC4uLi9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jh
c2UuaCAgICAgICB8ICAgMSAtCiAuLi4vYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dDdXN0
b20uY3BwICAgfCAgMTggKy0tCiAuLi4vYmluZGluZ3MvanMvSlNTaGFkb3dSb290Q3VzdG9tLmNw
cCAgICAgICAgfCAgIDIgKy0KIC4uLi9iaW5kaW5ncy9qcy9KU1dlYkFuaW1hdGlvbkN1c3RvbS5j
cHAgICAgICB8ICAxMCArLQogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXaW5kb3dQcm94
eS5jcHAgIHwgICAyICstCiAuLi4vYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2Uu
Y3BwICAgfCAgIDQgKy0KIC4uLi9iaW5kaW5ncy9qcy9KU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9t
LmNwcCB8ICAgMiArLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvTW9kdWxlU2NyaXB0TG9hZGVy
LmggIHwgICA0ICstCiAuLi4vYmluZGluZ3MvanMvTW9kdWxlU2NyaXB0TG9hZGVyQ2xpZW50Lmgg
ICAgfCAgIDQgKy0KIC4uLi9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmNwcCAg
ICB8ICAyMCArLS0KIC4uLi9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAg
ICB8ICAgNiArLQogLi4uL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAgICAg
IHwgIDE2ICstCiAuLi4vV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmNwcCAg
fCAxNDIgKysrKysrKysrLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmggfCAgIDQgKy0KIC4uLi9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
TWFjLm1tICAgICAgICB8ICAgNCArLQogLi4uL2JpbmRpbmdzL2pzL1NjcmlwdE1vZHVsZUxvYWRl
ci5jcHAgICAgICAgIHwgIDY4ICsrKystLS0tLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvU3Ry
dWN0dXJlZENsb25lLmNwcCAgIHwgICAyICstCiAuLi4vV2ViQXNzZW1ibHlDYWNoZWRTY3JpcHRT
b3VyY2VQcm92aWRlci5oICAgfCAgIDYgKy0KIC4uLi9XZWJBc3NlbWJseVNjcmlwdEJ1ZmZlclNv
dXJjZVByb3ZpZGVyLmggICB8ICAgMiArLQogLi4uL2JpbmRpbmdzL2pzL1dlYkNvcmVKU0NsaWVu
dERhdGEuY3BwICAgICAgIHwgIDE4ICstLQogLi4uL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29y
ZUpTQ2xpZW50RGF0YS5oIHwgIDEwICstCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5k
b3dQcm94eS5jcHAgICAgfCAgMjUgKystCiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5k
b3dQcm94eS5oICAgICAgfCAgIDMgKy0KIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwICAg
ICAgICAgICAgICAgICB8ICAgNSAtCiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggICAgICAg
ICAgICAgICAgICAgfCAgIDEgLQogMTAxIGZpbGVzIGNoYW5nZWQsIDY3NyBpbnNlcnRpb25zKCsp
LCA3NjkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgKaW5kZXggMTA5MDQ1OTdlMDNjLi43YTdjZjNhODRhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaApAQCAtMTc4MSw3ICsxNzgxLDcgQEAgSlNfRVhQT1JUX1BS
SVZBVEUgTkVWRVJfSU5MSU5FIGJvb2wgb3JkaW5hcnlTZXRXaXRoT3duRGVzY3JpcHRvcihKU0ds
b2JhbE9iamVjdCoKICAgICAgICAgdm0sIGdsb2JhbE9iamVjdCwgbWFrZUlkZW50aWZpZXIodm0s
IChqc05hbWUpKSwgKGdlbmVyYXRvck5hbWUpKHZtKSwgKGF0dHJpYnV0ZXMpKQogCiAjZGVmaW5l
IEpTQ19UT19TVFJJTkdfVEFHX1dJVEhPVVRfVFJBTlNJVElPTigpIFwKLSAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgV1RGOjpnZXRQdHIodm0pLT5wcm9wZXJ0eU5hbWVzLT50b1N0
cmluZ1RhZ1N5bWJvbCwgXAorICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwgXAogICAgICAgICBqc05vbnRyaXZpYWxT
dHJpbmcodm0sIGluZm8oKS0+Y2xhc3NOYW1lKSwgSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKIAogLy8gSGVscGVyIGZv
ciBkZWZpbmluZyBuYXRpdmUgZ2V0dGVycyBvbiBwcm9wZXJ0aWVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vV2ViQW5pbWF0aW9uLmNwcAppbmRleCAzNTkzMDIyZTM1OTkuLmJiZDhkZGY3YTE0
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTcwLDEx
ICs3MCwxMSBAQCBIYXNoU2V0PFdlYkFuaW1hdGlvbio+JiBXZWJBbmltYXRpb246Omluc3RhbmNl
cygpCiAgICAgcmV0dXJuIGluc3RhbmNlczsKIH0KIAotUmVmPFdlYkFuaW1hdGlvbj4gV2ViQW5p
bWF0aW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBSZWZQdHI8QW5pbWF0aW9uRWZmZWN0
PiYmIGVmZmVjdCkKK1JlZjxXZWJBbmltYXRpb24+IFdlYkFuaW1hdGlvbjo6Y3JlYXRlKERvY3Vt
ZW50JiBkb2N1bWVudCwgQW5pbWF0aW9uRWZmZWN0KiBlZmZlY3QpCiB7CiAgICAgYXV0byByZXN1
bHQgPSBhZG9wdFJlZigqbmV3IFdlYkFuaW1hdGlvbihkb2N1bWVudCkpOwogICAgIHJlc3VsdC0+
aW5pdGlhbGl6ZSgpOwotICAgIHJlc3VsdC0+c2V0RWZmZWN0KFdURk1vdmUoZWZmZWN0KSk7Cisg
ICAgcmVzdWx0LT5zZXRFZmZlY3QoZWZmZWN0KTsKICAgICByZXN1bHQtPnNldFRpbWVsaW5lKCZk
b2N1bWVudC50aW1lbGluZSgpKTsKIAogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlk
Q3JlYXRlV2ViQW5pbWF0aW9uKHJlc3VsdC5nZXQoKSk7CkBAIC04MiwxMSArODIsMTEgQEAgUmVm
PFdlYkFuaW1hdGlvbj4gV2ViQW5pbWF0aW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBS
ZWZQdHI8QW5pbWF0aW9uRWZmZWMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8V2ViQW5p
bWF0aW9uPiBXZWJBbmltYXRpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFJlZlB0cjxB
bmltYXRpb25FZmZlY3Q+JiYgZWZmZWN0LCBBbmltYXRpb25UaW1lbGluZSogdGltZWxpbmUpCitS
ZWY8V2ViQW5pbWF0aW9uPiBXZWJBbmltYXRpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQs
IEFuaW1hdGlvbkVmZmVjdCogZWZmZWN0LCBBbmltYXRpb25UaW1lbGluZSogdGltZWxpbmUpCiB7
CiAgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZigqbmV3IFdlYkFuaW1hdGlvbihkb2N1bWVudCkp
OwogICAgIHJlc3VsdC0+aW5pdGlhbGl6ZSgpOwotICAgIHJlc3VsdC0+c2V0RWZmZWN0KFdURk1v
dmUoZWZmZWN0KSk7CisgICAgcmVzdWx0LT5zZXRFZmZlY3QoZWZmZWN0KTsKICAgICBpZiAodGlt
ZWxpbmUpCiAgICAgICAgIHJlc3VsdC0+c2V0VGltZWxpbmUodGltZWxpbmUpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmgKaW5kZXggZjhmYmJjNjdmZGFhLi45NWU0NTM5
NTk2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmgKQEAgLTU5LDgg
KzU5LDggQEAgc3RydWN0IFJlc29sdXRpb25Db250ZXh0OwogY2xhc3MgV2ViQW5pbWF0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8V2ViQW5pbWF0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0IHsKICAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFdlYkFuaW1h
dGlvbik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJBbmltYXRpb24+IGNyZWF0ZShEb2N1
bWVudCYsIFJlZlB0cjxBbmltYXRpb25FZmZlY3Q+JiYpOwotICAgIHN0YXRpYyBSZWY8V2ViQW5p
bWF0aW9uPiBjcmVhdGUoRG9jdW1lbnQmLCBSZWZQdHI8QW5pbWF0aW9uRWZmZWN0PiYmLCBBbmlt
YXRpb25UaW1lbGluZSopOworICAgIHN0YXRpYyBSZWY8V2ViQW5pbWF0aW9uPiBjcmVhdGUoRG9j
dW1lbnQmLCBBbmltYXRpb25FZmZlY3QqKTsKKyAgICBzdGF0aWMgUmVmPFdlYkFuaW1hdGlvbj4g
Y3JlYXRlKERvY3VtZW50JiwgQW5pbWF0aW9uRWZmZWN0KiwgQW5pbWF0aW9uVGltZWxpbmUqKTsK
ICAgICB+V2ViQW5pbWF0aW9uKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSGFzaFNl
dDxXZWJBbmltYXRpb24qPiYgaW5zdGFuY2VzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcAppbmRleCBlNmIzZmJh
YzAwNmIuLjkyOTgzNmU4ZmIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvQ2FjaGVkTW9kdWxlU2NyaXB0TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9DYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXIuY3BwCkBAIC01Miw4ICs1MiwxMCBAQCBD
YWNoZWRNb2R1bGVTY3JpcHRMb2FkZXI6OkNhY2hlZE1vZHVsZVNjcmlwdExvYWRlcihNb2R1bGVT
Y3JpcHRMb2FkZXJDbGllbnQmIGNsaQogCiBDYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXI6On5DYWNo
ZWRNb2R1bGVTY3JpcHRMb2FkZXIoKQogewotICAgIGlmIChDYWNoZWRSZXNvdXJjZUhhbmRsZSBj
YWNoZWRTY3JpcHQgPSBzdGQ6OmV4Y2hhbmdlKG1fY2FjaGVkU2NyaXB0LCBudWxscHRyKSkKLSAg
ICAgICAgY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQoKnRoaXMpOworICAgIGlmIChtX2NhY2hl
ZFNjcmlwdCkgeworICAgICAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsK
KyAgICAgICAgbV9jYWNoZWRTY3JpcHQgPSBudWxscHRyOworICAgIH0KIH0KIAogYm9vbCBDYWNo
ZWRNb2R1bGVTY3JpcHRMb2FkZXI6OmxvYWQoRG9jdW1lbnQmIGRvY3VtZW50LCBVUkwmJiBzb3Vy
Y2VVUkwpCkBAIC02MSwxNCArNjMsMTMgQEAgYm9vbCBDYWNoZWRNb2R1bGVTY3JpcHRMb2FkZXI6
OmxvYWQoRG9jdW1lbnQmIGRvY3VtZW50LCBVUkwmJiBzb3VyY2VVUkwpCiAgICAgQVNTRVJUKG1f
cHJvbWlzZSk7CiAgICAgQVNTRVJUKCFtX2NhY2hlZFNjcmlwdCk7CiAgICAgU3RyaW5nIGludGVn
cml0eSA9IG1fcGFyYW1ldGVycyA/IG1fcGFyYW1ldGVycy0+aW50ZWdyaXR5KCkgOiBTdHJpbmcg
eyB9OwotICAgIENhY2hlZFJlc291cmNlSGFuZGxlIGNhY2hlZFNjcmlwdCA9IHNjcmlwdEZldGNo
ZXIoKS5yZXF1ZXN0TW9kdWxlU2NyaXB0KGRvY3VtZW50LCBzb3VyY2VVUkwsIFdURk1vdmUoaW50
ZWdyaXR5KSk7Ci0gICAgbV9jYWNoZWRTY3JpcHQgPSBjYWNoZWRTY3JpcHQ7CisgICAgbV9jYWNo
ZWRTY3JpcHQgPSBzY3JpcHRGZXRjaGVyKCkucmVxdWVzdE1vZHVsZVNjcmlwdChkb2N1bWVudCwg
c291cmNlVVJMLCBXVEZNb3ZlKGludGVncml0eSkpOwogICAgIGlmICghbV9jYWNoZWRTY3JpcHQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX3NvdXJjZVVSTCA9IFdURk1vdmUoc291cmNl
VVJMKTsKIAogICAgIC8vIElmIHRoZSBjb250ZW50IGlzIGFscmVhZHkgY2FjaGVkLCB0aGlzIGlt
bWVkaWF0ZWx5IGNhbGxzIG5vdGlmeUZpbmlzaGVkLgotICAgIGNhY2hlZFNjcmlwdC0+YWRkQ2xp
ZW50KCp0aGlzKTsKKyAgICBtX2NhY2hlZFNjcmlwdC0+YWRkQ2xpZW50KCp0aGlzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzgsMTMgKzc5LDEzIEBAIHZvaWQgQ2FjaGVkTW9kdWxlU2Ny
aXB0TG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UsIGNvbnN0
IE5lCiAgICAgQVNTRVJUKG1fY2FjaGVkU2NyaXB0KTsKICAgICBBU1NFUlQobV9wcm9taXNlKTsK
IAotICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMgfTsKKyAgICBSZWY8Q2FjaGVkTW9kdWxl
U2NyaXB0TG9hZGVyPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICBpZiAobV9jbGllbnQpCiAg
ICAgICAgIG1fY2xpZW50LT5ub3RpZnlGaW5pc2hlZCgqdGhpcywgV1RGTW92ZShtX3NvdXJjZVVS
TCksIG1fcHJvbWlzZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIFJlbW92ZSB0aGUgY2xp
ZW50IGFmdGVyIGNhbGxpbmcgbm90aWZ5RmluaXNoZWQgdG8ga2VlcCB0aGUgZGF0YSBidWZmZXIg
aW4KICAgICAvLyBDYWNoZWRSZXNvdXJjZSBhbGl2ZSB3aGlsZSBub3RpZnlGaW5pc2hlZCBwcm9j
ZXNzZXMgdGhlIHJlc291cmNlLgotICAgIENhY2hlZFJlc291cmNlSGFuZGxlIHsgbV9jYWNoZWRT
Y3JpcHQgfS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICBtX2NhY2hlZFNjcmlwdC0+cmVtb3Zl
Q2xpZW50KCp0aGlzKTsKICAgICBtX2NhY2hlZFNjcmlwdCA9IG51bGxwdHI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3Zp
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlci5oCmluZGV4IDNlMzlhODVmMjc2Yy4uOTNiY2Q2ZmFlODliIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9DYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyLmgK
QEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+Q2FjaGVkU2NyaXB0U291
cmNlUHJvdmlkZXIoKQogICAgIHsKLSAgICAgICAgcHJvdGVjdGVkU2NyaXB0KCktPnJlbW92ZUNs
aWVudCgqdGhpcyk7CisgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5yZW1vdmVDbGllbnQoKnRoaXMp
OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCBvdmVycmlkZTsKQEAgLTUxLDEx
ICs1MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIDogU291cmNlUHJvdmlkZXIoSlNDOjpTb3VyY2VP
cmlnaW4geyBjYWNoZWRTY3JpcHQtPnJlc3BvbnNlKCkudXJsKCksIFdURk1vdmUoc2NyaXB0RmV0
Y2hlcikgfSwgU3RyaW5nKGNhY2hlZFNjcmlwdC0+cmVzcG9uc2UoKS51cmwoKS5zdHJpbmcoKSks
IGNhY2hlZFNjcmlwdC0+cmVzcG9uc2UoKS5pc1JlZGlyZWN0ZWQoKSA/IFN0cmluZyhjYWNoZWRT
Y3JpcHQtPnVybCgpLnN0cmluZygpKSA6IFN0cmluZygpLCBKU0M6OlNvdXJjZVRhaW50ZWRPcmln
aW46OlVudGFpbnRlZCwgVGV4dFBvc2l0aW9uKCksIHNvdXJjZVR5cGUpCiAgICAgICAgICwgbV9j
YWNoZWRTY3JpcHQoY2FjaGVkU2NyaXB0KQogICAgIHsKLSAgICAgICAgcHJvdGVjdGVkU2NyaXB0
KCktPmFkZENsaWVudCgqdGhpcyk7CisgICAgICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQo
KnRoaXMpOwogICAgIH0KIAotICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4g
cHJvdGVjdGVkU2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRTY3JpcHQ7IH0KLQogICAg
IENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CiB9Owog
CkBAIC02NCw4ICs2Miw4IEBAIGlubGluZSB1bnNpZ25lZCBDYWNoZWRTY3JpcHRTb3VyY2VQcm92
aWRlcjo6aGFzaCgpIGNvbnN0CiAgICAgLy8gTW9kdWxlcyBzaG91bGQgYWx3YXlzIGJlIGRlY29k
ZWQgYXMgVVRGLTguCiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBh
Z2Uvd2ViYXBwYXBpcy5odG1sI2ZldGNoLWEtc2luZ2xlLW1vZHVsZS1zY3JpcHQKICAgICBpZiAo
c291cmNlVHlwZSgpID09IEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpCi0g
ICAgICAgIHJldHVybiBwcm90ZWN0ZWRTY3JpcHQoKS0+c2NyaXB0SGFzaChDYWNoZWRTY3JpcHQ6
OlNob3VsZERlY29kZUFzVVRGOE9ubHk6Olllcyk7Ci0gICAgcmV0dXJuIHByb3RlY3RlZFNjcmlw
dCgpLT5zY3JpcHRIYXNoKCk7CisgICAgICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0
SGFzaChDYWNoZWRTY3JpcHQ6OlNob3VsZERlY29kZUFzVVRGOE9ubHk6Olllcyk7CisgICAgcmV0
dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHRIYXNoKCk7CiB9CiAKIGlubGluZSBTdHJpbmdWaWV3
IENhY2hlZFNjcmlwdFNvdXJjZVByb3ZpZGVyOjpzb3VyY2UoKSBjb25zdApAQCAtNzMsOCArNzEs
OCBAQCBpbmxpbmUgU3RyaW5nVmlldyBDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlcjo6c291cmNl
KCkgY29uc3QKICAgICAvLyBNb2R1bGVzIHNob3VsZCBhbHdheXMgYmUgZGVjb2RlZCBhcyBVVEYt
OC4KICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBh
cGlzLmh0bWwjZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAogICAgIGlmIChzb3VyY2VUeXBl
KCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZSkKLSAgICAgICAgcmV0
dXJuIHByb3RlY3RlZFNjcmlwdCgpLT5zY3JpcHQoQ2FjaGVkU2NyaXB0OjpTaG91bGREZWNvZGVB
c1VURjhPbmx5OjpZZXMpOwotICAgIHJldHVybiBwcm90ZWN0ZWRTY3JpcHQoKS0+c2NyaXB0KCk7
CisgICAgICAgIHJldHVybiBtX2NhY2hlZFNjcmlwdC0+c2NyaXB0KENhY2hlZFNjcmlwdDo6U2hv
dWxkRGVjb2RlQXNVVEY4T25seTo6WWVzKTsKKyAgICByZXR1cm4gbV9jYWNoZWRTY3JpcHQtPnNj
cmlwdCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9Db21tb25WTS5jcHAKaW5kZXggYjZiYTgyNzdlMzk0Li4wMDc1M2Y0MzJkNjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5jcHAKQEAgLTU5LDEyICs1OSwxMiBAQCBK
U0M6OlZNJiBjb21tb25WTVNsb3coKQogICAgIFNjcmlwdENvbnRyb2xsZXI6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFJlZlB0ciBydW5M
b29wID0gUnVuTG9vcDo6d2ViSWZFeGlzdHMoKTsKKyAgICBSdW5Mb29wKiBydW5Mb29wID0gUnVu
TG9vcDo6d2ViSWZFeGlzdHMoKTsKICNlbHNlCi0gICAgUmVmUHRyPFJ1bkxvb3A+IHJ1bkxvb3A7
CisgICAgUnVuTG9vcCogcnVuTG9vcCA9IG51bGxwdHI7CiAjZW5kaWYKIAotICAgIGF1dG8mIHZt
ID0gSlNDOjpWTTo6Y3JlYXRlKEpTQzo6SGVhcFR5cGU6OkxhcmdlLCBydW5Mb29wLmdldCgpKS5s
ZWFrUmVmKCk7CisgICAgYXV0byYgdm0gPSBKU0M6OlZNOjpjcmVhdGUoSlNDOjpIZWFwVHlwZTo6
TGFyZ2UsIHJ1bkxvb3ApLmxlYWtSZWYoKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAg
ICB2bS5oZWFwLnNldEZ1bGxBY3Rpdml0eUNhbGxiYWNrKE9wcG9ydHVuaXN0aWNUYXNrU2NoZWR1
bGVyOjpGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOjpjcmVhdGUodm0uaGVhcCkpOwogICAgIHZtLmhl
YXAuc2V0RWRlbkFjdGl2aXR5Q2FsbGJhY2soT3Bwb3J0dW5pc3RpY1Rhc2tTY2hlZHVsZXI6OkVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2s6OmNyZWF0ZSh2bS5oZWFwKSk7CkBAIC0xMDEsMTIgKzEwMSw3
IEBAIExvY2FsRnJhbWUqIGxleGljYWxGcmFtZUZyb21Db21tb25WTSgpCiAKIHZvaWQgYWRkSW1w
dXJlUHJvcGVydHkoY29uc3QgQXRvbVN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIHByb3Rl
Y3RlZENvbW1vblZNKCktPmFkZEltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZS5pbXBsKCkpOwot
fQotCi1SZWY8SlNDOjpWTT4gcHJvdGVjdGVkQ29tbW9uVk0oKQotewotICAgIHJldHVybiBjb21t
b25WTSgpOworICAgIGNvbW1vblZNKCkuYWRkSW1wdXJlUHJvcGVydHkocHJvcGVydHlOYW1lLmlt
cGwoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9Db21tb25WTS5oCmluZGV4IGRhNWIwMTIwOGM2NS4uZDhjMjRkY2QzODE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Db21tb25WTS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0NvbW1vblZNLmgKQEAgLTUyLDggKzUyLDYgQEAgaW5saW5lIEpTQzo6
Vk0mIGNvbW1vblZNKCkKICAgICByZXR1cm4gY29tbW9uVk1TbG93KCk7CiB9CiAKLVJlZjxKU0M6
OlZNPiBwcm90ZWN0ZWRDb21tb25WTSgpOwotCiB2b2lkIGFkZEltcHVyZVByb3BlcnR5KGNvbnN0
IEF0b21TdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01HQ091dHB1dENvbnN0cmFpbnQuaAppbmRleCA1NzZjNWI3
NGJlMTQuLmUzNmI1NmNmZGQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvRE9NR0NPdXRwdXRDb25zdHJhaW50LmgKQEAgLTQ4LDggKzQ4LDggQEAgcHJvdGVjdGVkOgog
cHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWaXNpdG9yPiB2b2lkIGV4ZWN1dGVJbXBs
SW1wbChWaXNpdG9yJik7CiAKLSAgICBKU0M6OlZNJiBtX3ZtOyAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXNlIGEgc21hcnQgcG9pbnRlci4KLSAgICBKU0hlYXBEYXRhJiBtX2hlYXBEYXRhOyAvLyBG
SVhNRTogVGhpcyBzaG91bGQgdXNlIGEgc21hcnQgcG9pbnRlci4KKyAgICBKU0M6OlZNJiBtX3Zt
OworICAgIEpTSGVhcERhdGEmIG1faGVhcERhdGE7CiAgICAgdWludDY0X3QgbV9sYXN0RXhlY3V0
aW9uVmVyc2lvbjsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0RPTVByb21pc2VQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRE9NUHJvbWlz
ZVByb3h5LmgKaW5kZXggZTc0ODU1OGEyMTE3Li41OGQwYjM2OWQ3Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVByb21pc2VQcm94eS5oCkBAIC0xMjMsNyArMTIzLDcgQEAg
aW5saW5lIEpTQzo6SlNWYWx1ZSBET01Qcm9taXNlUHJveHk8SURMVHlwZT46OnJlc29sdmVQcm9t
aXNlKEpTQzo6SlNHbG9iYWxPYmplY3QKICAgICB9CiAKICAgICAvLyBEZWZlcnJlZFByb21pc2Ug
Y2FuIGZhaWwgY29uc3RydWN0aW9uIGR1cmluZyB3b3JrZXIgYWJydXB0IHRlcm1pbmF0aW9uLgot
ICAgIFJlZlB0ciBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QsIERlZmVycmVkUHJvbWlzZTo6TW9kZTo6UmV0YWluUHJvbWlzZU9uUmVzb2x2ZSk7
CisgICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QsIERlZmVycmVkUHJvbWlzZTo6TW9kZTo6UmV0YWluUHJvbWlzZU9uUmVzb2x2ZSk7
CiAgICAgaWYgKCFkZWZlcnJlZFByb21pc2UpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZp
bmVkKCk7CiAKQEAgLTIyOSw3ICsyMjksNyBAQCBpbmxpbmUgSlNDOjpKU1ZhbHVlIERPTVByb21p
c2VQcm94eTxJRExVbmRlZmluZWQ+Ojpwcm9taXNlKEpTQzo6SlNHbG9iYWxPYmplY3QmCiAgICAg
fQogCiAgICAgLy8gRGVmZXJyZWRQcm9taXNlIGNhbiBmYWlsIGNvbnN0cnVjdGlvbiBkdXJpbmcg
d29ya2VyIGFicnVwdCB0ZXJtaW5hdGlvbi4KLSAgICBSZWZQdHIgZGVmZXJyZWRQcm9taXNlID0g
RGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1v
ZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOworICAgIGF1dG8gZGVmZXJyZWRQcm9taXNlID0g
RGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCBEZWZlcnJlZFByb21pc2U6Ok1v
ZGU6OlJldGFpblByb21pc2VPblJlc29sdmUpOwogICAgIGlmICghZGVmZXJyZWRQcm9taXNlKQog
ICAgICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwogCkBAIC0zMDEsNyArMzAxLDcgQEAg
aW5saW5lIEpTQzo6SlNWYWx1ZSBET01Qcm9taXNlUHJveHlXaXRoUmVzb2x2ZUNhbGxiYWNrPElE
TFR5cGU+Ojpwcm9taXNlKEpTQzo6SlMKICAgICB9CiAKICAgICAvLyBEZWZlcnJlZFByb21pc2Ug
Y2FuIGZhaWwgY29uc3RydWN0aW9uIGR1cmluZyB3b3JrZXIgYWJydXB0IHRlcm1pbmF0aW9uLgot
ICAgIFJlZlB0ciBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QsIERlZmVycmVkUHJvbWlzZTo6TW9kZTo6UmV0YWluUHJvbWlzZU9uUmVzb2x2ZSk7
CisgICAgYXV0byBkZWZlcnJlZFByb21pc2UgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZShnbG9i
YWxPYmplY3QsIERlZmVycmVkUHJvbWlzZTo6TW9kZTo6UmV0YWluUHJvbWlzZU9uUmVzb2x2ZSk7
CiAgICAgaWYgKCFkZWZlcnJlZFByb21pc2UpCiAgICAgICAgIHJldHVybiBKU0M6OmpzVW5kZWZp
bmVkKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBw
ZXJXb3JsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQu
Y3BwCmluZGV4IDJkNWM3YjNiYjc2ZS4uMzBjODI2OWI3ZmJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9ET01XcmFwcGVyV29ybGQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgRE9N
V3JhcHBlcldvcmxkOjp+RE9NV3JhcHBlcldvcmxkKCkKIAogICAgIC8vIFRoZXNlIGl0ZW1zIGFy
ZSBjcmVhdGVkIGxhemlseS4KICAgICB3aGlsZSAoIW1fanNXaW5kb3dQcm94aWVzLmlzRW1wdHko
KSkKLSAgICAgICAgUmVmIHsgKCptX2pzV2luZG93UHJveGllcy5iZWdpbigpKS5nZXQoKSB9LT5k
ZXN0cm95SlNXaW5kb3dQcm94eSgqdGhpcyk7CisgICAgICAgICgqbV9qc1dpbmRvd1Byb3hpZXMu
YmVnaW4oKSktPmRlc3Ryb3lKU1dpbmRvd1Byb3h5KCp0aGlzKTsKIH0KIAogdm9pZCBET01XcmFw
cGVyV29ybGQ6OmNsZWFyV3JhcHBlcnMoKQpAQCAtNTgsMTcgKzU4LDcgQEAgdm9pZCBET01XcmFw
cGVyV29ybGQ6OmNsZWFyV3JhcHBlcnMoKQogCiAgICAgLy8gVGhlc2UgaXRlbXMgYXJlIGNyZWF0
ZWQgbGF6aWx5LgogICAgIHdoaWxlICghbV9qc1dpbmRvd1Byb3hpZXMuaXNFbXB0eSgpKQotICAg
ICAgICBSZWYgeyAoKm1fanNXaW5kb3dQcm94aWVzLmJlZ2luKCkpLmdldCgpIH0tPmRlc3Ryb3lK
U1dpbmRvd1Byb3h5KCp0aGlzKTsKLX0KLQotdm9pZCBET01XcmFwcGVyV29ybGQ6OmRpZENyZWF0
ZVdpbmRvd1Byb3h5KFdpbmRvd1Byb3h5JiBjb250cm9sbGVyKQotewotICAgIG1fanNXaW5kb3dQ
cm94aWVzLmFkZChjb250cm9sbGVyKTsKLX0KLQotdm9pZCBET01XcmFwcGVyV29ybGQ6OmRpZERl
c3Ryb3lXaW5kb3dQcm94eShXaW5kb3dQcm94eSYgY29udHJvbGxlcikKLXsKLSAgICBtX2pzV2lu
ZG93UHJveGllcy5yZW1vdmUoY29udHJvbGxlcik7CisgICAgICAgICgqbV9qc1dpbmRvd1Byb3hp
ZXMuYmVnaW4oKSktPmRlc3Ryb3lKU1dpbmRvd1Byb3h5KCp0aGlzKTsKIH0KIAogRE9NV3JhcHBl
cldvcmxkJiBub3JtYWxXb3JsZChKU0M6OlZNJiB2bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvRE9NV3JhcHBlcldvcmxkLmgKaW5kZXggNmVlMTc0NDJlNmRjLi5hY2ExNzFmNDRkNWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RPTVdyYXBwZXJXb3JsZC5oCkBAIC00
OCw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICAvLyBGcmVlIGFzIG11Y2ggbWVtb3J5IGhlbGQgb250
byBieSB0aGlzIHdvcmxkIGFzIHBvc3NpYmxlLgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXJXcmFwcGVycygpOwogCi0gICAgdm9pZCBkaWRDcmVhdGVXaW5kb3dQcm94eShXaW5kb3dQcm94
eSYpOwotICAgIHZvaWQgZGlkRGVzdHJveVdpbmRvd1Byb3h5KFdpbmRvd1Byb3h5Jik7CisgICAg
dm9pZCBkaWRDcmVhdGVXaW5kb3dQcm94eShXaW5kb3dQcm94eSogY29udHJvbGxlcikgeyBtX2pz
V2luZG93UHJveGllcy5hZGQoY29udHJvbGxlcik7IH0KKyAgICB2b2lkIGRpZERlc3Ryb3lXaW5k
b3dQcm94eShXaW5kb3dQcm94eSogY29udHJvbGxlcikgeyBtX2pzV2luZG93UHJveGllcy5yZW1v
dmUoY29udHJvbGxlcik7IH0KIAogICAgIHZvaWQgc2V0U2hhZG93Um9vdElzQWx3YXlzT3Blbigp
IHsgbV9zaGFkb3dSb290SXNBbHdheXNPcGVuID0gdHJ1ZTsgfQogICAgIGJvb2wgc2hhZG93Um9v
dElzQWx3YXlzT3BlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93Um9vdElzQWx3YXlzT3Blbjsg
fQpAQCAtNzIsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAgSlNDOjpWTSYg
bV92bTsKLSAgICBIYXNoU2V0PFNpbmdsZVRocmVhZFdlYWtSZWY8V2luZG93UHJveHk+PiBtX2pz
V2luZG93UHJveGllczsKKyAgICBIYXNoU2V0PFdpbmRvd1Byb3h5Kj4gbV9qc1dpbmRvd1Byb3hp
ZXM7CiAgICAgRE9NT2JqZWN0V3JhcHBlck1hcCBtX3dyYXBwZXJzOwogCiAgICAgU3RyaW5nIG1f
bmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0dDQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4
IDAxMTAxODY0M2NjMS4uZTc3NjliYTE4Yzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9HQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0dDQ29udHJvbGxlci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEdDQ29udHJvbGxl
cjo6Z2FyYmFnZUNvbGxlY3ROb3dJZk5vdERvbmVSZWNlbnRseSgpCiAKIHZvaWQgR0NDb250cm9s
bGVyOjpnYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wgd2Fp
dFVudGlsRG9uZSkKIHsKLSAgICBSZWYgdGhyZWFkID0gVGhyZWFkOjpjcmVhdGUoIldlYkNvcmU6
IEdDQ29udHJvbGxlciIsICZjb2xsZWN0LCBUaHJlYWRUeXBlOjpHYXJiYWdlQ29sbGVjdGlvbik7
CisgICAgYXV0byB0aHJlYWQgPSBUaHJlYWQ6OmNyZWF0ZSgiV2ViQ29yZTogR0NDb250cm9sbGVy
IiwgJmNvbGxlY3QsIFRocmVhZFR5cGU6OkdhcmJhZ2VDb2xsZWN0aW9uKTsKIAogICAgIGlmICh3
YWl0VW50aWxEb25lKSB7CiAgICAgICAgIHRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKQEAg
LTEyOCwxNiArMTI4LDE0IEBAIHZvaWQgR0NDb250cm9sbGVyOjpzZXRKYXZhU2NyaXB0R2FyYmFn
ZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGVuYWJsZSkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6
OmRlbGV0ZUFsbENvZGUoRGVsZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgUmVmIHZt
ID0gY29tbW9uVk0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAgdm0tPmRlbGV0
ZUFsbENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhjb21tb25WTSgpKTsKKyAg
ICBjb21tb25WTSgpLmRlbGV0ZUFsbENvZGUoZWZmb3J0KTsKIH0KIAogdm9pZCBHQ0NvbnRyb2xs
ZXI6OmRlbGV0ZUFsbExpbmtlZENvZGUoRGVsZXRlQWxsQ29kZUVmZm9ydCBlZmZvcnQpCiB7Ci0g
ICAgUmVmIHZtID0gY29tbW9uVk0oKTsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7Ci0gICAg
dm0tPmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsKKyAgICBKU0xvY2tIb2xkZXIgbG9jayhj
b21tb25WTSgpKTsKKyAgICBjb21tb25WTSgpLmRlbGV0ZUFsbExpbmtlZENvZGUoZWZmb3J0KTsK
IH0KIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmR1bXBIZWFwKCkKQEAgLTE0OSw3ICsxNDcsNyBAQCB2
b2lkIEdDQ29udHJvbGxlcjo6ZHVtcEhlYXAoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmIHZtID0gY29tbW9uVk0oKTsKKyAgICBWTSYgdm0gPSBjb21tb25WTSgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CkBAIC0x
NTgsNyArMTU2LDcgQEAgdm9pZCBHQ0NvbnRyb2xsZXI6OmR1bXBIZWFwKCkKICAgICB7CiAgICAg
ICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXJHQyh2bSk7IC8vIFByZXZlbnQgY29uY3VycmVudCBH
QyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIGZ1bGwgR0MgdGhhdCB0aGUgc25hcHNob3QgZG9l
cy4KIAotICAgICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNuYXBzaG90QnVpbGRlcih2bS0+ZW5z
dXJlSGVhcFByb2ZpbGVyKCksIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OlNuYXBzaG90VHlwZTo6R0NE
ZWJ1Z2dpbmdTbmFwc2hvdCk7CisgICAgICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgc25hcHNob3RC
dWlsZGVyKHZtLmVuc3VyZUhlYXBQcm9maWxlcigpLCBIZWFwU25hcHNob3RCdWlsZGVyOjpTbmFw
c2hvdFR5cGU6OkdDRGVidWdnaW5nU25hcHNob3QpOwogICAgICAgICBzbmFwc2hvdEJ1aWxkZXIu
YnVpbGRTbmFwc2hvdCgpOwogCiAgICAgICAgIGpzb25EYXRhID0gc25hcHNob3RCdWlsZGVyLmpz
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxp
dGllcy5jcHAKaW5kZXggOTUzM2QwNmUxODFiLi5hNGM1YjRhYjM2NjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuY3BwCkBAIC02NCw3
ICs2NCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHN0YXRpYyBib29sIGdldChKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aEVsZW1lbnQsIEpTVmFsdWUmIHJlc3VsdCkKIHsKLSAgICBSZWYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
IChvYmplY3QuaXNTdHJpbmcoKSAmJiBrZXlQYXRoRWxlbWVudCA9PSAibGVuZ3RoIl9zKSB7CkBA
IC0xNDIsOCArMTQyLDggQEAgSlNWYWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LAogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKICAgICB9CiAKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LnZtKCk7Ci0gICAgTG9ja2VyPEpTTG9jaz4gbG9ja2VyKHZtLT5hcGlMb2NrKCkpOworICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICBMb2NrZXI8SlNMb2NrPiBsb2Nr
ZXIodm0uYXBpTG9jaygpKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBzd2l0Y2ggKGtleS0+dHlwZSgpKSB7CkBAIC0xNzAsNyArMTcwLDcgQEAgSlNW
YWx1ZSB0b0pTKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0dsb2JhbE9i
amVjdCYgZ2xvYmFsT2JqZWN0LAogICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAg
IHJldHVybiBqc051bGwoKTsKIAotICAgICAgICByZXR1cm4gSlNBcnJheUJ1ZmZlcjo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmUsIFdURk1vdmUoYXJyYXlCdWZmZXIpKTsKKyAgICAgICAgcmV0dXJuIEpT
QXJyYXlCdWZmZXI6OmNyZWF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCksIHN0cnVjdHVyZSwg
V1RGTW92ZShhcnJheUJ1ZmZlcikpOwogICAgIH0KICAgICBjYXNlIEluZGV4ZWREQjo6S2V5VHlw
ZTo6U3RyaW5nOgogICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUodm0sIGtleS0+c3Ry
aW5nKCkpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4aW11bURl
cHRoID0gMjAwMDsKIAogc3RhdGljIFJlZlB0cjxJREJLZXk+IGNyZWF0ZUlEQktleUZyb21WYWx1
ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNWYWx1ZSB2YWx1ZSwgVmVj
dG9yPEpTQXJyYXkqPiYgc3RhY2spCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAodmFsdWUuaXNOdW1i
ZXIoKSAmJiAhc3RkOjppc25hbih2YWx1ZS5hc051bWJlcigpKSkKQEAgLTI5MiwxMyArMjkyLDEy
IEBAIHN0YXRpYyBKU1ZhbHVlIGVuc3VyZU50aFZhbHVlT25LZXlQYXRoKEpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgSlNWYWx1ZSBjdXJyZW50VmFsdWUocm9v
dFZhbHVlKTsKIAogICAgIEFTU0VSVChpbmRleCA8PSBrZXlQYXRoRWxlbWVudHMuc2l6ZSgpKTsK
LSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbmRleDsgKytpKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRl
eDsgaSsrKSB7CiAgICAgICAgIEpTVmFsdWUgcGFyZW50VmFsdWUoY3VycmVudFZhbHVlKTsKICAg
ICAgICAgY29uc3QgU3RyaW5nJiBrZXlQYXRoRWxlbWVudCA9IGtleVBhdGhFbGVtZW50c1tpXTsK
ICAgICAgICAgaWYgKCFnZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgcGFyZW50VmFsdWUsIGtleVBh
dGhFbGVtZW50LCBjdXJyZW50VmFsdWUpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0
ID0gY29uc3RydWN0RW1wdHlPYmplY3QoJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgICAgICAg
ICAgaWYgKCFzZXQodm0sIHBhcmVudFZhbHVlLCBrZXlQYXRoRWxlbWVudCwgSlNWYWx1ZShvYmpl
Y3QpKSkKKyAgICAgICAgICAgIGlmICghc2V0KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgcGFy
ZW50VmFsdWUsIGtleVBhdGhFbGVtZW50LCBKU1ZhbHVlKG9iamVjdCkpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAgY3VycmVudFZhbHVlID0gSlNW
YWx1ZShvYmplY3QpOwogICAgICAgICB9CkBAIC00MDQsMTMgKzQwMywxMiBAQCBzdGF0aWMgSlNW
YWx1ZSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LAogICAgIGlmIChkYXRhLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwogCi0gICAgUmVmIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlRnJvbVdpcmVCeXRlcyhWZWN0b3I8dWludDhfdD4oZGF0YSkpOworICAgIGF1dG8g
c2VyaWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGVGcm9tV2lyZUJ5
dGVzKFZlY3Rvcjx1aW50OF90PihkYXRhKSk7CiAKLSAgICBSZWYgYXBpTG9jayA9IGxleGljYWxH
bG9iYWxPYmplY3Qudm0oKS5hcGlMb2NrKCk7Ci0gICAgYXBpTG9jay0+bG9jaygpOworICAgIGxl
eGljYWxHbG9iYWxPYmplY3Qudm0oKS5hcGlMb2NrKCkubG9jaygpOwogICAgIFZlY3RvcjxSZWZQ
dHI8TWVzc2FnZVBvcnQ+PiBtZXNzYWdlUG9ydHM7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBzZXJp
YWxpemVkVmFsdWUtPmRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmpl
Y3QsIG1lc3NhZ2VQb3J0cywgdmFsdWUuYmxvYlVSTHMoKSwgdmFsdWUuYmxvYkZpbGVQYXRocygp
LCBTZXJpYWxpemF0aW9uRXJyb3JNb2RlOjpOb25UaHJvd2luZyk7Ci0gICAgYXBpTG9jay0+dW5s
b2NrKCk7CisgICAgbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLmFwaUxvY2soKS51bmxvY2soKTsK
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00NDYsNyArNDQ0LDcgQEAgc3RhdGljIEluZGV4
S2V5OjpEYXRhIGNyZWF0ZUtleVBhdGhBcnJheShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlMKICAgICAgICAgaWYgKG9iamVjdFN0b3JlS2V5UGF0aCAmJiBzdGQ6OmhvbGRz
X2FsdGVybmF0aXZlPFN0cmluZz4ob2JqZWN0U3RvcmVLZXlQYXRoLnZhbHVlKCkpICYmIElEQktl
eVBhdGgoc3RyaW5nKSA9PSBvYmplY3RTdG9yZUtleVBhdGgudmFsdWUoKSkKICAgICAgICAgICAg
IHJldHVybiBvYmplY3RTdG9yZUtleTsKIAotICAgICAgICBSZWZQdHIgaWRiS2V5ID0gaW50ZXJu
YWxDcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKGxleGljYWxHbG9iYWxPYmpl
Y3QsIHZhbHVlLCBzdHJpbmcpOworICAgICAgICBhdXRvIGlkYktleSA9IGludGVybmFsQ3JlYXRl
SURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1
ZSwgc3RyaW5nKTsKICAgICAgICAgaWYgKCFpZGJLZXkpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApAQCAtNDkxLDggKzQ4OSw3IEBAIEluZGV4SURUb0luZGV4S2V5TWFwIGdlbmVyYXRl
SW5kZXhLZXlNYXBGb3JWYWx1ZUlzb2xhdGVkQ29weShKU0M6OkpTR2xvYmFsT2JqZWN0CiAgICAg
aWYgKCFpbmRleENvdW50KQogICAgICAgICByZXR1cm4gSW5kZXhJRFRvSW5kZXhLZXlNYXAgeyB9
OwogCi0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwotICAgIEpTTG9ja0hv
bGRlciBsb2NrZXIodm0pOworICAgIEpTTG9ja0hvbGRlciBsb2NrZXIobGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpKTsKICAgICBhdXRvIGpzVmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1Zh
bHVlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKICAgICBpZiAoanNWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSW5kZXhJRFRvSW5kZXhLZXlNYXAgeyB9OwpA
QCAtNTE5LDEwICs1MTYsOSBAQCBzdGQ6Om9wdGlvbmFsPEpTQzo6SlNWYWx1ZT4gZGVzZXJpYWxp
emVJREJWYWx1ZVdpdGhLZXlJbmplY3Rpb24oSlNHbG9iYWxPYmplY3QmCiAgICAgaWYgKGpzVmFs
dWUuaXNVbmRlZmluZWQoKSB8fCAha2V5UGF0aCB8fCAhc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxT
dHJpbmc+KGtleVBhdGgudmFsdWUoKSkgfHwgIWlzSURCS2V5UGF0aFZhbGlkKGtleVBhdGgudmFs
dWUoKSkpCiAgICAgICAgIHJldHVybiBqc1ZhbHVlOwogCi0gICAgUmVmIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC52bSgpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrZXIodm0pOworICAgIEpTTG9j
a0hvbGRlciBsb2NrZXIobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKICAgICBpZiAoIWluamVj
dElEQktleUludG9TY3JpcHRWYWx1ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBrZXksIGpzVmFsdWUs
IGtleVBhdGgudmFsdWUoKSkpIHsKLSAgICAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKICAgICAgICAgcHJvcGFnYXRlRXhjZXB0
aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIHRocm93U2NvcGUsIEV4Y2VwdGlvbihFeGNlcHRpb25D
b2RlOjpVbmtub3duRXJyb3IsICJDYW5ub3QgaW5qZWN0IGtleSBpbnRvIHNjcmlwdCB2YWx1ZSJf
cykpOwogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogICAgIH0KQEAgLTU2MywxOCArNTU5
LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQVNTRVJUKCFt
X2dsb2JhbE9iamVjdCk7Ci0gICAgICAgIFJlZiB2bSA9IEpTQzo6Vk06OmNyZWF0ZSgpOwotICAg
ICAgICBtX3ZtID0gdm0uY29weVJlZigpOwotICAgICAgICB2bS0+aGVhcC5hY3F1aXJlQWNjZXNz
KCk7Ci0gICAgICAgIEpTVk1DbGllbnREYXRhOjppbml0Tm9ybWFsV29ybGQodm0ucHRyKCksIFdv
cmtlclRocmVhZFR5cGU6OldvcmtsZXQpOworICAgICAgICBtX3ZtID0gSlNDOjpWTTo6Y3JlYXRl
KCk7CisgICAgICAgIG1fdm0tPmhlYXAuYWNxdWlyZUFjY2VzcygpOworICAgICAgICBKU1ZNQ2xp
ZW50RGF0YTo6aW5pdE5vcm1hbFdvcmxkKG1fdm0uZ2V0KCksIFdvcmtlclRocmVhZFR5cGU6Oldv
cmtsZXQpOwogCi0gICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bS5wdHIoKSk7Ci0g
ICAgICAgIG1fZ2xvYmFsT2JqZWN0LnNldCh2bSwgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2Jq
ZWN0OjpjcmVhdGUodm0sIEpTSURCU2VyaWFsaXphdGlvbkdsb2JhbE9iamVjdDo6Y3JlYXRlU3Ry
dWN0dXJlKHZtLCBKU0M6OmpzTnVsbCgpKSwgbm9ybWFsV29ybGQodm0pKSk7CisgICAgICAgIEpT
Qzo6SlNMb2NrSG9sZGVyIGxvY2tlcihtX3ZtLmdldCgpKTsKKyAgICAgICAgbV9nbG9iYWxPYmpl
Y3Quc2V0KCptX3ZtLCBKU0lEQlNlcmlhbGl6YXRpb25HbG9iYWxPYmplY3Q6OmNyZWF0ZSgqbV92
bSwgSlNJREJTZXJpYWxpemF0aW9uR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0s
IEpTQzo6anNOdWxsKCkpLCBub3JtYWxXb3JsZCgqbV92bSkpKTsKICAgICB9CiAKICAgICBSZWZQ
dHI8SlNDOjpWTT4gbV92bTsKICAgICBKU0M6OlN0cm9uZzxKU0lEQlNlcmlhbGl6YXRpb25HbG9i
YWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwotICAgIFRocmVhZCYgbV90aHJlYWQ7IC8vIEZJWE1F
OiBTaG91bGQgdXNlIGEgc21hcnQgcG9pbnRlci4KKyAgICBUaHJlYWQmIG1fdGhyZWFkOwogfTsK
IAogdm9pZCBjYWxsT25JREJTZXJpYWxpemF0aW9uVGhyZWFkQW5kV2FpdChGdW5jdGlvbjx2b2lk
KEpTQzo6SlNHbG9iYWxPYmplY3QmKT4mJiBmdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0ludGVybmFsUmVhZGFibGVTdHJlYW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSW50ZXJuYWxSZWFkYWJsZVN0cmVhbS5jcHAKaW5kZXggZDNlZGFh
NjkxODFlLi4yYTk1YWI3ZDg0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0ludGVybmFsUmVhZGFibGVTdHJlYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0ludGVybmFsUmVhZGFibGVTdHJlYW0uY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEV4Y2VwdGlvbk9yPEpTQzo6SlNWYWx1ZT4gaW52b2tl
UmVhZGFibGVTdHJlYW1GdW5jdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgSlNDOjpNYXJrZWRBcmd1
bWVudEJ1ZmZlciYgYXJndW1lbnRzKQogewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC52bSgp
OworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2
bSk7CkBAIC04NCwxMCArODQsOSBAQCBib29sIEludGVybmFsUmVhZGFibGVTdHJlYW06OmlzTG9j
a2VkKCkgY29uc3QKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9T
Q09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwogCi0gICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRp
Y19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOworICAgIGF1dG8qIGNsaWVu
dERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGdsb2JhbE9iamVjdC0+dm0oKS5j
bGllbnREYXRhKTsKICAgICBhdXRvJiBwcml2YXRlTmFtZSA9IGNsaWVudERhdGEtPmJ1aWx0aW5G
dW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkuaXNSZWFkYWJsZVN0
cmVhbUxvY2tlZFByaXZhdGVOYW1lKCk7CiAKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGFyZ3VtZW50czsKQEAgLTEwNywxMCArMTA2LDkgQEAgYm9vbCBJbnRlcm5hbFJlYWRhYmxlU3Ry
ZWFtOjppc0Rpc3R1cmJlZCgpIGNvbnN0CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CisgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUoZ2xvYmFsT2JqZWN0LT52bSgpKTsKIAotICAgIGF1dG8qIGNsaWVu
dERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KHZtLT5jbGllbnREYXRhKTsKKyAg
ICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPihnbG9iYWxP
YmplY3QtPnZtKCkuY2xpZW50RGF0YSk7CiAgICAgYXV0byYgcHJpdmF0ZU5hbWUgPSBjbGllbnRE
YXRhLT5idWlsdGluRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygp
LmlzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWRQcml2YXRlTmFtZSgpOwogCiAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xMzAsOSArMTI4LDggQEAgdm9pZCBJbnRl
cm5hbFJlYWRhYmxlU3RyZWFtOjpjYW5jZWwoRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQogICAgIGlm
ICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwot
ICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIGNhbmNlbCgqZ2xvYmFsT2JqZWN0LCB0b0pT
TmV3bHlDcmVhdGVkKGdsb2JhbE9iamVjdCwgSlNDOjpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihnbG9iYWxPYmplY3QpLCBET01FeGNlcHRpb246OmNyZWF0ZShXVEZNb3ZlKGV4Y2VwdGlvbikp
KSwgVXNlOjpQcml2YXRlKTsKICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwpAQCAtMTQ0LDEwICsxNDEsOSBAQCB2b2lk
IEludGVybmFsUmVhZGFibGVTdHJlYW06OmxvY2soKQogICAgIGlmICghZ2xvYmFsT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAKLSAgICBhdXRvKiBjbGll
bnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50RGF0YSk7Cisg
ICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZ2xvYmFs
T2JqZWN0LT52bSgpLmNsaWVudERhdGEpOwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0gY2xpZW50
RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMo
KS5hY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUHJpdmF0ZU5hbWUoKTsKIAogICAg
IEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpAQCAtMTY1LDExICsxNjEsMTAg
QEAgdm9pZCBJbnRlcm5hbFJlYWRhYmxlU3RyZWFtOjpwaXBlVG8oUmVhZGFibGVTdHJlYW1TaW5r
JiBzaW5rKQogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwotICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CisgICAgSlND
OjpKU0xvY2tIb2xkZXIgbG9jayhnbG9iYWxPYmplY3QtPnZtKCkpOwogCi0gICAgYXV0byogY2xp
ZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOwor
ICAgIGF1dG8qIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGdsb2Jh
bE9iamVjdC0+dm0oKS5jbGllbnREYXRhKTsKICAgICBhdXRvJiBwcml2YXRlTmFtZSA9IGNsaWVu
dERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5z
KCkucmVhZGFibGVTdHJlYW1QaXBlVG9Qcml2YXRlTmFtZSgpOwogCiAgICAgSlNDOjpNYXJrZWRB
cmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xODgsOCArMTgzLDcgQEAgRXhjZXB0aW9uT3I8
c3RkOjpwYWlyPFJlZjxJbnRlcm5hbFJlYWRhYmxlU3RyZWFtPiwgUmVmPEludGVybmFsUmVhZGFi
bGVTdHJlYW0+Pj4KICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEV4Y2VwdGlvbkNvZGU6OkludmFsaWRTdGF0ZUVycm9yIH07CiAKLSAgICBSZWYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGdsb2JhbE9iamVj
dC0+dm0oKSk7CiAgICAgYXV0byByZXN1bHQgPSB0ZWUoKmdsb2JhbE9iamVjdCwgc2hvdWxkQ2xv
bmUpOwogICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBFeGNlcHRpb25Db2RlOjpFeGlzdGluZ0V4Y2VwdGlvbkVycm9yIH07CkBA
IC0yMDMsOCArMTk3LDcgQEAgRXhjZXB0aW9uT3I8c3RkOjpwYWlyPFJlZjxJbnRlcm5hbFJlYWRh
YmxlU3RyZWFtPiwgUmVmPEludGVybmFsUmVhZGFibGVTdHJlYW0+Pj4KIAogSlNDOjpKU1ZhbHVl
IEludGVybmFsUmVhZGFibGVTdHJlYW06OmNhbmNlbChKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSByZWFzb24sIFVzZSB1c2UpCiB7Ci0gICAgUmVmIHZtID0g
Z2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOworICAgIGF1dG8qIGNsaWVudERhdGEgPSBz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGdsb2JhbE9iamVjdC52bSgpLmNsaWVudERhdGEp
OwogICAgIGF1dG8mIG5hbWVzID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRh
YmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKTsKICAgICBhdXRvJiBwcml2YXRlTmFtZSA9IHVz
ZSA9PSBVc2U6OkJpbmRpbmdzID8gbmFtZXMucmVhZGFibGVTdHJlYW1DYW5jZWxGb3JCaW5kaW5n
c1ByaXZhdGVOYW1lKCkgOiBuYW1lcy5yZWFkYWJsZVN0cmVhbUNhbmNlbFByaXZhdGVOYW1lKCk7
CiAKQEAgLTIyMiw4ICsyMTUsNyBAQCBKU0M6OkpTVmFsdWUgSW50ZXJuYWxSZWFkYWJsZVN0cmVh
bTo6Y2FuY2VsKEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSgogCiBKU0M6OkpT
VmFsdWUgSW50ZXJuYWxSZWFkYWJsZVN0cmVhbTo6Z2V0UmVhZGVyKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9wdGlvbnMpCiB7Ci0gICAgUmVmIHZtID0g
Z2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOworICAgIGF1dG8qIGNsaWVudERhdGEgPSBz
dGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGdsb2JhbE9iamVjdC52bSgpLmNsaWVudERhdGEp
OwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygp
LnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5yZWFkYWJsZVN0cmVhbUdldFJlYWRl
ckZvckJpbmRpbmdzUHJpdmF0ZU5hbWUoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZm
ZXIgYXJndW1lbnRzOwpAQCAtMjQwLDggKzIzMiw3IEBAIEpTQzo6SlNWYWx1ZSBJbnRlcm5hbFJl
YWRhYmxlU3RyZWFtOjpnZXRSZWFkZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0
CiAKIEpTQzo6SlNWYWx1ZSBJbnRlcm5hbFJlYWRhYmxlU3RyZWFtOjpwaXBlVG8oSlNDOjpKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgc3RyZWFtcywgSlNDOjpKU1Zh
bHVlIG9wdGlvbnMpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0
byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERh
dGEpOworICAgIGF1dG8qIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+
KGdsb2JhbE9iamVjdC52bSgpLmNsaWVudERhdGEpOwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0g
Y2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLnJlYWRhYmxlU3RyZWFtSW50ZXJuYWxzQnVp
bHRpbnMoKS5yZWFkYWJsZVN0cmVhbVBpcGVUb0ZvckJpbmRpbmdzUHJpdmF0ZU5hbWUoKTsKIAog
ICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRzOwpAQCAtMjU5LDggKzI1MCw3
IEBAIEpTQzo6SlNWYWx1ZSBJbnRlcm5hbFJlYWRhYmxlU3RyZWFtOjpwaXBlVG8oSlNDOjpKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKCiAKIEpTQzo6SlNWYWx1ZSBJbnRlcm5hbFJlYWRh
YmxlU3RyZWFtOjpwaXBlVGhyb3VnaChKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3Qs
IEpTQzo6SlNWYWx1ZSBkZXN0LCBKU0M6OkpTVmFsdWUgb3B0aW9ucykKIHsKLSAgICBSZWYgdm0g
PSBnbG9iYWxPYmplY3Qudm0oKTsKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0YSA9
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZ2xvYmFsT2JqZWN0LnZtKCkuY2xpZW50RGF0
YSk7CiAgICAgYXV0byYgcHJpdmF0ZU5hbWUgPSBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25z
KCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLnJlYWRhYmxlU3RyZWFtUGlwZVRo
cm91Z2hGb3JCaW5kaW5nc1ByaXZhdGVOYW1lKCk7CiAKICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50
QnVmZmVyIGFyZ3VtZW50czsKQEAgLTI3OCw4ICsyNjgsNyBAQCBKU0M6OkpTVmFsdWUgSW50ZXJu
YWxSZWFkYWJsZVN0cmVhbTo6cGlwZVRocm91Z2goSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZQogCiBKU0M6OkpTVmFsdWUgSW50ZXJuYWxSZWFkYWJsZVN0cmVhbTo6dGVlKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgYm9vbCBzaG91bGRDbG9uZSkKIHsKLSAgICBSZWYg
dm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nh
c3Q8SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0
YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZ2xvYmFsT2JqZWN0LnZtKCkuY2xpZW50
RGF0YSk7CiAgICAgYXV0byYgcHJpdmF0ZU5hbWUgPSBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rp
b25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5hbHNCdWlsdGlucygpLnJlYWRhYmxlU3RyZWFtVGVl
UHJpdmF0ZU5hbWUoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1lbnRz
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSW50ZXJuYWxXcml0YWJs
ZVN0cmVhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JbnRlcm5hbFdyaXRhYmxl
U3RyZWFtLmNwcAppbmRleCAwOTA0NjczM2M1ZWUuLmFmOTk2ZjgyYzZmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSW50ZXJuYWxXcml0YWJsZVN0cmVhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSW50ZXJuYWxXcml0YWJsZVN0cmVhbS5jcHAK
QEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgRXhjZXB0aW9u
T3I8SlNDOjpKU1ZhbHVlPiBpbnZva2VXcml0YWJsZVN0cmVhbUZ1bmN0aW9uKEpTQzo6SlNHbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVy
LCBjb25zdCBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyJiBhcmd1bWVudHMpCiB7Ci0gICAgUmVm
IHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3Qu
dm0oKTsKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKQEAgLTU0LDggKzU0LDcgQEAgc3RhdGljIEV4Y2Vw
dGlvbk9yPEpTQzo6SlNWYWx1ZT4gaW52b2tlV3JpdGFibGVTdHJlYW1GdW5jdGlvbihKU0M6OkpT
R2xvYmFsT2JqZWMKIAogRXhjZXB0aW9uT3I8UmVmPEludGVybmFsV3JpdGFibGVTdHJlYW0+PiBJ
bnRlcm5hbFdyaXRhYmxlU3RyZWFtOjpjcmVhdGVGcm9tVW5kZXJseWluZ1NpbmsoSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHVuZGVybHlpbmdTaW5rLCBKU0M6
OkpTVmFsdWUgc3RyYXRlZ3kpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7Ci0g
ICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNs
aWVudERhdGEpOworICAgIGF1dG8qIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KGdsb2JhbE9iamVjdC52bSgpLmNsaWVudERhdGEpOwogICAgIGF1dG8mIHByaXZhdGVO
YW1lID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJu
YWxzQnVpbHRpbnMoKS5jcmVhdGVJbnRlcm5hbFdyaXRhYmxlU3RyZWFtRnJvbVVuZGVybHlpbmdT
aW5rUHJpdmF0ZU5hbWUoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJndW1l
bnRzOwpAQCAtODIsMTAgKzgxLDkgQEAgYm9vbCBJbnRlcm5hbFdyaXRhYmxlU3RyZWFtOjpsb2Nr
ZWQoKSBjb25zdAogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1ND
T1BFKGdsb2JhbE9iamVjdC0+dm0oKSk7CiAKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGlj
X2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50
RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZ2xvYmFsT2JqZWN0LT52bSgpLmNs
aWVudERhdGEpOwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1
bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5pc1dyaXRhYmxlU3Ry
ZWFtTG9ja2VkUHJpdmF0ZU5hbWUoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIg
YXJndW1lbnRzOwpAQCAtMTA1LDEwICsxMDMsOSBAQCB2b2lkIEludGVybmFsV3JpdGFibGVTdHJl
YW06OmxvY2soKQogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
Q0FUQ0hfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKGds
b2JhbE9iamVjdC0+dm0oKSk7CiAKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8
SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0YSA9
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4oZ2xvYmFsT2JqZWN0LT52bSgpLmNsaWVudERh
dGEpOwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0gY2xpZW50RGF0YS0+YnVpbHRpbkZ1bmN0aW9u
cygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMoKS5hY3F1aXJlV3JpdGFibGVTdHJl
YW1EZWZhdWx0V3JpdGVyUHJpdmF0ZU5hbWUoKTsKIAogICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJndW1lbnRzOwpAQCAtMTIyLDggKzExOSw3IEBAIHZvaWQgSW50ZXJuYWxXcml0YWJs
ZVN0cmVhbTo6bG9jaygpCiAKIEpTQzo6SlNWYWx1ZSBJbnRlcm5hbFdyaXRhYmxlU3RyZWFtOjph
Ym9ydEZvckJpbmRpbmdzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwgSlNDOjpK
U1ZhbHVlIHJlYXNvbikKIHsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3Qudm0oKTsKLSAgICBh
dXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEqPih2bS0+Y2xpZW50
RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRh
Kj4oZ2xvYmFsT2JqZWN0LnZtKCkuY2xpZW50RGF0YSk7CiAgICAgYXV0byYgcHJpdmF0ZU5hbWUg
PSBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkud3JpdGFibGVTdHJlYW1JbnRlcm5hbHNC
dWlsdGlucygpLndyaXRhYmxlU3RyZWFtQWJvcnRGb3JCaW5kaW5nc1ByaXZhdGVOYW1lKCk7CiAK
ICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3VtZW50czsKQEAgLTE0MCw4ICsxMzYs
NyBAQCBKU0M6OkpTVmFsdWUgSW50ZXJuYWxXcml0YWJsZVN0cmVhbTo6YWJvcnRGb3JCaW5kaW5n
cyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYQogCiBKU0M6OkpTVmFsdWUgSW50ZXJuYWxXcml0
YWJsZVN0cmVhbTo6Y2xvc2VGb3JCaW5kaW5ncyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBnbG9iYWxP
YmplY3QpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7Ci0gICAgYXV0byogY2xp
ZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOwor
ICAgIGF1dG8qIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGdsb2Jh
bE9iamVjdC52bSgpLmNsaWVudERhdGEpOwogICAgIGF1dG8mIHByaXZhdGVOYW1lID0gY2xpZW50
RGF0YS0+YnVpbHRpbkZ1bmN0aW9ucygpLndyaXRhYmxlU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMo
KS53cml0YWJsZVN0cmVhbUNsb3NlRm9yQmluZGluZ3NQcml2YXRlTmFtZSgpOwogCiAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xNjEsMTAgKzE1Niw5IEBAIHZv
aWQgSW50ZXJuYWxXcml0YWJsZVN0cmVhbTo6Y2xvc2VJZlBvc3NpYmxlKCkKICAgICBpZiAoIWds
b2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRShnbG9iYWxPYmplY3QtPnZtKCkpOwogCi0g
ICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNs
aWVudERhdGEpOworICAgIGF1dG8qIGNsaWVudERhdGEgPSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50
RGF0YSo+KGdsb2JhbE9iamVjdC0+dm0oKS5jbGllbnREYXRhKTsKICAgICBhdXRvJiBwcml2YXRl
TmFtZSA9IGNsaWVudERhdGEtPmJ1aWx0aW5GdW5jdGlvbnMoKS53cml0YWJsZVN0cmVhbUludGVy
bmFsc0J1aWx0aW5zKCkud3JpdGFibGVTdHJlYW1DbG9zZUlmUG9zc2libGVQcml2YXRlTmFtZSgp
OwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xNzgsOCAr
MTcyLDcgQEAgdm9pZCBJbnRlcm5hbFdyaXRhYmxlU3RyZWFtOjpjbG9zZUlmUG9zc2libGUoKQog
CiBKU0M6OkpTVmFsdWUgSW50ZXJuYWxXcml0YWJsZVN0cmVhbTo6Z2V0V3JpdGVyKEpTQzo6SlNH
bG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCkKIHsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3Qu
dm0oKTsKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVudERhdGEq
Pih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4oZ2xvYmFsT2JqZWN0LnZtKCkuY2xpZW50RGF0YSk7CiAgICAgYXV0byYg
cHJpdmF0ZU5hbWUgPSBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkud3JpdGFibGVTdHJl
YW1JbnRlcm5hbHNCdWlsdGlucygpLmFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJQ
cml2YXRlTmFtZSgpOwogCiAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKaW5kZXgg
NDdjZDcwZTlkMDMzLi41NzExNzEzNWQ2Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FsbGJhY2tEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbGxiYWNrRGF0YS5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNWYWx1ZSBKU0NhbGxi
YWNrRGF0YTo6aW52b2tlQ2FsbGJhY2soSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QKICAgICBBU1NFUlQoY2FsbGJhY2spOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3QgPSAmZ2xvYmFsT2JqZWN0OwotICAgIFJlZiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKIAogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtODEs
MTcgKzgxLDE3IEBAIEpTVmFsdWUgSlNDYWxsYmFja0RhdGE6Omludm9rZUNhbGxiYWNrKEpTRE9N
R2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0CiAgICAgQVNTRVJUKCFmdW5jdGlv
bi5pc0VtcHR5KCkpOwogICAgIEFTU0VSVChjYWxsRGF0YS50eXBlICE9IENhbGxEYXRhOjpUeXBl
OjpOb25lKTsKIAotICAgIFJlZlB0ciBjb250ZXh0ID0gZ2xvYmFsT2JqZWN0LnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2xv
YmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICAvLyBXZSB3aWxsIGZhaWwg
dG8gZ2V0IHRoZSBjb250ZXh0IGlmIHRoZSBmcmFtZSBoYXMgYmVlbiBkZXRhY2hlZC4KICAgICBp
ZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAKLSAgICBKU0V4ZWNTdGF0
ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uKGNvbnRleHQuZ2V0KCksIGNhbGxEYXRhKTsKKyAgICBKU0V4
ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9uKGNvbnRleHQsIGNhbGxEYXRhKTsKIAogICAgIHJl
dHVybmVkRXhjZXB0aW9uID0gbnVsbHB0cjsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTRXhlY1N0
YXRlOjpwcm9maWxlZENhbGwobGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpQcm9maWxpbmdSZWFz
b246Ok90aGVyLCBmdW5jdGlvbiwgY2FsbERhdGEsIHRoaXNWYWx1ZSwgYXJncywgcmV0dXJuZWRF
eGNlcHRpb24pOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxsRnVuY3Rp
b24oY29udGV4dC5nZXQoKSk7CisgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRDYWxs
RnVuY3Rpb24oY29udGV4dCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAK
aW5kZXggMWQxMzgyODBiNWEwLi4xZTVkZTdkNjgyYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudEludGVyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlLmNwcApAQCAtNjcs
MTAgKzY3LDEwIEBAIHN0YXRpYyBSZWZQdHI8RWxlbWVudD4gY29uc3RydWN0Q3VzdG9tRWxlbWVu
dFN5bmNocm9ub3VzbHkoRG9jdW1lbnQmLCBWTSYsIEpTR2xvCiAKIFJlZjxFbGVtZW50PiBKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2U6OmNvbnN0cnVjdEVsZW1lbnRXaXRoRmFsbGJhY2soRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBsb2NhbE5hbWUsIFBhcnNlckNvbnN0cnVj
dEVsZW1lbnRXaXRoRW1wdHlTdGFjayBwYXJzZXJDb25zdHJ1Y3RFbGVtZW50V2l0aEVtcHR5U3Rh
Y2spCiB7Ci0gICAgaWYgKFJlZlB0ciBlbGVtZW50ID0gdHJ5VG9Db25zdHJ1Y3RDdXN0b21FbGVt
ZW50KGRvY3VtZW50LCBsb2NhbE5hbWUsIHBhcnNlckNvbnN0cnVjdEVsZW1lbnRXaXRoRW1wdHlT
dGFjaykpCisgICAgaWYgKGF1dG8gZWxlbWVudCA9IHRyeVRvQ29uc3RydWN0Q3VzdG9tRWxlbWVu
dChkb2N1bWVudCwgbG9jYWxOYW1lLCBwYXJzZXJDb25zdHJ1Y3RFbGVtZW50V2l0aEVtcHR5U3Rh
Y2spKQogICAgICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpOwogCi0gICAgUmVm
IGVsZW1lbnQgPSBIVE1MVW5rbm93bkVsZW1lbnQ6OmNyZWF0ZShRdWFsaWZpZWROYW1lKG51bGxB
dG9tKCksIGxvY2FsTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSksIGRvY3VtZW50
KTsKKyAgICBhdXRvIGVsZW1lbnQgPSBIVE1MVW5rbm93bkVsZW1lbnQ6OmNyZWF0ZShRdWFsaWZp
ZWROYW1lKG51bGxBdG9tKCksIGxvY2FsTmFtZSwgSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVS
SSksIGRvY3VtZW50KTsKICAgICBlbGVtZW50LT5zZXRJc0N1c3RvbUVsZW1lbnRVcGdyYWRlQ2Fu
ZGlkYXRlKCk7CiAgICAgZWxlbWVudC0+c2V0SXNGYWlsZWRDdXN0b21FbGVtZW50KCk7CiAKQEAg
LTc5LDEzICs3OSwxMyBAQCBSZWY8RWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpj
b25zdHJ1Y3RFbGVtZW50V2l0aEZhbGxiYWNrKERvY3VtZW50JiBkbwogCiBSZWY8RWxlbWVudD4g
SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjpjb25zdHJ1Y3RFbGVtZW50V2l0aEZhbGxiYWNrKERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBpZiAo
UmVmUHRyIGVsZW1lbnQgPSB0cnlUb0NvbnN0cnVjdEN1c3RvbUVsZW1lbnQoZG9jdW1lbnQsIG5h
bWUubG9jYWxOYW1lKCksIFBhcnNlckNvbnN0cnVjdEVsZW1lbnRXaXRoRW1wdHlTdGFjazo6Tm8p
KSB7CisgICAgaWYgKGF1dG8gZWxlbWVudCA9IHRyeVRvQ29uc3RydWN0Q3VzdG9tRWxlbWVudChk
b2N1bWVudCwgbmFtZS5sb2NhbE5hbWUoKSwgUGFyc2VyQ29uc3RydWN0RWxlbWVudFdpdGhFbXB0
eVN0YWNrOjpObykpIHsKICAgICAgICAgaWYgKCFuYW1lLnByZWZpeCgpLmlzTnVsbCgpKQogICAg
ICAgICAgICAgZWxlbWVudC0+c2V0UHJlZml4KG5hbWUucHJlZml4KCkpOwogICAgICAgICByZXR1
cm4gZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpOwogICAgIH0KIAotICAgIFJlZiBlbGVtZW50ID0g
SFRNTFVua25vd25FbGVtZW50OjpjcmVhdGUobmFtZSwgZG9jdW1lbnQpOworICAgIGF1dG8gZWxl
bWVudCA9IEhUTUxVbmtub3duRWxlbWVudDo6Y3JlYXRlKG5hbWUsIGRvY3VtZW50KTsKICAgICBl
bGVtZW50LT5zZXRJc0N1c3RvbUVsZW1lbnRVcGdyYWRlQ2FuZGlkYXRlKCk7CiAgICAgZWxlbWVu
dC0+c2V0SXNGYWlsZWRDdXN0b21FbGVtZW50KCk7CiAKQEAgLTk1LDcgKzk1LDcgQEAgUmVmPEVs
ZW1lbnQ+IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6Y29uc3RydWN0RWxlbWVudFdpdGhGYWxs
YmFjayhEb2N1bWVudCYgZG8KIFJlZjxIVE1MRWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlOjpjcmVhdGVFbGVtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBpZiAobV9pc0Zv
cm1Bc3NvY2lhdGVkKSB7Ci0gICAgICAgIFJlZiBlbGVtZW50ID0gSFRNTE1heWJlRm9ybUFzc29j
aWF0ZWRDdXN0b21FbGVtZW50OjpjcmVhdGUobV9uYW1lLCBkb2N1bWVudCk7CisgICAgICAgIGF1
dG8gZWxlbWVudCA9IEhUTUxNYXliZUZvcm1Bc3NvY2lhdGVkQ3VzdG9tRWxlbWVudDo6Y3JlYXRl
KG1fbmFtZSwgZG9jdW1lbnQpOwogICAgICAgICBlbGVtZW50LT5zZXRJbnRlcmZhY2VJc0Zvcm1B
c3NvY2lhdGVkKCk7CiAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgIH0KQEAgLTEwOCw5ICsx
MDgsOSBAQCBSZWZQdHI8RWxlbWVudD4gSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp0cnlUb0Nv
bnN0cnVjdEN1c3RvbUVsZW1lbnQoRG9jdW1lbnQmCiAgICAgaWYgKCFjYW5JbnZva2VDYWxsYmFj
aygpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsg
KnRoaXMgfTsKKyAgICBSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJmYWNlPiBwcm90ZWN0ZWRUaGlz
KCp0aGlzKTsKIAotICAgIFJlZiB2bSA9IG1faXNvbGF0ZWRXb3JsZC0+dm0oKTsKKyAgICBWTSYg
dm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwog
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIApAQCAtMTIyLDcgKzEy
Miw3IEBAIFJlZlB0cjxFbGVtZW50PiBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnRyeVRvQ29u
c3RydWN0Q3VzdG9tRWxlbWVudChEb2N1bWVudCYKICAgICBBU1NFUlQobGV4aWNhbEdsb2JhbE9i
amVjdCk7CiAgICAgaWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICBSZWZQdHIgZWxlbWVudCA9IGNvbnN0cnVjdEN1c3RvbUVsZW1lbnRTeW5jaHJv
bm91c2x5KGRvY3VtZW50LCB2bSwgKmxleGljYWxHbG9iYWxPYmplY3QsIG1fY29uc3RydWN0b3Iu
Z2V0KCksIGxvY2FsTmFtZSwgcGFyc2VyQ29uc3RydWN0RWxlbWVudFdpdGhFbXB0eVN0YWNrKTsK
KyAgICBhdXRvIGVsZW1lbnQgPSBjb25zdHJ1Y3RDdXN0b21FbGVtZW50U3luY2hyb25vdXNseShk
b2N1bWVudCwgdm0sICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX2NvbnN0cnVjdG9yLmdldCgpLCBs
b2NhbE5hbWUsIHBhcnNlckNvbnN0cnVjdEVsZW1lbnRXaXRoRW1wdHlTdGFjayk7CiAgICAgRVhD
RVBUSU9OX0FTU0VSVCghIXNjb3BlLmV4Y2VwdGlvbigpID09ICFlbGVtZW50KTsKICAgICBpZiAo
IWVsZW1lbnQpIHsKICAgICAgICAgYXV0byogZXhjZXB0aW9uID0gc2NvcGUuZXhjZXB0aW9uKCk7
CkBAIC0xNTMsMTAgKzE1MywxMCBAQCBzdGF0aWMgUmVmUHRyPEVsZW1lbnQ+IGNvbnN0cnVjdEN1
c3RvbUVsZW1lbnRTeW5jaHJvbm91c2x5KERvY3VtZW50JiBkb2N1bWVudCwgVgogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOwogCiAgICAgaWYgKHBhcnNlckNvbnN0cnVj
dEVsZW1lbnRXaXRoRW1wdHlTdGFjayA9PSBQYXJzZXJDb25zdHJ1Y3RFbGVtZW50V2l0aEVtcHR5
U3RhY2s6OlllcykKLSAgICAgICAgZG9jdW1lbnQuY2hlY2tlZEV2ZW50TG9vcCgpLT5wZXJmb3Jt
TWljcm90YXNrQ2hlY2twb2ludCgpOworICAgICAgICBkb2N1bWVudC5ldmVudExvb3AoKS5wZXJm
b3JtTWljcm90YXNrQ2hlY2twb2ludCgpOwogCiAgICAgQVNTRVJUKCFuZXdFbGVtZW50LmlzRW1w
dHkoKSk7Ci0gICAgUmVmUHRyIHdyYXBwZWRFbGVtZW50ID0gSlNIVE1MRWxlbWVudDo6dG9XcmFw
cGVkKHZtLCBuZXdFbGVtZW50KTsKKyAgICBIVE1MRWxlbWVudCogd3JhcHBlZEVsZW1lbnQgPSBK
U0hUTUxFbGVtZW50Ojp0b1dyYXBwZWQodm0sIG5ld0VsZW1lbnQpOwogICAgIGlmICghd3JhcHBl
ZEVsZW1lbnQpIHsKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3Qs
IHNjb3BlLCAiVGhlIHJlc3VsdCBvZiBjb25zdHJ1Y3RpbmcgYSBjdXN0b20gZWxlbWVudCBtdXN0
IGJlIGEgSFRNTEVsZW1lbnQiX3MpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwMiwx
OCArMjAyLDE4IEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjp1cGdyYWRlRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQogICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2soKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9OwotICAgIFJlZiB2
bSA9IG1faXNvbGF0ZWRXb3JsZC0+dm0oKTsKKyAgICBSZWY8SlNDdXN0b21FbGVtZW50SW50ZXJm
YWNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKKyAgICBWTSYgdm0gPSBtX2lzb2xhdGVkV29ybGQt
PnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICghbV9jb25zdHJ1Y3RvcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
IWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBnbG9iYWxPYmplY3QgPSB0b0pT
TG9jYWxET01XaW5kb3coZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KS5wcm90ZWN0ZWRGcmFt
ZSgpLmdldCgpLCBtX2lzb2xhdGVkV29ybGQuY29weVJlZigpKTsKKyAgICBhdXRvKiBnbG9iYWxP
YmplY3QgPSB0b0pTTG9jYWxET01XaW5kb3coZG93bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KS5m
cmFtZSgpLCBtX2lzb2xhdGVkV29ybGQpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0KQogICAgICAg
ICByZXR1cm47CiAgICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSBnbG9i
YWxPYmplY3Q7CkBAIC0yNDMsOSArMjQzLDkgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2U6OnVwZ3JhZGVFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCiAKICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwogICAgIEFTU0VSVCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwotICAgIEpT
RXhlY1N0YXRlOjppbnN0cnVtZW50RnVuY3Rpb24oY29udGV4dC5nZXQoKSwgY29uc3RydWN0RGF0
YSk7CisgICAgSlNFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbihjb250ZXh0LCBjb25zdHJ1
Y3REYXRhKTsKICAgICBKU1ZhbHVlIHJldHVybmVkRWxlbWVudCA9IGNvbnN0cnVjdChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBtX2NvbnN0cnVjdG9yLmdldCgpLCBjb25zdHJ1Y3REYXRhLCBhcmdzKTsK
LSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb250ZXh0Lmdl
dCgpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZENhbGxGdW5jdGlvbihjb250
ZXh0KTsKIAogICAgIG1fY29uc3RydWN0aW9uU3RhY2sucmVtb3ZlTGFzdCgpOwogCkBAIC0yNTUs
NyArMjU1LDcgQEAgdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZhY2U6OnVwZ3JhZGVFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHIg
d3JhcHBlZEVsZW1lbnQgPSBKU0VsZW1lbnQ6OnRvV3JhcHBlZCh2bSwgcmV0dXJuZWRFbGVtZW50
KTsKKyAgICBFbGVtZW50KiB3cmFwcGVkRWxlbWVudCA9IEpTRWxlbWVudDo6dG9XcmFwcGVkKHZt
LCByZXR1cm5lZEVsZW1lbnQpOwogICAgIGlmICghd3JhcHBlZEVsZW1lbnQgfHwgd3JhcHBlZEVs
ZW1lbnQgIT0gJmVsZW1lbnQpIHsKICAgICAgICAgZWxlbWVudC5jbGVhclJlYWN0aW9uUXVldWVG
cm9tRmFpbGVkQ3VzdG9tRWxlbWVudCgpOwogICAgICAgICByZXBvcnRFeGNlcHRpb24obGV4aWNh
bEdsb2JhbE9iamVjdCwgY3JlYXRlRE9NRXhjZXB0aW9uKGxleGljYWxHbG9iYWxPYmplY3QsIEV4
Y2VwdGlvbkNvZGU6OlR5cGVFcnJvciwgIkN1c3RvbSBlbGVtZW50IGNvbnN0cnVjdG9yIHJldHVy
bmVkIGEgd3JvbmcgZWxlbWVudCJfcykpOwpAQCAtMjc1LDE1ICsyNzUsMTUgQEAgdm9pZCBKU0N1
c3RvbUVsZW1lbnRJbnRlcmZhY2U6Omludm9rZUNhbGxiYWNrKEVsZW1lbnQmIGVsZW1lbnQsIEpT
T2JqZWN0KiBjYWxsYmEKICAgICBpZiAoIWNhbkludm9rZUNhbGxiYWNrKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZlB0ciBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFj
b250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWYgcHJvdGVjdGVkVGhpcyB7ICp0aGlz
IH07CisgICAgUmVmPEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZT4gcHJvdGVjdGVkVGhpcygqdGhp
cyk7CiAgICAgVk0mIHZtID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKIAotICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlNMb2NhbERPTVdpbmRv
dyhkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLnByb3RlY3RlZEZyYW1lKCkuZ2V0KCksIG1f
aXNvbGF0ZWRXb3JsZC5jb3B5UmVmKCkpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IHRvSlNM
b2NhbERPTVdpbmRvdyhkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpLmZyYW1lKCksIG1faXNv
bGF0ZWRXb3JsZCk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKICAg
ICBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdDsKQEAg
LTI5NywxMiArMjk3LDEyIEBAIHZvaWQgSlNDdXN0b21FbGVtZW50SW50ZXJmYWNlOjppbnZva2VD
YWxsYmFjayhFbGVtZW50JiBlbGVtZW50LCBKU09iamVjdCogY2FsbGJhCiAgICAgYWRkQXJndW1l
bnRzKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJncyk7CiAgICAgUkVMRUFT
RV9BU1NFUlQoIWFyZ3MuaGFzT3ZlcmZsb3dlZCgpKTsKIAotICAgIEpTRXhlY1N0YXRlOjppbnN0
cnVtZW50RnVuY3Rpb24oY29udGV4dC5nZXQoKSwgY2FsbERhdGEpOworICAgIEpTRXhlY1N0YXRl
OjppbnN0cnVtZW50RnVuY3Rpb24oY29udGV4dCwgY2FsbERhdGEpOwogCiAgICAgTmFrZWRQdHI8
SlNDOjpFeGNlcHRpb24+IGV4Y2VwdGlvbjsKICAgICBKU0V4ZWNTdGF0ZTo6Y2FsbChsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBjYWxsYmFjaywgY2FsbERhdGEsIGpzRWxlbWVudCwgYXJncywgZXhjZXB0
aW9uKTsKIAotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0aW9uKGNv
bnRleHQuZ2V0KCkpOworICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkQ2FsbEZ1bmN0
aW9uKGNvbnRleHQpOwogCiAgICAgaWYgKGV4Y2VwdGlvbikKICAgICAgICAgcmVwb3J0RXhjZXB0
aW9uKGNhbGxiYWNrLT5nbG9iYWxPYmplY3QoKSwgZXhjZXB0aW9uKTsKQEAgLTM4MSw3ICszODEs
NyBAQCB2b2lkIEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6aW52b2tlRm9ybURpc2FibGVkQ2Fs
bGJhY2soRWxlbWVudCYgZWxlbWVudCwgYm9vbAogdm9pZCBKU0N1c3RvbUVsZW1lbnRJbnRlcmZh
Y2U6Omludm9rZUZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhFbGVtZW50JiBlbGVtZW50LCBDdXN0
b21FbGVtZW50Rm9ybVZhbHVlIHJlc3RvcmVkU3RhdGUpCiB7CiAgICAgaW52b2tlQ2FsbGJhY2so
ZWxlbWVudCwgbV9mb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2suZ2V0KCksIFsmXShKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgTWFya2VkQXJndW1lbnRCdWZmZXImIGFyZ3MpIHsKLSAgICAgICAgUmVmIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwogCiAgICAgICAgIFdURjo6c3dpdGNoT24ocmVzdG9yZWRTdGF0ZSwgWyZdKFJl
ZlB0cjxET01Gb3JtRGF0YT4gc3RhdGUpIHsKICAgICAgICAgICAgIGFyZ3MuYXBwZW5kKHRvSlMo
bGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCAqc3RhdGUpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5Q3VzdG9t
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
Q3VzdG9tLmNwcAppbmRleCBlYWMxNmUxZTBlM2EuLmRhMzI5MmMzN2Y5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FbGVtZW50UmVnaXN0cnlDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5Q3VzdG9tLmNwcApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBz
dGF0aWMgSlNPYmplY3QqIGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNPYmplY3QmIHByb3RvdHlwZSwgY29uc3QgSWRlbnRpZmll
ciYgaWQpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOworICAgIFZN
JiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGNhbGxiYWNrID0gcHJvdG90eXBlLmdl
dCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaWQpOwpAQCAtNTgsOCArNTgsNyBAQCBzdGF0aWMgSlNP
YmplY3QqIGdldEN1c3RvbUVsZW1lbnRDYWxsYmFjayhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSgogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZUN1c3RvbUVsZW1lbnROYW1lQW5k
VGhyb3dJZk5lZWRlZChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSk7CiAg
ICAgc3dpdGNoIChEb2N1bWVudDo6dmFsaWRhdGVDdXN0b21FbGVtZW50TmFtZShuYW1lKSkgewog
ICAgIGNhc2UgQ3VzdG9tRWxlbWVudE5hbWVWYWxpZGF0aW9uU3RhdHVzOjpWYWxpZDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC04Niw3ICs4NSw3IEBAIHN0YXRpYyBib29sIHZhbGlkYXRlQ3Vz
dG9tRWxlbWVudE5hbWVBbmRUaHJvd0lmTmVlZGVkKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xv
CiAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkb20tY3VzdG9tZWxlbWVudHJlZ2lz
dHJ5LWRlZmluZQogSlNWYWx1ZSBKU0N1c3RvbUVsZW1lbnRSZWdpc3RyeTo6ZGVmaW5lKEpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsK
LSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpIDwg
MikpCkBAIC0xMDMsMzIgKzEwMiwzMiBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5
OjpkZWZpbmUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbAogICAgIGlm
ICghdmFsaWRhdGVDdXN0b21FbGVtZW50TmFtZUFuZFRocm93SWZOZWVkZWQobGV4aWNhbEdsb2Jh
bE9iamVjdCwgbG9jYWxOYW1lKSkKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKLSAg
ICBSZWYgcmVnaXN0cnkgPSB3cmFwcGVkKCk7CisgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JiBy
ZWdpc3RyeSA9IHdyYXBwZWQoKTsKIAotICAgIGlmIChyZWdpc3RyeS0+ZWxlbWVudERlZmluaXRp
b25Jc1J1bm5pbmcoKSkgeworICAgIGlmIChyZWdpc3RyeS5lbGVtZW50RGVmaW5pdGlvbklzUnVu
bmluZygpKSB7CiAgICAgICAgIHRocm93Tm90U3VwcG9ydGVkRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2NvcGUsICJDYW5ub3QgZGVmaW5lIGEgY3VzdG9tIGVsZW1lbnQgd2hpbGUgZGVmaW5p
bmcgYW5vdGhlciBjdXN0b20gZWxlbWVudCJfcyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogICAgIH0KLSAgICBTZXRGb3JTY29wZSBjaGFuZ2UocmVnaXN0cnktPmVsZW1lbnREZWZp
bml0aW9uSXNSdW5uaW5nKCksIHRydWUpOworICAgIFNldEZvclNjb3BlIGNoYW5nZShyZWdpc3Ry
eS5lbGVtZW50RGVmaW5pdGlvbklzUnVubmluZygpLCB0cnVlKTsKIAotICAgIGlmIChyZWdpc3Ry
eS0+ZmluZEludGVyZmFjZShsb2NhbE5hbWUpKSB7CisgICAgaWYgKHJlZ2lzdHJ5LmZpbmRJbnRl
cmZhY2UobG9jYWxOYW1lKSkgewogICAgICAgICB0aHJvd05vdFN1cHBvcnRlZEVycm9yKGxleGlj
YWxHbG9iYWxPYmplY3QsIHNjb3BlLCAiQ2Fubm90IGRlZmluZSBtdWx0aXBsZSBjdXN0b20gZWxl
bWVudHMgd2l0aCB0aGUgc2FtZSB0YWcgbmFtZSJfcyk7CiAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KIAotICAgIGlmIChyZWdpc3RyeS0+Y29udGFpbnNDb25zdHJ1Y3Rvcihj
b25zdHJ1Y3RvcikpIHsKKyAgICBpZiAocmVnaXN0cnkuY29udGFpbnNDb25zdHJ1Y3Rvcihjb25z
dHJ1Y3RvcikpIHsKICAgICAgICAgdGhyb3dOb3RTdXBwb3J0ZWRFcnJvcihsZXhpY2FsR2xvYmFs
T2JqZWN0LCBzY29wZSwgIkNhbm5vdCBkZWZpbmUgbXVsdGlwbGUgY3VzdG9tIGVsZW1lbnRzIHdp
dGggdGhlIHNhbWUgY2xhc3MiX3MpOwogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAg
ICB9CiAKLSAgICBKU1ZhbHVlIHByb3RvdHlwZVZhbHVlID0gY29uc3RydWN0b3ItPmdldCgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgdm0tPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CisgICAgSlNW
YWx1ZSBwcm90b3R5cGVWYWx1ZSA9IGNvbnN0cnVjdG9yLT5nZXQoJmxleGljYWxHbG9iYWxPYmpl
Y3QsIHZtLnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgSlNWYWx1ZSgpKTsKICAgICBpZiAoIXByb3RvdHlwZVZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2Nv
cGUsICJDdXN0b20gZWxlbWVudCBjb25zdHJ1Y3RvcidzIHByb3RvdHlwZSBtdXN0IGJlIGFuIG9i
amVjdCJfcyk7CiAgICAgSlNPYmplY3QmIHByb3RvdHlwZU9iamVjdCA9ICphc09iamVjdChwcm90
b3R5cGVWYWx1ZSk7CiAKICAgICBRdWFsaWZpZWROYW1lIG5hbWUobnVsbEF0b20oKSwgbG9jYWxO
YW1lLCBIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJKTsKLSAgICBSZWYgZWxlbWVudEludGVy
ZmFjZSA9IEpTQ3VzdG9tRWxlbWVudEludGVyZmFjZTo6Y3JlYXRlKG5hbWUsIGNvbnN0cnVjdG9y
LCBnbG9iYWxPYmplY3QoKSk7CisgICAgYXV0byBlbGVtZW50SW50ZXJmYWNlID0gSlNDdXN0b21F
bGVtZW50SW50ZXJmYWNlOjpjcmVhdGUobmFtZSwgY29uc3RydWN0b3IsIGdsb2JhbE9iamVjdCgp
KTsKIAogICAgIGF1dG8qIGNvbm5lY3RlZENhbGxiYWNrID0gZ2V0Q3VzdG9tRWxlbWVudENhbGxi
YWNrKGxleGljYWxHbG9iYWxPYmplY3QsIHByb3RvdHlwZU9iamVjdCwgSWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgImNvbm5lY3RlZENhbGxiYWNrIl9zKSk7CiAgICAgaWYgKGNvbm5lY3RlZENh
bGxiYWNrKQpAQCAtMTY5LDcgKzE2OCw3IEBAIEpTVmFsdWUgSlNDdXN0b21FbGVtZW50UmVnaXN0
cnk6OmRlZmluZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsCiAgICAg
ICAgICAgICBlbGVtZW50SW50ZXJmYWNlLT5kaXNhYmxlU2hhZG93KCk7CiAgICAgfQogCi0gICAg
aWYgKHJlZ2lzdHJ5LT5kb2N1bWVudCgpICYmIHJlZ2lzdHJ5LT5kb2N1bWVudCgpLT5zZXR0aW5n
cygpLmZvcm1Bc3NvY2lhdGVkQ3VzdG9tRWxlbWVudHNFbmFibGVkKCkpIHsKKyAgICBpZiAocmVn
aXN0cnkuZG9jdW1lbnQoKSAmJiByZWdpc3RyeS5kb2N1bWVudCgpLT5zZXR0aW5ncygpLmZvcm1B
c3NvY2lhdGVkQ3VzdG9tRWxlbWVudHNFbmFibGVkKCkpIHsKICAgICAgICAgYXV0byBmb3JtQXNz
b2NpYXRlZFZhbHVlID0gY29uc3RydWN0b3ItPmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImZvcm1Bc3NvY2lhdGVkIl9zKSk7CiAgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CiAgICAgICAgIGlmIChmb3JtQXNzb2NpYXRl
ZFZhbHVlLnRvQm9vbGVhbigmbGV4aWNhbEdsb2JhbE9iamVjdCkpIHsKQEAgLTE5Nyw3ICsxOTYs
NyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5OjpkZWZpbmUoSlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGF1dG8gcHJvbWlzZSA9IHJlZ2lzdHJ5LT5hZGRFbGVtZW50RGVmaW5pdGlvbihXVEZNb3ZlKGVs
ZW1lbnRJbnRlcmZhY2UpKSkKKyAgICBpZiAoYXV0byBwcm9taXNlID0gcmVnaXN0cnkuYWRkRWxl
bWVudERlZmluaXRpb24oV1RGTW92ZShlbGVtZW50SW50ZXJmYWNlKSkpCiAgICAgICAgIHByb21p
c2UtPnJlc29sdmVXaXRoSlNWYWx1ZShjb25zdHJ1Y3Rvcik7CiAKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKQEAgLTIwNiw4ICsyMDUsNyBAQCBKU1ZhbHVlIEpTQ3VzdG9tRWxlbWVudFJlZ2lz
dHJ5OjpkZWZpbmUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbAogLy8g
aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG9tLWN1c3RvbWVsZW1lbnRyZWdpc3RyeS13
aGVuZGVmaW5lZAogc3RhdGljIEpTVmFsdWUgd2hlbkRlZmluZWRQcm9taXNlKEpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSwgSlNET01HbG9i
YWxPYmplY3QmIGdsb2JhbE9iamVjdCwgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JiByZWdpc3RyeSwg
SlNQcm9taXNlJiBwcm9taXNlKQogewotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qu
dm0oKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpKTsK
IAogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpIDwgMSkpCiAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CkBAIC0y
MzQsMTIgKzIzMiwxMSBAQCBzdGF0aWMgSlNWYWx1ZSB3aGVuRGVmaW5lZFByb21pc2UoSlNHbG9i
YWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZQogCiBKU1ZhbHVlIEpTQ3Vz
dG9tRWxlbWVudFJlZ2lzdHJ5Ojp3aGVuRGVmaW5lZChKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC52bSgpOwotICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOworICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUobGV4
aWNhbEdsb2JhbE9iamVjdC52bSgpKTsKIAogICAgIEFTU0VSVChnbG9iYWxPYmplY3QoKSk7Ci0g
ICAgYXV0byogcmVzdWx0ID0gSlNQcm9taXNlOjpjcmVhdGUodm0sIGxleGljYWxHbG9iYWxPYmpl
Y3QucHJvbWlzZVN0cnVjdHVyZSgpKTsKLSAgICBKU1ZhbHVlIHByb21pc2UgPSB3aGVuRGVmaW5l
ZFByb21pc2UobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCAqZ2xvYmFsT2JqZWN0KCks
IHByb3RlY3RlZFdyYXBwZWQoKSwgKnJlc3VsdCk7CisgICAgYXV0byogcmVzdWx0ID0gSlNQcm9t
aXNlOjpjcmVhdGUobGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0
LnByb21pc2VTdHJ1Y3R1cmUoKSk7CisgICAgSlNWYWx1ZSBwcm9taXNlID0gd2hlbkRlZmluZWRQ
cm9taXNlKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgKmdsb2JhbE9iamVjdCgpLCB3
cmFwcGVkKCksICpyZXN1bHQpOwogCiAgICAgaWYgKFVOTElLRUxZKGNhdGNoU2NvcGUuZXhjZXB0
aW9uKCkpKSB7CiAgICAgICAgIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkobGV4aWNh
bEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCgpLCAqcmVzdWx0LCBjYXRjaFNjb3BlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20u
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21FdmVudEN1c3RvbS5jcHAK
aW5kZXggNDJkMjAzMGJkODliLi4yYzk2ZGVlMWFkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tRXZlbnRDdXN0b20uY3BwCkBAIC0zNiw4ICszNiw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNDOjpKU1ZhbHVlIEpTQ3VzdG9tRXZlbnQ6OmRldGFp
bChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KSBjb25zdAogewotICAg
IFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKLSAgICBhdXRvIHRocm93U2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSk7CiAgICAgcmV0dXJuIGNhY2hl
ZFByb3BlcnR5VmFsdWUodGhyb3dTY29wZSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgKnRoaXMsIHdy
YXBwZWQoKS5jYWNoZWREZXRhaWwoKSwgW3RoaXNdKEpTQzo6VGhyb3dTY29wZSYpIHsKICAgICAg
ICAgcmV0dXJuIHdyYXBwZWQoKS5kZXRhaWwoKS5nZXRWYWx1ZShKU0M6OmpzTnVsbCgpKTsKICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQWJzdHJh
Y3RPcGVyYXRpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFic3RyYWN0
T3BlcmF0aW9ucy5oCmluZGV4IGZhZDE0MjNmNjM3Yy4uNmRhZjEzNjNkNjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFic3RyYWN0T3BlcmF0aW9ucy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQWJzdHJhY3RPcGVyYXRpb25zLmgK
QEAgLTUwLDEwICs1MCwxMCBAQCBzdGF0aWMgYm9vbCBpc1Zpc2libGVOYW1lZFByb3BlcnR5KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQwogICAgIGlmIChwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmIGlt
cGwgPSB0aGlzT2JqZWN0LndyYXBwZWQoKTsKKyAgICBhdXRvJiBpbXBsID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CiAKICAgICAvLyAxLiBJZiBQIGlzIG5vdCBhIHN1cHBvcnRlZCBwcm9wZXJ0eSBu
YW1lIG9mIE8sIHRoZW4gcmV0dXJuIGZhbHNlLgotICAgIGlmICghaW1wbC0+aXNTdXBwb3J0ZWRQ
cm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSkpCisgICAgaWYg
KCFpbXBsLmlzU3VwcG9ydGVkUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZVRvU3RyaW5nKHByb3Bl
cnR5TmFtZSkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gMi4gSWYgTyBo
YXMgYW4gb3duIHByb3BlcnR5IG5hbWVkIFAsIHRoZW4gcmV0dXJuIGZhbHNlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Bc3luY0l0ZXJhdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUFzeW5jSXRlcmF0b3IuaAppbmRleCAwYmIzMzI3
MzhiMjYuLjllZjE0ZDlmMzc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01Bc3luY0l0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Bc3luY0l0ZXJhdG9yLmgKQEAgLTIwOCw3ICsyMDgsNyBAQCBKU0M6OkpTVmFsdWUgSlNE
T01Bc3luY0l0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRzPjo6bmV4dChKU0M6
OkpTR2xvYgogdGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRy
YWl0cz4KIEpTQzo6SlNQcm9taXNlKiBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwg
SXRlcmF0b3JUcmFpdHM+OjpydW5OZXh0U3RlcHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFs
T2JqZWN0KQogewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC52bSgpOworICAgIEpTQzo6Vk0m
IHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOwogCiAgICAgYXV0byBuZXh0UHJvbWlzZUNhcGFiaWxpdHkgPSBKU0M6OkpTUHJv
bWlzZTo6Y3JlYXRlTmV3UHJvbWlzZUNhcGFiaWxpdHkoJmdsb2JhbE9iamVjdCwgZ2xvYmFsT2Jq
ZWN0LnByb21pc2VDb25zdHJ1Y3RvcigpKTsKQEAgLTI0MCwxMCArMjQwLDEwIEBAIEpTQzo6SlNQ
cm9taXNlKiBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+
OjpydW5OZXh0U3RlcHMoCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU1dyYXBwZXIsIHR5cGVuYW1lIEl0
ZXJhdG9yVHJhaXRzPgogSlNDOjpKU1Byb21pc2UqIEpTRE9NQXN5bmNJdGVyYXRvckJhc2U8SlNX
cmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmdldE5leHRJdGVyYXRpb25SZXN1bHQoSlNDOjpKU0ds
b2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0KQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmds
b2JhbE9iamVjdCk7CisgICAgSlNDOjpWTSYgdm0gPSBKU0M6OmdldFZNKCZnbG9iYWxPYmplY3Qp
OwogCiAgICAgYXV0byogcHJvbWlzZSA9IEpTQzo6SlNQcm9taXNlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdC5wcm9taXNlU3RydWN0dXJlKCkpOwotICAgIFJlZlB0ciBkZWZlcnJlZCA9IERlZmVy
cmVkUHJvbWlzZTo6Y3JlYXRlKCp0aGlzLT5nbG9iYWxPYmplY3QoKSwgKnByb21pc2UpOworICAg
IGF1dG8gZGVmZXJyZWQgPSBEZWZlcnJlZFByb21pc2U6OmNyZWF0ZSgqdGhpcy0+Z2xvYmFsT2Jq
ZWN0KCksICpwcm9taXNlKTsKICAgICBpZiAoIW1faXRlcmF0b3IpIHsKICAgICAgICAgZGVmZXJy
ZWQtPnJlc29sdmUoKTsKICAgICAgICAgcmV0dXJuIHByb21pc2U7CkBAIC0yNzYsNyArMjc2LDcg
QEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwg
SXRlcmF0b3JUcmFpdHM+OjpzZXR0bGUoSlMKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwg
dHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TExfQVRUUklCVVRFUyBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JU
cmFpdHM+OjpvblByb21pc2VTZXR0bGVkKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIGNhc3RlZFRoaXMgPSBKU0M6
OmpzRHluYW1pY0Nhc3Q8SlNET01Bc3luY0l0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9y
VHJhaXRzPio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY2FzdGVkVGhpcykK
QEAgLTI4OCw3ICsyODgsNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRU
UklCVVRFUyBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSQogdGVtcGxhdGU8dHlw
ZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KIEpTQm91bmRGdW5jdGlv
biogSlNET01Bc3luY0l0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRzPjo6Y3Jl
YXRlT25TZXR0bGVkRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQog
ewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIG9uU2V0dGxlZCA9IEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIFN0cmluZygpLCBvblByb21pc2VTZXR0bGVkLCBJ
bXBsZW1lbnRhdGlvblZpc2liaWxpdHk6OlB1YmxpYyk7CiAgICAgcmV0dXJuIEpTQzo6SlNCb3Vu
ZEZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgb25TZXR0bGVkLCB0aGlzLCB7IH0s
IDEsIGpzRW1wdHlTdHJpbmcodm0pKTsKIH0KQEAgLTMwOCw3ICszMDgsNyBAQCBKU0M6OkVuY29k
ZWRKU1ZhbHVlIEpTRE9NQXN5bmNJdGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0
cz46OmZ1bGZpbGwoSgogdGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVyLCB0eXBlbmFtZSBJdGVy
YXRvclRyYWl0cz4KIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTF9BVFRSSUJVVEVT
IEpTRE9NQXN5bmNJdGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46Om9uUHJv
bWlzZUZ1bEZpbGxlZChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFt
ZSogY2FsbEZyYW1lKQogewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBK
U0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAgICAgYXV0byBjYXN0ZWRUaGlzID0gSlNDOjpqc0R5bmFtaWND
YXN0PEpTRE9NQXN5bmNJdGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz4qPihj
YWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWNhc3RlZFRoaXMpCkBAIC0zMjAsNyAr
MzIwLDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMX0FUVFJJQlVURVMgSlNE
T01Bc3luY0l0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEkKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3Jh
cHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+CiBKU0JvdW5kRnVuY3Rpb24qIEpTRE9NQXN5
bmNJdGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46OmNyZWF0ZU9uRnVsZmls
bGVkRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewotICAgIFJl
ZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKICAgICBhdXRvIG9uRnVsRmlsbGVkID0gSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgMCwgU3RyaW5nKCksIG9uUHJvbWlzZUZ1bEZpbGxlZCwgSW1wbGVt
ZW50YXRpb25WaXNpYmlsaXR5OjpQdWJsaWMpOwogICAgIHJldHVybiBKU0M6OkpTQm91bmRGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIG9uRnVsRmlsbGVkLCB0aGlzLCB7IH0sIDEs
IGpzRW1wdHlTdHJpbmcodm0pKTsKIH0KQEAgLTMzMSw3ICszMzEsNyBAQCBKU0M6OkVuY29kZWRK
U1ZhbHVlIEpTRE9NQXN5bmNJdGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46
OnJlamVjdChKUwogICAgIG1fb25nb2luZ1Byb21pc2UgPSBudWxscHRyOwogICAgIG1faXRlcmF0
b3IgPSBudWxscHRyOwogCi0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpT
Qzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsIHJlYXNvbik7CiB9CkBAIC0zMzksNyArMzM5LDcgQEAgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBKU0RPTUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+OjpyZWpl
Y3QoSlMKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFp
dHM+CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRUUklCVVRFUyBKU0RPTUFz
eW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+OjpvblByb21pc2VSZWpl
Y3RlZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKICAgICBhdXRvIGNhc3RlZFRoaXMgPSBKU0M6OmpzRHluYW1pY0Nhc3Q8
SlNET01Bc3luY0l0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRzPio+KGNhbGxG
cmFtZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghY2FzdGVkVGhpcykKQEAgLTM1MSw3ICszNTEs
NyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRUUklCVVRFUyBKU0RPTUFz
eW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSQogdGVtcGxhdGU8dHlwZW5hbWUgSlNXcmFwcGVy
LCB0eXBlbmFtZSBJdGVyYXRvclRyYWl0cz4KIEpTQm91bmRGdW5jdGlvbiogSlNET01Bc3luY0l0
ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRzPjo6Y3JlYXRlT25SZWplY3RlZEZ1
bmN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBSZWYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgYXV0byBvblJlamVjdGVkID0gSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgMCwgU3RyaW5nKCksIG9uUHJvbWlzZVJlamVjdGVkLCBJbXBsZW1lbnRhdGlv
blZpc2liaWxpdHk6OlB1YmxpYyk7CiAgICAgcmV0dXJuIEpTQzo6SlNCb3VuZEZ1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgb25SZWplY3RlZCwgdGhpcywgeyB9LCAxLCBqc0VtcHR5
U3RyaW5nKHZtKSk7CiB9CkBAIC0zNTksNyArMzU5LDcgQEAgSlNCb3VuZEZ1bmN0aW9uKiBKU0RP
TUFzeW5jSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+OjpjcmVhdGVPblJl
amUKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUgSXRlcmF0b3JUcmFpdHM+
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRUUklCVVRFUyBKU0RPTUFzeW5j
SXRlcmF0b3JQcm90b3R5cGU8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz46Om5leHQoSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSogY2FsbEZyYW1lKQog
ewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0gSlNDOjpqc0R5bmFtaWNDYXN0PEpTRE9NQXN5bmNJ
dGVyYXRvckJhc2U8SlNXcmFwcGVyLCBJdGVyYXRvclRyYWl0cz4qPihjYWxsRnJhbWUtPnRoaXNW
YWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZ1NlY3VyaXR5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Z1NlY3VyaXR5LmNwcAppbmRleCBjN2M1NDViZjQwMzEuLjc5OWQ1NTI3YTAxNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5LmNwcApA
QCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgIkpTRE9NQmluZGluZ1NlY3VyaXR5LmgiCiAKICNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgogI2luY2x1
ZGUgIkZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcklubGluZXMuaCIKICNpbmNsdWRlICJIVFRQUGFy
c2Vycy5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0aW9uSGFuZGxpbmcuaCIKQEAgLTM5LDggKzM4
LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogdm9pZCBwcmludEVycm9yTWVzc2FnZUZvckZy
YW1lKExvY2FsRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYg
KGZyYW1lKQotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cHJvdGVjdGVkV2luZG93KCktPnBy
aW50RXJyb3JNZXNzYWdlKG1lc3NhZ2UpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVy
bjsKKyAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCktPnByaW50RXJyb3JNZXNzYWdl
KG1lc3NhZ2UpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgY2FuQWNjZXNzRG9jdW1lbnQoSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRG9jdW1lbnQqIHRhcmdldERv
Y3VtZW50LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCkBAIC00OCwy
NCArNDgsMjMgQEAgc3RhdGljIGlubGluZSBib29sIGNhbkFjY2Vzc0RvY3VtZW50KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEQKICAgICBpZiAoIXRhcmdldERvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHIgdXBkYXRlZFRhcmdldERv
Y3VtZW50ID0gdGFyZ2V0RG9jdW1lbnQ7Ci0gICAgaWYgKFJlZlB0ciB0ZW1wbGF0ZUhvc3QgPSB0
YXJnZXREb2N1bWVudC0+dGVtcGxhdGVEb2N1bWVudEhvc3QoKSkKLSAgICAgICAgdXBkYXRlZFRh
cmdldERvY3VtZW50ID0gV1RGTW92ZSh0ZW1wbGF0ZUhvc3QpOworICAgIGlmIChhdXRvKiB0ZW1w
bGF0ZUhvc3QgPSB0YXJnZXREb2N1bWVudC0+dGVtcGxhdGVEb2N1bWVudEhvc3QoKSkKKyAgICAg
ICAgdGFyZ2V0RG9jdW1lbnQgPSB0ZW1wbGF0ZUhvc3Q7CiAKICAgICBhdXRvJiBhY3RpdmUgPSBh
Y3RpdmVET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QpOwogCi0gICAgaWYgKGFjdGl2ZS5k
b2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLmlzU2FtZU9yaWdpbkRvbWFpbih1cGRhdGVkVGFy
Z2V0RG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQorICAgIGlmIChhY3RpdmUuZG9jdW1lbnQo
KS0+c2VjdXJpdHlPcmlnaW4oKS5pc1NhbWVPcmlnaW5Eb21haW4odGFyZ2V0RG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHN3aXRjaCAocmVw
b3J0aW5nT3B0aW9uKSB7CiAgICAgY2FzZSBUaHJvd1NlY3VyaXR5RXJyb3I6IHsKLSAgICAgICAg
UmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgVk0mIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwotICAgICAgICB0aHJvd1NlY3VyaXR5RXJyb3IoKmxleGljYWxHbG9iYWxP
YmplY3QsIHNjb3BlLCB1cGRhdGVkVGFyZ2V0RG9jdW1lbnQtPnByb3RlY3RlZFdpbmRvdygpLT5j
cm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmUsIEluY2x1ZGVUYXJnZXRPcmlnaW46
Ok5vKSk7CisgICAgICAgIHRocm93U2VjdXJpdHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwg
c2NvcGUsIHRhcmdldERvY3VtZW50LT5kb21XaW5kb3coKS0+Y3Jvc3NEb21haW5BY2Nlc3NFcnJv
ck1lc3NhZ2UoYWN0aXZlLCBJbmNsdWRlVGFyZ2V0T3JpZ2luOjpObykpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBMb2dTZWN1cml0eUVycm9yOgotICAgICAgICBwcmludEVycm9y
TWVzc2FnZUZvckZyYW1lKHVwZGF0ZWRUYXJnZXREb2N1bWVudC0+cHJvdGVjdGVkRnJhbWUoKS5n
ZXQoKSwgdXBkYXRlZFRhcmdldERvY3VtZW50LT5wcm90ZWN0ZWRXaW5kb3coKS0+Y3Jvc3NEb21h
aW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlLCBJbmNsdWRlVGFyZ2V0T3JpZ2luOjpZZXMpKTsK
KyAgICAgICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JGcmFtZSh0YXJnZXREb2N1bWVudC0+ZnJhbWUo
KSwgdGFyZ2V0RG9jdW1lbnQtPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVz
c2FnZShhY3RpdmUsIEluY2x1ZGVUYXJnZXRPcmlnaW46OlllcykpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcjoKICAgICAgICAgYnJlYWs7CkBAIC03
OCw3ICs3Nyw3IEBAIGJvb2wgQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJh
bWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplCiB7CiAgICAgaWYgKEJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0ZyYW1lKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAm
ZnJhbWUsIERvTm90UmVwb3J0U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIG1lc3NhZ2UgPSBmcmFtZS5kb2N1bWVudCgpLT5wcm90ZWN0ZWRXaW5kb3coKS0+Y3Jvc3NE
b21haW5BY2Nlc3NFcnJvck1lc3NhZ2UoYWN0aXZlRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmpl
Y3QpLCBJbmNsdWRlVGFyZ2V0T3JpZ2luOjpObyk7CisgICAgbWVzc2FnZSA9IGZyYW1lLmRvY3Vt
ZW50KCktPmRvbVdpbmRvdygpLT5jcm9zc0RvbWFpbkFjY2Vzc0Vycm9yTWVzc2FnZShhY3RpdmVE
T01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCksIEluY2x1ZGVUYXJnZXRPcmlnaW46Ok5vKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTg5LDcgKzg4LDcgQEAgYm9vbCBCaW5kaW5nU2Vj
dXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWwKIAogYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3coSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIExvY2FsRE9NV2luZG93
JiBnbG9iYWxPYmplY3QsIFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIGJvb2wg
c2hvdWxkQWxsb3dBY2Nlc3MgPSBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coJmxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgRG9Ob3RSZXBvcnRT
ZWN1cml0eUVycm9yKTsKQEAgLTEwMiw3ICsxMDEsNyBAQCBib29sIEJpbmRpbmdTZWN1cml0eTo6
c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bAogCiBib29sIEJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBMb2NhbERPTVdpbmRvdyYg
dGFyZ2V0LCBTZWN1cml0eVJlcG9ydGluZ09wdGlvbiByZXBvcnRpbmdPcHRpb24pCiB7Ci0gICAg
cmV0dXJuIGNhbkFjY2Vzc0RvY3VtZW50KGxleGljYWxHbG9iYWxPYmplY3QsIHRhcmdldC5wcm90
ZWN0ZWREb2N1bWVudCgpLmdldCgpLCByZXBvcnRpbmdPcHRpb24pOworICAgIHJldHVybiBjYW5B
Y2Nlc3NEb2N1bWVudChsZXhpY2FsR2xvYmFsT2JqZWN0LCB0YXJnZXQuZG9jdW1lbnQoKSwgcmVw
b3J0aW5nT3B0aW9uKTsKIH0KIAogYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
TG9jYWxET01XaW5kb3cqIHRhcmdldCwgU2VjdXJpdHlSZXBvcnRpbmdPcHRpb24gcmVwb3J0aW5n
T3B0aW9uKQpAQCAtMTIyLDEyICsxMjEsMTIgQEAgYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEcKIAog
Ym9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBMb2NhbEZyYW1lKiB0YXJnZXQsIFNlY3Vy
aXR5UmVwb3J0aW5nT3B0aW9uIHJlcG9ydGluZ09wdGlvbikKIHsKLSAgICByZXR1cm4gdGFyZ2V0
ICYmIGNhbkFjY2Vzc0RvY3VtZW50KGxleGljYWxHbG9iYWxPYmplY3QsIHRhcmdldC0+cHJvdGVj
dGVkRG9jdW1lbnQoKS5nZXQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKKyAgICByZXR1cm4gdGFyZ2V0
ICYmIGNhbkFjY2Vzc0RvY3VtZW50KGxleGljYWxHbG9iYWxPYmplY3QsIHRhcmdldC0+ZG9jdW1l
bnQoKSwgcmVwb3J0aW5nT3B0aW9uKTsKIH0KIAogYm9vbCBCaW5kaW5nU2VjdXJpdHk6OnNob3Vs
ZEFsbG93QWNjZXNzVG9Ob2RlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIE5vZGUqIHRhcmdldCkKIHsKLSAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NEb2N1
bWVudCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGFyZ2V0LT5wcm90ZWN0ZWREb2N1bWVudCgpLnB0
cigpLCBMb2dTZWN1cml0eUVycm9yKTsKKyAgICByZXR1cm4gIXRhcmdldCB8fCBjYW5BY2Nlc3NE
b2N1bWVudCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgJnRhcmdldC0+ZG9jdW1lbnQoKSwgTG9nU2Vj
dXJpdHlFcnJvcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5SW5saW5lcy5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nU2VjdXJpdHlJbmxpbmVzLmgK
aW5kZXggZDkzZmU2MTE3ODE3Li5lNWJkYzlmOWJkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5SW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZ1NlY3VyaXR5SW5saW5lcy5oCkBAIC0z
NSw3ICszNSw3IEBAIGlubGluZSBib29sIHNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coSlND
OjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjCiB7CiAgICAgaWYgKExJS0VMWShs
ZXhpY2FsR2xvYmFsT2JqZWN0ID09ICZ0YXJnZXQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICByZXR1cm4gc2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0YXJnZXQucHJvdGVjdGVkV3JhcHBlZCgpLCByZXBvcnRpbmdPcHRpb24pOworICAgIHJldHVy
biBzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRhcmdl
dC53cmFwcGVkKCksIHJlcG9ydGluZ09wdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRp
bmdTZWN1cml0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01C
dWlsdGluQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVp
bHRpbkNvbnN0cnVjdG9yLmgKaW5kZXggN2Y5MmU0YmMyNDZkLi5kMzg0M2NjNDFiOTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQnVpbHRpbkNvbnN0cnVjdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CdWlsdGluQ29uc3RydWN0
b3IuaApAQCAtNzksNyArNzksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUg
dm9pZCBKU0RPTUJ1aWx0aW5Db25zdHJ1Y3RvcjxKU0NsYXNzPjo6ZmluaXNoQwogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBKU0NsYXNzPiBpbmxpbmUgSlNDOjpTdHJ1Y3R1cmUqIEpTRE9NQnVpbHRpbkNv
bnN0cnVjdG9yPEpTQ2xhc3M+OjpnZXRET01TdHJ1Y3R1cmVGb3JKU09iamVjdChKU0M6OkpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0KiBuZXdUYXJnZXQp
CiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CiAKICAgICBpZiAoTElL
RUxZKG5ld1RhcmdldCA9PSB0aGlzKSkKICAgICAgICAgcmV0dXJuIGdldERPTVN0cnVjdHVyZTxK
U0NsYXNzPih2bSwgKmdsb2JhbE9iamVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQ2FzdFRoaXNWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01DYXN0VGhpc1ZhbHVlLmgKaW5kZXggNjA1ZGMyYTc5YzMzLi5kNzAyOGM0YjVh
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ2FzdFRoaXNW
YWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ2FzdFRoaXNWYWx1
ZS5oCkBAIC00NCwxMCArNDQsMTAgQEAgZW51bSBjbGFzcyBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlv
ciA6IHVpbnQ4X3QgewogdGVtcGxhdGU8Y2xhc3MgSlNDbGFzcz4KIEpTQ2xhc3MqIGNhc3RUaGlz
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1Zh
bHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfYmFzZV9vZl92PEpT
RE9NR2xvYmFsT2JqZWN0LCBKU0NsYXNzPikgewotICAgICAgICBSZWYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19iYXNlX29mX3Y8SlNE
T01HbG9iYWxPYmplY3QsIEpTQ2xhc3M+KQogICAgICAgICByZXR1cm4gdG9KU0RPTUdsb2JhbE9i
amVjdDxKU0NsYXNzPih2bSwgdGhpc1ZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkgPyBKU0M6OkpT
VmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QpIDogdGhpc1ZhbHVlKTsKLSAgICB9IGVsc2UKKyAg
ICBlbHNlCiAgICAgICAgIHJldHVybiBKU0M6OmpzRHluYW1pY0Nhc3Q8SlNDbGFzcyo+KHRoaXNW
YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29uc3RydWN0b3JCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
c3RydWN0b3JCYXNlLmNwcAppbmRleCA3MmFiYjUzYmZmOTMuLmQxMTQ4Y2M0NWYyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db25zdHJ1Y3RvckJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29uc3RydWN0b3JCYXNlLmNw
cApAQCAtMzIsNyArMzIsNyBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoSlNET01Db25zdHJ1Y3RvckJhc2UpOwogCiBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oY2Fs
bFRocm93VHlwZUVycm9yRm9ySlNET01Db25zdHJ1Y3RvciwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbGxGcmFtZSopKQogewotICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIHRocm93VHlwZUVycm9yKGdsb2JhbE9iamVjdCwg
c2NvcGUsICJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyBvcGVyYXRvciJfcyk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CkBAIC00MCw3ICs0MCw3IEBAIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjYWxsVGhyb3dUeXBlRXJyb3JGb3JKU0RPTUNvbnN0cnVjdG9yLCAo
SlNHbG9iYWxPYmplY3QqCiAKIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihjYWxsVGhyb3dUeXBl
RXJyb3JGb3JKU0RPTUNvbnN0cnVjdG9yTm90Q29uc3RydWN0YWJsZSwgKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqKSkKIHsKLSAgICBSZWYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIEpTQzo6dGhy
b3dUeXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBzY29wZSwgIklsbGVnYWwgY29uc3RydWN0b3IiX3Mp
OwogICAgIHJldHVybiBKU0M6OkpTVmFsdWU6OmVuY29kZShKU0M6OmpzTnVsbCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEFueS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0QW55LmgKaW5kZXggNTExMzBjYjQ1
MDBlLi5iNzQ0YmJiODliNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQ29udmVydEFueS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEFueS5oCkBAIC03Miw3ICs3Miw3IEBAIHRlbXBsYXRlPD4gc3RydWN0IFZhcmlhZGlj
Q29udmVydGVyPElETEFueT4gewogCiAgICAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8SXRlbT4gY29u
dmVydChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFs
dWUgdmFsdWUpCiAgICAgewotICAgICAgICBSZWYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gQ29udmVydGVyPElETEFueT46OmNvbnZlcnQobGV4aWNh
bEdsb2JhbE9iamVjdCwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01Db252ZXJ0QnVmZmVyU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUNvbnZlcnRCdWZmZXJTb3VyY2UuaAppbmRleCA3ZGZhMjEyM2ViMWQuLjA0ZGQ1
MTA5ZDQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252
ZXJ0QnVmZmVyU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0QnVmZmVyU291cmNlLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBzdHJ1Y3QgQnVmZmVyU291
cmNlQ29udmVydGVyIHsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBFeGNlcHRpb25UaHJvd2VyID0g
RGVmYXVsdEV4Y2VwdGlvblRocm93ZXI+CiAgICAgc3RhdGljIFJldHVyblR5cGUgY29udmVydChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEV4Y2VwdGlvblRocm93ZXImJiBleGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dl
cigpKQogICAgIHsKLSAgICAgICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAg
ICAgUmV0dXJuVHlwZSBvYmplY3QgeyB9OwogICAgICAgICBpZiBjb25zdGV4cHIgKG1vZGUgPT0g
QnVmZmVyU291cmNlQ29udmVydGVyQWxsb3dTaGFyZWRNb2RlOjpBbGxvdykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0Q2FsbGJhY2tzLmgKaW5kZXggZmVk
YTZiOGZjNTE5Li43NGRhYjYyOTcwY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQ29udmVydENhbGxiYWNrcy5oCkBAIC0zOCw3ICszOCw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBDb252ZXJ0ZXI8SURMQ2FsbGJhY2tGdW5jdGlvbjxUPj4gOiBE
ZWZhdWx0Q29udmVydGVyCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRXhjZXB0aW9uVGhyb3dlciA9
IERlZmF1bHRFeGNlcHRpb25UaHJvd2VyPgogICAgIHN0YXRpYyBSZWZQdHI8VD4gY29udmVydChK
U0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTVmFsdWUgdmFs
dWUsIEpTRE9NR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvblRocm93ZXImJiBl
eGNlcHRpb25UaHJvd2VyID0gRXhjZXB0aW9uVGhyb3dlcigpKQogICAgIHsKLSAgICAgICAgUmVm
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIEpTQzo6Vk0m
IHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgICAgICBpZiAoIXZhbHVlLmlzQ2Fs
bGFibGUoKSkgewpAQCAtNzIsNyArNzIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
Q29udmVydGVyPElETENhbGxiYWNrSW50ZXJmYWNlPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZQogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhy
b3dlcj4KICAgICBzdGF0aWMgUmVmUHRyPFQ+IGNvbnZlcnQoSlNDOjpKU0dsb2JhbE9iamVjdCYg
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBKU0RPTUdsb2JhbE9iamVj
dCYgZ2xvYmFsT2JqZWN0LCBFeGNlcHRpb25UaHJvd2VyJiYgZXhjZXB0aW9uVGhyb3dlciA9IEV4
Y2VwdGlvblRocm93ZXIoKSkKICAgICB7Ci0gICAgICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICAgICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnREYXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydERhdGUuY3BwCmluZGV4IDcxNjdhZWU2
ZmVlZS4uZjQ3OWM2ZDRhY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUNvbnZlcnREYXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUNvbnZlcnREYXRlLmNwcApAQCAtMzksMTMgKzM5LDEzIEBAIFdhbGxUaW1lIHZhbHVlVG9E
YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgZG91YmxlIG1pbGxpc2Vjb25kcyA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCk7CiAKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgaWYgKHZh
bHVlLmluaGVyaXRzPERhdGVJbnN0YW5jZT4oKSkKICAgICAgICAgbWlsbGlzZWNvbmRzID0ganND
YXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlKS0+aW50ZXJuYWxOdW1iZXIoKTsKICAgICBlbHNlIGlm
ICh2YWx1ZS5pc051bWJlcigpKQogICAgICAgICBtaWxsaXNlY29uZHMgPSB2YWx1ZS5hc051bWJl
cigpOwogICAgIGVsc2UgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIG1pbGxpc2Vjb25k
cyA9IHZtLT5kYXRlQ2FjaGUucGFyc2VEYXRlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bSwgdmFs
dWUuZ2V0U3RyaW5nKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CisgICAgICAgIG1pbGxpc2Vjb25k
cyA9IHZtLmRhdGVDYWNoZS5wYXJzZURhdGUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCB2YWx1
ZS5nZXRTdHJpbmcoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKIAogICAgIHJldHVybiBXYWxsVGlt
ZTo6ZnJvbVJhd1NlY29uZHMoU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMp
LnZhbHVlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Db252ZXJ0RW51bWVyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydEVudW1lcmF0aW9uLmgKaW5kZXggN2JlZDZlZjA2MjcwLi43Yzk2NWFhZDA0YWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEVudW1lcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0RW51bWVy
YXRpb24uaApAQCAtNDQsNyArNDQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29u
dmVydGVyPElETEVudW1lcmF0aW9uPFQ+PiA6IERlZmF1bHRDb252ZXJ0ZXI8SURMRQogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEV4Y2VwdGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dl
cj4KICAgICBzdGF0aWMgVCBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgRXhjZXB0aW9uVGhyb3dlciYmIGV4Y2VwdGlv
blRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCiAgICAgewotICAgICAgICBSZWYgdm0gPSBK
U0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byB0aHJvd1Njb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZUVu
dW1lcmF0aW9uPFQ+KGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaAppbmRl
eCA2OTE3OTU4Yjk4NTkuLjA5ZDBjYmI2ZTE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01Db252ZXJ0RXZlbnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydEV2ZW50TGlzdGVuZXIuaApAQCAtMzYsOCArMzYs
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ29udmVydGVyPElETEV2ZW50TGlzdGVu
ZXI8VD4+IDogRGVmYXVsdENvbnZlcnRlcjxJRAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEV4Y2Vw
dGlvblRocm93ZXIgPSBEZWZhdWx0RXhjZXB0aW9uVGhyb3dlcj4KICAgICBzdGF0aWMgUmV0dXJu
VHlwZSBjb252ZXJ0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgSlNDOjpKU09iamVjdCYgdGhpc09iamVjdCwgRXhjZXB0aW9uVGhy
b3dlciYmIGV4Y2VwdGlvblRocm93ZXIgPSBFeGNlcHRpb25UaHJvd2VyKCkpCiAgICAgewotICAg
ICAgICBSZWYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRShKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KSk7
CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCF2YWx1ZS5pc09iamVjdCgpKSkgewogICAgICAgICAg
ICAgZXhjZXB0aW9uVGhyb3dlcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NRXhjZXB0aW9uSGFuZGxpbmcuY3Bw
CmluZGV4IDkyMjI0ZWY1OTY2MC4uMWM1MTYyM2I4Y2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUV4Y2VwdGlvbkhhbmRsaW5nLmNwcApAQCAtNDAsMTMg
KzQwLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU1ZhbHVlIGV4Y2VwdGlvblZhbHVl
LCBDYWNoZWRTY3JpcHQqIGNhY2hlZFNjcmlwdCwgYm9vbCBmcm9tTW9kdWxlKQogewotICAgIFJl
ZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQodm0t
PmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CiAgICAgYXV0byogZXhjZXB0aW9uID0ganNEeW5hbWljQ2FzdDxK
U0M6OkV4Y2VwdGlvbio+KGV4Y2VwdGlvblZhbHVlKTsKICAgICBpZiAoIWV4Y2VwdGlvbikgewot
ICAgICAgICBleGNlcHRpb24gPSB2bS0+bGFzdEV4Y2VwdGlvbigpOworICAgICAgICBleGNlcHRp
b24gPSB2bS5sYXN0RXhjZXB0aW9uKCk7CiAgICAgICAgIGlmICghZXhjZXB0aW9uKQotICAgICAg
ICAgICAgZXhjZXB0aW9uID0gSlNDOjpFeGNlcHRpb246OmNyZWF0ZSh2bSwgZXhjZXB0aW9uVmFs
dWUsIEpTQzo6RXhjZXB0aW9uOjpEb05vdENhcHR1cmVTdGFjayk7CisgICAgICAgICAgICBleGNl
cHRpb24gPSBKU0M6OkV4Y2VwdGlvbjo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCks
IGV4Y2VwdGlvblZhbHVlLCBKU0M6OkV4Y2VwdGlvbjo6RG9Ob3RDYXB0dXJlU3RhY2spOwogICAg
IH0KIAogICAgIHJlcG9ydEV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBleGNlcHRpb24s
IGNhY2hlZFNjcmlwdCwgZnJvbU1vZHVsZSk7CkBAIC05MCw5ICs5MCw5IEBAIFN0cmluZyByZXRy
aWV2ZUVycm9yTWVzc2FnZShKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgVk0m
IHZtLCBKU1ZhbHVlCiAKIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0aW9uLCBDYWNoZWRTY3JpcHQq
IGNhY2hlZFNjcmlwdCwgYm9vbCBmcm9tTW9kdWxlLCBFeGNlcHRpb25EZXRhaWxzKiBleGNlcHRp
b25EZXRhaWxzKQogewotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQodm0tPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwot
ICAgIGlmICh2bS0+aXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24pKQorICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgUkVMRUFTRV9BU1NFUlQodm0uY3Vy
cmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CisgICAgaWYgKHZtLmlzVGVybWluYXRpb25F
eGNlcHRpb24oZXhjZXB0aW9uKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgY2FuIGRl
Y2xhcmUgYSBDYXRjaFNjb3BlIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGNsZWFyIHRoZSBleGNlcHRp
b24gYmVsb3cgaWYgaXQncwpAQCAtMTAwLDExICsxMDAsMTEgQEAgdm9pZCByZXBvcnRFeGNlcHRp
b24oSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6RXhjZXB0aW9uKiBl
eGNlcHQKICAgICAvLyB0aGUgVk0sIGJ1dCB3ZSBoYXZlIHRoZSBjaGVjayBhYm92ZSB0byBlbnN1
cmUgdGhhdCB3ZSBkbyBub3QgcmUtZW50ZXIgdGhpcyBzY29wZS4KICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKLSAgICBFcnJvckhhbmRsaW5nU2NvcGUgZXJyb3JT
Y29wZSh2bSk7CisgICAgRXJyb3JIYW5kbGluZ1Njb3BlIGVycm9yU2NvcGUobGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKSk7CiAKICAgICBhdXRvIGNhbGxTdGFjayA9IEluc3BlY3Rvcjo6Y3JlYXRl
U2NyaXB0Q2FsbFN0YWNrRnJvbUV4Y2VwdGlvbihsZXhpY2FsR2xvYmFsT2JqZWN0LCBleGNlcHRp
b24pOwogICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7Ci0gICAgdm0tPmNsZWFyTGFzdEV4Y2Vw
dGlvbigpOworICAgIHZtLmNsZWFyTGFzdEV4Y2VwdGlvbigpOwogCiAgICAgYXV0byogZ2xvYmFs
T2JqZWN0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4obGV4aWNhbEdsb2JhbE9iamVjdCk7
CiAgICAgaWYgKGF1dG8qIHdpbmRvdyA9IGpzRHluYW1pY0Nhc3Q8SlNMb2NhbERPTVdpbmRvdyo+
KGdsb2JhbE9iamVjdCkpIHsKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIHJlcG9ydEV4Y2VwdGlv
bihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpFeGNlcHRpb24qIGV4
Y2VwdAogICAgIH0KIAogICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gcmV0cmlldmVFcnJvck1lc3Nh
Z2UoKmxleGljYWxHbG9iYWxPYmplY3QsIHZtLCBleGNlcHRpb24tPnZhbHVlKCksIHNjb3BlKTsK
LSAgICBnbG9iYWxPYmplY3QtPnByb3RlY3RlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cmVw
b3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBleGNl
cHRpb25Tb3VyY2VVUkwsIGV4Y2VwdGlvbiwgY2FsbFN0YWNrLT5zaXplKCkgPyBjYWxsU3RhY2su
cHRyKCkgOiBudWxscHRyLCBjYWNoZWRTY3JpcHQsIGZyb21Nb2R1bGUpOworICAgIGdsb2JhbE9i
amVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5yZXBvcnRFeGNlcHRpb24oZXJyb3JNZXNz
YWdlLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGV4Y2VwdGlvblNvdXJjZVVSTCwgZXhjZXB0
aW9uLCBjYWxsU3RhY2stPnNpemUoKSA/IGNhbGxTdGFjay5wdHIoKSA6IG51bGxwdHIsIGNhY2hl
ZFNjcmlwdCwgZnJvbU1vZHVsZSk7CiAKICAgICBpZiAoZXhjZXB0aW9uRGV0YWlscykgewogICAg
ICAgICBleGNlcHRpb25EZXRhaWxzLT5tZXNzYWdlID0gZXJyb3JNZXNzYWdlOwpAQCAtMTM0LDcg
KzEzNCw3IEBAIHZvaWQgcmVwb3J0RXhjZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OkV4Y2VwdGlvbiogZXhjZXB0CiAKIHZvaWQgcmVwb3J0Q3VycmVudEV4
Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCkKIHsKLSAgICBSZWYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogICAgIGF1dG8qIGV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwogICAgIHNjb3BlLmNs
ZWFyRXhjZXB0aW9uKCk7CkBAIC0xNDMsOCArMTQzLDggQEAgdm9pZCByZXBvcnRDdXJyZW50RXhj
ZXB0aW9uKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogCiBKU1ZhbHVlIGNy
ZWF0ZURPTUV4Y2VwdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgRXhj
ZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIFJlZiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgaWYgKFVOTElLRUxZKHZtLT5oYXNQZW5kaW5n
VGVybWluYXRpb25FeGNlcHRpb24oKSkpCisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBpZiAoVU5MSUtFTFkodm0uaGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0
aW9uKCkpKQogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgIHN3aXRjaCAoZWMp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNw
cAppbmRleCAxNWNhNzZkY2MxZWIuLjcxNDkyZjA1Y2FkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihtYWtlVGhpc1R5cGVFcnJvckZvckJ1aWx0aW5zLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiB7CiAgICAgQVNTRVJUKGNhbGxGcmFtZSk7CiAgICAg
QVNTRVJUKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpID09IDIpOwotICAgIFJlZiB2bSA9IGds
b2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
RGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE0MSw3ICsxNDEsNyBAQCBKU0NfREVGSU5FX0hPU1Rf
RlVOQ1RJT04obWFrZUdldHRlclR5cGVFcnJvckZvckJ1aWx0aW5zLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbAogewogICAgIEFTU0VSVChjYWxsRnJhbWUpOwogICAgIEFTU0VSVChjYWxsRnJhbWUt
PmFyZ3VtZW50Q291bnQoKSA9PSAyKTsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIERlZmVyVGVybWluYXRpb24g
ZGVmZXJTY29wZSh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCkBAIC0xNjAsNyArMTYwLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKG1ha2VET01F
eGNlcHRpb25Gb3JCdWlsdGlucywgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmoKICAgICBBU1NF
UlQoY2FsbEZyYW1lKTsKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkgPT0g
Mik7CiAKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgRGVmZXJUZXJtaW5hdGlvbiBkZWZlclNjb3BlKHZtKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE3NSw3ICsx
NzUsNyBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04obWFrZURPTUV4Y2VwdGlvbkZvckJ1aWx0
aW5zLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iagogICAgICAgICBjb2RlID0gRXhjZXB0aW9u
Q29kZTo6QWJvcnRFcnJvcjsKICAgICBhdXRvIHZhbHVlID0gY3JlYXRlRE9NRXhjZXB0aW9uKGds
b2JhbE9iamVjdCwgY29kZSwgbWVzc2FnZSk7CiAKLSAgICBFWENFUFRJT05fQVNTRVJUKCFzY29w
ZS5leGNlcHRpb24oKSB8fCB2bS0+aGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOwor
ICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHZtLmhhc1BlbmRpbmdU
ZXJtaW5hdGlvbkV4Y2VwdGlvbigpKTsKIAogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodmFs
dWUpOwogfQpAQCAtMjMzLDcgKzIzMyw3IEBAIEpTQ19ERUZJTkVfSE9TVF9GVU5DVElPTihhZGRB
Ym9ydEFsZ29yaXRobVRvU2lnbmFsLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShKU0M6OkpTVmFsdWU6OkpTRmFsc2Up
KTsKIAogICAgIGF1dG8qIGpzRE9NR2xvYmFsT2JqZWN0ID0gSlNDOjpqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihnbG9iYWxPYmplY3QpOwotICAgIFJlZiBhYm9ydEFsZ29yaXRobSA9IEpTQWJv
cnRBbGdvcml0aG06OmNyZWF0ZShjYWxsRnJhbWUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmdldE9i
amVjdCgpLCBqc0RPTUdsb2JhbE9iamVjdCk7CisgICAgUmVmPEFib3J0QWxnb3JpdGhtPiBhYm9y
dEFsZ29yaXRobSA9IEpTQWJvcnRBbGdvcml0aG06OmNyZWF0ZShjYWxsRnJhbWUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDEpLmdldE9iamVjdCgpLCBqc0RPTUdsb2JhbE9iamVjdCk7CiAKICAgICBhdXRv
IGFsZ29yaXRobUlkZW50aWZpZXIgPSBBYm9ydFNpZ25hbDo6YWRkQWJvcnRBbGdvcml0aG1Ub1Np
Z25hbChhYm9ydFNpZ25hbC0+cHJvdGVjdGVkV3JhcHBlZCgpLmdldCgpLCBXVEZNb3ZlKGFib3J0
QWxnb3JpdGhtKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0M6OmpzTnVtYmVyKGFs
Z29yaXRobUlkZW50aWZpZXIpKTsKQEAgLTM3NCwxMSArMzc0LDYgQEAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogSlNET01HbG9iYWxPYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dAogICAgIHJldHVybiBudWxscHRyOwogfQogCi1SZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gSlNET01HbG9iYWxPYmplY3Q6OnByb3RlY3RlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdAotewotICAgIHJldHVybiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci19Ci0KIHRlbXBs
YXRlPHR5cGVuYW1lIFZpc2l0b3I+CiB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojp2aXNpdENoaWxk
cmVuSW1wbChKU0NlbGwqIGNlbGwsIFZpc2l0b3ImIHZpc2l0b3IpCiB7CkBAIC00MTAsMTEgKzQw
NSwxMSBAQCB2b2lkIEpTRE9NR2xvYmFsT2JqZWN0Ojpwcm9taXNlUmVqZWN0aW9uVHJhY2tlcihK
U0dsb2JhbE9iamVjdCoganNHbG9iYWxPYmplY3QsCiAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMu
d2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1ob3N0cHJvbWlzZXJlamVj
dGlvbnRyYWNrZXItaW1wbGVtZW50YXRpb24KIAogICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpK
U0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGpzR2xvYmFsT2JqZWN0KTsKLSAgICBSZWZQ
dHIgY29udGV4dCA9IGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
YXV0byogY29udGV4dCA9IGdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47CiAKLSAgICBDaGVja2VkUHRyIHJlamVj
dGVkUHJvbWlzZVRyYWNrZXIgPSBjb250ZXh0LT5lbnN1cmVSZWplY3RlZFByb21pc2VUcmFja2Vy
KCk7CisgICAgYXV0byByZWplY3RlZFByb21pc2VUcmFja2VyID0gY29udGV4dC0+ZW5zdXJlUmVq
ZWN0ZWRQcm9taXNlVHJhY2tlcigpOwogICAgIGlmICghcmVqZWN0ZWRQcm9taXNlVHJhY2tlcikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC00NDgsNyArNDQzLDcgQEAgdm9pZCBKU0RPTUdsb2JhbE9i
amVjdDo6Y2xlYXJET01HdWFyZGVkT2JqZWN0cygpIGNvbnN0CiAKIEpTRnVuY3Rpb24qIEpTRE9N
R2xvYmFsT2JqZWN0OjpjcmVhdGVDcm9zc09yaWdpbkZ1bmN0aW9uKEpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBOYXRpdmVGdW5j
dGlvbiBuYXRpdmVGdW5jdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFJlZiB2bSA9IGxl
eGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIENyb3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxl
eGljYWxHbG9iYWxPYmplY3QsIG5hdGl2ZUZ1bmN0aW9uLnRhZ2dlZFB0cigpKTsKIAogICAgIC8v
IFdlYWtHQ01hcDo6ZW5zdXJlVmFsdWUncyBmdW5jdG9yIG11c3Qgbm90IGludm9rZSBHQyBzaW5j
ZSBHQyBjYW4gbW9kaWZ5IFdlYWtHQ01hcCBpbiB0aGUgbWlkZGxlIG9mIEhhc2hNYXA6OmVuc3Vy
ZS4KQEAgLTQ2Miw3ICs0NTcsNyBAQCBKU0Z1bmN0aW9uKiBKU0RPTUdsb2JhbE9iamVjdDo6Y3Jl
YXRlQ3Jvc3NPcmlnaW5GdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbGV4aWNhbAogR2V0dGVyU2V0
dGVyKiBKU0RPTUdsb2JhbE9iamVjdDo6Y3JlYXRlQ3Jvc3NPcmlnaW5HZXR0ZXJTZXR0ZXIoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIEdldFZhbHVlRnVuYyBnZXR0ZXIsIFB1dFZhbHVlRnVuYyBzZXR0ZXIpCiB7CiAgICAgQVNT
RVJUKGdldHRlciB8fCBzZXR0ZXIpOwotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIENy
b3NzT3JpZ2luTWFwS2V5IGtleSA9IHN0ZDo6bWFrZV9wYWlyKGxleGljYWxHbG9iYWxPYmplY3Qs
IGdldHRlciA/IGdldHRlci50YWdnZWRQdHIoKSA6IHNldHRlci50YWdnZWRQdHIoKSk7CiAKICAg
ICAvLyBXZWFrR0NNYXA6OmVuc3VyZVZhbHVlJ3MgZnVuY3RvciBtdXN0IG5vdCBpbnZva2UgR0Mg
c2luY2UgR0MgY2FuIG1vZGlmeSBXZWFrR0NNYXAgaW4gdGhlIG1pZGRsZSBvZiBIYXNoTWFwOjpl
bnN1cmUuCkBAIC00NzksMTIgKzQ3NCwxMiBAQCBHZXR0ZXJTZXR0ZXIqIEpTRE9NR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVDcm9zc09yaWdpbkdldHRlclNldHRlcihKU0dsb2JhbE9iamVjdCogbAogLy8g
aHR0cHM6Ly93ZWJhc3NlbWJseS5naXRodWIuaW8vc3BlYy93ZWItYXBpL2luZGV4Lmh0bWwjY29t
cGlsZS1hLXBvdGVudGlhbC13ZWJhc3NlbWJseS1yZXNwb25zZQogc3RhdGljIEpTQzo6SlNQcm9t
aXNlKiBoYW5kbGVSZXNwb25zZU9uU3RyZWFtaW5nQWN0aW9uKEpTQzo6SlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHNvdXJjZSwgSlNDOjpXYXNtOjpDb21waWxlck1v
ZGUgY29tcGlsZXJNb2RlLCBKU0M6OkpTT2JqZWN0KiBpbXBvcnRPYmplY3QpCiB7Ci0gICAgUmVm
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBSZWZQdHIgZGVmZXJyZWQgPSBE
ZWZlcnJlZFByb21pc2U6OmNyZWF0ZSgqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZ2xvYmFs
T2JqZWN0KSwgRGVmZXJyZWRQcm9taXNlOjpNb2RlOjpSZXRhaW5Qcm9taXNlT25SZXNvbHZlKTsK
KyAgICBhdXRvIGRlZmVycmVkID0gRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoKmpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCksIERlZmVycmVkUHJvbWlzZTo6TW9kZTo6UmV0
YWluUHJvbWlzZU9uUmVzb2x2ZSk7CiAKLSAgICBSZWZQdHIgaW5wdXRSZXNwb25zZSA9IEpTRmV0
Y2hSZXNwb25zZTo6dG9XcmFwcGVkKHZtLCBzb3VyY2UpOworICAgIGF1dG8gaW5wdXRSZXNwb25z
ZSA9IEpTRmV0Y2hSZXNwb25zZTo6dG9XcmFwcGVkKHZtLCBzb3VyY2UpOwogICAgIGlmICghaW5w
dXRSZXNwb25zZSkgewogICAgICAgICBkZWZlcnJlZC0+cmVqZWN0KEV4Y2VwdGlvbkNvZGU6OlR5
cGVFcnJvciwgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gUmVzcG9uc2Ugb3IgUHJvbWlzZSBm
b3IgUmVzcG9uc2UiX3MpOwogICAgICAgICByZXR1cm4ganNDYXN0PEpTQzo6SlNQcm9taXNlKj4o
ZGVmZXJyZWQtPnByb21pc2UoKSk7CkBAIC01MzMsNyArNTI4LDcgQEAgc3RhdGljIEpTQzo6SlNQ
cm9taXNlKiBoYW5kbGVSZXNwb25zZU9uU3RyZWFtaW5nQWN0aW9uKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2IKIAogICAgIGlmIChpbnB1dFJlc3BvbnNlLT5pc0JvZHlSZWNlaXZlZEJ5Q2h1bmso
KSkgewogICAgICAgICBpbnB1dFJlc3BvbnNlLT5jb25zdW1lQm9keVJlY2VpdmVkQnlDaHVuayhb
Z2xvYmFsT2JqZWN0LCBjb21waWxlciA9IFdURk1vdmUoY29tcGlsZXIpXShhdXRvJiYgcmVzdWx0
KSBtdXRhYmxlIHsKLSAgICAgICAgICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICAgICAgICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgICAgIEpTTG9j
a0hvbGRlciBsb2NrKHZtKTsKIAogICAgICAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkgewpAQCAtNTUzLDcgKzU0OCw3IEBAIHN0YXRpYyBKU0M6OkpTUHJvbWlzZSogaGFuZGxlUmVz
cG9uc2VPblN0cmVhbWluZ0FjdGlvbihKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iCiAgICAgICAg
ICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgICAgICAg
ICAgICAgIGF1dG8gZXJyb3IgPSBjcmVhdGVET01FeGNlcHRpb24oKmdsb2JhbE9iamVjdCwgV1RG
TW92ZShleGNlcHRpb24pKTsKICAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2bS0+aGFzUGVuZGluZ1Rl
cm1pbmF0aW9uRXhjZXB0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodm0uaGFz
UGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjb21w
aWxlci0+Y2FuY2VsKCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
ICAgICB9CkBAIC02MjksNyArNjI0LDcgQEAgSlNDOjpJZGVudGlmaWVyIEpTRE9NR2xvYmFsT2Jq
ZWN0Ojptb2R1bGVMb2FkZXJSZXNvbHZlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2IKIAogSlND
OjpKU0ludGVybmFsUHJvbWlzZSogSlNET01HbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckZldGNo
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVsZUxvYWRlciog
bW9kdWxlTG9hZGVyLCBKU0M6OkpTVmFsdWUgbW9kdWxlS2V5LCBKU0M6OkpTVmFsdWUgcGFyYW1l
dGVycywgSlNDOjpKU1ZhbHVlIHNjcmlwdEZldGNoZXIpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IHRoaXNPYmplY3QgPSBKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVj
dCk7CiAgICAgaWYgKGF1dG8qIGxvYWRlciA9IHNjcmlwdE1vZHVsZUxvYWRlcih0aGlzT2JqZWN0
KSkKQEAgLTY1MCw3ICs2NDUsNyBAQCBKU0M6OkpTVmFsdWUgSlNET01HbG9iYWxPYmplY3Q6Om1v
ZHVsZUxvYWRlckV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbAogCiBKU0M6OkpT
SW50ZXJuYWxQcm9taXNlKiBKU0RPTUdsb2JhbE9iamVjdDo6bW9kdWxlTG9hZGVySW1wb3J0TW9k
dWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVsZUxvYWRl
ciogbW9kdWxlTG9hZGVyLCBKU0M6OkpTU3RyaW5nKiBtb2R1bGVOYW1lLCBKU0M6OkpTVmFsdWUg
cGFyYW1ldGVycywgY29uc3QgSlNDOjpTb3VyY2VPcmlnaW4mIHNvdXJjZU9yaWdpbikKIHsKLSAg
ICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBK
U0RPTUdsb2JhbE9iamVjdCogdGhpc09iamVjdCA9IEpTQzo6anNDYXN0PEpTRE9NR2xvYmFsT2Jq
ZWN0Kj4oZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoYXV0byogbG9hZGVyID0gc2NyaXB0TW9kdWxl
TG9hZGVyKHRoaXNPYmplY3QpKQpAQCAtNjcxLDExICs2NjYsMTEgQEAgSlNDOjpKU09iamVjdCog
SlNET01HbG9iYWxPYmplY3Q6Om1vZHVsZUxvYWRlckNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVz
KEpTQzo6SlMKIAogSlNDOjpKU0dsb2JhbE9iamVjdCogSlNET01HbG9iYWxPYmplY3Q6OmRlcml2
ZVNoYWRvd1JlYWxtR2xvYmFsT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKIHsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBhdXRvIGRvbUdsb2JhbE9iamVjdCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGdsb2JhbE9iamVjdCk7Ci0gICAgUmVmUHRyIGNvbnRleHQgPSBk
b21HbG9iYWxPYmplY3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoYXV0byog
ZG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQuZ2V0KCkpKSB7Cisg
ICAgYXV0byBjb250ZXh0ID0gZG9tR2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gZHluYW1pY0Rvd25jYXN0PERvY3VtZW50Pihj
b250ZXh0KSkgewogICAgICAgICAvLyBTYW1lLW9yaWdpbiBpZnJhbWVzIHByZXNlbnQgYSBkaWZm
aWN1bHQgY2lyY3Vtc3RhbmNlIGJlY2F1c2UgdGhlCiAgICAgICAgIC8vIHNoYWRvdyByZWFsbSBn
bG9iYWwgb2JqZWN0IGNhbm5vdCByZXRhaW4gdGhlIGluY3ViYXRpbmcgcmVhbG0ncwogICAgICAg
ICAvLyBnbG9iYWwgb2JqZWN0ICh0aGF0IHdvdWxkIGJlIGEgcmVmY291bnQgbG9vcCk7IGJ1dCwg
c2FtZS1vcmlnaW4KQEAgLTY5Myw3ICs2ODgsNyBAQCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBKU0RP
TUdsb2JhbE9iamVjdDo6ZGVyaXZlU2hhZG93UmVhbG1HbG9iYWxPYmplY3QoSlNDOjpKU0dsbwog
ICAgICAgICB3aGlsZSAoIWRvY3VtZW50LT5pc1RvcERvY3VtZW50KCkpIHsKICAgICAgICAgICAg
IGF1dG8gY2FuZGlkYXRlRG9jdW1lbnQgPSBkb2N1bWVudC0+cGFyZW50RG9jdW1lbnQoKTsKIAot
ICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGVEb2N1bWVudC0+cHJvdGVjdGVkU2VjdXJpdHlPcmln
aW4oKS0+aXNTYW1lT3JpZ2luRG9tYWluKG9yaWdpbmFsT3JpZ2luKSkKKyAgICAgICAgICAgIGlm
ICghY2FuZGlkYXRlRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkuaXNTYW1lT3JpZ2luRG9tYWlu
KG9yaWdpbmFsT3JpZ2luKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
ZG9jdW1lbnQgPSBjYW5kaWRhdGVEb2N1bWVudDsKQEAgLTczMiwxNSArNzI3LDEwIEBAIFN0cmlu
ZyBKU0RPTUdsb2JhbE9iamVjdDo6YWdlbnRDbHVzdGVySUQoKSBjb25zdAogICAgIHJldHVybiBk
ZWZhdWx0QWdlbnRDbHVzdGVySUQoKTsKIH0KIAotUmVmPERPTVdyYXBwZXJXb3JsZD4gSlNET01H
bG9iYWxPYmplY3Q6OnByb3RlY3RlZFdvcmxkKCkKLXsKLSAgICByZXR1cm4gbV93b3JsZDsKLX0K
LQogSlNET01HbG9iYWxPYmplY3QqIHRvSlNET01HbG9iYWxPYmplY3QoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKICAgICBpZiAoYXV0
byogZG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpKQotICAgICAg
ICByZXR1cm4gdG9KU0xvY2FsRE9NV2luZG93KGRvY3VtZW50LT5wcm90ZWN0ZWRGcmFtZSgpLmdl
dCgpLCB3b3JsZCk7CisgICAgICAgIHJldHVybiB0b0pTTG9jYWxET01XaW5kb3coZG9jdW1lbnQt
PmZyYW1lKCksIHdvcmxkKTsKIAogICAgIGlmIChhdXRvKiBnbG9iYWxTY29wZSA9IGR5bmFtaWNE
b3duY2FzdDxXb3JrZXJPcldvcmtsZXRHbG9iYWxTY29wZT4oY29udGV4dCkpCiAgICAgICAgIHJl
dHVybiBnbG9iYWxTY29wZS0+c2NyaXB0KCktPmdsb2JhbFNjb3BlV3JhcHBlcigpOwpAQCAtNzUx
LDcgKzc0MSw3IEBAIEpTRE9NR2xvYmFsT2JqZWN0KiB0b0pTRE9NR2xvYmFsT2JqZWN0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIERPTVdyYXBwCiAKIHN0YXRpYyBKU0RPTUdsb2Jh
bE9iamVjdCYgY2FsbGVyR2xvYmFsT2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIGJvb2wgc2tpcEZpcnN0RnJh
bWUsIGJvb2wgbG9va1VwRnJvbVZNRW50cnlTY29wZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIGlmIChjYWxsRnJhbWUpIHsKICAgICAgICAgY2xhc3MgR2V0Q2FsbGVyR2xvYmFsT2Jq
ZWN0RnVuY3RvciB7CiAgICAgICAgIHB1YmxpYzoKQEAgLTc5OSw4ICs3ODksOCBAQCBzdGF0aWMg
SlNET01HbG9iYWxPYmplY3QmIGNhbGxlckdsb2JhbE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsTwogICAgIC8vIFNpbmNlIHdlIHB1dCBKU0dsb2JhbE9iamVjdCB0byBW
TUVudHJ5U2NvcGUsIHdlIGNhbiByZXRyaWV2ZSB0aGUgcmlnaHQgZ2xvYmFsT2JqZWN0IGZyb20g
dGhhdC4KICAgICAvLyBGb3IgY2FsbGVyR2xvYmFsT2JqZWN0LCB3ZSBkbyBub3QgY2hlY2sgdm0u
ZW50cnlTY29wZSB0byBrZWVwIGl0IHRoZSBvbGQgYmVoYXZpb3IuCiAgICAgaWYgKGxvb2tVcEZy
b21WTUVudHJ5U2NvcGUpIHsKLSAgICAgICAgaWYgKHZtLT5lbnRyeVNjb3BlKSB7Ci0gICAgICAg
ICAgICBpZiAoYXV0byogcmVzdWx0ID0gdm0tPmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpKQor
ICAgICAgICBpZiAodm0uZW50cnlTY29wZSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHJlc3Vs
dCA9IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biAqanNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4ocmVzdWx0KTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCmluZGV4
IDNmMDk0N2Y5NjgyZi4uMzk0NDc5YzUxMmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0LmgKQEAgLTc4LDcgKzc4LDYgQEAgcHVibGljOgogICAg
IGlubGluZSBET01HdWFyZGVkT2JqZWN0U2V0JiBndWFyZGVkT2JqZWN0cyhOb0xvY2tpbmdOZWNl
c3NhcnlUYWcpOwogCiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpIGNvbnN0OwotICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBwcm90
ZWN0ZWRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7CiAKICAgICAvLyBodHRwczovL3Rj
MzkuZXMvZWNtYTI2Mi8jc2VjLWFnZW50LWNsdXN0ZXJzCiAgICAgU3RyaW5nIGFnZW50Q2x1c3Rl
cklEKCkgY29uc3Q7CkBAIC05MCw3ICs4OSw2IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX1ZJU0lU
X0NISUxEUkVOOwogCiAgICAgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCgpIHsgcmV0dXJuIG1fd29y
bGQuZ2V0KCk7IH0KLSAgICBSZWY8RE9NV3JhcHBlcldvcmxkPiBwcm90ZWN0ZWRXb3JsZCgpOwog
ICAgIGJvb2wgd29ybGRJc05vcm1hbCgpIGNvbnN0IHsgcmV0dXJuIG1fd29ybGRJc05vcm1hbDsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZXb3JsZElzTm9ybWFsKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTRE9NR2xvYmFsT2JqZWN0LCBtX3dvcmxkSXNOb3JtYWwpOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuY3Bw
CmluZGV4IDJjZGU0OWMxMDczNC4uZjMyY2EyNjJmZDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0RPTUd1YXJkZWRPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NR3VhcmRlZE9iamVjdC5jcHAKQEAgLTM2LDEzICszNiwxMiBA
QCBET01HdWFyZGVkT2JqZWN0OjpET01HdWFyZGVkT2JqZWN0KEpTRE9NR2xvYmFsT2JqZWN0JiBn
bG9iYWxPYmplY3QsIEpTQ2VsbCYgZ3VhcgogICAgICwgbV9ndWFyZGVkKCZndWFyZGVkKQogICAg
ICwgbV9nbG9iYWxPYmplY3QoJmdsb2JhbE9iamVjdCkKIHsKLSAgICBSZWYgdm0gPSBnbG9iYWxP
YmplY3Qudm0oKTsKLSAgICBpZiAodm0tPmhlYXAubXV0YXRvclNob3VsZEJlRmVuY2VkKCkpIHsK
KyAgICBpZiAoZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcC5tdXRhdG9yU2hvdWxkQmVGZW5jZWQoKSkg
ewogICAgICAgICBMb2NrZXIgbG9ja2VyIHsgZ2xvYmFsT2JqZWN0LmdjTG9jaygpIH07CiAgICAg
ICAgIGdsb2JhbE9iamVjdC5ndWFyZGVkT2JqZWN0cygpLmFkZCh0aGlzKTsKICAgICB9IGVsc2UK
ICAgICAgICAgZ2xvYmFsT2JqZWN0Lmd1YXJkZWRPYmplY3RzKE5vTG9ja2luZ05lY2Vzc2FyeSku
YWRkKHRoaXMpOwotICAgIHZtLT53cml0ZUJhcnJpZXIoJmdsb2JhbE9iamVjdCwgJmd1YXJkZWQp
OworICAgIGdsb2JhbE9iamVjdC52bSgpLndyaXRlQmFycmllcigmZ2xvYmFsT2JqZWN0LCAmZ3Vh
cmRlZCk7CiB9CiAKIERPTUd1YXJkZWRPYmplY3Q6On5ET01HdWFyZGVkT2JqZWN0KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01JdGVyYXRvci5jcHAKaW5kZXggNDIyMmRiN2Ey
ODVkLi4zNDgxYjE4NzA5NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
SXRlcmF0b3IuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgYWRkVmFsdWVJdGVyYWJsZU1ldGhv
ZHMoSlNDOjpKU0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBwCiAK
ICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gJmdsb2JhbE9i
amVjdDsKICAgICBBU1NFUlQobGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgUmVmIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CiAKICAgICBhdXRvIGNvcHlQcm9wZXJ0eSA9IFsmXSAoY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJiBhcnJheUlkZW50aWZpZXIsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgb3RoZXJJ
ZGVudGlmaWVyLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0gMCkgewogICAgICAgICBKU0M6OkpTVmFs
dWUgdmFsdWUgPSBhcnJheVByb3RvdHlwZS0+Z2V0RGlyZWN0KHZtLCBhcnJheUlkZW50aWZpZXIp
OwpAQCAtNDYsMTAgKzQ2LDEwIEBAIHZvaWQgYWRkVmFsdWVJdGVyYWJsZU1ldGhvZHMoSlNDOjpK
U0dsb2JhbE9iamVjdCYgZ2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBwCiAgICAgICAgIHBy
b3RvdHlwZS5wdXREaXJlY3Qodm0sIG90aGVySWRlbnRpZmllciwgdmFsdWUsIGF0dHJpYnV0ZXMp
OwogICAgIH07CiAKLSAgICBjb3B5UHJvcGVydHkodm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmVudHJpZXNQcml2YXRlTmFtZSgpLCB2bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuZW50cmllc1B1YmxpY05hbWUoKSk7Ci0gICAgY29weVByb3BlcnR5KHZtLT5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5mb3JFYWNoUHJpdmF0ZU5hbWUoKSwgdm0tPnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmZvckVhY2hQdWJsaWNOYW1lKCkpOwotICAgIGNvcHlQcm9w
ZXJ0eSh2bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1ByaXZhdGVOYW1lKCks
IHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpKTsKLSAg
ICBjb3B5UHJvcGVydHkodm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1By
aXZhdGVOYW1lKCksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJs
aWNOYW1lKCkpOworICAgIGNvcHlQcm9wZXJ0eSh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5lbnRyaWVzUHJpdmF0ZU5hbWUoKSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkuZW50cmllc1B1YmxpY05hbWUoKSk7CisgICAgY29weVByb3BlcnR5KHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmZvckVhY2hQcml2YXRlTmFtZSgpLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5mb3JFYWNoUHVibGljTmFtZSgpKTsKKyAgICBjb3B5UHJvcGVydHko
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1ByaXZhdGVOYW1lKCksIHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCkpOworICAgIGNvcHlQ
cm9wZXJ0eSh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQcml2YXRlTmFt
ZSgpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCkp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0
ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUl0ZXJhdG9yLmgKaW5k
ZXggZTkwYmNlZDhiZmM0Li42ZTMzMWY2NjBjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NSXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUl0ZXJhdG9yLmgKQEAgLTIwMyw3ICsyMDMsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBKU0l0ZXJhdG9yLCB0eXBlbmFtZSBJdGVyYXRvclZhbHVlPiBFbmFibGVJZlNldDx0eXBlbmFt
ZSBKU0l0ZQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBKU0l0ZXJhdG9yPiBKU0M6OkpTVmFsdWUgaXRl
cmF0b3JGb3JFYWNoKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
Qzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIHR5cGVuYW1lIEpTSXRlcmF0b3I6OldyYXBwZXImIHRo
aXNPYmplY3QpCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAgSlNDOjpKU1ZhbHVl
IGNhbGxiYWNrID0gY2FsbEZyYW1lLmFyZ3VtZW50KDApOwogICAgIEpTQzo6SlNWYWx1ZSB0aGlz
VmFsdWUgPSBjYWxsRnJhbWUuYXJndW1lbnQoMSk7CkBAIC0yNTAsNyArMjUwLDcgQEAgSlNDOjpK
U1ZhbHVlIEpTRE9NSXRlcmF0b3JCYXNlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+OjpuZXh0
KEpTQzo6SlNHbG9iYWxPYmoKIHRlbXBsYXRlPHR5cGVuYW1lIEpTV3JhcHBlciwgdHlwZW5hbWUg
SXRlcmF0b3JUcmFpdHM+CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTExfQVRUUklC
VVRFUyBKU0RPTUl0ZXJhdG9yUHJvdG90eXBlPEpTV3JhcHBlciwgSXRlcmF0b3JUcmFpdHM+Ojpu
ZXh0KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKIHsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgYXV0byBpdGVyYXRvciA9IEpTQzo6anNEeW5hbWljQ2FzdDxK
U0RPTUl0ZXJhdG9yQmFzZTxKU1dyYXBwZXIsIEl0ZXJhdG9yVHJhaXRzPio+KGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01NYXBMaWtlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTU1hcExpa2UuaApp
bmRleCAxNzA2ZjI1ODBjNDEuLmRjMjVhZmQ5MThhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01NYXBMaWtlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01NYXBMaWtlLmgKQEAgLTkxLDMzICs5MSwzMyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNPYmplY3QmIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFw
KEpTQzo6SgogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBm
b3J3YXJkU2l6ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJU
b0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdN
YXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5zaXplUHJpdmF0ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEF0dHJpYnV0ZUdldHRl
clRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBnZXRBbmRJbml0aWFsaXplQmFja2lu
Z01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkuc2l6ZVByaXZhdGVOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkRW50cmllc1RvTWFwTGlrZShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZy
YW1lLCBXcmFwcGVyQ2xhc3MmIG1hcExpa2UpCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgm
bGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0Jh
Y2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXpl
QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0tPnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0
QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQcml2YXRlTmFtZSgpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEtl
eXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlND
OjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewotICAgIFJl
ZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3
YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFt
ZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlr
ZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHJpdmF0ZU5hbWUoKSk7
CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBy
ZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0
LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmpl
Y3QsIG1hcExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHJpdmF0
ZU5hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4gSlNDOjpKU1Zh
bHVlIGZvcndhcmRWYWx1ZXNUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBtYXBM
aWtlKQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwot
ICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2Jh
bE9iamVjdCwgbWFwTGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1
ZXNQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9i
YWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxl
eGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAo
bGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLnZhbHVlc1ByaXZhdGVOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFw
cGVyQ2xhc3M+IEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xlYXJUb01hcExpa2UoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwg
V3JhcHBlckNsYXNzJiBtYXBMaWtlKQogewotICAgIG1hcExpa2UucHJvdGVjdGVkV3JhcHBlZCgp
LT5jbGVhcigpOwotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9i
YWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEds
b2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5j
bGVhclByaXZhdGVOYW1lKCkpOworICAgIG1hcExpa2Uud3JhcHBlZCgpLmNsZWFyKCk7CisgICAg
YXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4g
Zm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxs
RnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIG1h
cExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jbGVhclByaXZhdGVOYW1l
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIENhbGxi
YWNrPiBKU0M6OkpTVmFsdWUgZm9yd2FyZEZvckVhY2hUb01hcExpa2UoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3Jh
cHBlckNsYXNzJiBtYXBMaWtlLCBDYWxsYmFjayYmKQpAQCAtMTI4LDMzICsxMjgsMzMgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0eXBlbmFtZSBDYWxsYmFjaz4gSlNDOjpKU1Zh
bHVlIGZvcndhcmRGb3JFYWNoVG8KIAogdGVtcGxhdGU8dHlwZW5hbWUgV3JhcHBlckNsYXNzLCB0
eXBlbmFtZSBJdGVtVHlwZT4gSlNDOjpKU1ZhbHVlIGZvcndhcmRHZXRUb01hcExpa2UoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxG
cmFtZSwgV3JhcHBlckNsYXNzJiBtYXBMaWtlLCBJdGVtVHlwZSYmKQogewotICAgIFJlZiB2bSA9
IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVu
Y3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0
QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZt
LT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpKTsKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBm
b3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFw
TGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCkp
OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBl
PiBKU0M6OkpTVmFsdWUgZm9yd2FyZEhhc1RvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYpCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0tPnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmhhc1ByaXZhdGVOYW1lKCkpOworICAgIGF1dG8mIHZtID0gSlNDOjpn
ZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNh
bGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0
aWFsaXplQmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaGFzUHJpdmF0ZU5hbWUoKSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFdyYXBwZXJDbGFzcywgdHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVU
eXBlPiBKU0M6OkpTVmFsdWUgZm9yd2FyZFNldFRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVy
Q2xhc3MmIG1hcExpa2UsIEtleVR5cGUmJiBrZXksIFZhbHVlVHlwZSYmIHZhbHVlKQogewotICAg
IFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIG1hcExpa2Uu
cHJvdGVjdGVkV3JhcHBlZCgpLT5zZXRGcm9tTWFwTGlrZShzdGQ6OmZvcndhcmQ8S2V5VHlwZT4o
a2V5KSwgc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFsdWUpKTsKLSAgICBmb3J3YXJkRnVuY3Rp
b25DYWxsVG9CYWNraW5nTWFwKGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5k
SW5pdGlhbGl6ZUJhY2tpbmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgbWFwTGlrZSksIHZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRv
JiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIG1hcExpa2Uud3Jh
cHBlZCgpLnNldEZyb21NYXBMaWtlKHN0ZDo6Zm9yd2FyZDxLZXlUeXBlPihrZXkpLCBzdGQ6OmZv
cndhcmQ8VmFsdWVUeXBlPih2YWx1ZSkpOworICAgIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdNYXAobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSk7CiAgICAgcmV0dXJuICZtYXBMaWtlOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPiBK
U0M6OkpTVmFsdWUgZm9yd2FyZERlbGV0ZVRvTWFwTGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBXcmFwcGVyQ2xh
c3MmIG1hcExpa2UsIEl0ZW1UeXBlJiYgaXRlbSkKIHsKLSAgICBSZWYgdm0gPSBKU0M6OmdldFZN
KCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8mIGJhY2tpbmdNYXAgPSBnZXRBbmRJbml0aWFsaXpl
QmFja2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtYXBMaWtlKTsKIAotICAgIGF1dG8gaXNE
ZWxldGVkID0gbWFwTGlrZS5wcm90ZWN0ZWRXcmFwcGVkKCktPnJlbW92ZShzdGQ6OmZvcndhcmQ8
SXRlbVR5cGU+KGl0ZW0pKTsKKyAgICBhdXRvIGlzRGVsZXRlZCA9IG1hcExpa2Uud3JhcHBlZCgp
LnJlbW92ZShzdGQ6OmZvcndhcmQ8SXRlbVR5cGU+KGl0ZW0pKTsKICAgICBVTlVTRURfUEFSQU0o
aXNEZWxldGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFj
a2luZ01hcChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGJhY2tpbmdNYXAsIHZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5kZWxldGVQcml2YXRlTmFtZSgpKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdNYXAobGV4aWNhbEdsb2Jh
bE9iamVjdCwgY2FsbEZyYW1lLCBiYWNraW5nTWFwLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5kZWxldGVQcml2YXRlTmFtZSgpKTsKIAogICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuYXNCb29sZWFuKCkgPT0gaXNEZWxldGVkKTsKICAgICByZXR1cm4gcmVzdWx0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaWNyb3Rhc2suY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01NaWNyb3Rhc2suY3BwCmluZGV4IDhk
NDY4M2FlMzAyMS4uMTM4ZDUwNmJiNDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTU1pY3JvdGFzay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNET01NaWNyb3Rhc2suY3BwCkBAIC01OCwxNCArNTgsMTQgQEAgUmVmPE1pY3JvdGFzaz4g
Y3JlYXRlSlNET01NaWNyb3Rhc2soVk0mIHZtLCBKU09iamVjdCogam9iKQogCiB2b2lkIEpTRE9N
TWljcm90YXNrOjpydW4oSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKLSAgICBSZWYg
dm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKIAogICAgIEpTT2Jq
ZWN0KiBqb2IgPSBtX2pvYi5nZXQoKTsKIAogCiAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVj
dCA9IGpvYi0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmUHRyIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihs
ZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICgh
Y29udGV4dCB8fCBjb250ZXh0LT5hY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkgfHwgY29u
dGV4dC0+YWN0aXZlRE9NT2JqZWN0c0FyZVN0b3BwZWQoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC04NCw3ICs4NCw3IEBAIHZvaWQgSlNET01NaWNyb3Rhc2s6OnJ1bihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgIH0KIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiByZXR1
cm5lZEV4Y2VwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKExJS0VMWSghdm0tPmhhc1BlbmRpbmdU
ZXJtaW5hdGlvbkV4Y2VwdGlvbigpKSkgeworICAgIGlmIChMSUtFTFkoIXZtLmhhc1BlbmRpbmdU
ZXJtaW5hdGlvbkV4Y2VwdGlvbigpKSkgewogICAgICAgICBKU0V4ZWNTdGF0ZTo6cHJvZmlsZWRD
YWxsKGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvZmlsaW5nUmVhc29uOjpNaWNyb3Rhc2ss
IGpvYiwgY2FsbERhdGEsIGpzVW5kZWZpbmVkKCksIEFyZ0xpc3QoKSwgcmV0dXJuZWRFeGNlcHRp
b24pOwogICAgICAgICBpZiAocmV0dXJuZWRFeGNlcHRpb24pCiAgICAgICAgICAgICByZXBvcnRF
eGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgcmV0dXJuZWRFeGNlcHRpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01PcGVyYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NT3BlcmF0aW9uLmgKaW5kZXggYjUyZDE0NDBkMTFk
Li5jM2Y2ZDA0NTFjZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NT3BlcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01PcGVy
YXRpb24uaApAQCAtNDgsOCArNDgsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8T3BlcmF0aW9u
IG9wZXJhdGlvbiwgQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3Igc2hvdWxkVGhyb3cgPSBDYXN0ZWRU
aGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CiAgICAgc3RhdGljIEpTQzo6RW5jb2RlZEpTVmFsdWUg
Y2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxG
cmFtZSYgY2FsbEZyYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25OYW1lKQogICAgIHsKLSAgICAg
ICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBhdXRvIHRo
cm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpKTsKICAgICAgICAgCiAgICAgICAgIGF1dG8qIHRoaXNPYmplY3QgPSBjYXN0KGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CiAgICAgICAgIGlmIGNvbnN0ZXhwciAoc2hvdWxk
VGhyb3cgIT0gQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3I6OkFzc2VydCkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJvbWlzZS5jcHAKaW5kZXggYWJjNTFjNGZiZmI2Li40NWVj
NWIzMmY1YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlLmNw
cApAQCAtNDYsNyArNDYsNyBAQCBhdXRvIERPTVByb21pc2U6OndoZW5TZXR0bGVkKHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKSAtPiBJc0NhbGxiYWNrUmVnaQogYXV0byBET01Qcm9t
aXNlOjp3aGVuUHJvbWlzZUlzU2V0dGxlZChKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU0M6OkpTT2JqZWN0KiBwcm9taXNlLCBGdW5jdGlvbjx2b2lkKCk+JiYgY2FsbGJhY2spIC0+
IElzQ2FsbGJhY2tSZWdpc3RlcmVkCiB7CiAgICAgYXV0byYgbGV4aWNhbEdsb2JhbE9iamVjdCA9
ICpnbG9iYWxPYmplY3Q7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwor
ICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKICAgICBhdXRvKiBoYW5kbGVyID0gSlNDOjpKU05hdGl2ZVN0ZEZ1bmN0aW9u
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMSwgU3RyaW5nIHsgfSwgW2NhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayldIChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopIG11dGFibGUgewog
ICAgICAgICBjYWxsYmFjaygpOwpAQCAtNTQsMTAgKzU0LDEwIEBAIGF1dG8gRE9NUHJvbWlzZTo6
d2hlblByb21pc2VJc1NldHRsZWQoSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpKU09iCiAgICAgfSk7CiAKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7Ci0gICAgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcml2YXRlTmFtZSA9IHZtLT5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS50aGVuUHJpdmF0ZU5hbWUoKTsKKyAgICBjb25zdCBKU0M6
OklkZW50aWZpZXImIHByaXZhdGVOYW1lID0gdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkudGhlblByaXZhdGVOYW1lKCk7CiAgICAgYXV0byB0aGVuRnVuY3Rpb24gPSBwcm9taXNlLT5n
ZXQoJmxleGljYWxHbG9iYWxPYmplY3QsIHByaXZhdGVOYW1lKTsKIAotICAgIEVYQ0VQVElPTl9B
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHZtLT5oYXNQZW5kaW5nVGVybWluYXRpb25FeGNl
cHRpb24oKSk7CisgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkgfHwgdm0u
aGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOwogICAgIGlmIChzY29wZS5leGNlcHRp
b24oKSkKICAgICAgICAgcmV0dXJuIElzQ2FsbGJhY2tSZWdpc3RlcmVkOjpObzsKIApAQCAtNzIs
NyArNzIsNyBAQCBhdXRvIERPTVByb21pc2U6OndoZW5Qcm9taXNlSXNTZXR0bGVkKEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6SlNPYgogICAgIEFTU0VSVChjYWxsRGF0YS50
eXBlICE9IEpTQzo6Q2FsbERhdGE6OlR5cGU6Ok5vbmUpOwogICAgIGNhbGwoJmxleGljYWxHbG9i
YWxPYmplY3QsIHRoZW5GdW5jdGlvbiwgY2FsbERhdGEsIHByb21pc2UsIGFyZ3VtZW50cyk7CiAK
LSAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCB2bS0+aGFzUGVuZGlu
Z1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOworICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4
Y2VwdGlvbigpIHx8IHZtLmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigpKTsKICAgICBy
ZXR1cm4gc2NvcGUuZXhjZXB0aW9uKCkgPyBJc0NhbGxiYWNrUmVnaXN0ZXJlZDo6Tm8gOiBJc0Nh
bGxiYWNrUmVnaXN0ZXJlZDo6WWVzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5jcHAKaW5kZXggNTM2MjhiYWFlYmY5Li4zNDZk
MWUwMGQ4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NUHJv
bWlzZURlZmVycmVkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVBy
b21pc2VEZWZlcnJlZC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6
OmNhbGxGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVzb2x2
ZU0KICAgICBpZiAoc2hvdWxkSWdub3JlUmVxdWVzdFRvRnVsZmlsbCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgSlNDOjpW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfQ0FUQ0hfU0NPUEUodm0pOwogCiAgICAgYXV0byBoYW5kbGVFeGNlcHRpb25JZk5lZWRlZCA9
IG1ha2VTY29wZUV4aXQoWyZdIHsKQEAgLTY3LDkgKzY3LDkgQEAgdm9pZCBEZWZlcnJlZFByb21p
c2U6OmNhbGxGdW5jdGlvbihKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVz
b2x2ZU0KICAgICB9KTsKIAogICAgIGlmIChhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkg
fHwgIVNjcmlwdERpc2FsbG93ZWRTY29wZTo6aXNTY3JpcHRBbGxvd2VkSW5NYWluVGhyZWFkKCkp
IHsKLSAgICAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duLCBTaG91bGRTdHJvbmdEZXN0cnVj
dG9yR3JhYkxvY2s6Olllcz4gc3Ryb25nUmVzb2x1dGlvbih2bSwgcmVzb2x1dGlvbik7CisgICAg
ICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93biwgU2hvdWxkU3Ryb25nRGVzdHJ1Y3RvckdyYWJM
b2NrOjpZZXM+IHN0cm9uZ1Jlc29sdXRpb24obGV4aWNhbEdsb2JhbE9iamVjdC52bSgpLCByZXNv
bHV0aW9uKTsKICAgICAgICAgQVNTRVJUKCFhY3RpdmVET01PYmplY3RzQXJlU3VzcGVuZGVkKCkg
fHwgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudExvb3AoKS5pc1N1c3BlbmRlZCgpKTsK
LSAgICAgICAgcHJvdGVjdGVkU2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5jaGVja2VkRXZlbnRM
b29wKCktPnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbdGhpcywgcHJvdGVjdGVk
VGhpcyA9IFJlZiB7ICp0aGlzIH0sIG1vZGUsIHN0cm9uZ1Jlc29sdXRpb24gPSBXVEZNb3ZlKHN0
cm9uZ1Jlc29sdXRpb24pXSgpIG11dGFibGUgeworICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIG1vZGUsIHN0cm9uZ1Jlc29sdXRpb24g
PSBXVEZNb3ZlKHN0cm9uZ1Jlc29sdXRpb24pXSgpIG11dGFibGUgewogICAgICAgICAgICAgaWYg
KHNob3VsZElnbm9yZVJlcXVlc3RUb0Z1bGZpbGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIERlZmVycmVkUHJvbWlzZTo6d2hlblNldHRsZWQo
RnVuY3Rpb248dm9pZCgpPiYmIGNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
YWN0aXZlRE9NT2JqZWN0c0FyZVN1c3BlbmRlZCgpKSB7Ci0gICAgICAgIHByb3RlY3RlZFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+Y2hlY2tlZEV2ZW50TG9vcCgpLT5xdWV1ZVRhc2soVGFza1Nv
dXJjZTo6TmV0d29ya2luZywgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBSZWYgeyAqdGhpcyB9LCBj
YWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSgpIG11dGFibGUgeworICAgICAgICBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCktPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3
b3JraW5nLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IFJlZiB7ICp0aGlzIH0sIGNhbGxiYWNrID0g
V1RGTW92ZShjYWxsYmFjayldKCkgbXV0YWJsZSB7CiAgICAgICAgICAgICB3aGVuU2V0dGxlZChX
VEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CkBAIC0xMTIs
NyArMTEyLDcgQEAgdm9pZCBEZWZlcnJlZFByb21pc2U6OndoZW5TZXR0bGVkKEZ1bmN0aW9uPHZv
aWQoKT4mJiBjYWxsYmFjaykKIAogICAgIHsKICAgICAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0g
dGhpcy0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICAgICAgYXV0byYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICAgICAgRE9NUHJvbWlzZTo6d2hlblByb21pc2VJc1NldHRsZWQo
Z2xvYmFsT2JqZWN0LCBkZWZlcnJlZCgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CkBAIC0xNDksMTEg
KzE0OSwxMSBAQCB2b2lkIERlZmVycmVkUHJvbWlzZTo6cmVqZWN0KEV4Y2VwdGlvbiBleGNlcHRp
b24sIFJlamVjdEFzSGFuZGxlZCByZWplY3RBc0hhbmRsZQogICAgIGlmIChzaG91bGRJZ25vcmVS
ZXF1ZXN0VG9GdWxmaWxsKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZiBwcm90ZWN0ZWRU
aGlzIHsgKnRoaXMgfTsKKyAgICBSZWYgcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAgICAgQVNTRVJU
KGRlZmVycmVkKCkpOwogICAgIEFTU0VSVChtX2dsb2JhbE9iamVjdCk7CiAgICAgYXV0byYgbGV4
aWNhbEdsb2JhbE9iamVjdCA9ICptX2dsb2JhbE9iamVjdDsKLSAgICBSZWYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKQEAgLTE4NCwxMSArMTg0LDExIEBAIHZvaWQg
RGVmZXJyZWRQcm9taXNlOjpyZWplY3QoRXhjZXB0aW9uQ29kZSBlYywgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBSZWplY3RBc0hhCiAgICAgaWYgKHNob3VsZElnbm9yZVJlcXVlc3RUb0Z1bGZpbGwo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmIHByb3RlY3RlZFRoaXMgeyAqdGhpcyB9Owor
ICAgIFJlZiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKICAgICBBU1NFUlQoZGVmZXJyZWQoKSk7CiAg
ICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBhdXRvJiBsZXhpY2FsR2xvYmFsT2JqZWN0
ID0gKm1fZ2xvYmFsT2JqZWN0OwotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKKyAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBKU0M6
OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKIApAQCAtMjIzLDcgKzIyMyw3IEBAIHZvaWQgRGVmZXJyZWRQcm9taXNlOjpy
ZWplY3QoY29uc3QgSlNDOjpQcml2YXRlTmFtZSYgcHJpdmF0ZU5hbWUsIFJlamVjdEFzSGFuZGxl
CiAgICAgQVNTRVJUKG1fZ2xvYmFsT2JqZWN0KTsKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2JqZWN0ID0gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKGxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJlamVjdCgqbGV4aWNh
bEdsb2JhbE9iamVjdCwgSlNDOjpTeW1ib2w6OmNyZWF0ZShSZWYgeyBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LT52bSgpIH0sIHByaXZhdGVOYW1lLnVpZCgpKSwgcmVqZWN0QXNIYW5kbGVkKTsKKyAgICBy
ZWplY3QoKmxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6U3ltYm9sOjpjcmVhdGUobGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKSwgcHJpdmF0ZU5hbWUudWlkKCkpLCByZWplY3RBc0hhbmRsZWQpOwog
fQogCiB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVj
dCwgSlNQcm9taXNlJiBwcm9taXNlLCBKU0M6OkNhdGNoU2NvcGUmIGNhdGNoU2NvcGUpCkBAIC0y
NDMsMTEgKzI0MywxMSBAQCB2b2lkIHJlamVjdFByb21pc2VXaXRoRXhjZXB0aW9uSWZBbnkoSlND
OjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSgogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBjcmVhdGVSZWplY3RlZFByb21pc2VXaXRoVHlwZUVycm9yKEpTQzo6SlNHbG9iYWxPYmpl
Y3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBSZWpl
Y3RlZFByb21pc2VXaXRoVHlwZUVycm9yQ2F1c2UgY2F1c2UpCiB7CiAgICAgYXV0byYgZ2xvYmFs
T2JqZWN0ID0gbGV4aWNhbEdsb2JhbE9iamVjdDsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byBwcm9t
aXNlQ29uc3RydWN0b3IgPSBnbG9iYWxPYmplY3QucHJvbWlzZUNvbnN0cnVjdG9yKCk7Ci0gICAg
YXV0byByZWplY3RGdW5jdGlvbiA9IHByb21pc2VDb25zdHJ1Y3Rvci0+Z2V0KCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCB2bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkucmVqZWN0UHJpdmF0
ZU5hbWUoKSk7CisgICAgYXV0byByZWplY3RGdW5jdGlvbiA9IHByb21pc2VDb25zdHJ1Y3Rvci0+
Z2V0KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5yZWplY3RQcml2YXRlTmFtZSgpKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOwogICAgIGF1dG8qIHJlamVjdGlvblZhbHVlID0gc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5j
ZSo+KGNyZWF0ZVR5cGVFcnJvcigmbGV4aWNhbEdsb2JhbE9iamVjdCwgZXJyb3JNZXNzYWdlKSk7
CiAgICAgaWYgKGNhdXNlID09IFJlamVjdGVkUHJvbWlzZVdpdGhUeXBlRXJyb3JDYXVzZTo6TmF0
aXZlR2V0dGVyKQpAQCAtMjk0LDIxICsyOTQsMTkgQEAgdm9pZCBmdWxmaWxsUHJvbWlzZVdpdGhB
cnJheUJ1ZmZlcihSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UsIGNvbnN0IHZvaWQqIGQK
IAogYm9vbCBEZWZlcnJlZFByb21pc2U6OmhhbmRsZVRlcm1pbmF0aW9uRXhjZXB0aW9uSWZOZWVk
ZWQoQ2F0Y2hTY29wZSYgc2NvcGUsIEpTRE9NR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0KQogewotICAgIFJlZlB0ciBnbG9iYWxTY29wZSA9IGR5bmFtaWNEb3duY2FzdDxXb3JrZXJH
bG9iYWxTY29wZT4oKmxleGljYWxHbG9iYWxPYmplY3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKLSAgICBpZiAoIWdsb2JhbFNjb3BlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBh
dXRvKiBleGNlcHRpb24gPSBzY29wZS5leGNlcHRpb24oKTsKLSAgICBSZWYgdm0gPSBzY29wZS52
bSgpOwotCi0gICAgQ2hlY2tlZFB0ciBzY3JpcHRDb250cm9sbGVyID0gZ2xvYmFsU2NvcGUtPnNj
cmlwdCgpOwotICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2VwdGlvbiA9IHZtLT5pc1Rlcm1p
bmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0gICAgaWYgKHRlcm1pbmF0b3JDYXVzZWRFeGNl
cHRpb24gfHwgKHNjcmlwdENvbnRyb2xsZXIgJiYgc2NyaXB0Q29udHJvbGxlci0+aXNUZXJtaW5h
dGluZ0V4ZWN1dGlvbigpKSkgewotICAgICAgICBzY3JpcHRDb250cm9sbGVyLT5mb3JiaWRFeGVj
dXRpb24oKTsKLSAgICAgICAgbV9uZWVkc0Fib3J0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgVk0mIHZtID0gc2NvcGUudm0oKTsKKworICAgIGF1dG8mIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSAqbGV4aWNhbEdsb2JhbE9iamVjdC5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgaWYgKGF1dG8qIGdsb2JhbFNjb3BlID0gZHluYW1pY0Rvd25jYXN0PFdvcmtlckdsb2Jh
bFNjb3BlPihzY3JpcHRFeGVjdXRpb25Db250ZXh0KSkgeworICAgICAgICBhdXRvKiBzY3JpcHRD
b250cm9sbGVyID0gZ2xvYmFsU2NvcGUtPnNjcmlwdCgpOworICAgICAgICBib29sIHRlcm1pbmF0
b3JDYXVzZWRFeGNlcHRpb24gPSB2bS5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9uKGV4Y2VwdGlvbik7
CisgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IChzY3JpcHRDb250cm9s
bGVyICYmIHNjcmlwdENvbnRyb2xsZXItPmlzVGVybWluYXRpbmdFeGVjdXRpb24oKSkpIHsKKyAg
ICAgICAgICAgIHNjcmlwdENvbnRyb2xsZXItPmZvcmJpZEV4ZWN1dGlvbigpOworICAgICAgICAg
ICAgbV9uZWVkc0Fib3J0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVByb21pc2VEZWZlcnJlZC5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Qcm9taXNlRGVmZXJyZWQuaAppbmRleCA3MGEzMGZiNDU2MTku
LjU1MDg1NWZlNDhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNE
T01Qcm9taXNlRGVmZXJyZWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVByb21pc2VEZWZlcnJlZC5oCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKGRlZmVycmVkKCkpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0KCkpOwogICAgICAg
ICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0
KCk7Ci0gICAgICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAg
IGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAgICAgSlNDOjpKU0xv
Y2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hf
U0NPUEUodm0pOwogICAgICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTPElETFR5cGU+KCpsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBJRExU
eXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOwpAQCAtMTE2LDcgKzExNiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgQVNTRVJUKGRlZmVycmVkKCkpOwogICAgICAgICBBU1NFUlQoZ2xvYmFsT2JqZWN0
KCkpOwogICAgICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0g
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICAg
ICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKHZtKTsKICAgICAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgICAgICBhdXRvIGpzVmFsdWUgPSB0b0pTTmV3bHlD
cmVhdGVkPElETFR5cGU+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqZ2xvYmFsT2JqZWN0KCksIHN0
ZDo6Zm9yd2FyZDx0eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSkpOwpAQCAt
MTMzLDEwICsxMzMsMTAgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQoZGVmZXJyZWQoKSk7CiAg
ICAgICAgIEFTU0VSVChnbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIGF1dG8qIGxleGljYWxHbG9i
YWxPYmplY3QgPSBnbG9iYWxPYmplY3QoKTsKLSAgICAgICAgUmVmIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICAgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52
bSgpOwogICAgICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIodm0pOwogICAgICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7Ci0gICAgICAgIGF1dG8ganNWYWx1ZSA9
IHRvSlNOZXdseUNyZWF0ZWQ8SURMVHlwZT4oKmxleGljYWxHbG9iYWxPYmplY3QsICpnbG9iYWxP
YmplY3QoKSwgY3JlYXRlVmFsdWUoKmdsb2JhbE9iamVjdCgpLT5wcm90ZWN0ZWRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpKTsKKyAgICAgICAgYXV0byBqc1ZhbHVlID0gdG9KU05ld2x5Q3JlYXRl
ZDxJRExUeXBlPigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCgpLCBjcmVhdGVW
YWx1ZSgqZ2xvYmFsT2JqZWN0KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkpOwogICAgICAg
ICBERUZFUlJFRF9QUk9NSVNFX0hBTkRMRV9BTkRfUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
bGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgICAgIHJlc29sdmUoKmxleGljYWxHbG9iYWxPYmpl
Y3QsIGpzVmFsdWUpOwogICAgIH0KQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgICAg
IEFTU0VSVChkZWZlcnJlZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCgpKTsKICAg
ICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9i
amVjdCgpOwotICAgICAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAg
ICAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6
SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NB
VENIX1NDT1BFKHZtKTsKICAgICAgICAgYXV0byBqc1ZhbHVlID0gdG9KUzxJRExUeXBlPigqbGV4
aWNhbEdsb2JhbE9iamVjdCwgKmdsb2JhbE9iamVjdCgpLCBzdGQ6OmZvcndhcmQ8dHlwZW5hbWUg
SURMVHlwZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKTsKQEAgLTE3Myw3ICsxNzMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChkZWZlcnJlZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9i
amVjdCgpKTsKICAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVj
dCgpOwotICAgICAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgICAg
ICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2tlcih2bSk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENI
X1NDT1BFKHZtKTsKICAgICAgICAgYXV0byBqc1ZhbHVlID0gY2FsbGJhY2soKmdsb2JhbE9iamVj
dCgpKTsKQEAgLTE5MCw3ICsxOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChkZWZlcnJl
ZCgpKTsKICAgICAgICAgQVNTRVJUKGdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgYXV0byogbGV4
aWNhbEdsb2JhbE9iamVjdCA9IGdsb2JhbE9iamVjdCgpOwotICAgICAgICBSZWYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBKU0M6OlZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2tlcih2bSk7CiAg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgYXV0
byBqc1ZhbHVlID0gY2FsbGJhY2soKmdsb2JhbE9iamVjdCgpKTsKQEAgLTI2MiwzMSArMjYyLDI5
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVqZWN0KFJlamVjdEFzSGFuZGxlZCByZWplY3RBc0hh
bmRsZWQgPSBSZWplY3RBc0hhbmRsZWQ6Ok5vKQogICAgIHsKLSAgICAgICAgcHJvdGVjdGVkUHJv
bWlzZSgpLT5yZWplY3QocmVqZWN0QXNIYW5kbGVkKTsKKyAgICAgICAgbV9wcm9taXNlLT5yZWpl
Y3QocmVqZWN0QXNIYW5kbGVkKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBF
cnJvclR5cGU+IAogICAgIHZvaWQgcmVqZWN0KEVycm9yVHlwZSYmLi4uIGVycm9yKQogICAgIHsK
LSAgICAgICAgcHJvdGVjdGVkUHJvbWlzZSgpLT5yZWplY3Qoc3RkOjpmb3J3YXJkPEVycm9yVHlw
ZT4oZXJyb3IpLi4uKTsKKyAgICAgICAgbV9wcm9taXNlLT5yZWplY3Qoc3RkOjpmb3J3YXJkPEVy
cm9yVHlwZT4oZXJyb3IpLi4uKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJRExU
eXBlPgogICAgIHZvaWQgcmVqZWN0VHlwZSh0eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBl
IHZhbHVlLCBSZWplY3RBc0hhbmRsZWQgcmVqZWN0QXNIYW5kbGVkID0gUmVqZWN0QXNIYW5kbGVk
OjpObykKICAgICB7Ci0gICAgICAgIHByb3RlY3RlZFByb21pc2UoKS0+cmVqZWN0PElETFR5cGU+
KHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSksIHJl
amVjdEFzSGFuZGxlZCk7CisgICAgICAgIG1fcHJvbWlzZS0+cmVqZWN0PElETFR5cGU+KHN0ZDo6
Zm9yd2FyZDx0eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBlPih2YWx1ZSksIHJlamVjdEFz
SGFuZGxlZCk7CiAgICAgfQogCiAgICAgSlNDOjpKU1ZhbHVlIHByb21pc2UoKSBjb25zdCB7IHJl
dHVybiBtX3Byb21pc2UtPnByb21pc2UoKTsgfTsKIAogICAgIHZvaWQgd2hlblNldHRsZWQoRnVu
Y3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgcHJvdGVjdGVkUHJvbWlz
ZSgpLT53aGVuU2V0dGxlZChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIG1fcHJvbWlzZS0+
d2hlblNldHRsZWQoV1RGTW92ZShmdW5jdGlvbikpOwogICAgIH0KIAogcHJvdGVjdGVkOgotICAg
IFJlZjxEZWZlcnJlZFByb21pc2U+IHByb3RlY3RlZFByb21pc2UoKSBjb25zdCB7IHJldHVybiBt
X3Byb21pc2U7IH0KLQogICAgIFJlZjxEZWZlcnJlZFByb21pc2U+IG1fcHJvbWlzZTsKIH07CiAK
QEAgLTMwMCw3ICsyOTgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc29sdmUodHlwZW5hbWUg
SURMVHlwZTo6UGFyYW1ldGVyVHlwZSB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHByb3RlY3RlZFBy
b21pc2UoKS0+dGVtcGxhdGUgcmVzb2x2ZTxJRExUeXBlPihzdGQ6OmZvcndhcmQ8dHlwZW5hbWUg
SURMVHlwZTo6UGFyYW1ldGVyVHlwZT4odmFsdWUpKTsKKyAgICAgICAgbV9wcm9taXNlLT5yZXNv
bHZlPElETFR5cGU+KHN0ZDo6Zm9yd2FyZDx0eXBlbmFtZSBJRExUeXBlOjpQYXJhbWV0ZXJUeXBl
Pih2YWx1ZSkpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CkBAIC0zMjMsNyAr
MzIxLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNvbHZlKCkKICAgICB7IAotICAgICAgICBw
cm90ZWN0ZWRQcm9taXNlKCktPnJlc29sdmUoKTsKKyAgICAgICAgbV9wcm9taXNlLT5yZXNvbHZl
KCk7CiAgICAgfQogCiAgICAgdm9pZCBzZXR0bGUoRXhjZXB0aW9uT3I8dm9pZD4mJiByZXN1bHQp
CkBAIC0zNDksNyArMzQ3LDcgQEAgdXNpbmcgUHJvbWlzZUZ1bmN0aW9uID0gdm9pZChKU0M6OkpT
R2xvYmFsT2JqZWN0JiwgSlNDOjpDYWxsRnJhbWUmLCBSZWY8RGVmZXJyZWQKIHRlbXBsYXRlPFBy
b21pc2VGdW5jdGlvbiBwcm9taXNlRnVuY3Rpb24+CiBpbmxpbmUgSlNDOjpKU1ZhbHVlIGNhbGxQ
cm9taXNlRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICBSZWYgdm0gPSBKU0M6OmdldFZNKCZs
ZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NP
UEUodm0pOwogCiAgICAgYXV0byYgZ2xvYmFsT2JqZWN0ID0gKkpTQzo6anNTZWN1cmVDYXN0PEpT
RE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpOwpAQCAtMzY4LDcgKzM2Niw3
IEBAIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0CiB0ZW1wbGF0ZTx0eXBlbmFtZSBQcm9taXNlRnVu
Y3Rvcj4KIGlubGluZSBKU0M6OkpTVmFsdWUgY2FsbFByb21pc2VGdW5jdGlvbihKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1l
LCBQcm9taXNlRnVuY3RvciBmdW5jdG9yKQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBjYXRjaFNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09Q
RSh2bSk7CiAKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqSlNDOjpqc1NlY3VyZUNhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCk7CkBAIC0zODksNyArMzg3LDcg
QEAgdXNpbmcgUHJvbWlzZVBhaXJGdW5jdGlvbiA9IEpTQzo6RW5jb2RlZEpTVmFsdWUoSlNDOjpK
U0dsb2JhbE9iamVjdCYsIEpTQzo6Q2FsbEYKIHRlbXBsYXRlPHR5cGVuYW1lIFByb21pc2VQYWly
RnVuY3Rvcj4KIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGNhbGxQcm9taXNlUGFpckZ1bmN0
aW9uKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZy
YW1lJiBjYWxsRnJhbWUsIFByb21pc2VQYWlyRnVuY3RvciBmdW5jdG9yKQogewotICAgIFJlZiB2
bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIEpTQzo6Vk0mIHZtID0g
SlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBjYXRjaFNjb3BlID0g
REVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqSlND
Ojpqc1NlY3VyZUNhc3Q8SlNET01HbG9iYWxPYmplY3QqPigmbGV4aWNhbEdsb2JhbE9iamVjdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVNldExpa2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01TZXRMaWtlLmNwcAppbmRleCAxM2I5
OGZiMzA0YzcuLjQ3YjQ0MWRhNjU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01TZXRMaWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTVNldExpa2UuY3BwCkBAIC00Miw5ICs0MiwxMCBAQCB2b2lkIERPTVNldEFkYXB0ZXI6OmNs
ZWFyKCkKIAogc3RkOjpwYWlyPGJvb2wsIHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8SlNDOjpKU09i
amVjdD4+IGdldEJhY2tpbmdTZXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU09iamVjdCYgc2V0TGlrZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7
CiAgICAgYXV0byBiYWNraW5nU2V0ID0gc2V0TGlrZS5nZXREaXJlY3Qodm0sIGJ1aWx0aW5OYW1l
cyh2bSkuYmFja2luZ1NldFByaXZhdGVOYW1lKCkpOwogICAgIGlmICghYmFja2luZ1NldCkgewor
ICAgICAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICAgICAgYmFj
a2luZ1NldCA9IEpTQzo6SlNTZXQ6OmNyZWF0ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdC5zZXRT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgIHNldExpa2UucHV0RGlyZWN0KHZtLCBidWlsdGluTmFtZXMo
dm0pLmJhY2tpbmdTZXRQcml2YXRlTmFtZSgpLCBiYWNraW5nU2V0LCBlbnVtVG9VbmRlcmx5aW5n
VHlwZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkpOwogICAgICAgICByZXR1cm4g
eyB0cnVlLCAqSlNDOjphc09iamVjdChiYWNraW5nU2V0KSB9OwpAQCAtNTQsOCArNTUsOCBAQCBz
dGQ6OnBhaXI8Ym9vbCwgc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxKU0M6OkpTT2JqZWN0Pj4gZ2V0
QmFja2luZ1NldChKU0M6OkpTR2xvYgogCiB2b2lkIGNsZWFyQmFja2luZ1NldChKU0M6OkpTR2xv
YmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkpTT2JqZWN0JiBiYWNraW5nU2V0
KQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IGF1dG8gZnVuY3Rpb24gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LmpzU2V0UHJvdG90eXBlKCktPmdl
dERpcmVjdCh2bSwgdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNsZWFyUHJpdmF0
ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0
KTsKKyAgICBhdXRvIGZ1bmN0aW9uID0gbGV4aWNhbEdsb2JhbE9iamVjdC5qc1NldFByb3RvdHlw
ZSgpLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNsZWFy
UHJpdmF0ZU5hbWUoKSk7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKIAogICAgIGF1dG8gY2FsbERh
dGEgPSBKU0M6OmdldENhbGxEYXRhKGZ1bmN0aW9uKTsKQEAgLTY2LDggKzY3LDggQEAgdm9pZCBj
bGVhckJhY2tpbmdTZXQoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU09iamVjdCYgYmEKIAogdm9pZCBhZGRUb0JhY2tpbmdTZXQoSlNDOjpKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU09iamVjdCYgYmFja2luZ1NldCwgSlND
OjpKU1ZhbHVlIGl0ZW0pCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCk7Ci0gICAgYXV0byBmdW5jdGlvbiA9IGxleGljYWxHbG9iYWxPYmplY3QuanNTZXRQ
cm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCB2bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkuYWRkUHJpdmF0ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvIGZ1bmN0aW9uID0gbGV4aWNhbEdsb2JhbE9iamVjdC5q
c1NldFByb3RvdHlwZSgpLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmFkZFByaXZhdGVOYW1lKCkpOwogICAgIEFTU0VSVChmdW5jdGlvbik7CiAKICAgICBh
dXRvIGNhbGxEYXRhID0gSlNDOjpnZXRDYWxsRGF0YShmdW5jdGlvbik7CkBAIC04NSw3ICs4Niw3
IEBAIEpTQzo6SlNWYWx1ZSBmb3J3YXJkQXR0cmlidXRlR2V0dGVyVG9CYWNraW5nU2V0KEpTQzo6
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iCiAKIEpTQzo6SlNWYWx1ZSBmb3J3YXJkRnVuY3Rp
b25DYWxsVG9CYWNraW5nU2V0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6Q2FsbEZyYW1lJiBjYWxsRnJhbWUsIEpTQzo6SlNPYmplY3QmIGJhY2tpbmdTZXQs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKQogewotICAgIFJlZiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRW
TSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBmdW5jdGlvbiA9IGxleGljYWxHbG9i
YWxPYmplY3QuanNTZXRQcm90b3R5cGUoKS0+Z2V0RGlyZWN0KHZtLCBmdW5jdGlvbk5hbWUpOwog
ICAgIEFTU0VSVChmdW5jdGlvbik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NU2V0TGlrZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01T
ZXRMaWtlLmgKaW5kZXggYmYyZGM5MTZkYWI0Li5kOTNiN2FmNjg0YmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRE9NU2V0TGlrZS5oCkBAIC04Niw3ICs4Niw3IEBAIEpTQzo6SlNP
YmplY3QmIGdldEFuZEluaXRpYWxpemVCYWNraW5nU2V0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplCiAgICAgYXV0byBwYWlyID0gZ2V0QmFja2luZ1NldChsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzZXRMaWtlKTsKICAgICBpZiAocGFpci5maXJzdCkgewogICAgICAgICBET01T
ZXRBZGFwdGVyIGFkYXB0ZXIgeyBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwYWlyLnNlY29uZC5nZXQo
KSB9OwotICAgICAgICBzZXRMaWtlLnByb3RlY3RlZFdyYXBwZWQoKS0+aW5pdGlhbGl6ZVNldExp
a2UoYWRhcHRlcik7CisgICAgICAgIHNldExpa2Uud3JhcHBlZCgpLmluaXRpYWxpemVTZXRMaWtl
KGFkYXB0ZXIpOwogICAgIH0KICAgICByZXR1cm4gcGFpci5zZWNvbmQuZ2V0KCk7CiB9CkBAIC05
NCwyOSArOTQsMjkgQEAgSlNDOjpKU09iamVjdCYgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdTZXQo
SlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamUKIHRlbXBsYXRlPHR5cGVuYW1l
IFdyYXBwZXJDbGFzcz4KIEpTQzo6SlNWYWx1ZSBmb3J3YXJkU2l6ZVRvU2V0TGlrZShKU0M6OkpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBXcmFwcGVyQ2xhc3MmIHNldExpa2Up
CiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAg
cmV0dXJuIGZvcndhcmRBdHRyaWJ1dGVHZXR0ZXJUb0JhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9i
amVjdCwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0
TGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zaXplUHJpdmF0ZU5hbWUo
KSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAg
ICByZXR1cm4gZm9yd2FyZEF0dHJpYnV0ZUdldHRlclRvQmFja2luZ1NldChsZXhpY2FsR2xvYmFs
T2JqZWN0LCBnZXRBbmRJbml0aWFsaXplQmFja2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBz
ZXRMaWtlKSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2l6ZVByaXZhdGVOYW1l
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3M+CiBKU0M6OkpTVmFsdWUg
Zm9yd2FyZEVudHJpZXNUb1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBzZXRMaWtl
KQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAg
IHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmpl
Y3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9i
amVjdCwgc2V0TGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVz
UHJpdmF0ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFs
T2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9uQ2FsbFRvQmFja2luZ1NldChsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFuZEluaXRpYWxpemVCYWNraW5nU2V0KGxl
eGljYWxHbG9iYWxPYmplY3QsIHNldExpa2UpLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5lbnRyaWVzUHJpdmF0ZU5hbWUoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFdyYXBw
ZXJDbGFzcz4KIEpTQzo6SlNWYWx1ZSBmb3J3YXJkS2V5c1RvU2V0TGlrZShKU0M6OkpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBX
cmFwcGVyQ2xhc3MmIHNldExpa2UpCiB7Ci0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNh
bEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdT
ZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFja2lu
Z1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzZXRMaWtlKSwgdm0tPnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmtleXNQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0
Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxs
VG9CYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlh
bGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSksIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQcml2YXRlTmFtZSgpKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgV3JhcHBlckNsYXNzPgogSlNDOjpKU1ZhbHVlIGZvcndhcmRWYWx1ZXNUb1NldExp
a2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxsRnJh
bWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBzZXRMaWtlKQogewotICAgIFJlZiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rp
b25DYWxsVG9CYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5k
SW5pdGlhbGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSksIHZtLT5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQcml2YXRlTmFtZSgpKTsKKyAgICBh
dXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBm
b3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxG
cmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0
TGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1ByaXZhdGVOYW1l
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIENhbGxi
YWNrPgpAQCAtMTI5LDI2ICsxMjksMjYgQEAgSlNDOjpKU1ZhbHVlIGZvcndhcmRGb3JFYWNoVG9T
ZXRMaWtlKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEoKIHRlbXBs
YXRlPHR5cGVuYW1lIFdyYXBwZXJDbGFzcz4KIEpTQzo6SlNWYWx1ZSBmb3J3YXJkQ2xlYXJUb1Nl
dExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpDYWxs
RnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBzZXRMaWtlKQogewotICAgIHNldExpa2Uu
cHJvdGVjdGVkV3JhcHBlZCgpLT5jbGVhckZyb21TZXRMaWtlKCk7CisgICAgc2V0TGlrZS53cmFw
cGVkKCkuY2xlYXJGcm9tU2V0TGlrZSgpOwogCi0gICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4
aWNhbEdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFsaXplQmFj
a2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzZXRMaWtlKSwgdm0tPnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmNsZWFyUHJpdmF0ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICByZXR1cm4gZm9yd2FyZEZ1bmN0aW9u
Q2FsbFRvQmFja2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUsIGdldEFuZElu
aXRpYWxpemVCYWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIHNldExpa2UpLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jbGVhclByaXZhdGVOYW1lKCkpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBXcmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPgogSlNDOjpKU1Zh
bHVlIGZvcndhcmRIYXNUb1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNDOjpDYWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBzZXRMaWtl
LCBJdGVtVHlwZSYmKQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxP
YmplY3QpOwotICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5nU2V0KGxleGlj
YWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tpbmdTZXQobGV4
aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSksIHZtLT5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5oYXNQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0oJmxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgIHJldHVybiBmb3J3YXJkRnVuY3Rpb25DYWxsVG9CYWNraW5n
U2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6ZUJhY2tp
bmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSksIHZtLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmhhc1ByaXZhdGVOYW1lKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBX
cmFwcGVyQ2xhc3MsIHR5cGVuYW1lIEl0ZW1UeXBlPgogSlNDOjpKU1ZhbHVlIGZvcndhcmRBZGRU
b1NldExpa2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpD
YWxsRnJhbWUmIGNhbGxGcmFtZSwgV3JhcHBlckNsYXNzJiBzZXRMaWtlLCBJdGVtVHlwZSYmIGl0
ZW0pCiB7Ci0gICAgc2V0TGlrZS5wcm90ZWN0ZWRXcmFwcGVkKCktPmFkZFRvU2V0TGlrZShzdGQ6
OmZvcndhcmQ8SXRlbVR5cGU+KGl0ZW0pKTsKKyAgICBzZXRMaWtlLndyYXBwZWQoKS5hZGRUb1Nl
dExpa2Uoc3RkOjpmb3J3YXJkPEl0ZW1UeXBlPihpdGVtKSk7CiAKLSAgICBSZWYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBmb3J3YXJkRnVuY3Rpb25DYWxsVG9C
YWNraW5nU2V0KGxleGljYWxHbG9iYWxPYmplY3QsIGNhbGxGcmFtZSwgZ2V0QW5kSW5pdGlhbGl6
ZUJhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgc2V0TGlrZSksIHZtLT5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5hZGRQcml2YXRlTmFtZSgpKTsKKyAgICBhdXRvJiB2bSA9IEpT
Qzo6Z2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGZvcndhcmRGdW5jdGlvbkNhbGxU
b0JhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBnZXRBbmRJbml0aWFs
aXplQmFja2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzZXRMaWtlKSwgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuYWRkUHJpdmF0ZU5hbWUoKSk7CiAgICAgcmV0dXJuICZzZXRM
aWtlOwogfQogCkBAIC0xNTgsMTEgKzE1OCwxMSBAQCBKU0M6OkpTVmFsdWUgZm9yd2FyZERlbGV0
ZVRvU2V0TGlrZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKUwog
ICAgIC8vIEluaXRpYWxpemUgYmFja2luZ1NldCBiZWZvcmUgcmVtb3ZpbmcgdmFsdWUgc28gYXNz
ZXJ0aW9uIGJlbG93IGFjdHVhbGx5IGhvbGRzLgogICAgIGF1dG8mIGJhY2tpbmdTZXQgPSBnZXRB
bmRJbml0aWFsaXplQmFja2luZ1NldChsZXhpY2FsR2xvYmFsT2JqZWN0LCBzZXRMaWtlKTsKIAot
ICAgIGF1dG8gaXNEZWxldGVkID0gc2V0TGlrZS5wcm90ZWN0ZWRXcmFwcGVkKCktPnJlbW92ZUZy
b21TZXRMaWtlKHN0ZDo6Zm9yd2FyZDxJdGVtVHlwZT4oaXRlbSkpOworICAgIGF1dG8gaXNEZWxl
dGVkID0gc2V0TGlrZS53cmFwcGVkKCkucmVtb3ZlRnJvbVNldExpa2Uoc3RkOjpmb3J3YXJkPEl0
ZW1UeXBlPihpdGVtKSk7CiAgICAgVU5VU0VEX1BBUkFNKGlzRGVsZXRlZCk7CiAKLSAgICBSZWYg
dm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKLSAgICBhdXRvIHJlc3VsdCA9
IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tpbmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2Fs
bEZyYW1lLCBiYWNraW5nU2V0LCB2bS0+cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZGVs
ZXRlUHJpdmF0ZU5hbWUoKSk7CisgICAgYXV0byYgdm0gPSBKU0M6OmdldFZNKCZsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRGdW5jdGlvbkNhbGxUb0JhY2tp
bmdTZXQobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FsbEZyYW1lLCBiYWNraW5nU2V0LCB2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5kZWxldGVQcml2YXRlTmFtZSgpKTsKICAgICBBU1NF
UlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmFzQm9vbGVhbigpID09IGlzRGVsZXRlZCk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NV2luZG93QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdp
bmRvd0Jhc2UuY3BwCmluZGV4IDgzMGE0NGNiZWZkZC4uNjYxY2I1ZjJlMTE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5jcHAKQEAgLTE1NSw3ICsx
NTUsNyBAQCB2b2lkIEpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoKQogICAgIC8vIFJl
YWNoaW5nIGhlcmUsIHRoZSBhdHRyaWJ1dGVzIG9mICJkb2N1bWVudCIgcHJvcGVydHkgc2hvdWxk
IGJlIG5ldmVyIGNoYW5nZWQuCiAgICAgQVNTRVJUKG1fd3JhcHBlZC0+ZG9jdW1lbnQoKSk7CiAg
ICAgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QgPSB0aGlzOwotICAgIFJlZiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7
CiAKICAgICBib29sIHNob3VsZFRocm93UmVhZE9ubHlFcnJvciA9IGZhbHNlOwpAQCAtMTcyLDE3
ICsxNzIsMTcgQEAgRG9jdW1lbnQqIEpTRE9NV2luZG93QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpIGNvbnN0CiAKIHZvaWQgSlNET01XaW5kb3dCYXNlOjpwcmludEVycm9yTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpIGNvbnN0CiB7Ci0gICAgcHJpbnRFcnJvck1lc3NhZ2VGb3JG
cmFtZSh3cmFwcGVkKCkucHJvdGVjdGVkRnJhbWUoKS5nZXQoKSwgbWVzc2FnZSk7CisgICAgcHJp
bnRFcnJvck1lc3NhZ2VGb3JGcmFtZSh3cmFwcGVkKCkuZnJhbWUoKSwgbWVzc2FnZSk7CiB9CiAK
IGJvb2wgSlNET01XaW5kb3dCYXNlOjpzdXBwb3J0c1JpY2hTb3VyY2VJbmZvKGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsKLSAgICBS
ZWZQdHIgZnJhbWUgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKKyAgICBhdXRvKiBm
cmFtZSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0ciBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
KyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMjA3LDE3ICsyMDcsMTcgQEAgYm9vbCBKU0RPTVdpbmRvd0Jh
c2U6OnNob3VsZEludGVycnVwdFNjcmlwdChjb25zdCBKU0dsb2JhbE9iamVjdCogb2JqZWN0KQog
ewogICAgIGNvbnN0IEpTRE9NV2luZG93QmFzZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PGNv
bnN0IEpTRE9NV2luZG93QmFzZSo+KG9iamVjdCk7CiAgICAgQVNTRVJUKHRoaXNPYmplY3QtPndy
YXBwZWQoKS5mcmFtZSgpKTsKLSAgICBSZWZQdHIgcGFnZSA9IHRoaXNPYmplY3QtPndyYXBwZWQo
KS5mcmFtZSgpLT5wYWdlKCk7Ci0gICAgcmV0dXJuIHNob3VsZEludGVycnVwdFNjcmlwdFRvUHJl
dmVudEluZmluaXRlUmVjdXJzaW9uV2hlbkNsb3NpbmdQYWdlKHBhZ2UuZ2V0KCkpOworICAgIFBh
Z2UqIHBhZ2UgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKS0+cGFnZSgpOworICAgIHJl
dHVybiBzaG91bGRJbnRlcnJ1cHRTY3JpcHRUb1ByZXZlbnRJbmZpbml0ZVJlY3Vyc2lvbldoZW5D
bG9zaW5nUGFnZShwYWdlKTsKIH0KIAogYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OnNob3VsZEludGVy
cnVwdFNjcmlwdEJlZm9yZVRpbWVvdXQoY29uc3QgSlNHbG9iYWxPYmplY3QqIG9iamVjdCkKIHsK
ICAgICBjb25zdCBKU0RPTVdpbmRvd0Jhc2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxjb25z
dCBKU0RPTVdpbmRvd0Jhc2UqPihvYmplY3QpOwogICAgIEFTU0VSVCh0aGlzT2JqZWN0LT53cmFw
cGVkKCkuZnJhbWUoKSk7Ci0gICAgUmVmUHRyIHBhZ2UgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
ZnJhbWUoKS0+cGFnZSgpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCku
ZnJhbWUoKS0+cGFnZSgpOwogCi0gICAgaWYgKHNob3VsZEludGVycnVwdFNjcmlwdFRvUHJldmVu
dEluZmluaXRlUmVjdXJzaW9uV2hlbkNsb3NpbmdQYWdlKHBhZ2UuZ2V0KCkpKQorICAgIGlmIChz
aG91bGRJbnRlcnJ1cHRTY3JpcHRUb1ByZXZlbnRJbmZpbml0ZVJlY3Vyc2lvbldoZW5DbG9zaW5n
UGFnZShwYWdlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQpAQCAtMjMxLDcgKzIzMSw3IEBAIGJvb2wgSlNET01XaW5kb3dCYXNlOjpzaG91bGRJbnRl
cnJ1cHRTY3JpcHRCZWZvcmVUaW1lb3V0KGNvbnN0IEpTR2xvYmFsT2JqZWN0KiBvCiBSdW50aW1l
RmxhZ3MgSlNET01XaW5kb3dCYXNlOjpqYXZhU2NyaXB0UnVudGltZUZsYWdzKGNvbnN0IEpTR2xv
YmFsT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgY29uc3QgSlNET01XaW5kb3dCYXNlKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsKLSAgICBS
ZWZQdHIgZnJhbWUgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKTsKKyAgICBhdXRvKiBm
cmFtZSA9IHRoaXNPYmplY3QtPndyYXBwZWQoKS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybiBSdW50aW1lRmxhZ3MoKTsKICAgICByZXR1cm4gZnJhbWUtPnNldHRpbmdz
KCkuamF2YVNjcmlwdFJ1bnRpbWVGbGFncygpOwpAQCAtMjQxLDE0ICsyNDEsMTQgQEAgdm9pZCBK
U0RPTVdpbmRvd0Jhc2U6OnF1ZXVlTWljcm90YXNrVG9FdmVudExvb3AoSlNHbG9iYWxPYmplY3Qm
IG9iamVjdCwgUmVmPEpTQzoKIHsKICAgICBKU0RPTVdpbmRvd0Jhc2UmIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU0RPTVdpbmRvd0Jhc2UmPihvYmplY3QpOwogCi0gICAgUmVmIGNhbGxiYWNr
ID0gSlNNaWNyb3Rhc2tDYWxsYmFjazo6Y3JlYXRlKHRoaXNPYmplY3QsIFdURk1vdmUodGFzaykp
OwotICAgIFJlZlB0ciBvYmplY3RTY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gdGhpc09iamVjdC5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgQ2hlY2tlZFJlZiBldmVudExvb3AgPSBvYmpl
Y3RTY3JpcHRFeGVjdXRpb25Db250ZXh0LT5ldmVudExvb3AoKTsKKyAgICBhdXRvIGNhbGxiYWNr
ID0gSlNNaWNyb3Rhc2tDYWxsYmFjazo6Y3JlYXRlKHRoaXNPYmplY3QsIFdURk1vdmUodGFzaykp
OworICAgIGF1dG8qIG9iamVjdFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSB0aGlzT2JqZWN0LnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBhdXRvJiBldmVudExvb3AgPSBvYmplY3RTY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5ldmVudExvb3AoKTsKICAgICAvLyBQcm9wYWdhdGluZyBtZWRp
YSBvbmx5IHVzZXIgZ2VzdHVyZSBmb3IgRmV0Y2ggQVBJJ3MgcHJvbWlzZSBjaGFpbi4KICAgICBh
dXRvIHVzZXJHZXN0dXJlVG9rZW4gPSBVc2VyR2VzdHVyZUluZGljYXRvcjo6Y3VycmVudFVzZXJH
ZXN0dXJlKCk7CiAgICAgaWYgKHVzZXJHZXN0dXJlVG9rZW4gJiYgKCF1c2VyR2VzdHVyZVRva2Vu
LT5pc1Byb3BhZ2F0ZWRGcm9tRmV0Y2goKSB8fCAhb2JqZWN0U2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+c2V0dGluZ3NWYWx1ZXMoKS51c2VyR2VzdHVyZVByb21pc2VQcm9wYWdhdGlvbkVuYWJsZWQp
KQogICAgICAgICB1c2VyR2VzdHVyZVRva2VuID0gbnVsbHB0cjsKLSAgICBldmVudExvb3AtPnF1
ZXVlTWljcm90YXNrKFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCB1c2VyR2VzdHVyZVRv
a2VuID0gV1RGTW92ZSh1c2VyR2VzdHVyZVRva2VuKV0oKSBtdXRhYmxlIHsKKyAgICBldmVudExv
b3AucXVldWVNaWNyb3Rhc2soW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHVzZXJHZXN0
dXJlVG9rZW4gPSBXVEZNb3ZlKHVzZXJHZXN0dXJlVG9rZW4pXSgpIG11dGFibGUgewogICAgICAg
ICBpZiAoIXVzZXJHZXN0dXJlVG9rZW4pIHsKICAgICAgICAgICAgIGNhbGxiYWNrLT5jYWxsKCk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNjIsNyArMjYyLDcgQEAgdm9pZCBKU0RPTVdpbmRv
d0Jhc2U6OnF1ZXVlTWljcm90YXNrVG9FdmVudExvb3AoSlNHbG9iYWxPYmplY3QmIG9iamVjdCwg
UmVmPEpTQzoKIEpTQzo6SlNPYmplY3QqIEpTRE9NV2luZG93QmFzZTo6Y3VycmVudFNjcmlwdEV4
ZWN1dGlvbk93bmVyKEpTR2xvYmFsT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgSlNET01XaW5kb3dC
YXNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dCYXNlKj4ob2JqZWN0KTsK
LSAgICByZXR1cm4ganNDYXN0PEpTT2JqZWN0Kj4odG9KUyh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkucHJvdGVjdGVkRG9jdW1lbnQoKS5nZXQoKSkpOworICAg
IHJldHVybiBqc0Nhc3Q8SlNPYmplY3QqPih0b0pTKHRoaXNPYmplY3QsIHRoaXNPYmplY3QsIHRo
aXNPYmplY3QtPndyYXBwZWQoKS5kb2N1bWVudCgpKSk7CiB9CiAKIEpTQzo6U2NyaXB0RXhlY3V0
aW9uU3RhdHVzIEpTRE9NV2luZG93QmFzZTo6c2NyaXB0RXhlY3V0aW9uU3RhdHVzKEpTQzo6SlNH
bG9iYWxPYmplY3QqLCBKU0M6OkpTT2JqZWN0KiBvd25lcikKQEAgLTM1Nyw4ICszNTcsOCBAQCBM
b2NhbERPTVdpbmRvdyYgbGVnYWN5QWN0aXZlRE9NV2luZG93Rm9yQWNjZXNzb3IoSlNHbG9iYWxP
YmplY3QmIGZhbGxiYWNrR2xvYmFsTwogCiB2b2lkIEpTRE9NV2luZG93QmFzZTo6ZmlyZUZyYW1l
Q2xlYXJlZFdhdGNocG9pbnRzRm9yV2luZG93KExvY2FsRE9NV2luZG93KiB3aW5kb3cpCiB7Ci0g
ICAgUmVmIHZtID0gY29tbW9uVk0oKTsKLSAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9
IHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOworICAgIEpTQzo6
Vk0mIHZtID0gY29tbW9uVk0oKTsKKyAgICBKU1ZNQ2xpZW50RGF0YSogY2xpZW50RGF0YSA9IHN0
YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAgICAgVmVjdG9yPFJl
ZjxET01XcmFwcGVyV29ybGQ+PiB3cmFwcGVyV29ybGRzOwogICAgIGNsaWVudERhdGEtPmdldEFs
bFdvcmxkcyh3cmFwcGVyV29ybGRzKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd3Jh
cHBlcldvcmxkcy5zaXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNET01XaW5kb3dQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NV2luZG93UHJvcGVydGllcy5jcHAKaW5kZXggZDE0Mjg1NGY3NDZhLi42MTk4
Zjk3NDQ0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93UHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dQcm9wZXJ0aWVzLmNwcApAQCAtNDUsOCArNDUsOCBAQCBjb25zdCBDbGFzc0luZm8gSlNE
T01XaW5kb3dQcm9wZXJ0aWVzOjpzX2luZm8gPSB7ICJXaW5kb3dQcm9wZXJ0aWVzIl9zLCAmQmFz
ZTo6cwogLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2luZG93LW9i
amVjdC5odG1sI2RvbS13aW5kb3ctbmFtZWRpdGVtCiBzdGF0aWMgYm9vbCBqc0RPTVdpbmRvd1By
b3BlcnRpZXNHZXRPd25Qcm9wZXJ0eVNsb3ROYW1lZEl0ZW1HZXR0ZXIoSlNET01XaW5kb3dQcm9w
ZXJ0aWVzKiB0aGlzT2JqZWN0LCBMb2NhbERPTVdpbmRvdyYgd2luZG93LCBKU0dsb2JhbE9iamVj
dCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogewotICAgIGlmIChSZWZQdHIgZnJhbWUgPSB3aW5kb3cuZnJhbWUoKSkg
ewotICAgICAgICBpZiAoUmVmUHRyIHNjb3BlZENoaWxkID0gZHluYW1pY0Rvd25jYXN0PExvY2Fs
RnJhbWU+KGZyYW1lLT50cmVlKCkuc2NvcGVkQ2hpbGRCeVNwZWNpZmllZE5hbWUocHJvcGVydHlO
YW1lVG9BdG9tU3RyaW5nKHByb3BlcnR5TmFtZSkpKSkgeworICAgIGlmIChhdXRvKiBmcmFtZSA9
IHdpbmRvdy5mcmFtZSgpKSB7CisgICAgICAgIGlmIChhdXRvKiBzY29wZWRDaGlsZCA9IGR5bmFt
aWNEb3duY2FzdDxMb2NhbEZyYW1lPihmcmFtZS0+dHJlZSgpLnNjb3BlZENoaWxkQnlTcGVjaWZp
ZWROYW1lKHByb3BlcnR5TmFtZVRvQXRvbVN0cmluZyhwcm9wZXJ0eU5hbWUpKSkpIHsKICAgICAg
ICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgZW51bVRvVW5kZXJseWluZ1R5cGUoUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSwgdG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZWRDaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC01NiwxMiArNTYsMTMgQEAgc3RhdGljIGJvb2wganNET01XaW5k
b3dQcm9wZXJ0aWVzR2V0T3duUHJvcGVydHlTbG90TmFtZWRJdGVtR2V0dGVyKEpTRE9NV2luZG93
UHIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gQWxsb3cgc2hvcnRjdXRzIGxpa2Ug
J0ltYWdlMScgaW5zdGVhZCBvZiBkb2N1bWVudC5pbWFnZXMuSW1hZ2UxCi0gICAgaWYgKFJlZlB0
ciBodG1sRG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTERvY3VtZW50Pih3aW5kb3cuZG9j
dW1lbnQoKSkpIHsKKyAgICBhdXRvKiBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudCgpOworICAg
IGlmIChhdXRvKiBodG1sRG9jdW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8SFRNTERvY3VtZW50Pihk
b2N1bWVudCkpIHsKICAgICAgICAgQXRvbVN0cmluZyBhdG9tUHJvcGVydHlOYW1lID0gcHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKTsKICAgICAgICAgaWYgKCFhdG9tUHJvcGVydHlOYW1lLmlzRW1w
dHkoKSAmJiBodG1sRG9jdW1lbnQtPmhhc1dpbmRvd05hbWVkSXRlbShhdG9tUHJvcGVydHlOYW1l
KSkgewogICAgICAgICAgICAgSlNWYWx1ZSBuYW1lZEl0ZW07CiAgICAgICAgICAgICBpZiAoVU5M
SUtFTFkoaHRtbERvY3VtZW50LT53aW5kb3dOYW1lZEl0ZW1Db250YWluc011bHRpcGxlRWxlbWVu
dHMoYXRvbVByb3BlcnR5TmFtZSkpKSB7Ci0gICAgICAgICAgICAgICAgUmVmIGNvbGxlY3Rpb24g
PSBodG1sRG9jdW1lbnQtPndpbmRvd05hbWVkSXRlbXMoYXRvbVByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICAgICAgUmVmPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uID0gZG9jdW1lbnQtPndp
bmRvd05hbWVkSXRlbXMoYXRvbVByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KGNvbGxlY3Rpb24tPmxlbmd0aCgpID4gMSk7CiAgICAgICAgICAgICAgICAgbmFtZWRJdGVtID0g
dG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgY29s
bGVjdGlvbik7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTc2LDcgKzc3LDcgQEAgc3RhdGljIGJv
b2wganNET01XaW5kb3dQcm9wZXJ0aWVzR2V0T3duUHJvcGVydHlTbG90TmFtZWRJdGVtR2V0dGVy
KEpTRE9NV2luZG93UHIKIAogdm9pZCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmZpbmlzaENyZWF0
aW9uKEpTR2xvYmFsT2JqZWN0JiBnbG9iYWxPYmplY3QpCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFs
T2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBK
U0NfVE9fU1RSSU5HX1RBR19XSVRIT1VUX1RSQU5TSVRJT04oKTsKQEAgLTk5LDEzICsxMDAsMTMg
QEAgYm9vbCBKU0RPTVdpbmRvd1Byb3BlcnRpZXM6OmdldE93blByb3BlcnR5U2xvdChKU09iamVj
dCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCoKICAgICBpZiAoIWpzV2luZG93KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBSZWYgd2luZG93ID0ganNXaW5kb3ctPndyYXBwZWQoKTsKKyAg
ICBhdXRvJiB3aW5kb3cgPSBqc1dpbmRvdy0+d3JhcHBlZCgpOwogICAgIHJldHVybiBqc0RPTVdp
bmRvd1Byb3BlcnRpZXNHZXRPd25Qcm9wZXJ0eVNsb3ROYW1lZEl0ZW1HZXR0ZXIodGhpc09iamVj
dCwgd2luZG93LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQog
CiBib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5z
aWduZWQgaW5kZXgsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2Fs
R2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgcmV0dXJuIGdldE93blByb3BlcnR5U2xvdChvYmplY3QsIGxleGljYWxHbG9iYWxP
YmplY3QsIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KSwgc2xvdCk7CiB9CiAKQEAgLTEzMSw4
ICsxMzIsNyBAQCBib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6aXNFeHRlbnNpYmxlKEpTT2Jq
ZWN0KiwgSlNHbG9iYWxPYmplY3QqKQogCiBib29sIEpTRE9NV2luZG93UHJvcGVydGllczo6ZGVm
aW5lT3duUHJvcGVydHkoSlNPYmplY3QqLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImLCBib29sIHNob3Vs
ZFRocm93KQogewotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCkpOwogICAgIHJldHVy
biB0eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93LCAiRGVm
aW5pbmcgYSBwcm9wZXJ0eSBvbiBhIFdpbmRvd1Byb3BlcnRpZXMgb2JqZWN0IGlzIG5vdCBhbGxv
d2VkLiJfcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIu
Y3BwCmluZGV4IGE5MDdkYWNhNTA0Yy4uNGMyNGQ1NGI3ZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NV3JhcHBlci5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgSlNDOjpKU1Zh
bHVlIGNsb25lQWNyb3NzV29ybGRzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIGNvbnN0IEoKICAgICBpZiAoaXNXb3JsZENvbXBhdGlibGUobGV4aWNhbEdsb2JhbE9i
amVjdCwgdmFsdWUpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgLy8gRklYTUU6IElzIGl0
IGJlc3QgdG8gaGFuZGxlIGVycm9ycyBieSByZXR1cm5pbmcgbnVsbCByYXRoZXIgdGhhbiB0aHJv
d2luZyBhbiBleGNlcHRpb24/Ci0gICAgUmVmUHRyIHNlcmlhbGl6ZWRWYWx1ZSA9IFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlLCBTZXJpYWxp
emF0aW9uRm9yU3RvcmFnZTo6Tm8sIFNlcmlhbGl6YXRpb25FcnJvck1vZGU6Ok5vblRocm93aW5n
LCBTZXJpYWxpemF0aW9uQ29udGV4dDo6Q2xvbmVBY3Jvc3NXb3JsZHMpOworICAgIGF1dG8gc2Vy
aWFsaXplZFZhbHVlID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpjcmVhdGUobGV4aWNhbEdsb2Jh
bE9iamVjdCwgdmFsdWUsIFNlcmlhbGl6YXRpb25Gb3JTdG9yYWdlOjpObywgU2VyaWFsaXphdGlv
bkVycm9yTW9kZTo6Tm9uVGhyb3dpbmcsIFNlcmlhbGl6YXRpb25Db250ZXh0OjpDbG9uZUFjcm9z
c1dvcmxkcyk7CiAgICAgaWYgKCFzZXJpYWxpemVkVmFsdWUpCiAgICAgICAgIHJldHVybiBKU0M6
OmpzTnVsbCgpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgb3duZXItPmdsb2JhbE9iamVjdCgpIGJl
dHRlciB0aGFuIGxleGljYWxHbG9iYWxPYmplY3QubGV4aWNhbEdsb2JhbE9iamVjdCgpIGhlcmU/
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAppbmRl
eCBlOTY2NjZiN2FlODYuLmI5YjRiOWNjZTczMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNET01XcmFwcGVyQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTVdyYXBwZXJDYWNoZS5oCkBAIC0yMDksNyArMjA5LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgRE9NQ2xhc3M+IGlubGluZSB2b2lkIHNldFN1YmNsYXNzU3RydWN0dXJlSWZOZWVk
ZWQoSlNDOjpKU0dsb2IKIAogICAgIHVzaW5nIFdyYXBwZXJDbGFzcyA9IHR5cGVuYW1lIEpTRE9N
V3JhcHBlckNvbnZlcnRlclRyYWl0czxET01DbGFzcz46OldyYXBwZXJDbGFzczsKIAotICAgIFJl
ZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKIAogICAgIGF1dG8qIGZ1bmN0aW9uR2xvYmFsT2JqZWN0ID0gSlNDOjpnZXRGdW5j
dGlvblJlYWxtKGxleGljYWxHbG9iYWxPYmplY3QsIG5ld1RhcmdldCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IGY4MWRmZGI1ZDYz
My4uOTgyOGJlZTdhMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rv
Y3VtZW50Q3VzdG9tLmNwcApAQCAtNTYsMTEgKzU2LDExIEBAIEpTT2JqZWN0KiBjYWNoZWREb2N1
bWVudFdyYXBwZXIoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xv
YmFsCiAgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC53b3JsZCgpLCBkb2N1bWVudCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogCi0gICAgUmVm
UHRyIHdpbmRvdyA9IGRvY3VtZW50LmRvbVdpbmRvdygpOworICAgIGF1dG8qIHdpbmRvdyA9IGRv
Y3VtZW50LmRvbVdpbmRvdygpOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8qIGRvY3VtZW50R2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9i
amVjdDxKU0xvY2FsRE9NV2luZG93PihSZWYgeyBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkgfSwg
dG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgKndpbmRvdykpOworICAgIGF1dG8qIGRvY3VtZW50
R2xvYmFsT2JqZWN0ID0gdG9KU0RPTUdsb2JhbE9iamVjdDxKU0xvY2FsRE9NV2luZG93PihsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCksIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICp3aW5kb3cp
KTsKICAgICBpZiAoIWRvY3VtZW50R2xvYmFsT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtNzQsMTQgKzc0LDE0IEBAIHZvaWQgcmVwb3J0TWVtb3J5Rm9yRG9jdW1lbnRJZkZy
YW1lbGVzcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRG9jCiAgICAgaWYg
KGRvY3VtZW50LmZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZt
KCk7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSAwOwogICAgIGZvciAoTm9kZSogbm9kZSA9ICZk
b2N1bWVudDsgbm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKQogICAgICAg
ICBtZW1vcnlDb3N0ICs9IG5vZGUtPmFwcHJveGltYXRlTWVtb3J5Q29zdCgpOwogCiAgICAgLy8g
RklYTUU6IEFkb3B0IHJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCwgYW5kIHN3aXRjaCB0byByZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQyNTk1Ci0gICAgdm0tPmhlYXAuZGVwcmVjYXRlZFJlcG9ydEV4dHJh
TWVtb3J5KG1lbW9yeUNvc3QpOworICAgIHZtLmhlYXAuZGVwcmVjYXRlZFJlcG9ydEV4dHJhTWVt
b3J5KG1lbW9yeUNvc3QpOwogfQogCiBKU1ZhbHVlIHRvSlNOZXdseUNyZWF0ZWQoSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIFJlZjxEb2N1bWVudD4mJiBkb2N1bWVudCkKQEAgLTk4LDcgKzk4LDcgQEAgSlNWYWx1ZSB0
b0pTKEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWMKIAogdm9pZCBzZXRBZG9wdGVkU3R5bGVTaGVldHNPblRyZWVTY29wZShU
cmVlU2NvcGUmIHRyZWVTY29wZSwgSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgYXV0byBuYXRpdmVWYWx1ZSA9IGNvbnZlcnQ8SURMRnJvemVuQXJyYXk8SURMSW50
ZXJmYWNlPENTU1N0eWxlU2hlZXQ+Pj4obGV4aWNhbEdsb2JhbE9iamVjdCwgdmFsdWUpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgdm9pZCgpKTsKQEAgLTEwOSw3ICsxMDks
NyBAQCB2b2lkIHNldEFkb3B0ZWRTdHlsZVNoZWV0c09uVHJlZVNjb3BlKFRyZWVTY29wZSYgdHJl
ZVNjb3BlLCBKU0M6OkpTR2xvYmFsT2JqZWN0JgogCiB2b2lkIEpTRG9jdW1lbnQ6OnNldEFkb3B0
ZWRTdHlsZVNoZWV0cyhKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgc2V0QWRvcHRlZFN0eWxlU2hlZXRzT25UcmVlU2Nv
cGUocHJvdGVjdGVkV3JhcHBlZCgpLCBsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZSk7CisgICAg
c2V0QWRvcHRlZFN0eWxlU2hlZXRzT25UcmVlU2NvcGUod3JhcHBlZCgpLCBsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFZpc2l0b3I+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAwNDJlNTdi
Nzc2ZGQuLjZiNGEwMmI2NDA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0VsZW1lbnRDdXN0b20uY3BwCkBAIC02OCw3ICs2OCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGNyZWF0
ZU5ld0VsZW1lbnRXcmFwcGVyKEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZjxF
bGVtCiAKIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKGF1dG8qIHdyYXBwZXIg
PSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+cHJvdGVjdGVkV29ybGQoKSwgZWxlbWVu
dCkpCisgICAgaWYgKGF1dG8qIHdyYXBwZXIgPSBnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVj
dC0+d29ybGQoKSwgZWxlbWVudCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHJldHVy
biBjcmVhdGVOZXdFbGVtZW50V3JhcHBlcihnbG9iYWxPYmplY3QsIGVsZW1lbnQpOwogfQpAQCAt
NzYsMTggKzc2LDE4IEBAIEpTVmFsdWUgdG9KUyhKU0dsb2JhbE9iamVjdCosIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEVsZW1lbnQmIGVsZW1lbnQpCiBKU1ZhbHVlIHRvSlNOZXds
eUNyZWF0ZWQoSlNHbG9iYWxPYmplY3QqLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBSZWY8RWxlbWVudD4mJiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LT5pc0RlZmluZWRD
dXN0b21FbGVtZW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBnZXRDYWNoZWRXcmFw
cGVyKGdsb2JhbE9iamVjdC0+cHJvdGVjdGVkV29ybGQoKSwgZWxlbWVudCk7CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gZ2V0Q2FjaGVkV3JhcHBlcihnbG9iYWxPYmplY3QtPndvcmxkKCksIGVs
ZW1lbnQpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgQVNTRVJUKCFnbG9iYWxPYmplY3QtPnZtKCkuZXhjZXB0aW9uRm9ySW5zcGVjdGlv
bigpKTsKICAgICB9Ci0gICAgQVNTRVJUKCFnZXRDYWNoZWRXcmFwcGVyKGdsb2JhbE9iamVjdC0+
cHJvdGVjdGVkV29ybGQoKSwgZWxlbWVudCkpOworICAgIEFTU0VSVCghZ2V0Q2FjaGVkV3JhcHBl
cihnbG9iYWxPYmplY3QtPndvcmxkKCksIGVsZW1lbnQpKTsKICAgICByZXR1cm4gY3JlYXRlTmV3
RWxlbWVudFdyYXBwZXIoZ2xvYmFsT2JqZWN0LCBXVEZNb3ZlKGVsZW1lbnQpKTsKIH0KIAogc3Rh
dGljIEpTVmFsdWUgZ2V0RWxlbWVudHNBcnJheUF0dHJpYnV0ZShKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgY29uc3QgSlNFbGVtZW50JiB0aGlzT2JqZWN0LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIFJlZiB2bSA9IEpTQzo6Z2V0Vk0oJmxl
eGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEds
b2JhbE9iamVjdCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAKICAgICBKU09iamVjdCogY2FjaGVkT2JqZWN0ID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEludGVybmFsc0N1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRJbnRlcm5hbHNDdXN0b20uY3Bw
CmluZGV4IDBjMTliOTE5OGUxOS4uMGE3ZTQyMzg2NDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0VsZW1lbnRJbnRlcm5hbHNDdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRWxlbWVudEludGVybmFsc0N1c3RvbS5jcHAKQEAgLTQ1
LDcgKzQ1LDcgQEAgSlNWYWx1ZSBKU0VsZW1lbnRJbnRlcm5hbHM6OnNldEZvcm1WYWx1ZShKU0ds
b2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2EKIHsKICAgICB1c2luZyBKU0N1c3Rv
bUVsZW1lbnRGb3JtVmFsdWUgPSBJRExVbmlvbjxJRExOdWxsLCBJRExJbnRlcmZhY2U8RmlsZT4s
IElETFVTVlN0cmluZywgSURMSW50ZXJmYWNlPERPTUZvcm1EYXRhPj47CiAKLSAgICBSZWYgdm0g
PSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LnZtKCk7CiAgICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2
bSk7CiAgICAgaWYgKFVOTElLRUxZKGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCkgPCAxKSkgewog
ICAgICAgICB0aHJvd0V4Y2VwdGlvbigmbGV4aWNhbEdsb2JhbE9iamVjdCwgdGhyb3dTY29wZSwg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoJmxleGljYWxHbG9iYWxPYmplY3QpKTsKQEAg
LTYzLDcgKzYzLDcgQEAgSlNWYWx1ZSBKU0VsZW1lbnRJbnRlcm5hbHM6OnNldEZvcm1WYWx1ZShK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2EKICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCB7IH0pOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0g
cHJvdGVjdGVkV3JhcHBlZCgpLT5zZXRGb3JtVmFsdWUoV1RGTW92ZSh2YWx1ZSksIFdURk1vdmUo
c3RhdGUpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHdyYXBwZWQoKS5zZXRGb3JtVmFsdWUoV1RGTW92
ZSh2YWx1ZSksIFdURk1vdmUoc3RhdGUpKTsKICAgICBpZiAoVU5MSUtFTFkocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKSkgewogICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CiAgICAgICAgIHJl
dHVybiB7IH07CkBAIC03NCw3ICs3NCw3IEBAIEpTVmFsdWUgSlNFbGVtZW50SW50ZXJuYWxzOjpz
ZXRGb3JtVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIENhCiAKIHN0
YXRpYyBKU1ZhbHVlIGdldEVsZW1lbnRzQXJyYXlBdHRyaWJ1dGUoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIGNvbnN0IEpTRWxlbWVudEludGVybmFscyYgdGhpc09iamVjdCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsKLSAgICBSZWYgdm0gPSBKU0M6
OmdldFZNKCZsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICBhdXRvJiB2bSA9IEpTQzo6Z2V0Vk0o
JmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCiAgICAgSlNPYmplY3QqIGNhY2hlZE9iamVjdCA9IG51bGxwdHI7CkBA
IC04Niw3ICs4Niw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEVsZW1lbnRzQXJyYXlBdHRyaWJ1dGUo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIGNvCiAgICAgICAgIGNvbnN0X2Nh
c3Q8SlNFbGVtZW50SW50ZXJuYWxzJj4odGhpc09iamVjdCkucHV0RGlyZWN0KHZtLCBidWlsdGlu
TmFtZXModm0pLmNhY2hlZEF0dHJBc3NvY2lhdGVkRWxlbWVudHNQcml2YXRlTmFtZSgpLCBjYWNo
ZWRPYmplY3QpOwogICAgIH0KIAotICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxFbGVt
ZW50Pj4+IGVsZW1lbnRzID0gdGhpc09iamVjdC5wcm90ZWN0ZWRXcmFwcGVkKCktPmdldEVsZW1l
bnRzQXJyYXlBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0
b3I8UmVmUHRyPEVsZW1lbnQ+Pj4gZWxlbWVudHMgPSB0aGlzT2JqZWN0LndyYXBwZWQoKS5nZXRF
bGVtZW50c0FycmF5QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpOwogICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gUHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGF0dHJpYnV0ZU5h
bWUudG9TdHJpbmcoKSkpOwogICAgIEpTVmFsdWUgY2FjaGVkVmFsdWUgPSBjYWNoZWRPYmplY3Qt
PmdldERpcmVjdCh2bSwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAoIWNhY2hlZFZhbHVlLmlzRW1w
dHkoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3Bw
CmluZGV4IGQwYzYxNTAyNjBhMi4uYjQ3MDgyMzRkY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBAIC02NiwxNCArNjYsMTQgQEAgdm9pZCBK
U0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwKICAgICBpZiAoIWVycm9yRXZlbnQpCiAgICAgICAgIHJldHVybiBK
U0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGV2ZW50
KTsKIAotICAgIFJlZiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQudm0oKTsKKyAgICBWTSYg
dm0gPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2so
dm0pOwogCiAgICAgSlNPYmplY3QqIGpzRnVuY3Rpb24gPSB0aGlzLT5lbnN1cmVKU0Z1bmN0aW9u
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogICAgIGlmICghanNGdW5jdGlvbikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyIGlzb2xhdGVkV29ybGQgPSB0aGlzLT5pc29sYXRlZFdvcmxk
KCk7CisgICAgYXV0byogaXNvbGF0ZWRXb3JsZCA9IHRoaXMtPmlzb2xhdGVkV29ybGQoKTsKICAg
ICBpZiAoVU5MSUtFTFkoIWlzb2xhdGVkV29ybGQpKQogICAgICAgICByZXR1cm47CiAKQEAgLTEw
Myw4ICsxMDMsOCBAQCB2b2lkIEpTRXJyb3JIYW5kbGVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LAogICAgICAgICBhcmdzLmFwcGVu
ZChlcnJvckV2ZW50LT5lcnJvcigqZ2xvYmFsT2JqZWN0KSk7CiAgICAgICAgIEFTU0VSVCghYXJn
cy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAgICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKLSAgICAgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHZtLT5lbnRyeVNjb3BlID8g
dm0tPmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDogZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAg
Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBWTUVudHJ5U2NvcGUgZW50cnlT
Y29wZSh2bSwgdm0uZW50cnlTY29wZSA/IHZtLmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDog
Z2xvYmFsT2JqZWN0KTsKIAogICAgICAgICBKU0V4ZWNTdGF0ZTo6aW5zdHJ1bWVudEZ1bmN0aW9u
KCZzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjYWxsRGF0YSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IGYwZTk1YWJiMzZhZC4uMjVl
Zjg0ZjlkNzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxl
RXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dAogICAg
IGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0LmlzSlNFeGVjdXRpb25Gb3JiaWRkZW4oKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVmIHZtID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dC52bSgp
OworICAgIFZNJiB2bSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQudm0oKTsKICAgICBKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0p
OwogCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBKU0V2ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQKICAgICBpZiAo
VU5MSUtFTFkoIW1faXNvbGF0ZWRXb3JsZCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8q
IGdsb2JhbE9iamVjdCA9IHRvSlNET01HbG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgKm1faXNvbGF0ZWRXb3JsZC5jb3B5UmVmKCkpOworICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9
IHRvSlNET01HbG9iYWxPYmplY3Qoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgKm1faXNvbGF0ZWRX
b3JsZCk7CiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjE4
LDcgKzIxOCw3IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgYXJncy5hcHBlbmQodG9K
UyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsICZldmVudCkpOwogICAgIEFTU0VS
VCghYXJncy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUo
dm0sIHZtLT5lbnRyeVNjb3BlID8gdm0tPmVudHJ5U2NvcGUtPmdsb2JhbE9iamVjdCgpIDogbGV4
aWNhbEdsb2JhbE9iamVjdCk7CisgICAgVk1FbnRyeVNjb3BlIGVudHJ5U2NvcGUodm0sIHZtLmVu
dHJ5U2NvcGUgPyB2bS5lbnRyeVNjb3BlLT5nbG9iYWxPYmplY3QoKSA6IGxleGljYWxHbG9iYWxP
YmplY3QpOwogCiAgICAgSlNFeGVjU3RhdGU6Omluc3RydW1lbnRGdW5jdGlvbigmc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgY2FsbERhdGEpOwogCkBAIC0yMzAsOCArMjMwLDggQEAgdm9pZCBKU0V2
ZW50TGlzdGVuZXI6OmhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQKIAogICAgIGF1dG8gaGFuZGxlRXhjZXB0aW9uSWZOZWVkZWQgPSBbJl0g
KEpTQzo6RXhjZXB0aW9uKiBleGNlcHRpb24pIC0+IGJvb2wgewogICAgICAgICBpZiAoYXV0byog
Z2xvYmFsU2NvcGUgPSBkeW5hbWljRG93bmNhc3Q8V29ya2VyR2xvYmFsU2NvcGU+KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQpKSB7Ci0gICAgICAgICAgICBDaGVja2VkUHRyIHNjcmlwdENvbnRyb2xs
ZXIgPSBnbG9iYWxTY29wZS0+c2NyaXB0KCk7Ci0gICAgICAgICAgICBib29sIHRlcm1pbmF0b3JD
YXVzZWRFeGNlcHRpb24gPSAoZXhjZXB0aW9uICYmIHZtLT5pc1Rlcm1pbmF0aW9uRXhjZXB0aW9u
KGV4Y2VwdGlvbikpOworICAgICAgICAgICAgYXV0byogc2NyaXB0Q29udHJvbGxlciA9IGdsb2Jh
bFNjb3BlLT5zY3JpcHQoKTsKKyAgICAgICAgICAgIGJvb2wgdGVybWluYXRvckNhdXNlZEV4Y2Vw
dGlvbiA9IChleGNlcHRpb24gJiYgdm0uaXNUZXJtaW5hdGlvbkV4Y2VwdGlvbihleGNlcHRpb24p
KTsKICAgICAgICAgICAgIGlmICh0ZXJtaW5hdG9yQ2F1c2VkRXhjZXB0aW9uIHx8IChzY3JpcHRD
b250cm9sbGVyICYmIHNjcmlwdENvbnRyb2xsZXItPmlzVGVybWluYXRpbmdFeGVjdXRpb24oKSkp
CiAgICAgICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlci0+Zm9yYmlkRXhlY3V0aW9uKCk7CiAg
ICAgICAgIH0KQEAgLTI4Miw3ICsyODIsNyBAQCBTdHJpbmcgSlNFdmVudExpc3RlbmVyOjpmdW5j
dGlvbk5hbWUoKSBjb25zdAogICAgIGlmICghbV93cmFwcGVyIHx8ICFtX2pzRnVuY3Rpb24pCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWYgdm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7
CisgICAgYXV0byYgdm0gPSBtX2lzb2xhdGVkV29ybGQtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tI
b2xkZXIgbG9jayh2bSk7CiAKICAgICBhdXRvKiBoYW5kbGVyRnVuY3Rpb24gPSBKU0M6OmpzRHlu
YW1pY0Nhc3Q8SlNDOjpKU0Z1bmN0aW9uKj4obV9qc0Z1bmN0aW9uLmdldCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKaW5kZXggZDllMzdhNjFhNzM4
Li41MTE0OTliMGJhNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXZlbnRMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5oCkBAIC0xMTIsNyArMTEyLDcgQEAgaW5saW5lIEpTQzo6SlNWYWx1ZSB3aW5kb3dF
dmVudEhhbmRsZXJBdHRyaWJ1dGUoTG9jYWxET01XaW5kb3cmIHdpbmRvdywgY29uc3QgQXQKIAog
aW5saW5lIEpTQzo6SlNWYWx1ZSB3aW5kb3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoSFRNTEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRE9NV3JhcHBlcldvcmxk
JiBpc29sYXRlZFdvcmxkKQogewotICAgIGlmIChSZWZQdHIgZG9tV2luZG93ID0gZWxlbWVudC5k
b2N1bWVudCgpLmRvbVdpbmRvdygpKQorICAgIGlmIChhdXRvKiBkb21XaW5kb3cgPSBlbGVtZW50
LmRvY3VtZW50KCkuZG9tV2luZG93KCkpCiAgICAgICAgIHJldHVybiBldmVudEhhbmRsZXJBdHRy
aWJ1dGUoKmRvbVdpbmRvdywgZXZlbnRUeXBlLCBpc29sYXRlZFdvcmxkKTsKICAgICByZXR1cm4g
SlNDOjpqc051bGwoKTsKIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCBpbmxpbmUgdm9pZCBzZXRXaW5k
b3dFdmVudEhhbmRsZXJBdHRyaWJ1dGUoTG9jYWxET01XaW5kb3cmIHdpbmRvdywgY29uc3QgQXRv
bVN0cgogdGVtcGxhdGU8dHlwZW5hbWUgSlNNYXliZUVycm9yRXZlbnRMaXN0ZW5lcj4KIGlubGlu
ZSB2b2lkIHNldFdpbmRvd0V2ZW50SGFuZGxlckF0dHJpYnV0ZShIVE1MRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBKU0M6OkpTVmFsdWUgbGlzdGVuZXIsIEpT
Qzo6SlNPYmplY3QmIGpzRXZlbnRUYXJnZXQpCiB7Ci0gICAgaWYgKFJlZlB0ciBkb21XaW5kb3cg
PSBlbGVtZW50LmRvY3VtZW50KCkuZG9tV2luZG93KCkpCisgICAgaWYgKGF1dG8qIGRvbVdpbmRv
dyA9IGVsZW1lbnQuZG9jdW1lbnQoKS5kb21XaW5kb3coKSkKICAgICAgICAgZG9tV2luZG93LT5z
ZXRBdHRyaWJ1dGVFdmVudExpc3RlbmVyPEpTTWF5YmVFcnJvckV2ZW50TGlzdGVuZXI+KGV2ZW50
VHlwZSwgbGlzdGVuZXIsICpqc0V2ZW50VGFyZ2V0Lmdsb2JhbE9iamVjdCgpKTsKIH0KIApAQCAt
MTM3LDggKzEzNyw4IEBAIGlubGluZSBKU0M6OkpTT2JqZWN0KiBKU0V2ZW50TGlzdGVuZXI6OmVu
c3VyZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYKICAgICBpZiAoVU5MSUtFTFko
IW1faXNvbGF0ZWRXb3JsZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmIHZt
ID0gbV9pc29sYXRlZFdvcmxkLT52bSgpOwotICAgIFJlZiBwcm90ZWN0ZWRUaGlzIHsgKnRoaXMg
fTsKKyAgICBKU0M6OlZNJiB2bSA9IG1faXNvbGF0ZWRXb3JsZC0+dm0oKTsKKyAgICBSZWYgcHJv
dGVjdCA9IGNvbnN0X2Nhc3Q8SlNFdmVudExpc3RlbmVyJj4oKnRoaXMpOwogICAgIEpTQzo6RW5z
dXJlU3RpbGxBbGl2ZVNjb3BlIHByb3RlY3RlZFdyYXBwZXIobV93cmFwcGVyLmdldCgpKTsKIAog
ICAgIGlmICghbV9pc0luaXRpYWxpemVkKSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAgaW5saW5lIEpT
Qzo6SlNPYmplY3QqIEpTRXZlbnRMaXN0ZW5lcjo6ZW5zdXJlSlNGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JgogICAgICAgICAgICAgbV9qc0Z1bmN0aW9uID0gSlNDOjpXZWFrPEpTQzo6
SlNPYmplY3Q+KGZ1bmN0aW9uKTsKICAgICAgICAgICAgIC8vIFdoZW4gSlNGdW5jdGlvbiBpcyBp
bml0aWFsaXplZCwgaW5pdGlhbGl6ZUpTRnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBtX3dyYXBw
ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHRvby4KICAgICAgICAgICAgIEFTU0VSVChtX3dyYXBw
ZXIpOwotICAgICAgICAgICAgdm0tPndyaXRlQmFycmllcihtX3dyYXBwZXIuZ2V0KCksIGZ1bmN0
aW9uKTsKKyAgICAgICAgICAgIHZtLndyaXRlQmFycmllcihtX3dyYXBwZXIuZ2V0KCksIGZ1bmN0
aW9uKTsKICAgICAgICAgICAgIG1faXNJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0
Q3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9t
LmgKaW5kZXggODk3YTRhMTlhMzRhLi5kZDc2MmMyMTAwZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXRDdXN0b20uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0Q3VzdG9tLmgKQEAgLTM4LDcgKzM4LDcgQEAg
cHVibGljOgogICAgIEpTRXZlbnRUYXJnZXRXcmFwcGVyKCkgPSBkZWZhdWx0OwogCiAgICAgSlNF
dmVudFRhcmdldFdyYXBwZXIoRXZlbnRUYXJnZXQmIHdyYXBwZWQsIEpTQzo6SlNPYmplY3QmIHdy
YXBwZXIpCi0gICAgICAgIDogbV93cmFwcGVkKHdyYXBwZWQpCisgICAgICAgIDogbV93cmFwcGVk
KCZ3cmFwcGVkKQogICAgICAgICAsIG1fd3JhcHBlcigmd3JhcHBlcikKICAgICB7IH0KIApAQCAt
NDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgSlNDOjpKU09iamVjdCYoKSB7IEFT
U0VSVChtX3dyYXBwZXIpOyByZXR1cm4gKm1fd3JhcHBlcjsgfQogCiBwcml2YXRlOgotICAgIFdl
YWtQdHI8RXZlbnRUYXJnZXQsIFdlYWtQdHJJbXBsV2l0aEV2ZW50VGFyZ2V0RGF0YT4gbV93cmFw
cGVkOworICAgIEV2ZW50VGFyZ2V0KiBtX3dyYXBwZWQgeyBudWxscHRyIH07CiAgICAgSlNDOjpK
U09iamVjdCogbV93cmFwcGVyIHsgbnVsbHB0ciB9OwogfTsKIApAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8T3BlcmF0aW9uIG9wZXJhdGlvbiwgQ2FzdGVkVGhpc0Vycm9y
QmVoYXZpb3IgPSBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6VGhyb3c+CiAgICAgc3RhdGljIEpT
Qzo6RW5jb2RlZEpTVmFsdWUgY2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lLCBjb25zdCBjaGFyKiBvcGVyYXRpb25O
YW1lKQogICAgIHsKLSAgICAgICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9i
amVjdCk7CisgICAgICAgIGF1dG8mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVj
dCk7CiAgICAgICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwog
CiAgICAgICAgIGF1dG8gdGhpc1ZhbHVlID0gY2FsbEZyYW1lLnRoaXNWYWx1ZSgpLnRvVGhpcygm
bGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpFQ01BTW9kZTo6c3RyaWN0KCkpOwpAQCAtNzAsNyAr
NzAsOCBAQCBwdWJsaWM6CiAgICAgICAgIGlmIChVTkxJS0VMWSh0aGlzT2JqZWN0LmlzTnVsbCgp
KSkKICAgICAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IobGV4aWNhbEdsb2JhbE9i
amVjdCwgdGhyb3dTY29wZSwgIkV2ZW50VGFyZ2V0Iiwgb3BlcmF0aW9uTmFtZSk7CiAKLSAgICAg
ICAgaWYgKFJlZlB0ciB3aW5kb3cgPSBkeW5hbWljRG93bmNhc3Q8TG9jYWxET01XaW5kb3c+KHRo
aXNPYmplY3Qud3JhcHBlZCgpKSkgeworICAgICAgICBhdXRvJiB3cmFwcGVkID0gdGhpc09iamVj
dC53cmFwcGVkKCk7CisgICAgICAgIGlmIChhdXRvIHdpbmRvdyA9IGR5bmFtaWNEb3duY2FzdDxM
b2NhbERPTVdpbmRvdz4od3JhcHBlZCkpIHsKICAgICAgICAgICAgIGlmICghd2luZG93LT5mcmFt
ZSgpIHx8ICFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJmxl
eGljYWxHbG9iYWxPYmplY3QsICp3aW5kb3csIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6SlNWYWx1ZTo6ZW5jb2RlKEpTQzo6anNVbmRlZmluZWQoKSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhl
Y1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhlY1N0YXRlLmNwcApp
bmRleCBjNTRmN2M4YTBhZGQuLmViNjMzNDAzNjdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFeGVjU3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXhlY1N0YXRlLmNwcApAQCAtMzUsMTAgKzM1LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdm9pZCBKU0V4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QpCiB7Ci0gICAgUmVmUHRyIGNvbnRleHQg
PSBleGVjdXRpb25Db250ZXh0KGxleGljYWxHbG9iYWxPYmplY3QpOworICAgIGF1dG8gY29udGV4
dCA9IGV4ZWN1dGlvbkNvbnRleHQobGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgY29udGV4dC0+Y2hlY2tlZEV2ZW50TG9vcCgpLT5w
ZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOworICAgIGNvbnRleHQtPmV2ZW50TG9vcCgpLnBl
cmZvcm1NaWNyb3Rhc2tDaGVja3BvaW50KCk7CiB9CiAKIEpTQzo6SlNWYWx1ZSBmdW5jdGlvbkNh
bGxIYW5kbGVyRnJvbUFueVRocmVhZChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkpTVmFsdWUgZnVuY3Rpb25PYmplY3QsIGNvbnN0IEpTQzo6Q2FsbERhdGEm
IGNhbGxEYXRhLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFy
Z3MsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0dXJuZWRFeGNlcHRpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNFeGVjU3RhdGUuaAppbmRleCBiNTZmMDBiZDAyMTEuLjY3NmZl
ZDcyYjVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeGVjU3Rh
dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4ZWNTdGF0ZS5oCkBAIC01
MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIGNhbGwo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIGZ1
bmN0aW9uT2JqZWN0LCBjb25zdCBKU0M6OkNhbGxEYXRhJiBjYWxsRGF0YSwgSlNDOjpKU1ZhbHVl
IHRoaXNWYWx1ZSwgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBOYWtlZFB0cjxKU0M6OkV4Y2Vw
dGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKLSAgICAgICAgUmVmIHZtID0gSlNDOjpn
ZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgSlNDOjpWTSYgdm0gPSBKU0M6Omdl
dFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9D
QVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5WYWx1ZTsKICAgICAg
ICAgewpAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVl
IGV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIGNvbnN0
IEpTQzo6U291cmNlQ29kZSYgc291cmNlLCBKU0M6OkpTVmFsdWUgdGhpc1ZhbHVlLCBOYWtlZFB0
cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsKLSAgICAgICAgUmVm
IHZtID0gSlNDOjpnZXRWTShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKKyAgICAgICAgSlNDOjpWTSYg
dm0gPSBKU0M6OmdldFZNKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAgICAgICAgIEpTQzo6SlNWYWx1ZSByZXR1cm5W
YWx1ZTsKICAgICAgICAgewpAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
SlNDOjpKU1ZhbHVlIHByb2ZpbGVkQ2FsbChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU0M6OlByb2ZpbGluZ1JlYXNvbiByZWFzb24sIEpTQzo6SlNWYWx1ZSBmdW5j
dGlvbk9iamVjdCwgY29uc3QgSlNDOjpDYWxsRGF0YSYgY2FsbERhdGEsIEpTQzo6SlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+JiByZXR1cm5lZEV4Y2VwdGlvbikKICAgICB7Ci0gICAgICAgIFJlZiB2bSA9IEpTQzo6Z2V0
Vk0obGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAgICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRW
TShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FU
Q0hfU0NPUEUodm0pOwogICAgICAgICBKU0M6OkpTVmFsdWUgcmV0dXJuVmFsdWU7CiAgICAgICAg
IHsKQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBw
cm9maWxlZEV2YWx1YXRlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IEpTQzo6UHJvZmlsaW5nUmVhc29uIHJlYXNvbiwgY29uc3QgSlNDOjpTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTQzo6SlNWYWx1ZSB0aGlzVmFsdWUsIE5ha2VkUHRyPEpTQzo6RXhjZXB0aW9uPiYgcmV0
dXJuZWRFeGNlcHRpb24pCiAgICAgewotICAgICAgICBSZWYgdm0gPSBKU0M6OmdldFZNKGxleGlj
YWxHbG9iYWxPYmplY3QpOworICAgICAgICBKU0M6OlZNJiB2bSA9IEpTQzo6Z2V0Vk0obGV4aWNh
bEdsb2JhbE9iamVjdCk7CiAgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BF
KHZtKTsKICAgICAgICAgSlNDOjpKU1ZhbHVlIHJldHVyblZhbHVlOwogICAgICAgICB7CkBAIC0x
MzMsNyArMTMzLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBsaW5rQW5k
RXZhbHVhdGVNb2R1bGUoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJiBtb2R1bGVLZXksIEpTQzo6SlNWYWx1ZSBzY3JpcHRGZXRj
aGVyLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4mIHJldHVybmVkRXhjZXB0aW9uKQogICAgIHsK
LSAgICAgICAgUmVmIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CisgICAg
ICAgIEpTQzo6Vk0mIHZtID0gSlNDOjpnZXRWTSgmbGV4aWNhbEdsb2JhbE9iamVjdCk7CiAgICAg
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX0NBVENIX1NDT1BFKHZtKTsKICAgICAgICAgSlNDOjpK
U1ZhbHVlIHJldHVyblZhbHVlOwogICAgICAgICB7CkBAIC0xNDEsNyArMTQxLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBKU0M6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZSgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgbW9kdWxlS2V5LCBzY3JpcHRGZXRjaGVyKTsKICAgICAgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpIHsKICAgICAgICAgICAgICAgICBy
ZXR1cm5lZEV4Y2VwdGlvbiA9IHNjb3BlLmV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIGlm
ICghdm0tPmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAg
IGlmICghdm0uaGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHNjb3BlLmNsZWFyRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEpT
Qzo6anNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KQEAgLTE2Miw3ICsxNjIsNyBAQCBwcml2
YXRlOgogCiAgICAgfkpTRXhlY1N0YXRlKCkKICAgICB7Ci0gICAgICAgIFJlZiB2bSA9IGN1cnJl
bnRTdGF0ZSgpLT52bSgpOworICAgICAgICBKU0M6OlZNJiB2bSA9IGN1cnJlbnRTdGF0ZSgpLT52
bSgpOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAgICAg
ICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uRXhjZXB0VGVybWluYXRpb24oKTsKIApAQCAtMTc0
LDcgKzE3NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChkaWRFeGl0SmF2YVNjcmlwdCkgewog
ICAgICAgICAgICAgZGlkTGVhdmVTY3JpcHRDb250ZXh0KGxleGljYWxHbG9iYWxPYmplY3QpOwog
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjbGVhciBhbnkgZXhjZXB0aW9ucyBmcm9tIG1pY3Jv
dGFzayBkcmFpbi4KLSAgICAgICAgICAgIGlmICghdm0tPmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4
Y2VwdGlvbigpKQorICAgICAgICAgICAgaWYgKCF2bS5oYXNQZW5kaW5nVGVybWluYXRpb25FeGNl
cHRpb24oKSkKICAgICAgICAgICAgICAgICBzY29wZS5jbGVhckV4Y2VwdGlvbigpOwogICAgICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFeHRl
bmRhYmxlTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudEN1c3RvbS5jcHAKaW5kZXggYWYwMjNkNTA5YzMyLi4w
ZmY3ZDBmZjc4NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXh0
ZW5kYWJsZU1lc3NhZ2VFdmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50Q3VzdG9tLmNwcApAQCAtMzcsNyArMzcsNyBA
QCB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBKU0M6OkVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpT
RXh0ZW5kYWJsZU1lc3NhZ2VFdmVudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2JqZWN0LCBKU0M6OkNhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAgIFJlZiB2bSA9IGxleGlj
YWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAKQEAgLTgxLDcgKzgxLDcgQEAgSlNWYWx1ZSBK
U0V4dGVuZGFibGVNZXNzYWdlRXZlbnQ6OmRhdGEoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9i
YWxPYmplY3QpIGNvbnMKICAgICAgICAgcmVzdWx0ID0ganNOdWxsKCk7CiAKICAgICAvLyBTYXZl
IHRoZSByZXN1bHQgc28gd2UgZG9uJ3QgaGF2ZSB0byBkZXNlcmlhbGl6ZSB0aGUgdmFsdWUgYWdh
aW4uCi0gICAgbV9kYXRhLnNldChSZWYgeyBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCkgfSwgdGhp
cywgcmVzdWx0KTsKKyAgICBtX2RhdGEuc2V0KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKSwgdGhp
cywgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4
IDU0NGViZWEyNTAwZi4uNjNjNjQ0NzczMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtNDMsMTkg
KzQzLDE4IEBAIHN0YXRpYyBKU0NfREVDTEFSRV9IT1NUX0ZVTkNUSU9OKGNhbGxKU0hUTUxBbGxD
b2xsZWN0aW9uKTsKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Nv
bW1vbi1kb20taW50ZXJmYWNlcy5odG1sI0hUTUxBbGxDb2xsZWN0aW9uLWNhbGwKIEpTQ19ERUZJ
TkVfSE9TVF9GVU5DVElPTihjYWxsSlNIVE1MQWxsQ29sbGVjdGlvbiwgKEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkpCiB7Ci0gICAgUmVm
IHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKIAogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNIVE1MQWxsQ29sbGVjdGlvbio+
KGNhbGxGcmFtZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOworICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKGNhbGxGcmFtZS0+YXJn
dW1lbnQoMCkuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CiAKICAgICBBdG9tU3RyaW5nIG5hbWVPckluZGV4ID0gY2FsbEZyYW1lLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhsZXhpY2FsR2xvYmFsT2JqZWN0KS0+dG9BdG9tU3Ry
aW5nKGxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7Ci0KLSAgICBSZWYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51bGxhYmxlPElE
TFVuaW9uPElETEludGVyZmFjZTxIVE1MQ29sbGVjdGlvbj4sIElETEludGVyZmFjZTxFbGVtZW50
Pj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLT5uYW1lZE9ySW5kZXhlZEl0ZW1Pckl0ZW1zKFdURk1vdmUobmFtZU9ySW5kZXgpKSkpKTsK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZSh0b0pTPElETE51
bGxhYmxlPElETFVuaW9uPElETEludGVyZmFjZTxIVE1MQ29sbGVjdGlvbj4sIElETEludGVyZmFj
ZTxFbGVtZW50Pj4+PigqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLm5hbWVkT3JJbmRleGVkSXRlbU9ySXRlbXMoV1RGTW92ZShuYW1lT3JJbmRl
eCkpKSkpOwogfQogCiBDYWxsRGF0YSBKU0hUTUxBbGxDb2xsZWN0aW9uOjpnZXRDYWxsRGF0YShK
U0NlbGwqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxl
bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxFbGVtZW50
Q3VzdG9tLmNwcAppbmRleCA0MTMyMGJmNzI4ODMuLjdlYTFiNjUwN2M3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MRWxlbWVudEN1c3RvbS5jcHAKQEAgLTUy
LDcgKzUyLDcgQEAgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNIVE1MRWxlbWVudChKU0dsb2Jh
bE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbEYKICAgICBhdXRvKiBqc0NvbnN0cnVj
dG9yID0ganNDYXN0PEpTRE9NQ29uc3RydWN0b3JCYXNlKj4oY2FsbEZyYW1lLmpzQ2FsbGVlKCkp
OwogICAgIEFTU0VSVChqc0NvbnN0cnVjdG9yKTsKIAotICAgIFJlZlB0ciBjb250ZXh0ID0ganND
b25zdHJ1Y3Rvci0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGF1dG8qIGNvbnRleHQg
PSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRVbmF2YWlsYWJsZUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgIkhUTUxFbGVt
ZW50Iik7CiAgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CkBAIC0xMTQsMTkgKzEx
NCwxOSBAQCBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU0hUTUxFbGVtZW50KEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRgogCiBKU1Njb3BlKiBKU0hUTUxFbGVtZW50
OjpwdXNoRXZlbnRIYW5kbGVyU2NvcGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTU2NvcGUqIHNjb3BlKSBjb25zdAogewotICAgIFJlZiBlbGVtZW50ID0gd3JhcHBlZCgp
OworICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gd3JhcHBlZCgpOwogCiAgICAgLy8gVGhlIGRv
Y3VtZW50IGlzIHB1dCBvbiBmaXJzdCwgZmFsbCBiYWNrIHRvIHNlYXJjaGluZyBpdCBvbmx5IGFm
dGVyIHRoZSBlbGVtZW50IGFuZCBmb3JtLgogICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IG1h
eSB1c2UgdGhlIHdyb25nIGdsb2JhbCBvYmplY3QuIElmIHRoaXMgaXMgY2FsbGVkIGZyb20gYSBu
YXRpdmUKICAgICAvLyBmdW5jdGlvbiwgdGhlbiBpdCB3b3VsZCBiZSBjb3JyZWN0IGJ1dCBub3Qg
b3B0aW1hbCBzaW5jZSB0aGUgbmF0aXZlIGZ1bmN0aW9uIHdvdWxkICprbm93KgogICAgIC8vIHRo
ZSBnbG9iYWwgb2JqZWN0LiBCdXQsIGl0IG1heSBiZSB0aGF0IGdsb2JhbE9iamVjdCgpIGlzIG1v
cmUgY29ycmVjdC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM0OTMyCi0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBW
TSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIAotICAgIHNjb3BlID0gSlNX
aXRoU2NvcGU6OmNyZWF0ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIGFzT2JqZWN0
KHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0KCksIGVsZW1lbnQtPmRvY3Vt
ZW50KCkpKSk7CisgICAgc2NvcGUgPSBKU1dpdGhTY29wZTo6Y3JlYXRlKHZtLCBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBzY29wZSwgYXNPYmplY3QodG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9i
YWxPYmplY3QoKSwgZWxlbWVudC5kb2N1bWVudCgpKSkpOwogCiAgICAgLy8gVGhlIGZvcm0gaXMg
bmV4dCwgc2VhcmNoZWQgYmVmb3JlIHRoZSBkb2N1bWVudCwgYnV0IGFmdGVyIHRoZSBlbGVtZW50
IGl0c2VsZi4KLSAgICBpZiAoYXV0byogZm9ybUFzc29jaWF0ZWQgPSBlbGVtZW50LT5hc0Zvcm1B
c3NvY2lhdGVkRWxlbWVudCgpKSB7CisgICAgaWYgKGF1dG8qIGZvcm1Bc3NvY2lhdGVkID0gZWxl
bWVudC5hc0Zvcm1Bc3NvY2lhdGVkRWxlbWVudCgpKSB7CiAgICAgICAgIGlmIChSZWZQdHIgZm9y
bSA9IGZvcm1Bc3NvY2lhdGVkLT5mb3JtKCkpCiAgICAgICAgICAgICBzY29wZSA9IEpTV2l0aFNj
b3BlOjpjcmVhdGUodm0sIGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBhc09iamVjdCh0b0pT
KGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCgpLCAqZm9ybSkpKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAppbmRleCA4
N2U5NjUzZTI0ZjguLjMxODE0ZDc0Zjg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwCkBAIC0zOCw4ICszOCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBKU0M7CiAKIEpTVmFsdWUgSlNIaXN0b3J5OjpzdGF0ZShKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCkgY29uc3QKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LnZtKCk7Ci0gICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgYXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRShsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCkpOwogICAgIHJldHVybiBjYWNoZWRQcm9wZXJ0eVZhbHVlKHRocm93U2NvcGUsIGxl
eGljYWxHbG9iYWxPYmplY3QsICp0aGlzLCB3cmFwcGVkKCkuY2FjaGVkU3RhdGUoKSwgW3RoaXMs
ICZ0aHJvd1Njb3BlLCAmbGV4aWNhbEdsb2JhbE9iamVjdF0oSlNDOjpUaHJvd1Njb3BlJikgewog
ICAgICAgICBpZiAoVU5MSUtFTFkod3JhcHBlZCgpLnN0YXRlKCkuaGFzRXhjZXB0aW9uKCkpKSB7
CiAgICAgICAgICAgICBwcm9wYWdhdGVFeGNlcHRpb24obGV4aWNhbEdsb2JhbE9iamVjdCwgdGhy
b3dTY29wZSwgd3JhcHBlZCgpLnN0YXRlKCkucmVsZWFzZUV4Y2VwdGlvbigpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcAppbmRleCBkNzFj
ZDY4MDc1OTMuLjU1MTUyM2YxZmI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNJbWFnZURhdGFDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSW1hZ2VEYXRhQ3VzdG9tLmNwcApAQCAtMzksMTQgKzM5LDE0IEBAIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CiAKIEpTVmFsdWUgdG9KU05ld2x5Q3JlYXRlZChKU0dsb2JhbE9iamVjdCogbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgUmVmPElt
YWdlRGF0YT4mJiBpbWFnZURhdGEpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1
dG8mIGRhdGEgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICBhdXRvKiB3cmFwcGVyID0gY3JlYXRl
V3JhcHBlcjxJbWFnZURhdGE+KGdsb2JhbE9iamVjdCwgV1RGTW92ZShpbWFnZURhdGEpKTsKICAg
ICBJZGVudGlmaWVyIGRhdGFOYW1lID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgImRhdGEi
X3MpOwogICAgIHdyYXBwZXItPnB1dERpcmVjdCh2bSwgZGF0YU5hbWUsIHRvSlMobGV4aWNhbEds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBkYXRhKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRE
ZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwogICAgIC8vIEZJWE1FOiBBZG9w
dCByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQsIGFuZCBzd2l0Y2ggdG8gcmVwb3J0RXh0cmFNZW1v
cnlBbGxvY2F0ZWQuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MjU5NQotICAgIHZtLT5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRh
Lmxlbmd0aCgpKTsKKyAgICB2bS5oZWFwLmRlcHJlY2F0ZWRSZXBvcnRFeHRyYU1lbW9yeShkYXRh
Lmxlbmd0aCgpKTsKICAgICAKICAgICByZXR1cm4gd3JhcHBlcjsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTS2V5ZnJhbWVFZmZlY3RDdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNLZXlmcmFtZUVmZmVjdEN1c3RvbS5jcHAKaW5kZXgg
NGZlMTYxOWUzYjdlLi5mZTgxYmEyMmMyN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTS2V5ZnJhbWVFZmZlY3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTS2V5ZnJhbWVFZmZlY3RDdXN0b20uY3BwCkBAIC00MSw3ICs0MSw3IEBA
IEpTVmFsdWUgSlNLZXlmcmFtZUVmZmVjdDo6Z2V0S2V5ZnJhbWVzKEpTR2xvYmFsT2JqZWN0JiBs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsCiB7CiAgICAgYXV0byBsb2NrID0gSlNMb2NrSG9sZGVy
IHsgJmxleGljYWxHbG9iYWxPYmplY3QgfTsKIAotICAgIFJlZlB0ciBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oJmxleGljYWxHbG9iYWxPYmplY3QpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KCZsZXhpY2FsR2xvYmFsT2JqZWN0KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAg
IGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3Rl
bmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTGF6eUV2ZW50TGlzdGVuZXIu
Y3BwCmluZGV4IGJmZjIwNjgzZmVjZi4uZmJmNTI1ZTc4NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xhenlFdmVudExpc3RlbmVyLmNwcApAQCAtNDYsNyArNDYs
NyBAQCBERUZJTkVfREVCVUdfT05MWV9HTE9CQUwoV1RGOjpSZWZDb3VudGVkTGVha0NvdW50ZXIs
IGV2ZW50TGlzdGVuZXJDb3VudGVyLCAoIkpTTAogc3RydWN0IEpTTGF6eUV2ZW50TGlzdGVuZXI6
OkNyZWF0aW9uQXJndW1lbnRzIHsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lOwogICAgIGNvbnN0IEF0b21TdHJpbmcmIGF0dHJpYnV0ZVZhbHVlOwotICAgIFdlYWtSZWY8
RG9jdW1lbnQsIFdlYWtQdHJJbXBsV2l0aEV2ZW50VGFyZ2V0RGF0YT4gZG9jdW1lbnQ7CisgICAg
RG9jdW1lbnQmIGRvY3VtZW50OwogICAgIFdlYWtQdHI8Q29udGFpbmVyTm9kZSwgV2Vha1B0cklt
cGxXaXRoRXZlbnRUYXJnZXREYXRhPiBub2RlOwogICAgIEpTT2JqZWN0KiB3cmFwcGVyOwogICAg
IGJvb2wgc2hvdWxkVXNlU1ZHRXZlbnROYW1lOwpAQCAtNzYsNyArNzYsNyBAQCBKU0xhenlFdmVu
dExpc3RlbmVyOjpKU0xhenlFdmVudExpc3RlbmVyKENyZWF0aW9uQXJndW1lbnRzJiYgYXJndW1l
bnRzLCBjb25zdCBVUgogICAgICwgbV9zb3VyY2VVUkwoc291cmNlVVJMKQogICAgICwgbV9zb3Vy
Y2VQb3NpdGlvbihjb252ZXJ0WmVyb1RvT25lKHNvdXJjZVBvc2l0aW9uKSkKICAgICAsIG1fb3Jp
Z2luYWxOb2RlKFdURk1vdmUoYXJndW1lbnRzLm5vZGUpKQotICAgICwgbV9zb3VyY2VUYWludGVk
T3JpZ2luKEpTQzo6Y29tcHV0ZU5ld1NvdXJjZVRhaW50ZWRPcmlnaW5Gcm9tU3RhY2soYXJndW1l
bnRzLmRvY3VtZW50LT52bSgpLCBhcmd1bWVudHMuZG9jdW1lbnQtPnZtKCkudG9wQ2FsbEZyYW1l
KSkKKyAgICAsIG1fc291cmNlVGFpbnRlZE9yaWdpbihKU0M6OmNvbXB1dGVOZXdTb3VyY2VUYWlu
dGVkT3JpZ2luRnJvbVN0YWNrKGFyZ3VtZW50cy5kb2N1bWVudC52bSgpLCBhcmd1bWVudHMuZG9j
dW1lbnQudm0oKS50b3BDYWxsRnJhbWUpKQogewogI2lmbmRlZiBOREVCVUcKICAgICBldmVudExp
c3RlbmVyQ291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBKU09iamVjdCog
SlNMYXp5RXZlbnRMaXN0ZW5lcjo6aW5pdGlhbGl6ZUpTRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgZXhlYwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUmVmUHRyIGVsZW1lbnQgPSBkeW5hbWljRG93bmNhc3Q8RWxlbWVu
dD4obV9vcmlnaW5hbE5vZGUuZ2V0KCkpOworICAgIFJlZlB0ciBlbGVtZW50ID0gIGR5bmFtaWNE
b3duY2FzdDxFbGVtZW50PihtX29yaWdpbmFsTm9kZS5nZXQoKSk7CiAgICAgaWYgKCFkb2N1bWVu
dC0+Y2hlY2tlZENvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0lubGluZUV2ZW50SGFuZGxl
cnMobV9zb3VyY2VVUkwuc3RyaW5nKCksIG1fc291cmNlUG9zaXRpb24ubV9saW5lLCBtX2NvZGUs
IGVsZW1lbnQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTQ4LDcgKzE0
OCw3IEBAIEpTT2JqZWN0KiBKU0xhenlFdmVudExpc3RlbmVyOjppbml0aWFsaXplSlNGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBleGVjCiAgICAgaWYgKCFnbG9iYWxPYmplY3QpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIEpT
R2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gZ2xvYmFsT2JqZWN0OwpAQCAtMTcz
LDExICsxNzMsMTEgQEAgSlNPYmplY3QqIEpTTGF6eUV2ZW50TGlzdGVuZXI6OmluaXRpYWxpemVK
U0Z1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGV4ZWMKIAogICAgIEpTRnVuY3Rpb24q
IGxpc3RlbmVyQXNGdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oanNGdW5jdGlvbik7CiAK
LSAgICBpZiAoUmVmUHRyIG9yaWdpbmFsTm9kZSA9IG1fb3JpZ2luYWxOb2RlLmdldCgpKSB7Cisg
ICAgaWYgKG1fb3JpZ2luYWxOb2RlKSB7CiAgICAgICAgIGlmICghd3JhcHBlcigpKSB7CiAgICAg
ICAgICAgICAvLyBFbnN1cmUgdGhhdCAnbm9kZScgaGFzIGEgSmF2YVNjcmlwdCB3cmFwcGVyIHRv
IG1hcmsgdGhlIGV2ZW50IGxpc3RlbmVyIHdlJ3JlIGNyZWF0aW5nLgogICAgICAgICAgICAgLy8g
RklYTUU6IFNob3VsZCBwYXNzIHRoZSBnbG9iYWwgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUg
bm9kZQotICAgICAgICAgICAgc2V0V3JhcHBlcldoZW5Jbml0aWFsaXppbmdKU0Z1bmN0aW9uKHZt
LCBhc09iamVjdCh0b0pTKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgKm9yaWdp
bmFsTm9kZSkpKTsKKyAgICAgICAgICAgIHNldFdyYXBwZXJXaGVuSW5pdGlhbGl6aW5nSlNGdW5j
dGlvbih2bSwgYXNPYmplY3QodG9KUyhsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
ICptX29yaWdpbmFsTm9kZSkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFkZCB0aGUgZXZl
bnQncyBob21lIGVsZW1lbnQgdG8gdGhlIHNjb3BlCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBSZWZQ
dHI8SlNMYXp5RXZlbnRMaXN0ZW5lcj4gSlNMYXp5RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKENyZWF0
aW9uQXJndW1lbnRzJiYgYXJndQogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBw
cm92aWRlIHNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgZnJhbWVsZXNzIGRvY3VtZW50cyB0b28gKGUu
Zy4gZm9yIGltcG9ydGluZyBub2RlcyBmcm9tIFhNTEh0dHBSZXF1ZXN0LnJlc3BvbnNlWE1MKS4K
ICAgICBUZXh0UG9zaXRpb24gcG9zaXRpb247CiAgICAgVVJMIHNvdXJjZVVSTDsKLSAgICBpZiAo
UmVmUHRyIGZyYW1lID0gYXJndW1lbnRzLmRvY3VtZW50LT5mcmFtZSgpKSB7Ci0gICAgICAgIGlm
ICghZnJhbWUtPmNoZWNrZWRTY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlwdHMoUmVhc29uRm9yQ2Fs
bGluZ0NhbkV4ZWN1dGVTY3JpcHRzOjpBYm91dFRvQ3JlYXRlRXZlbnRMaXN0ZW5lcikpCisgICAg
aWYgKGF1dG8qIGZyYW1lID0gYXJndW1lbnRzLmRvY3VtZW50LmZyYW1lKCkpIHsKKyAgICAgICAg
aWYgKCFmcmFtZS0+c2NyaXB0KCkuY2FuRXhlY3V0ZVNjcmlwdHMoUmVhc29uRm9yQ2FsbGluZ0Nh
bkV4ZWN1dGVTY3JpcHRzOjpBYm91dFRvQ3JlYXRlRXZlbnRMaXN0ZW5lcikpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcG9zaXRpb24gPSBmcmFtZS0+c2NyaXB0KCkuZXZl
bnRIYW5kbGVyUG9zaXRpb24oKTsKLSAgICAgICAgc291cmNlVVJMID0gYXJndW1lbnRzLmRvY3Vt
ZW50LT51cmwoKTsKKyAgICAgICAgc291cmNlVVJMID0gYXJndW1lbnRzLmRvY3VtZW50LnVybCgp
OwogICAgIH0KIAogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEpTTGF6eUV2ZW50TGlzdGVuZXIo
V1RGTW92ZShhcmd1bWVudHMpLCBzb3VyY2VVUkwsIHBvc2l0aW9uKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0xvY2FsRE9NV2luZG93Q3VzdG9tLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYWxET01XaW5kb3dDdXN0b20uY3BwCmluZGV4
IGNlNzQ5OGMzYzBjNC4uNjE3ODEyOGUxNTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0xvY2FsRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0xvY2FsRE9NV2luZG93Q3VzdG9tLmNwcApAQCAtOTAsNyArOTAsNyBA
QCBERUZJTkVfVklTSVRfQURESVRJT05BTF9DSElMRFJFTihKU0xvY2FsRE9NV2luZG93KTsKICNp
ZiBFTkFCTEUoVVNFUl9NRVNTQUdFX0hBTkRMRVJTKQogSlNDX0RFRklORV9DVVNUT01fR0VUVEVS
KGpzTG9jYWxET01XaW5kb3dfd2Via2l0LCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxP
YmplY3QsIEVuY29kZWRKU1ZhbHVlIHRoaXNWYWx1ZSwgUHJvcGVydHlOYW1lKSkKIHsKLSAgICBS
ZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxH
bG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IHRvSlNET01HbG9iYWxP
YmplY3Q8SlNMb2NhbERPTVdpbmRvdz4odm0sIEpTVmFsdWU6OmRlY29kZSh0aGlzVmFsdWUpKTsK
ICAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhs
ZXhpY2FsR2xvYmFsT2JqZWN0LCBjYXN0ZWRUaGlzLT53cmFwcGVkKCkpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwpAQCAtMTEzLDcgKzExMyw3IEBAIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgYWxsb3dzTGVnYWN5RXhwYW5kb0luZGV4ZWRQcm9wZXJ0
aWVzKCkKIHRlbXBsYXRlIDxET01XaW5kb3dUeXBlIHdpbmRvd1R5cGU+CiBib29sIGpzTG9jYWxE
T01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzKEpTRE9NR2xvYmFsT2Jq
ZWN0KiB0aGlzT2JqZWN0LCBET01XaW5kb3cmIHdpbmRvdywgSlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0o
KTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRv
JiBidWlsdGluTmFtZXMgPSBXZWJDb3JlOjpidWlsdGluTmFtZXModm0pOwpAQCAtMTQwLDcgKzE0
MCw3IEBAIGJvb2wganNMb2NhbERPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRB
Y2Nlc3MoSlNET01HbG9iYWxPYmplY3QqIHRoaXNPCiAgICAgICAgIHx8IHByb3BlcnR5TmFtZSA9
PSBidWlsdGluTmFtZXMubG9jYXRpb25QdWJsaWNOYW1lKCkKICAgICAgICAgfHwgcHJvcGVydHlO
YW1lID09IGJ1aWx0aW5OYW1lcy5jbG9zZWRQdWJsaWNOYW1lKCkKICAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IGJ1aWx0aW5OYW1lcy5mcmFtZXNQdWJsaWNOYW1lKCkKLSAgICAgICAgfHwgcHJv
cGVydHlOYW1lID09IHZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgKKyAgICAgICAgfHwgcHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aAogICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gYnVpbHRpbk5hbWVzLnRvcFB1YmxpY05hbWUoKQogICAgICAgICB8fCBwcm9wZXJ0eU5h
bWUgPT0gYnVpbHRpbk5hbWVzLm9wZW5lclB1YmxpY05hbWUoKQogICAgICAgICB8fCBwcm9wZXJ0
eU5hbWUgPT0gYnVpbHRpbk5hbWVzLnBhcmVudFB1YmxpY05hbWUoKSkgewpAQCAtMTU3LDggKzE1
Nyw4IEBAIGJvb2wganNMb2NhbERPTVdpbmRvd0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRB
Y2Nlc3MoSlNET01HbG9iYWxPYmplY3QqIHRoaXNPCiAgICAgLy8gdGhlIE1veiB3YXkuCiAgICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IHRvIG5hbWVkIGF0dHJpYnV0ZXMgb24gUmVtb3RlRnJhbWVz
LgogICAgIGlmIChSZWZQdHIgZnJhbWUgPSB3aW5kb3cuZnJhbWUoKSkgewotICAgICAgICBpZiAo
UmVmUHRyIHNjb3BlZENoaWxkID0gZHluYW1pY0Rvd25jYXN0PExvY2FsRnJhbWU+KGZyYW1lLT50
cmVlKCkuc2NvcGVkQ2hpbGRCeVNwZWNpZmllZE5hbWUocHJvcGVydHlOYW1lVG9BdG9tU3RyaW5n
KHByb3BlcnR5TmFtZSkpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVu
dW0sIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlZENoaWxkLT5kb2N1bWVudCgpLT5w
cm90ZWN0ZWRXaW5kb3coKS5nZXQoKSkpOworICAgICAgICBpZiAoYXV0byogc2NvcGVkQ2hpbGQg
PSBkeW5hbWljRG93bmNhc3Q8TG9jYWxGcmFtZT4oZnJhbWUtPnRyZWUoKS5zY29wZWRDaGlsZEJ5
U3BlY2lmaWVkTmFtZShwcm9wZXJ0eU5hbWVUb0F0b21TdHJpbmcocHJvcGVydHlOYW1lKSkpKSB7
CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSwgdG9KUygmbGV4aWNhbEds
b2JhbE9iamVjdCwgc2NvcGVkQ2hpbGQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KQEAgLTIwMCwxMyArMjAwLDEy
IEBAIGJvb2wgSlNMb2NhbERPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpCiAgICAgQVNTRVJUKGxleGljYWxHbG9iYWxPYmpl
Y3QtPnZtKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0FQSUxvY2soKSk7CiAKICAgICAvLyBIYW5k
IG9mZiBhbGwgY3Jvc3MtZG9tYWluIGFjY2VzcyB0byBqc0xvY2FsRE9NV2luZG93R2V0T3duUHJv
cGVydHlTbG90UmVzdHJpY3RlZEFjY2Vzcy4KLSAgICBSZWYgd3JhcHBlZCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgIGlmICghQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0
LCB3cmFwcGVkLCBlcnJvck1lc3NhZ2UpKQotICAgICAgICByZXR1cm4ganNMb2NhbERPTVdpbmRv
d0dldE93blByb3BlcnR5U2xvdFJlc3RyaWN0ZWRBY2Nlc3M8RE9NV2luZG93VHlwZTo6TG9jYWw+
KHRoaXNPYmplY3QsIHdyYXBwZWQsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUs
IHNsb3QsIGVycm9yTWVzc2FnZSk7CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFs
bG93QWNjZXNzVG9ET01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndy
YXBwZWQoKSwgZXJyb3JNZXNzYWdlKSkKKyAgICAgICAgcmV0dXJuIGpzTG9jYWxET01XaW5kb3dH
ZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6OkxvY2FsPih0
aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCksICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBw
cm9wZXJ0eU5hbWUsIHNsb3QsIGVycm9yTWVzc2FnZSk7CiAKICAgICBpZiAoVU5MSUtFTFkoIXRo
aXNPYmplY3QtPm1fd2luZG93Q2xvc2VXYXRjaHBvaW50cykpCi0gICAgICAgIHRoaXNPYmplY3Qt
Pm1fd2luZG93Q2xvc2VXYXRjaHBvaW50cyA9IFdhdGNocG9pbnRTZXQ6OmNyZWF0ZSh3cmFwcGVk
LT5mcmFtZSgpID8gSXNXYXRjaGVkIDogSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fd2luZG93Q2xvc2VXYXRjaHBvaW50cyA9IFdhdGNocG9pbnRTZXQ6OmNyZWF0ZSh0aGlz
T2JqZWN0LT53cmFwcGVkKCkuZnJhbWUoKSA/IElzV2F0Y2hlZCA6IElzSW52YWxpZGF0ZWQpOwog
ICAgIC8vIFdlIHVzZSBtX3dpbmRvd0Nsb3NlV2F0Y2hwb2ludHMgdG8gY2xlYXIgYW55IGlubGlu
ZSBjYWNoZXMgb25jZSB0aGUgZnJhbWUgaXMgY2xlYXJlZC4KICAgICAvLyBUaGlzIGlzIHNvdW5k
IGJlY2F1c2UgTG9jYWxET01XaW5kb3cgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhdCBtb3N0IG9u
ZSBmcmFtZSBpbiBpdHMgbGlmZXRpbWUuCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fd2luZG93Q2xv
c2VXYXRjaHBvaW50cy0+aXNTdGlsbFZhbGlkKCkpCkBAIC0yMTksNyArMjE4LDcgQEAgYm9vbCBK
U0xvY2FsRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleGkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFVT
RVJfTUVTU0FHRV9IQU5ETEVSUykKLSAgICBpZiAocHJvcGVydHlOYW1lID09IGJ1aWx0aW5OYW1l
cyhsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpKS53ZWJraXRQdWJsaWNOYW1lKCkgJiYgd3JhcHBl
ZC0+c2hvdWxkSGF2ZVdlYktpdE5hbWVzcGFjZUZvcldvcmxkKHRoaXNPYmplY3QtPnByb3RlY3Rl
ZFdvcmxkKCkpKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBidWlsdGluTmFtZXMobGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKSkud2Via2l0UHVibGljTmFtZSgpICYmIHRoaXNPYmplY3QtPndy
YXBwZWQoKS5zaG91bGRIYXZlV2ViS2l0TmFtZXNwYWNlRm9yV29ybGQodGhpc09iamVjdC0+d29y
bGQoKSkpIHsKICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20odGhpc09iamVjdCwgSlND
OjpQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5LCBqc0xvY2FsRE9NV2luZG93X3dlYmtpdCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KQEAgLTIzMSw4ICsyMzAsOCBAQCBib29sIEpTTG9jYWxET01XaW5kb3c6OmdldE93
blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aQogYm9v
bCBKU0xvY2FsRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBv
YmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRl
eCwgUHJvcGVydHlTbG90JiBzbG90KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMb2NhbERPTVdpbmRvdyo+KG9iamVjdCk7Ci0gICAgUmVmIHdpbmRvdyA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKTsKLSAgICBSZWZQdHIgZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgYXV0
byYgd2luZG93ID0gdGhpc09iamVjdC0+d3JhcHBlZCgpOworICAgIGF1dG8qIGZyYW1lID0gd2lu
ZG93LmZyYW1lKCk7CiAKICAgICAvLyBJbmRleGVkIGdldHRlcnMgdGFrZSBwcmVjZW5kZW5jZSBv
dmVyIHJlZ3VsYXIgcHJvcGVydGllcywgc28gY2FjaGluZyB3b3VsZCBiZSBpbnZhbGlkLgogICAg
IHNsb3QuZGlzYWJsZUNhY2hpbmcoKTsKQEAgLTI0Miw4ICsyNDEsOCBAQCBib29sIEpTTG9jYWxE
T01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplYwogICAgIGlmIChmcmFtZSAmJiBpbmRleCA8IGZyYW1lLT50cmVlKCkuc2NvcGVk
Q2hpbGRDb3VudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovLzExODI2MzMzNz4gTG9j
YWxET01XaW5kb3c6Omxlbmd0aCBuZWVkcyB0byBpbmNsdWRlIFJlbW90ZUZyYW1lcy4KICAgICAg
ICAgLy8gVGhpcyBzaG91bGQgYWxzbyB3b3JrIGlmIGl0J3MgYSBSZW1vdGVGcmFtZSwgaXQgc2hv
dWxkIGp1c3QgcmV0dXJuIGEgUmVtb3RlRE9NV2luZG93LgotICAgICAgICBpZiAoUmVmUHRyIHNj
b3BlZENoaWxkID0gZHluYW1pY0Rvd25jYXN0PExvY2FsRnJhbWU+KGZyYW1lLT50cmVlKCkuc2Nv
cGVkQ2hpbGQoaW5kZXgpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzT2JqZWN0
LCBlbnVtVG9VbmRlcmx5aW5nVHlwZShKU0M6OlByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSks
IHRvSlMobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGVkQ2hpbGQtPmRvY3VtZW50KCktPnByb3Rl
Y3RlZFdpbmRvdygpLmdldCgpKSk7CisgICAgICAgIGlmIChhdXRvKiBzY29wZWRDaGlsZCA9IGR5
bmFtaWNEb3duY2FzdDxMb2NhbEZyYW1lPihmcmFtZS0+dHJlZSgpLnNjb3BlZENoaWxkKGluZGV4
KSkpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUodGhpc09iamVjdCwgZW51bVRvVW5kZXJs
eWluZ1R5cGUoSlNDOjpQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpLCB0b0pTKGxleGljYWxH
bG9iYWxPYmplY3QsIHNjb3BlZENoaWxkLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTcsMTMgKzI1Niwx
MyBAQCBib29sIEpTTG9jYWxET01XaW5kb3c6OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNP
YmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplYwogCiBib29sIEpTTG9jYWxET01XaW5kb3c6OnB1
dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2Nh
bERPTVdpbmRvdyo+KGNlbGwpOwogCiAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygqbGV4aWNhbEds
b2JhbE9iamVjdCwgdGhpc09iamVjdC0+cHJvdGVjdGVkV3JhcHBlZCgpLCBlcnJvck1lc3NhZ2Up
KSB7CisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgZXJyb3JNZXNz
YWdlKSkgewogICAgICAgICAvLyBXZSBvbmx5IGFsbG93IHNldHRpbmcgImxvY2F0aW9uIiBhdHRy
aWJ1dGUgY3Jvc3Mtb3JpZ2luLgogICAgICAgICBpZiAocHJvcGVydHlOYW1lID09IGJ1aWx0aW5O
YW1lcyh2bSkubG9jYXRpb25QdWJsaWNOYW1lKCkpIHsKICAgICAgICAgICAgIGF1dG8gc2V0dGVy
ID0gc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5TmFtZSktPnByb3Bl
cnR5UHV0dGVyKCk7CkBAIC0yODIsMTggKzI4MSwxOCBAQCBib29sIEpTTG9jYWxET01XaW5kb3c6
OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQ
cgogCiBib29sIEpTTG9jYWxET01XaW5kb3c6OnB1dEJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgdW5zaWduZWQgaW5kZXgsIEpTVmFsdWUg
dmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhbERPTVdpbmRvdyo+KGNlbGwpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2U7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9E
T01XaW5kb3coKmxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPnByb3RlY3RlZFdyYXBw
ZWQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53
cmFwcGVkKCksIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgdGhyb3dTZWN1cml0eUVycm9yKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KICAgICAKICAgICBpZiAoYWxsb3dzTGVnYWN5RXhwYW5kb0luZGV4ZWRQ
cm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgaWYgKFJlZlB0ciBkb2N1bWVudCA9IHRoaXNPYmplY3Qt
PndyYXBwZWQoKS5kb2N1bWVudCgpKQorICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSB0aGlz
T2JqZWN0LT53cmFwcGVkKCkuZG9jdW1lbnQoKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAi
QWRkaW5nIGV4cGFuZG8gaW5kZXhlZCBwcm9wZXJ0aWVzIHRvICd3aW5kb3cnIHdhcyBhIG5vbi1z
dGFuZGFyZCBiZWhhdmlvciB0aGF0IGlzIG5vdyByZW1vdmVkLiJfcyk7CiAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgQmFzZTo6cHV0QnlJbmRleCh0aGlzT2JqZWN0LCBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBpbmRleCwgdmFsdWUsIHNob3VsZFRocm93KSk7CiAgICAgfQpAQCAtMzA0
LDcgKzMwMyw3IEBAIGJvb2wgSlNMb2NhbERPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHkoSlNDZWxs
KiBjZWxsLCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2FsRE9NV2luZG93Kj4oY2VsbCk7CiAgICAgLy8gT25seSBhbGxv
dyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCi0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+cHJvdGVjdGVkV3JhcHBlZCgpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpKQorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhy
b3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChzdGQ6Om9w
dGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAg
ICAgICBpZiAoIWFsbG93c0xlZ2FjeUV4cGFuZG9JbmRleGVkUHJvcGVydGllcygpKQpAQCAtMzE3
LDcgKzMxNiw3IEBAIGJvb2wgSlNMb2NhbERPTVdpbmRvdzo6ZGVsZXRlUHJvcGVydHlCeUluZGV4
KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljCiB7CiAgICAgYXV0byogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0xvY2FsRE9NV2luZG93Kj4oY2VsbCk7CiAgICAgLy8gT25seSBhbGxv
dyBkZWxldGluZyBwcm9wZXJ0aWVzIGJ5IGZyYW1lcyBpbiB0aGUgc2FtZSBvcmlnaW4uCi0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNh
bEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+cHJvdGVjdGVkV3JhcHBlZCgpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpKQorICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhy
b3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChpc0luZGV4
KHByb3BlcnR5TmFtZSkgJiYgIWFsbG93c0xlZ2FjeUV4cGFuZG9JbmRleGVkUHJvcGVydGllcygp
KQogICAgICAgICByZXR1cm4gcHJvcGVydHlOYW1lID49IHRoaXNPYmplY3QtPndyYXBwZWQoKS5s
ZW5ndGgoKTsKQEAgLTM2NSwxMSArMzY0LDExIEBAIHN0YXRpYyB2b2lkIGFkZENyb3NzT3JpZ2lu
UHJvcGVydHlOYW1lcyhWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzCiB0
ZW1wbGF0ZSA8Q3Jvc3NPcmlnaW5PYmplY3Qgb2JqZWN0VHlwZT4KIHZvaWQgYWRkQ3Jvc3NPcmln
aW5Pd25Qcm9wZXJ0eU5hbWVzKEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmpl
Y3QsIEpTQzo6UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0gICAgUmVmIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOworICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpOwogICAgIGFkZENyb3NzT3JpZ2luUHJvcGVydHlOYW1lczxvYmplY3RUeXBl
Pih2bSwgcHJvcGVydHlOYW1lcyk7CiAKICAgICBzdGF0aWMgY29uc3QgSWRlbnRpZmllciogY29u
c3QgcHJvcGVydGllc1tdID0gewotICAgICAgICAmdm0tPnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLnRoZW5QdWJsaWNOYW1lKCksICZ2bS0+cHJvcGVydHlOYW1lcy0+dG9TdHJpbmdUYWdT
eW1ib2wsICZ2bS0+cHJvcGVydHlOYW1lcy0+aGFzSW5zdGFuY2VTeW1ib2wsICZ2bS0+cHJvcGVy
dHlOYW1lcy0+aXNDb25jYXRTcHJlYWRhYmxlU3ltYm9sCisgICAgICAgICZ2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS50aGVuUHVibGljTmFtZSgpLCAmdm0ucHJvcGVydHlOYW1lcy0+
dG9TdHJpbmdUYWdTeW1ib2wsICZ2bS5wcm9wZXJ0eU5hbWVzLT5oYXNJbnN0YW5jZVN5bWJvbCwg
JnZtLnByb3BlcnR5TmFtZXMtPmlzQ29uY2F0U3ByZWFkYWJsZVN5bWJvbAogICAgIH07CiAKICAg
ICBmb3IgKGF1dG8qIHByb3BlcnR5IDogcHJvcGVydGllcykKQEAgLTM4MSwxNSArMzgwLDE1IEBA
IHRlbXBsYXRlIHZvaWQgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0eU5hbWVzPENyb3NzT3JpZ2lu
T2JqZWN0OjpMb2NhdGlvbj4oSlNDOjpKCiAKIHN0YXRpYyB2b2lkIGFkZFNjb3BlZENoaWxkcmVu
SW5kZXhlcyhKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgTG9jYWxET01XaW5k
b3cmIHdpbmRvdywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMpCiB7Ci0gICAgUmVm
UHRyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSB3
aW5kb3cuZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHIgZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBhdXRvKiBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKKyAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgdW5zaWduZWQgc2NvcGVkQ2hpbGRDb3VudCA9IGZy
YW1lLT50cmVlKCkuc2NvcGVkQ2hpbGRDb3VudCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzY29wZWRDaGlsZENvdW50OyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElk
ZW50aWZpZXI6OmZyb20odm0sIGkpKTsKQEAgLTQwMCw3ICszOTksNyBAQCB2b2lkIEpTTG9jYWxE
T01XaW5kb3c6OmdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxP
YmplY3QqIGxleAogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhbERPTVdp
bmRvdyo+KG9iamVjdCk7CiAKLSAgICBhZGRTY29wZWRDaGlsZHJlbkluZGV4ZXMoKmxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPnByb3RlY3RlZFdyYXBwZWQoKSwgcHJvcGVydHlOYW1l
cyk7CisgICAgYWRkU2NvcGVkQ2hpbGRyZW5JbmRleGVzKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aGlzT2JqZWN0LT53cmFwcGVkKCksIHByb3BlcnR5TmFtZXMpOwogCiAgICAgaWYgKCFCaW5kaW5n
U2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVj
dCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKSB7CiAg
ICAgICAgIGlmIChtb2RlID09IERvbnRFbnVtUHJvcGVydGllc01vZGU6OkluY2x1ZGUpCkBAIC00
MTIsMTIgKzQxMSwxMiBAQCB2b2lkIEpTTG9jYWxET01XaW5kb3c6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleAogCiBib29sIEpTTG9jYWxE
T01XaW5kb3c6OmRlZmluZU93blByb3BlcnR5KEpTQzo6SlNPYmplY3QqIG9iamVjdCwgSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBjb25zdCBKU0M6OlByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgYm9v
bCBzaG91bGRUaHJvdykKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgp
OworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU0xvY2FsRE9NV2luZG93Kj4ob2JqZWN0KTsKICAgICAvLyBPbmx5IGFsbG93IGRlZmlu
aW5nIHByb3BlcnRpZXMgaW4gdGhpcyB3YXkgYnkgZnJhbWVzIGluIHRoZSBzYW1lIG9yaWdpbiwg
YXMgaXQgYWxsb3dzIHNldHRlcnMgdG8gYmUgaW50cm9kdWNlZC4KLSAgICBpZiAoIUJpbmRpbmdT
ZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0
LCB0aGlzT2JqZWN0LT5wcm90ZWN0ZWRXcmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisg
ICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4
aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJy
b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKHBhcnNlSW5kZXgocHJvcGVydHlO
YW1lKSAmJiAhYWxsb3dzTGVnYWN5RXhwYW5kb0luZGV4ZWRQcm9wZXJ0aWVzKCkpCiAgICAgICAg
IHJldHVybiB0eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIHNob3VsZFRocm93
LCBtYWtlVW5zdXBwb3J0ZWRJbmRleGVkU2V0dGVyRXJyb3JNZXNzYWdlKCJXaW5kb3ciKSk7CkBA
IC00MzMsNyArNDMyLDcgQEAgYm9vbCBKU0xvY2FsRE9NV2luZG93OjpkZWZpbmVPd25Qcm9wZXJ0
eShKU0M6OkpTT2JqZWN0KiBvYmplY3QsIEpTQzo6SlNHbG9iYWxPYmoKIEpTVmFsdWUgSlNMb2Nh
bERPTVdpbmRvdzo6Z2V0UHJvdG90eXBlKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogewogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNMb2NhbERPTVdpbmRvdyo+KG9iamVjdCk7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVj
dC0+cHJvdGVjdGVkV3JhcHBlZCgpLCBEb05vdFJlcG9ydFNlY3VyaXR5RXJyb3IpKQorICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVy
cm9yKSkKICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwogCiAgICAgcmV0dXJuIEJhc2U6OmdldFBy
b3RvdHlwZShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QpOwpAQCAtNDc1LDcgKzQ3NCw3IEBA
IHByaXZhdGU6CiAKIGlubGluZSB2b2lkIERpYWxvZ0hhbmRsZXI6OmRpYWxvZ0NyZWF0ZWQoTG9j
YWxET01XaW5kb3cmIGRpYWxvZykKIHsKLSAgICBSZWYgdm0gPSBtX2dsb2JhbE9iamVjdC52bSgp
OworICAgIFZNJiB2bSA9IG1fZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgbV9mcmFtZSA9IGRpYWxv
Zy5mcmFtZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIGxpa2UgYSBsZWFrIGJl
dHdlZW4gdGhlIG5vcm1hbCB3b3JsZCBhbmQgYW4gaXNvbGF0ZWQKQEAgLTQ4Nyw3ICs0ODYsNyBA
QCBpbmxpbmUgdm9pZCBEaWFsb2dIYW5kbGVyOjpkaWFsb2dDcmVhdGVkKExvY2FsRE9NV2luZG93
JiBkaWFsb2cpCiAKIGlubGluZSBKU1ZhbHVlIERpYWxvZ0hhbmRsZXI6OnJldHVyblZhbHVlKCkg
Y29uc3QKIHsKLSAgICBSZWYgdm0gPSBtX2dsb2JhbE9iamVjdC52bSgpOworICAgIFZNJiB2bSA9
IG1fZ2xvYmFsT2JqZWN0LnZtKCk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gdG9KU0xvY2Fs
RE9NV2luZG93KG1fZnJhbWUuZ2V0KCksIG5vcm1hbFdvcmxkKHZtKSk7CiAgICAgaWYgKCFnbG9i
YWxPYmplY3QpCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwpAQCAtNTAyLDE3ICs1MDEs
MTcgQEAgc3RhdGljIEpTQ19ERUNMQVJFX0hPU1RfRlVOQ1RJT04oc2hvd01vZGFsRGlhbG9nKTsK
IAogSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKHNob3dNb2RhbERpYWxvZ0dldHRlciwgKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSB0aGlzVmFsdWUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpKQogewotICAgIFJlZiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvKiB0
aGlzT2JqZWN0ID0gY2FzdFRoaXNWYWx1ZTxKU0xvY2FsRE9NV2luZG93PigqbGV4aWNhbEdsb2Jh
bE9iamVjdCwgSlNWYWx1ZTo6ZGVjb2RlKHRoaXNWYWx1ZSkpOwogICAgIGlmIChVTkxJS0VMWSgh
dGhpc09iamVjdCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRE9NQXR0cmlidXRlR2V0dGVyVHlw
ZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBKU0xvY2FsRE9NV2luZG93OjppbmZv
KCksIHByb3BlcnR5TmFtZSk7CiAKLSAgICBpZiAoUmVmUHRyIGRvY3VtZW50ID0gdGhpc09iamVj
dC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCisgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gdGhpc09i
amVjdC0+d3JhcHBlZCgpLmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT5hZGRDb25zb2xl
TWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCAiV2luZG93
ICdzaG93TW9kYWxEaWFsb2cnIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVt
b3ZlZCBzb29uLiJfcyk7CiAKLSAgICBpZiAoUmVmUHRyIGZyYW1lID0gdGhpc09iamVjdC0+d3Jh
cHBlZCgpLmZyYW1lKCkpIHsKKyAgICBpZiAoYXV0byogZnJhbWUgPSB0aGlzT2JqZWN0LT53cmFw
cGVkKCkuZnJhbWUoKSkgewogICAgICAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuc2hvd01vZGFs
RGlhbG9nRW5hYmxlZCgpICYmIExvY2FsRE9NV2luZG93OjpjYW5TaG93TW9kYWxEaWFsb2coKmZy
YW1lKSkgewogICAgICAgICAgICAgYXV0byoganNGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0
ZSh2bSwgbGV4aWNhbEdsb2JhbE9iamVjdCwgMSwgInNob3dNb2RhbERpYWxvZyJfcywgc2hvd01v
ZGFsRGlhbG9nLCBJbXBsZW1lbnRhdGlvblZpc2liaWxpdHk6OlB1YmxpYyk7CiAgICAgICAgICAg
ICB0aGlzT2JqZWN0LT5wdXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwganNGdW5jdGlvbik7CkBA
IC01MjgsMTQgKzUyNywxNCBAQCBKU0NfREVGSU5FX0hPU1RfRlVOQ1RJT04oc2hvd01vZGFsRGlh
bG9nLCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3RQdAogICAgIGF1dG8mIGxl
eGljYWxHbG9iYWxPYmplY3QgPSAqbGV4aWNhbEdsb2JhbE9iamVjdFB0cjsKICAgICBhdXRvJiBj
YWxsRnJhbWUgPSAqY2FsbEZyYW1lUHRyOwogCi0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBhdXRvKiB0aGlzT2Jq
ZWN0ID0gSURMT3BlcmF0aW9uPEpTTG9jYWxET01XaW5kb3c+OjpjYXN0KGxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZSk7CiAgICAgaWYgKFVOTElLRUxZKCF0aGlzT2JqZWN0KSkKICAgICAg
ICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcihsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29wZSwg
IldpbmRvdyJfcywgInNob3dNb2RhbERpYWxvZyJfcyk7CiAKLSAgICBib29sIHNob3VsZEFsbG93
QWNjZXNzID0gQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxl
eGljYWxHbG9iYWxPYmplY3RQdHIsIHRoaXNPYmplY3QtPnByb3RlY3RlZFdyYXBwZWQoKSwgVGhy
b3dTZWN1cml0eUVycm9yKTsKKyAgICBib29sIHNob3VsZEFsbG93QWNjZXNzID0gQmluZGluZ1Nl
Y3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3RQ
dHIsIHRoaXNPYmplY3QtPndyYXBwZWQoKSwgVGhyb3dTZWN1cml0eUVycm9yKTsKICAgICBFWENF
UFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFzaG91bGRB
bGxvd0FjY2Vzcyk7CiAgICAgaWYgKCFzaG91bGRBbGxvd0FjY2VzcykKICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKQEAgLTU1MCw3ICs1NDksNyBAQCBKU0Nf
REVGSU5FX0hPU1RfRlVOQ1RJT04oc2hvd01vZGFsRGlhbG9nLCAoSlNHbG9iYWxPYmplY3QqIGxl
eGljYWxHbG9iYWxPYmplY3RQdAogCiAgICAgRGlhbG9nSGFuZGxlciBoYW5kbGVyKGxleGljYWxH
bG9iYWxPYmplY3QsIGNhbGxGcmFtZSk7CiAKLSAgICB0aGlzT2JqZWN0LT5wcm90ZWN0ZWRXcmFw
cGVkKCktPnNob3dNb2RhbERpYWxvZyh1cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBS
ZWYgeyBhY3RpdmVET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCkgfSwgUmVmIHsgZmlyc3RE
T01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCkgfSwgWyZoYW5kbGVyXShMb2NhbERPTVdpbmRv
dyYgZGlhbG9nKSB7CisgICAgdGhpc09iamVjdC0+d3JhcHBlZCgpLnNob3dNb2RhbERpYWxvZyh1
cmxTdHJpbmcsIGRpYWxvZ0ZlYXR1cmVzU3RyaW5nLCBhY3RpdmVET01XaW5kb3cobGV4aWNhbEds
b2JhbE9iamVjdCksIGZpcnN0RE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QpLCBbJmhhbmRs
ZXJdKExvY2FsRE9NV2luZG93JiBkaWFsb2cpIHsKICAgICAgICAgaGFuZGxlci5kaWFsb2dDcmVh
dGVkKGRpYWxvZyk7CiAgICAgfSk7CiAKQEAgLTU1OSw3ICs1NTgsNyBAQCBKU0NfREVGSU5FX0hP
U1RfRlVOQ1RJT04oc2hvd01vZGFsRGlhbG9nLCAoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3RQdAogCiBKU1ZhbHVlIEpTTG9jYWxET01XaW5kb3c6OnF1ZXVlTWljcm90YXNrKEpT
R2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkK
IHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKIAogICAgIGlmIChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgp
IDwgMSkpCkBAIC01OTAsMTEgKzU4OSwxMSBAQCBMb2NhbERPTVdpbmRvdyogSlNMb2NhbERPTVdp
bmRvdzo6dG9XcmFwcGVkKFZNJiwgSlNWYWx1ZSB2YWx1ZSkKIAogdm9pZCBKU0xvY2FsRE9NV2lu
ZG93OjpzZXRPcGVuZXIoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlKQogewotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm90ZWN0ZWRXcmFw
cGVkKCksIFRocm93U2VjdXJpdHlFcnJvcikpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNo
b3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coJmxleGljYWxHbG9iYWxPYmplY3QsIHdyYXBwZWQo
KSwgVGhyb3dTZWN1cml0eUVycm9yKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZhbHVl
LmlzTnVsbCgpKSB7Ci0gICAgICAgIHByb3RlY3RlZFdyYXBwZWQoKS0+ZGlzb3duT3BlbmVyKCk7
CisgICAgICAgIHdyYXBwZWQoKS5kaXNvd25PcGVuZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtNjE5LDEwICs2MTgsMTAgQEAgSlNWYWx1ZSBKU0xvY2FsRE9NV2luZG93OjpmcmFt
ZXMoSlNDOjpKU0dsb2JhbE9iamVjdCYpIGNvbnN0CiAKIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc0xvY2FsRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9vcGVuRGF0YWJhc2VC
b2R5KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSog
Y2FsbEZyYW1lLCB0eXBlbmFtZSBJRExPcGVyYXRpb248SlNMb2NhbERPTVdpbmRvdz46OkNsYXNz
UGFyYW1ldGVyIGNhc3RlZFRoaXMpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byB0aHJvd1Njb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjYXN0ZWRUaGlzLT5wcm90ZWN0ZWRXcmFwcGVkKCksIFRocm93U2VjdXJpdHlFcnJv
cikpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5k
b3cobGV4aWNhbEdsb2JhbE9iamVjdCwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBUaHJvd1NlY3Vy
aXR5RXJyb3IpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpIDwgNCkpCkBAIC02NTYsNyArNjU1LDcgQEAg
SlNDX0RFRklORV9IT1NUX0ZVTkNUSU9OKGpzTG9jYWxET01XaW5kb3dJbnN0YW5jZUZ1bmN0aW9u
X29wZW5EYXRhYmFzZSwgKEpTR2xvYmEKIAogSlNWYWx1ZSBKU0xvY2FsRE9NV2luZG93OjpvcGVu
RGF0YWJhc2UoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QK
IHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0g
bGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIFN0cmluZ0ltcGwqIG5hbWUgPSBQcm9wZXJ0
eU5hbWUoYnVpbHRpbk5hbWVzKHZtKS5vcGVuRGF0YWJhc2VQdWJsaWNOYW1lKCkpLnB1YmxpY05h
bWUoKTsKICAgICBpZiAoRGVwcmVjYXRlZEdsb2JhbFNldHRpbmdzOjp3ZWJTUUxFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybiBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sICZsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCA0LCBuYW1lLCBqc0xvY2FsRE9NV2luZG93SW5zdGFuY2VGdW5jdGlvbl9vcGVuRGF0YWJh
c2UsIEltcGxlbWVudGF0aW9uVmlzaWJpbGl0eTo6UHVibGljKTsKQEAgLTY2Niw3ICs2NjUsNyBA
QCBKU1ZhbHVlIEpTTG9jYWxET01XaW5kb3c6Om9wZW5EYXRhYmFzZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0KQogCiB2b2lkIEpTTG9jYWxET01XaW5kb3c6OnNldE9w
ZW5EYXRhYmFzZShKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0M6
OkpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93
QWNjZXNzVG9ET01XaW5kb3coJmxleGljYWxHbG9iYWxPYmplY3QsIHByb3RlY3RlZFdyYXBwZWQo
KSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdygmbGV4aWNhbEdsb2JhbE9iamVjdCwgd3JhcHBlZCgpLCBU
aHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIHNob3VsZFRo
cm93ID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9j
YXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNMb2NhdGlvbkN1
c3RvbS5jcHAKaW5kZXggOGYyNzU5NDk1MmVhLi43YTU4OTQzZTZiNWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTG9jYXRpb25DdXN0b20uY3BwCkBAIC0zNywxMCArMzcs
MTAgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlT
bG90Q29tbW9uKEpTTG9jYXRpb24mIHRoaXNPYmplY3QsIEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNs
b3QpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOworICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CiAKLSAgICBSZWZQdHIgd2luZG93ID0gdGhpc09iamVjdC53cmFwcGVk
KCkud2luZG93KCk7CisgICAgYXV0byogd2luZG93ID0gdGhpc09iamVjdC53cmFwcGVkKCkud2lu
ZG93KCk7CiAKICAgICAvLyBXaGVuIGFjY2Vzc2luZyBMb2NhdGlvbiBjcm9zcy1kb21haW4sIGZ1
bmN0aW9ucyBhcmUgYWx3YXlzIHRoZSBuYXRpdmUgYnVpbHQtaW4gb25lcy4KICAgICAvLyBTZWUg
SlNMb2NhbERPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90RGVsZWdhdGUgZm9yIGFkZGl0aW9u
YWwgZGV0YWlscy4KQEAgLTQ4LDEzICs0OCwxMyBAQCBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0
eVNsb3RDb21tb24oSlNMb2NhdGlvbiYgdGhpc09iamVjdCwgSlNHbG9iYWxPYmplY3QmIGxleAog
ICAgIC8vIE91ciBjdXN0b20gY29kZSBpcyBvbmx5IG5lZWRlZCB0byBpbXBsZW1lbnQgdGhlIFdp
bmRvdyBjcm9zcy1kb21haW4gc2NoZW1lLCBzbyBpZiBhY2Nlc3MgaXMKICAgICAvLyBhbGxvd2Vk
LCByZXR1cm4gZmFsc2Ugc28gdGhlIG5vcm1hbCBsb29rdXAgd2lsbCB0YWtlIHBsYWNlLgogICAg
IFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNj
ZXNzVG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgd2luZG93LmdldCgpLCBtZXNzYWdl
KSkKKyAgICBpZiAoQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93
KGxleGljYWxHbG9iYWxPYmplY3QsIHdpbmRvdywgbWVzc2FnZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3Nzb3JpZ2lu
Z2V0b3ducHJvcGVydHloZWxwZXItKC1vLC1wLSkKIAogICAgIC8vIFdlIG9ubHkgYWxsb3cgYWNj
ZXNzIHRvIExvY2F0aW9uLnJlcGxhY2UoKSBjcm9zcyBvcmlnaW4uCi0gICAgaWYgKHByb3BlcnR5
TmFtZSA9PSB2bS0+cHJvcGVydHlOYW1lcy0+cmVwbGFjZSkgeworICAgIGlmIChwcm9wZXJ0eU5h
bWUgPT0gdm0ucHJvcGVydHlOYW1lcy0+cmVwbGFjZSkgewogICAgICAgICBhdXRvKiBlbnRyeSA9
IEpTTG9jYXRpb246OmluZm8oKS0+c3RhdGljUHJvcEhhc2hUYWJsZS0+ZW50cnkocHJvcGVydHlO
YW1lKTsKICAgICAgICAgYXV0byoganNGdW5jdGlvbiA9IHRoaXNPYmplY3QuZ2xvYmFsT2JqZWN0
KCktPmNyZWF0ZUNyb3NzT3JpZ2luRnVuY3Rpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCksIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpKTsKICAg
ICAgICAgc2xvdC5zZXRWYWx1ZSgmdGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRP
bmx5IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtLCBqc0Z1bmN0aW9uKTsKQEAgLTgwLDcg
KzgwLDcgQEAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90Q29tbW9uKEpTTG9jYXRpb24m
IHRoaXNPYmplY3QsIEpTR2xvYmFsT2JqZWN0JiBsZXgKIAogYm9vbCBKU0xvY2F0aW9uOjpnZXRP
d25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxH
bG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xv
dCkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlv
bio+KG9iamVjdCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwpAQCAtOTUsNyArOTUsNyBAQCBib29sIEpTTG9jYXRpb246OmdldE93blByb3BlcnR5
U2xvdChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsbwogCiBib29s
IEpTTG9jYXRpb246OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkIGluZGV4LCBQcm9w
ZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2Nv
cGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExMCw3ICsxMTAsNyBAQCBib29sIEpTTG9jYXRpb246
OmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoSlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmpl
Y3QqIGxleAogCiBib29sIEpTTG9jYXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1Zh
bHVlIHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHB1dFByb3BlcnR5U2xvdCkKIHsKLSAgICBSZWYg
dm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9i
YWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNMb2NhdGlvbio+KGNlbGwpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKQEAgLTExOSw3
ICsxMTksNyBAQCBib29sIEpTTG9jYXRpb246OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eQogICAgIC8vIEhvd2V2ZXIsIGFsbG93
aW5nIGFzc2lnbmluZyBvZiBwaWVjZXMgbWlnaHQgaW5hZHZlcnRlbnRseSBkaXNjbG9zZSBwYXJ0
cyBvZiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uCiAgICAgLy8gU28gZmFsbCB0aHJvdWdoIHRvIHRo
ZSBhY2Nlc3MgY2hlY2sgZm9yIHRob3NlLgogICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAg
aWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01XaW5kb3coKmxleGlj
YWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5wcm90ZWN0ZWRXaW5kb3coKS5n
ZXQoKSwgZXJyb3JNZXNzYWdlKSkgeworICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRB
bGxvd0FjY2Vzc1RvRE9NV2luZG93KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkud2luZG93KCksIGVycm9yTWVzc2FnZSkpIHsKICAgICAgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBidWlsdGluTmFtZXModm0pLmhyZWZQdWJsaWNOYW1lKCkpIHsKICAgICAgICAgICAg
IGF1dG8gc2V0dGVyID0gc19pbmZvLnN0YXRpY1Byb3BIYXNoVGFibGUtPmVudHJ5KHByb3BlcnR5
TmFtZSktPnByb3BlcnR5UHV0dGVyKCk7CiAgICAgICAgICAgICBzY29wZS5yZWxlYXNlKCk7CkBA
IC0xMzksNyArMTM5LDcgQEAgYm9vbCBKU0xvY2F0aW9uOjpwdXRCeUluZGV4KEpTQ2VsbCogY2Vs
bCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIHUKICAgICBhdXRvKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAKLSAgICBpZiAoIUJpbmRpbmdTZWN1cml0
eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlz
T2JqZWN0LT53cmFwcGVkKCkucHJvdGVjdGVkV2luZG93KCkuZ2V0KCksIFRocm93U2VjdXJpdHlF
cnJvcikpCisgICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNzVG9ET01X
aW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLndpbmRvdygp
LCBUaHJvd1NlY3VyaXR5RXJyb3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1
cm4gSlNPYmplY3Q6OnB1dEJ5SW5kZXgoY2VsbCwgbGV4aWNhbEdsb2JhbE9iamVjdCwgaW5kZXgs
IHZhbHVlLCBzaG91bGRUaHJvdyk7CkBAIC0xNDksNyArMTQ5LDcgQEAgYm9vbCBKU0xvY2F0aW9u
OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWMKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRp
b24qPihjZWxsKTsKICAgICAvLyBPbmx5IGFsbG93IGRlbGV0aW5nIGJ5IGZyYW1lcyBpbiB0aGUg
c2FtZSBvcmlnaW4uCi0gICAgaWYgKCFCaW5kaW5nU2VjdXJpdHk6OnNob3VsZEFsbG93QWNjZXNz
VG9ET01XaW5kb3cobGV4aWNhbEdsb2JhbE9iamVjdCwgdGhpc09iamVjdC0+d3JhcHBlZCgpLnBy
b3RlY3RlZFdpbmRvdygpLmdldCgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKQorICAgIGlmICghQmlu
ZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxP
YmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgVGhyb3dTZWN1cml0eUVycm9y
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBCYXNlOjpkZWxldGVQcm9wZXJ0
eSh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwog
fQpAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVsZXRlUHJvcGVydHlCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiB7CiAgICAgSlNM
b2NhdGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0xvY2F0aW9uKj4oY2VsbCk7CiAgICAgLy8g
T25seSBhbGxvdyBkZWxldGluZyBieSBmcmFtZXMgaW4gdGhlIHNhbWUgb3JpZ2luLgotICAgIGlm
ICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxH
bG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5wcm90ZWN0ZWRXaW5kb3coKS5nZXQo
KSwgVGhyb3dTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxk
QWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53
cmFwcGVkKCkud2luZG93KCksIFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gQmFzZTo6ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3Qs
IGxleGljYWxHbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSk7CiB9CkBAIC0xNjYsNyArMTY2LDcg
QEAgYm9vbCBKU0xvY2F0aW9uOjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2IKIHZvaWQgSlNMb2NhdGlvbjo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9i
amVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERvbnRFbnVtUHJvcGVydGll
c01vZGUgbW9kZSkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9j
YXRpb24qPihvYmplY3QpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0Fj
Y2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQo
KS5wcm90ZWN0ZWRXaW5kb3coKS5nZXQoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkgewor
ICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxl
eGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS53aW5kb3coKSwgRG9Ob3RS
ZXBvcnRTZWN1cml0eUVycm9yKSkgewogICAgICAgICBpZiAobW9kZSA9PSBEb250RW51bVByb3Bl
cnRpZXNNb2RlOjpJbmNsdWRlKQogICAgICAgICAgICAgYWRkQ3Jvc3NPcmlnaW5Pd25Qcm9wZXJ0
eU5hbWVzPENyb3NzT3JpZ2luT2JqZWN0OjpMb2NhdGlvbj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZXMpOwogICAgICAgICByZXR1cm47CkBAIC0xNzcsNyArMTc3LDcgQEAgdm9p
ZCBKU0xvY2F0aW9uOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2wKIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHko
SlNPYmplY3QqIG9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgZGVzY3Jp
cHRvciwgYm9vbCB0aHJvd0V4Y2VwdGlvbikKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTG9jYXRpb24qPihvYmplY3QpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNP
YmplY3QtPndyYXBwZWQoKS5wcm90ZWN0ZWRXaW5kb3coKS5nZXQoKSwgVGhyb3dTZWN1cml0eUVy
cm9yKSkKKyAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdp
bmRvdyhsZXhpY2FsR2xvYmFsT2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCks
IFRocm93U2VjdXJpdHlFcnJvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVy
biBCYXNlOjpkZWZpbmVPd25Qcm9wZXJ0eShvYmplY3QsIGxleGljYWxHbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgdGhyb3dFeGNlcHRpb24pOwpAQCAtMTg2LDcgKzE4Niw3
IEBAIGJvb2wgSlNMb2NhdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplY3QqIG9iamVjdCwg
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iCiBKU1ZhbHVlIEpTTG9jYXRpb246OmdldFByb3Rv
dHlwZShKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCkKIHsKICAgICBKU0xvY2F0aW9uKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTG9jYXRpb24qPihv
YmplY3QpOwotICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9N
V2luZG93KGxleGljYWxHbG9iYWxPYmplY3QsIHRoaXNPYmplY3QtPndyYXBwZWQoKS5wcm90ZWN0
ZWRXaW5kb3coKS5nZXQoKSwgRG9Ob3RSZXBvcnRTZWN1cml0eUVycm9yKSkKKyAgICBpZiAoIUJp
bmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb0RPTVdpbmRvdyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCB0aGlzT2JqZWN0LT53cmFwcGVkKCkud2luZG93KCksIERvTm90UmVwb3J0U2VjdXJp
dHlFcnJvcikpCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogICAgIHJldHVybiBCYXNlOjpn
ZXRQcm90b3R5cGUob2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWljcm90YXNrQ2FsbGJhY2suaAppbmRleCBjZmUxNjllZTFm
M2MuLmNhZWIwMzU3ZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNNaWNyb3Rhc2tDYWxsYmFjay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
TWljcm90YXNrQ2FsbGJhY2suaApAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
YWxsKCkKICAgICB7CiAgICAgICAgIGF1dG8gcHJvdGVjdGVkVGhpcyB7IFJlZiB7ICp0aGlzIH0g
fTsKLSAgICAgICAgUmVmIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CisgICAgICAgIEpTQzo6
Vk0mIHZtID0gbV9nbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAgIEpTQzo6SlNMb2NrSG9sZGVy
IGxvY2sodm0pOwogICAgICAgICBKU0V4ZWNTdGF0ZTo6cnVuVGFzayhtX2dsb2JhbE9iamVjdC5n
ZXQoKSwgbV90YXNrKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU05vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2Rl
Q3VzdG9tLmNwcAppbmRleCA1NjcwNjM4YTQ0NTYuLjI4Y2FkMDM3YWVhYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU05vZGVDdXN0b20uY3BwCkBAIC0xNjksNyArMTY5LDcgQEAg
SlNDOjpKU09iamVjdCogZ2V0T3V0T2ZMaW5lQ2FjaGVkV3JhcHBlcihKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBOb2RlJgogCiB2b2lkIHdpbGxDcmVhdGVQb3NzaWJseU9ycGhhbmVk
VHJlZUJ5UmVtb3ZhbFNsb3dDYXNlKE5vZGUmIHJvb3QpCiB7Ci0gICAgUmVmUHRyIGZyYW1lID0g
cm9vdC5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IHJvb3QuZG9jdW1lbnQo
KS5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPYnNlcnZhYmxlQXJyYXkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNPYnNlcnZhYmxlQXJyYXkuY3BwCmluZGV4IDNhZTRh
OTdjYjRjZC4uY2QzMWEyOWM1ZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU09ic2VydmFibGVBcnJheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNPYnNlcnZhYmxlQXJyYXkuY3BwCkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgSlNPYnNlcnZh
YmxlQXJyYXk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogCiBKU0NfREVGSU5FX0NVU1RPTV9HRVRU
RVIoYXJyYXlMZW5ndGhHZXR0ZXIsIChKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgdGhpc1ZhbHVlLCBQcm9wZXJ0eU5hbWUpKQogewotICAgIFJlZiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CiAKICAgICBKU09ic2VydmFibGVBcnJheSogdGhpc09iamVjdCA9IGpzRHluYW1pY0Nhc3Q8SlNP
YnNlcnZhYmxlQXJyYXkqPihKU1ZhbHVlOjpkZWNvZGUodGhpc1ZhbHVlKSk7CkBAIC05MSwyMyAr
OTEsMjMgQEAgSlNDX0RFRklORV9DVVNUT01fR0VUVEVSKGFycmF5TGVuZ3RoR2V0dGVyLCAoSlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QKIAogdm9pZCBKU09ic2VydmFibGVBcnJh
eTo6Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCog
bGV4aWNhbEdsb2JhbE9iamVjdCwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIERv
bnRFbnVtUHJvcGVydGllc01vZGUgbW9kZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgSlNPYnNlcnZhYmxlQXJyYXkqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYnNlcnZhYmxlQXJy
YXkqPihvYmplY3QpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3QtPmxlbmd0aCgp
OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgcHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbSh2bSwgaSkpOwogCiAgICAgaWYgKG1vZGUg
PT0gRG9udEVudW1Qcm9wZXJ0aWVzTW9kZTo6SW5jbHVkZSkKLSAgICAgICAgcHJvcGVydHlOYW1l
cy5hZGQodm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CisgICAgICAgIHByb3BlcnR5TmFtZXMu
YWRkKHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCk7CiAKICAgICB0aGlzT2JqZWN0LT5nZXRPd25O
b25JbmRleFByb3BlcnR5TmFtZXMobGV4aWNhbEdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lcywg
bW9kZSk7CiB9CiAKIGJvb2wgSlNPYnNlcnZhYmxlQXJyYXk6OmdldE93blByb3BlcnR5U2xvdChK
U09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFJlZiB2
bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC0+dm0oKTsKICAgICBKU09ic2VydmFibGVBcnJheSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU09ic2VydmFibGVBcnJheSo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5w
cm9wZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgc2xvdC5zZXRDYWNoZWFibGVDdXN0b20o
dGhpc09iamVjdCwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0sIGFycmF5TGVuZ3RoR2V0dGVyKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQpAQCAtMTM2LDExICsxMzYsMTEgQEAgYm9vbCBKU09ic2VydmFibGVBcnJheTo6Z2V0
T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0dsb2JhbE9iamUKIAog
Ym9vbCBKU09ic2VydmFibGVBcnJheTo6cHV0KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3Qq
IGxleGljYWxHbG9iYWxPYmplY3QsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUg
dmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xv
YmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU09ic2VydmFibGVBcnJheSo+KGNlbGwpOwotICAgIGlmIChw
cm9wZXJ0eU5hbWUgPT0gdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICBpZiAocHJvcGVy
dHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJuIG9ic2Vy
dmFibGVBcnJheVNldExlbmd0aCh0aGlzT2JqZWN0LCBsZXhpY2FsR2xvYmFsT2JqZWN0LCBzY29w
ZSwgdmFsdWUpOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFt
ZSkpCkBAIC0xNjIsMTAgKzE2MiwxMCBAQCBib29sIEpTT2JzZXJ2YWJsZUFycmF5OjpwdXRCeUlu
ZGV4KEpTQ2VsbCogY2VsbCwgSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYgogLy8gaHR0
cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1vYnNlcnZhYmxlLWFycmF5LWRlbGV0ZVBy
b3BlcnR5CiBib29sIEpTT2JzZXJ2YWJsZUFycmF5OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNl
bGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBEZWxldGVQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgUmVmIHZtID0gbGV4
aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LT52bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAg
IGlmIChwcm9wZXJ0eU5hbWUgPT0gdm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKKyAgICBpZiAo
cHJvcGVydHlOYW1lID09IHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKGF1dG8gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkp
CkBAIC0xODksMTEgKzE4OSwxMSBAQCBib29sIEpTT2JzZXJ2YWJsZUFycmF5OjpkZWxldGVQcm9w
ZXJ0eUJ5SW5kZXgoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCosIHVucwogLy8gaHR0cHM6
Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1vYnNlcnZhYmxlLWFycmF5LWRlZmluZVByb3Bl
cnR5CiBib29sIEpTT2JzZXJ2YWJsZUFycmF5OjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iamVjdCog
b2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGJvb2wgdGhyb3dF
eGNlcHRpb24pCiB7Ci0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2
bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICBKU09ic2VydmFibGVBcnJheSogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U09ic2VydmFibGVBcnJheSo+KG9iamVjdCk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS0+
cHJvcGVydHlOYW1lcy0+bGVuZ3RoKSB7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSB2bS5wcm9w
ZXJ0eU5hbWVzLT5sZW5ndGgpIHsKICAgICAgICAgaWYgKGRlc2NyaXB0b3IuaXNBY2Nlc3NvckRl
c2NyaXB0b3IoKSkKICAgICAgICAgICAgIHJldHVybiB0eXBlRXJyb3IoZ2xvYmFsT2JqZWN0LCBz
Y29wZSwgdGhyb3dFeGNlcHRpb24sICJOb3QgYWxsb3dlZCB0byBjaGFuZ2UgYWNjZXNzIG1lY2hh
bmlzbSBmb3IgJ2xlbmd0aCcgcHJvcGVydHkiX3MpOwogICAgICAgICBpZiAoZGVzY3JpcHRvci5j
b25maWd1cmFibGVQcmVzZW50KCkgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTT2JzZXJ2YWJsZUFycmF5LmggYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU09ic2VydmFibGVBcnJheS5oCmluZGV4IDk1OGE5
NTQ2YjFhYi4uZGNlYjIyYjk3ZWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU09ic2VydmFibGVBcnJheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTT2JzZXJ2YWJsZUFycmF5LmgKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIEpTT2JzZXJ2YWJsZUFycmF5KiBjcmVhdGUoSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYmplY3QsIFJlZjxPYnNlcnZhYmxlQXJyYXk+JiYgYXJyYXkpCiAgICAgewotICAgICAgICBS
ZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOworICAgICAgICBWTSYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICAvLyBGSVhNRTogZGVwcmVjYXRlZEdldERP
TVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9mIHRoZSB3cm9uZyBnbG9iYWwgb2Jq
ZWN0CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiB0aGUgcmlnaHQgZ2xvYmFsIG9iamVj
dCBmb3IgImFycmF5Ii4KICAgICAgICAgU3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3Jl
OjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJlPEpTT2JzZXJ2YWJsZUFycmF5PihsZXhpY2FsR2xv
YmFsT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9w
U3RhdGVFdmVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0
YXRlRXZlbnRDdXN0b20uY3BwCmluZGV4IDNmMmUwNTRiMzhjOS4uMzAyZWNkNDEyZTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1BvcFN0YXRlRXZlbnRDdXN0b20u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUG9wU3RhdGVFdmVudEN1c3Rv
bS5jcHAKQEAgLTU1LDE0ICs1NSwxNCBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6c3RhdGUo
SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiAgICAgICAgIHJldHVy
biBldmVudFN0YXRlOwogICAgIH07CiAKLSAgICBSZWYgZXZlbnQgPSB3cmFwcGVkKCk7CisgICAg
UG9wU3RhdGVFdmVudCYgZXZlbnQgPSB3cmFwcGVkKCk7CiAKLSAgICBpZiAoZXZlbnQtPnN0YXRl
KCkpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIGV2ZW50U3RhdGUgPSBldmVudC0+c3RhdGUoKS5n
ZXRWYWx1ZSgpOworICAgIGlmIChldmVudC5zdGF0ZSgpKSB7CisgICAgICAgIEpTQzo6SlNWYWx1
ZSBldmVudFN0YXRlID0gZXZlbnQuc3RhdGUoKS5nZXRWYWx1ZSgpOwogICAgICAgICAvLyBXZSBu
ZWVkIHRvIG1ha2Ugc3VyZSBhIFBvcFN0YXRlRXZlbnQgZG9lcyBub3QgbGVhayBvYmplY3RzIGlu
IGl0cyBsZXhpY2FsR2xvYmFsT2JqZWN0IHByb3BlcnR5IGFjcm9zcyBpc29sYXRlZCBET00gd29y
bGRzLgogICAgICAgICAvLyBJZGVhbGx5LCB3ZSB3b3VsZCBjaGVjayB0aGF0IHRoZSB3b3JsZHMg
aGF2ZSBkaWZmZXJlbnQgcHJpdmlsZWdlcyBidXQgdGhhdCdzIG5vdCBwb3NzaWJsZSB5ZXQuCiAg
ICAgICAgIGlmICghaXNXb3JsZENvbXBhdGlibGUobGV4aWNhbEdsb2JhbE9iamVjdCwgZXZlbnRT
dGF0ZSkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LT50
cnlTZXJpYWxpemVTdGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KSkKKyAgICAgICAgICAgIGlmIChh
dXRvIHNlcmlhbGl6ZWRWYWx1ZSA9IGV2ZW50LnRyeVNlcmlhbGl6ZVN0YXRlKGxleGljYWxHbG9i
YWxPYmplY3QpKQogICAgICAgICAgICAgICAgIGV2ZW50U3RhdGUgPSBzZXJpYWxpemVkVmFsdWUt
PmRlc2VyaWFsaXplKGxleGljYWxHbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCgpKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBldmVudFN0YXRlID0ganNOdWxsKCk7CkBAIC03
MCw4ICs3MCw4IEBAIEpTVmFsdWUgSlNQb3BTdGF0ZUV2ZW50OjpzdGF0ZShKU0dsb2JhbE9iamVj
dCYgbGV4aWNhbEdsb2JhbE9iamVjdCkgY29uc3QKICAgICAgICAgcmV0dXJuIGNhY2hlU3RhdGUo
ZXZlbnRTdGF0ZSk7CiAgICAgfQogICAgIAotICAgIFJlZlB0ciBoaXN0b3J5ID0gZXZlbnQtPmhp
c3RvcnkoKTsKLSAgICBpZiAoIWhpc3RvcnkgfHwgIWV2ZW50LT5zZXJpYWxpemVkU3RhdGUoKSkK
KyAgICBIaXN0b3J5KiBoaXN0b3J5ID0gZXZlbnQuaGlzdG9yeSgpOworICAgIGlmICghaGlzdG9y
eSB8fCAhZXZlbnQuc2VyaWFsaXplZFN0YXRlKCkpCiAgICAgICAgIHJldHVybiBjYWNoZVN0YXRl
KGpzTnVsbCgpKTsKIAogICAgIC8vIFRoZXJlJ3Mgbm8gY2FjaGVkIHZhbHVlIGZyb20gYSBwcmV2
aW91cyBpbnZvY2F0aW9uLCBub3IgYSBsZXhpY2FsR2xvYmFsT2JqZWN0IHZhbHVlIHdhcyBwcm92
aWRlZCBieSB0aGUKQEAgLTgwLDE0ICs4MCwxNCBAQCBKU1ZhbHVlIEpTUG9wU3RhdGVFdmVudDo6
c3RhdGUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QpIGNvbnN0CiAgICAgLy8g
VGhlIGN1cnJlbnQgaGlzdG9yeSBsZXhpY2FsR2xvYmFsT2JqZWN0IG9iamVjdCBtaWdodCd2ZSBj
aGFuZ2VkIGluIHRoZSBtZWFudGltZSwgc28gd2UgbmVlZCB0byB0YWtlIGNhcmUKICAgICAvLyBv
ZiB1c2luZyB0aGUgY29ycmVjdCBvbmUsIGFuZCBhbHdheXMgc2hhcmUgdGhlIHNhbWUgZGVzZXJp
YWxpemF0aW9uIHdpdGggaGlzdG9yeS5sZXhpY2FsR2xvYmFsT2JqZWN0LgogCi0gICAgYm9vbCBp
c1NhbWVTdGF0ZSA9IGhpc3RvcnktPmlzU2FtZUFzQ3VycmVudFN0YXRlKGV2ZW50LT5zZXJpYWxp
emVkU3RhdGUoKSk7CisgICAgYm9vbCBpc1NhbWVTdGF0ZSA9IGhpc3RvcnktPmlzU2FtZUFzQ3Vy
cmVudFN0YXRlKGV2ZW50LnNlcmlhbGl6ZWRTdGF0ZSgpKTsKICAgICBKU1ZhbHVlIHJlc3VsdDsK
IAogICAgIGlmIChpc1NhbWVTdGF0ZSkgewogICAgICAgICBKU0hpc3RvcnkqIGpzSGlzdG9yeSA9
IGpzQ2FzdDxKU0hpc3RvcnkqPih0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmpl
Y3QoKSwgKmhpc3RvcnkpLmFzQ2VsbCgpKTsKICAgICAgICAgcmVzdWx0ID0ganNIaXN0b3J5LT5z
dGF0ZShsZXhpY2FsR2xvYmFsT2JqZWN0KTsKICAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0g
ZXZlbnQtPnNlcmlhbGl6ZWRTdGF0ZSgpLT5kZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0
LCBnbG9iYWxPYmplY3QoKSk7CisgICAgICAgIHJlc3VsdCA9IGV2ZW50LnNlcmlhbGl6ZWRTdGF0
ZSgpLT5kZXNlcmlhbGl6ZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QoKSk7CiAK
ICAgICByZXR1cm4gY2FjaGVTdGF0ZShyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNSVENSdHBTRnJhbWVUcmFuc2Zvcm1DdXN0b20uY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENSdHBTRnJhbWVUcmFuc2Zvcm1DdXN0b20uY3Bw
CmluZGV4IGYyOTIxNmM0YTAwYy4uOGQyMzk3MmVjZjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JUQ1J0cFNGcmFtZVRyYW5zZm9ybUN1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSVENSdHBTRnJhbWVUcmFuc2Zvcm1DdXN0b20u
Y3BwCkBAIC0zNyw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIEpTVmFsdWUgSlNS
VENSdHBTRnJhbWVUcmFuc2Zvcm06OnNldEVuY3J5cHRpb25LZXkoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmIHByb21pc2UpCiB7Ci0gICAgUmVmIHZtID0gZ2V0Vk0oJmxleGljYWxHbG9iYWxPYmpl
Y3QpOworICAgIGF1dG8mIHZtID0gZ2V0Vk0oJmxleGljYWxHbG9iYWxPYmplY3QpOwogICAgIGF1
dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYgKFVOTElL
RUxZKGNhbGxGcmFtZS5hcmd1bWVudENvdW50KCkgPCAxKSkgewpAQCAtNjYsNyArNjYsNyBAQCBK
U1ZhbHVlIEpTUlRDUnRwU0ZyYW1lVHJhbnNmb3JtOjpzZXRFbmNyeXB0aW9uS2V5KEpTR2xvYmFs
T2JqZWN0JiBsZXhpY2FsR2xvYmFsTwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwganNVbmRlZmluZWQoKSk7CiAgICAgdGhyb3dTY29wZS5yZWxlYXNlKCk7CiAKLSAgICBwcm90
ZWN0ZWRXcmFwcGVkKCktPnNldEVuY3J5cHRpb25LZXkoKmtleSwga2V5SUQsIFdURk1vdmUocHJv
bWlzZSkpOworICAgIHdyYXBwZWQoKS5zZXRFbmNyeXB0aW9uS2V5KCprZXksIGtleUlELCBXVEZN
b3ZlKHByb21pc2UpKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlYWRhYmxlU3RyZWFtU291cmNl
Q3VzdG9tLmNwcAppbmRleCBmNmMyMzQxOWJiM2UuLjQ3NmMwZjg1MjhkMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVNvdXJjZUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZWFkYWJsZVN0cmVhbVNvdXJj
ZUN1c3RvbS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogSlNW
YWx1ZSBKU1JlYWRhYmxlU3RyZWFtU291cmNlOjpzdGFydChKU0dsb2JhbE9iamVjdCYgbGV4aWNh
bEdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lJiBjYWxsRnJhbWUsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgcHJvbWlzZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7Cisg
ICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOwogICAgIAogICAgIC8vIEZJWE1F
OiBXaHkgaXMgaXQgb2sgdG8gQVNTRVJUIHRoZSBhcmd1bWVudCBjb3VudCBoZXJlPwogICAgIEFT
U0VSVChjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpKTsKQEAgLTQ1LDE0ICs0NSwxNCBAQCBKU1Zh
bHVlIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnN0YXJ0KEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRgogCiAgICAgbV9jb250cm9sbGVyLnNldCh2bSwgdGhpcywgY29u
dHJvbGxlcik7CiAKLSAgICBwcm90ZWN0ZWRXcmFwcGVkKCktPnN0YXJ0KFJlYWRhYmxlU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIoY29udHJvbGxlciksIFdURk1vdmUocHJvbWlzZSkpOworICAgIHdy
YXBwZWQoKS5zdGFydChSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKGNvbnRyb2xsZXIp
LCBXVEZNb3ZlKHByb21pc2UpKTsKIAogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBK
U1ZhbHVlIEpTUmVhZGFibGVTdHJlYW1Tb3VyY2U6OnB1bGwoSlNHbG9iYWxPYmplY3QmLCBDYWxs
RnJhbWUmLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCiB7Ci0gICAgcHJvdGVjdGVk
V3JhcHBlZCgpLT5wdWxsKFdURk1vdmUocHJvbWlzZSkpOworICAgIHdyYXBwZWQoKS5wdWxsKFdU
Rk1vdmUocHJvbWlzZSkpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcApp
bmRleCBiMjExOWI5ZDMxOWEuLjdmYTJhNmEyNzVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0Jhc2UuY3BwCkBAIC03MiwxMSArNzIs
NiBAQCB2b2lkIEpTUmVtb3RlRE9NV2luZG93QmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiAg
ICAgc3RhdGljX2Nhc3Q8SlNSZW1vdGVET01XaW5kb3dCYXNlKj4oY2VsbCktPkpTUmVtb3RlRE9N
V2luZG93QmFzZTo6fkpTUmVtb3RlRE9NV2luZG93QmFzZSgpOwogfQogCi1SZWY8UmVtb3RlRE9N
V2luZG93PiBKU1JlbW90ZURPTVdpbmRvd0Jhc2U6OnByb3RlY3RlZFdyYXBwZWQoKSBjb25zdAot
ewotICAgIHJldHVybiAqbV93cmFwcGVkOwotfQotCiBSdW50aW1lRmxhZ3MgSlNSZW1vdGVET01X
aW5kb3dCYXNlOjpqYXZhU2NyaXB0UnVudGltZUZsYWdzKGNvbnN0IEpTR2xvYmFsT2JqZWN0KikK
IHsKICAgICByZXR1cm4gUnVudGltZUZsYWdzIHsgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTUmVtb3RlRE9NV2luZG93QmFzZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNSZW1vdGVET01XaW5kb3dCYXNlLmgKaW5kZXggNWFjN2VmMDNiZWNkLi4x
MTdlMmI3YzlmYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVt
b3RlRE9NV2luZG93QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTUmVt
b3RlRE9NV2luZG93QmFzZS5oCkBAIC00Myw3ICs0Myw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCBzdWJzcGFjZUZvcihKU0M6OlZNJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKICAgICBSZW1vdGVET01XaW5kb3cmIHdyYXBwZWQoKSBjb25zdCB7IHJldHVybiAqbV93
cmFwcGVkOyB9Ci0gICAgUmVmPFJlbW90ZURPTVdpbmRvdz4gcHJvdGVjdGVkV3JhcHBlZCgpIGNv
bnN0OwogCiAgICAgREVDTEFSRV9JTkZPOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKaW5kZXggMjljOTU1ZmJlODBk
Li5iNzk1NDk5MzBmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
UmVtb3RlRE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1JlbW90ZURPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTQ4LDEwICs0OCwxMCBAQCBib29sIEpT
UmVtb3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGxleAogCiBib29sIEpTUmVtb3RlRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCB1bnNpZ25lZCBpbmRleCwgUHJvcGVydHlTbG90JiBzbG90KQogewotICAgIFJl
ZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEds
b2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTUmVtb3Rl
RE9NV2luZG93Kj4ob2JqZWN0KTsKLSAgICBSZWYgd2luZG93ID0gdGhpc09iamVjdC0+d3JhcHBl
ZCgpOwotICAgIFJlZlB0ciBmcmFtZSA9IHdpbmRvdy0+ZnJhbWUoKTsKKyAgICBhdXRvJiB3aW5k
b3cgPSB0aGlzT2JqZWN0LT53cmFwcGVkKCk7CisgICAgYXV0byogZnJhbWUgPSB3aW5kb3cuZnJh
bWUoKTsKIAogICAgIC8vIEluZGV4ZWQgZ2V0dGVycyB0YWtlIHByZWNlbmRlbmNlIG92ZXIgcmVn
dWxhciBwcm9wZXJ0aWVzLCBzbyBjYWNoaW5nIHdvdWxkIGJlIGludmFsaWQuCiAgICAgc2xvdC5k
aXNhYmxlQ2FjaGluZygpOwpAQCAtNjAsNyArNjAsNyBAQCBib29sIEpTUmVtb3RlRE9NV2luZG93
OjpnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiBvYmplY3QsIEpTR2xvYmFsT2Jq
ZQogICAgIGlmIChmcmFtZSAmJiBpbmRleCA8IGZyYW1lLT50cmVlKCkuY2hpbGRDb3VudCgpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiA8cmRhcjovLzExODI2MzMzNz4gVGhpcyBzaG91bGQgd29yayBh
bHNvIGlmIGl0J3MgYSBSZW1vdGVGcmFtZSwgaXQgc2hvdWxkIGp1c3QgcmV0dXJuIGEgUmVtb3Rl
RE9NV2luZG93LgogICAgICAgICAvLyBKU0xvY2FsRE9NV2luZG93OjpnZXRPd25Qcm9wZXJ0eVNs
b3RCeUluZGV4IHVzZXMgc2NvcGVkQ2hpbGQuIEludmVzdGlnYXRlIHRoZSBkaWZmZXJlbmNlLgot
ICAgICAgICBpZiAoUmVmUHRyIGNoaWxkID0gZHluYW1pY0Rvd25jYXN0PExvY2FsRnJhbWU+KGZy
YW1lLT50cmVlKCkuY2hpbGQoaW5kZXgpKSkgeworICAgICAgICBpZiAoYXV0byogY2hpbGQgPSBk
eW5hbWljRG93bmNhc3Q8TG9jYWxGcmFtZT4oZnJhbWUtPnRyZWUoKS5jaGlsZChpbmRleCkpKSB7
CiAgICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIGVudW1Ub1VuZGVybHlpbmdU
eXBlKEpTQzo6UHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KSwgdG9KUyhsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjaGlsZC0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC02OSwxMiArNjksMTIgQEAgYm9vbCBKU1JlbW90ZURP
TVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleChKU09iamVjdCogb2JqZWN0LCBKU0ds
b2JhbE9iamUKICAgICAvLyBGSVhNRTogPHJkYXI6Ly8xMTgyNjMzMzc+IE1ha2UgdGhpcyBtb3Jl
IGxpa2UgSlNMb2NhbERPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleCBhbmQgc2hh
cmUgY29kZSB3aGVuIHBvc3NpYmxlLgogICAgIC8vIFRoZXJlIGlzIHNvbWUgbWlzc2luZyBmdW5j
dGlvbmFsaXR5IGhlcmUsIGFuZCBpdCBpcyBsaWtlbHkgaW1wb3J0YW50LgogCi0gICAgcmV0dXJu
IGpzTG9jYWxET01XaW5kb3dHZXRPd25Qcm9wZXJ0eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdp
bmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwgdGhpc09iamVjdC0+cHJvdGVjdGVkV3JhcHBl
ZCgpLCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLCBz
bG90LCBTdHJpbmcoKSk7CisgICAgcmV0dXJuIGpzTG9jYWxET01XaW5kb3dHZXRPd25Qcm9wZXJ0
eVNsb3RSZXN0cmljdGVkQWNjZXNzPERPTVdpbmRvd1R5cGU6OlJlbW90ZT4odGhpc09iamVjdCwg
dGhpc09iamVjdC0+d3JhcHBlZCgpLCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpLCBzbG90LCBTdHJpbmcoKSk7CiB9CiAKIGJvb2wgSlNSZW1vdGVET01X
aW5kb3c6OnB1dChKU0NlbGwqIGNlbGwsIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCBQdXRQcm9wZXJ0
eVNsb3QmIHNsb3QpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGF1dG8qIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SlNSZW1vdGVET01XaW5kb3cqPihjZWxsKTsKQEAgLTEwMiw3ICsxMDIsNyBAQCBib29sIEpT
UmVtb3RlRE9NV2luZG93OjpwdXRCeUluZGV4KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiwgdW5z
aWduZWQsIEpTVmFsdWUsCiAKIGJvb2wgSlNSZW1vdGVET01XaW5kb3c6OmRlbGV0ZVByb3BlcnR5
KEpTQ2VsbCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBQcm9wZXJ0eU5h
bWUsIERlbGV0ZVByb3BlcnR5U2xvdCYpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHRocm93U2VjdXJp
dHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIFN0cmluZygpKTsKQEAgLTExMSw3
ICsxMTEsNyBAQCBib29sIEpTUmVtb3RlRE9NV2luZG93OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwq
LCBKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iagogCiBib29sIEpTUmVtb3RlRE9NV2lu
ZG93OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgSlNHbG9iYWxPYmplY3QqIGxleGlj
YWxHbG9iYWxPYmplY3QsIHVuc2lnbmVkKQogewotICAgIFJlZiB2bSA9IGxleGljYWxHbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC0+dm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICB0aHJvd1NlY3Vy
aXR5RXJyb3IoKmxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCBTdHJpbmcoKSk7CkBAIC0xMjgs
NyArMTI4LDcgQEAgdm9pZCBKU1JlbW90ZURPTVdpbmRvdzo6Z2V0T3duUHJvcGVydHlOYW1lcyhK
U09iamVjdCosIEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2wKIAogYm9vbCBKU1JlbW90ZURPTVdp
bmRvdzo6ZGVmaW5lT3duUHJvcGVydHkoSlNDOjpKU09iamVjdCosIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6UHJvcGVydHlOYW1lLCBjb25zdCBKU0M6OlBy
b3BlcnR5RGVzY3JpcHRvciYsIGJvb2wpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBWTSYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0LT52bSgpOwogICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIHRocm93U2VjdXJp
dHlFcnJvcigqbGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIFN0cmluZygpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU2hhZG93Um9vdEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NoYWRvd1Jvb3RDdXN0b20uY3BwCmluZGV4IDlj
ZDVkN2U4NTJkNS4uNjlmODkwMzA1NTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1NoYWRvd1Jvb3RDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU2hhZG93Um9vdEN1c3RvbS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB2b2lkIEpTU2hhZG93Um9vdDo6c2V0QWRvcHRlZFN0eWxlU2hlZXRzKEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBzZXRBZG9wdGVkU3R5bGVTaGVldHNPblRyZWVTY29wZShwcm90ZWN0ZWRXcmFw
cGVkKCksIGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsKKyAgICBzZXRBZG9wdGVkU3R5bGVT
aGVldHNPblRyZWVTY29wZSh3cmFwcGVkKCksIGxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJBbmltYXRpb25DdXN0b20uY3BwCmluZGV4IDA4NzkzZmQzOTRhZC4uM2Yz
YTE3YWNhNjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkFu
aW1hdGlvbkN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJB
bmltYXRpb25DdXN0b20uY3BwCkBAIC01NCwyMiArNTQsMjIgQEAgSlNWYWx1ZSB0b0pTKEpTR2xv
YmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWMKIAogRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlNXZWJBbmltYXRpb24oSlNHbG9iYWxP
YmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIENhbGxGcmFtZSYgY2FsbEZyYW1lKQogewotICAg
IFJlZiB2bSA9IGxleGljYWxHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNh
bEdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9X
X1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byoganND
b25zdHJ1Y3RvciA9IGpzQ2FzdDxKU0RPTUNvbnN0cnVjdG9yQmFzZSo+KGNhbGxGcmFtZS5qc0Nh
bGxlZSgpKTsKICAgICBBU1NFUlQoanNDb25zdHJ1Y3Rvcik7Ci0gICAgUmVmUHRyIGNvbnRleHQg
PSBqc0NvbnN0cnVjdG9yLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgYXV0byogY29u
dGV4dCA9IGpzQ29uc3RydWN0b3ItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKICAgICBpZiAo
VU5MSUtFTFkoIWNvbnRleHQpKQogICAgICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvclNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRVbmF2YWlsYWJsZUVycm9yKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCB0
aHJvd1Njb3BlLCAiQW5pbWF0aW9uIik7CiAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpOwotICAgIFJlZlB0ciBlZmZlY3QgPSBjb252ZXJ0PElETE51bGxh
YmxlPElETEludGVyZmFjZTxBbmltYXRpb25FZmZlY3Q+Pj4oKmxleGljYWxHbG9iYWxPYmplY3Qs
IGNhbGxGcmFtZS5hcmd1bWVudCgwKSwgW10oSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIFRocm93U2NvcGUmIHNjb3BlKSB7CisgICAgYXV0byBlZmZlY3QgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxBbmltYXRpb25FZmZlY3Q+Pj4oKmxleGljYWxHbG9iYWxP
YmplY3QsIGNhbGxGcmFtZS5hcmd1bWVudCgwKSwgW10oSlNHbG9iYWxPYmplY3QmIGxleGljYWxH
bG9iYWxPYmplY3QsIFRocm93U2NvcGUmIHNjb3BlKSB7CiAgICAgICAgIHRocm93QXJndW1lbnRU
eXBlRXJyb3IobGV4aWNhbEdsb2JhbE9iamVjdCwgc2NvcGUsIDAsICJlZmZlY3QiLCAiQW5pbWF0
aW9uIiwgbnVsbHB0ciwgIkFuaW1hdGlvbkVmZmVjdCIpOwogICAgIH0pOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAKICAgICBpZiAoY2Fs
bEZyYW1lLmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgUmVmIG9iamVjdCA9
IFdlYkFuaW1hdGlvbjo6Y3JlYXRlKGRvY3VtZW50LCBXVEZNb3ZlKGVmZmVjdCkpOworICAgICAg
ICBhdXRvIG9iamVjdCA9IFdlYkFuaW1hdGlvbjo6Y3JlYXRlKGRvY3VtZW50LCBXVEZNb3ZlKGVm
ZmVjdCkpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRvSlNOZXdseUNyZWF0ZWQ8
SURMSW50ZXJmYWNlPFdlYkFuaW1hdGlvbj4+KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqanNDb25z
dHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIFdURk1vdmUob2JqZWN0KSkpOwogICAgIH0KIApAQCAt
NzcsNyArNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKU1dlYkFuaW1hdGlvbihKU0ds
b2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgQ2FsbAogICAgICAgICB0aHJvd0FyZ3Vt
ZW50VHlwZUVycm9yKGxleGljYWxHbG9iYWxPYmplY3QsIHNjb3BlLCAxLCAidGltZWxpbmUiLCAi
QW5pbWF0aW9uIiwgbnVsbHB0ciwgIkFuaW1hdGlvblRpbWVsaW5lIik7CiAgICAgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKLSAgICBS
ZWYgb2JqZWN0ID0gV2ViQW5pbWF0aW9uOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoZWZmZWN0
KSwgV1RGTW92ZSh0aW1lbGluZSkpOworICAgIGF1dG8gb2JqZWN0ID0gV2ViQW5pbWF0aW9uOjpj
cmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoZWZmZWN0KSwgV1RGTW92ZSh0aW1lbGluZSkpOwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUodG9KU05ld2x5Q3JlYXRlZDxJRExJbnRlcmZhY2U8V2Vi
QW5pbWF0aW9uPj4oKmxleGljYWxHbG9iYWxPYmplY3QsICpqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgV1RGTW92ZShvYmplY3QpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXaW5kb3dQcm94eS5jcHAKaW5kZXggOWNmMzc0OWQ5M2MwLi5kMjUyMjAzM2UwMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2luZG93UHJveHkuY3BwCkBAIC05
Nyw3ICs5Nyw3IEBAIHZvaWQgSlNXaW5kb3dQcm94eTo6c2V0V2luZG93KERPTVdpbmRvdyYgZG9t
V2luZG93KQogCiAgICAgYXV0byogbG9jYWxXaW5kb3cgPSBkeW5hbWljRG93bmNhc3Q8TG9jYWxE
T01XaW5kb3c+KGRvbVdpbmRvdyk7CiAKLSAgICBSZWYgdm0gPSBjb21tb25WTSgpOworICAgIFZN
JiB2bSA9IGNvbW1vblZNKCk7CiAgICAgYXV0byYgcHJvdG90eXBlU3RydWN0dXJlID0gbG9jYWxX
aW5kb3cgPyAqSlNMb2NhbERPTVdpbmRvd1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCBu
dWxscHRyLCBqc051bGwoKSkgOiAqSlNSZW1vdGVET01XaW5kb3dQcm90b3R5cGU6OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgbnVsbHB0ciwganNOdWxsKCkpOwogCiAgICAgLy8gRXhwbGljaXRseSBwcm90
ZWN0IHRoZSBwcm90b3R5cGUgc28gaXQgaXNuJ3QgY29sbGVjdGVkIHdoZW4gd2UgYWxsb2NhdGUg
dGhlIGdsb2JhbCBvYmplY3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckdsb2JhbFNjb3BlQmFzZS5jcHAKaW5kZXggNmYwMzg0ZjAyNDdmLi42MjAyZGU0
ZmNmZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyR2xv
YmFsU2NvcGVCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtl
ckdsb2JhbFNjb3BlQmFzZS5jcHAKQEAgLTE0OSw4ICsxNDksOCBAQCB2b2lkIEpTV29ya2VyR2xv
YmFsU2NvcGVCYXNlOjpxdWV1ZU1pY3JvdGFza1RvRXZlbnRMb29wKEpTR2xvYmFsT2JqZWN0JiBv
YmplY3QsCiAgICAgSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UmIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDxKU1dvcmtlckdsb2JhbFNjb3BlQmFzZSY+KG9iamVjdCk7CiAKICAgICBhdXRvIGNhbGxi
YWNrID0gSlNNaWNyb3Rhc2tDYWxsYmFjazo6Y3JlYXRlKHRoaXNPYmplY3QsIFdURk1vdmUodGFz
aykpOwotICAgIFJlZiBjb250ZXh0ID0gdGhpc09iamVjdC53cmFwcGVkKCk7Ci0gICAgY29udGV4
dC0+Y2hlY2tlZEV2ZW50TG9vcCgpLT5xdWV1ZU1pY3JvdGFzayhbY2FsbGJhY2sgPSBXVEZNb3Zl
KGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKKyAgICBhdXRvJiBjb250ZXh0ID0gdGhpc09iamVjdC53
cmFwcGVkKCk7CisgICAgY29udGV4dC5ldmVudExvb3AoKS5xdWV1ZU1pY3JvdGFzayhbY2FsbGJh
Y2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oKSBtdXRhYmxlIHsKICAgICAgICAgY2FsbGJhY2stPmNh
bGwoKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAKaW5kZXggYjRjMzE5OGRmMDhmLi5lNzg1
YWY1MzNjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
R2xvYmFsU2NvcGVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyR2xvYmFsU2NvcGVDdXN0b20uY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIERFRklORV9WSVNJ
VF9BRERJVElPTkFMX0NISUxEUkVOKEpTV29ya2VyR2xvYmFsU2NvcGUpOwogCiBKU1ZhbHVlIEpT
V29ya2VyR2xvYmFsU2NvcGU6OnF1ZXVlTWljcm90YXNrKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUmIGNhbGxGcmFtZSkKIHsKLSAgICBSZWYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgVk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlm
IChVTkxJS0VMWShjYWxsRnJhbWUuYXJndW1lbnRDb3VudCgpIDwgMSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Nb2R1bGVTY3JpcHRMb2FkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL01vZHVsZVNjcmlwdExvYWRlci5oCmluZGV4IGZhNWNhY2I2MmQ0
OS4uOTk0YmIyNGM1OTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9N
b2R1bGVTY3JpcHRMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9Nb2R1
bGVTY3JpcHRMb2FkZXIuaApAQCAtNDksMTQgKzQ5LDE0IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIE1vZHVsZVNjcmlwdExvYWRlcihNb2R1bGVTY3JpcHRMb2FkZXJDbGllbnQmIGNsaWVu
dCwgRGVmZXJyZWRQcm9taXNlJiBwcm9taXNlLCBKU0M6OlNjcmlwdEZldGNoZXImIHNjcmlwdEZl
dGNoZXIsIFJlZlB0cjxKU0M6OlNjcmlwdEZldGNoUGFyYW1ldGVycz4mJiBwYXJhbWV0ZXJzKQot
ICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgOiBtX2NsaWVudCgmY2xpZW50KQog
ICAgICAgICAsIG1fcHJvbWlzZSgmcHJvbWlzZSkKICAgICAgICAgLCBtX3NjcmlwdEZldGNoZXIo
c2NyaXB0RmV0Y2hlcikKICAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJz
KSkKICAgICB7CiAgICAgfQogCi0gICAgV2Vha1B0cjxNb2R1bGVTY3JpcHRMb2FkZXJDbGllbnQ+
IG1fY2xpZW50OworICAgIE1vZHVsZVNjcmlwdExvYWRlckNsaWVudCogbV9jbGllbnQ7CiAgICAg
UmVmUHRyPERlZmVycmVkUHJvbWlzZT4gbV9wcm9taXNlOwogICAgIFJlZjxKU0M6OlNjcmlwdEZl
dGNoZXI+IG1fc2NyaXB0RmV0Y2hlcjsKICAgICBSZWZQdHI8SlNDOjpTY3JpcHRGZXRjaFBhcmFt
ZXRlcnM+IG1fcGFyYW1ldGVyczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL01vZHVsZVNjcmlwdExvYWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvTW9kdWxlU2NyaXB0TG9hZGVyQ2xpZW50LmgKaW5kZXggYTZkMTAyZDZhNTgwLi5mOTk1ZjQ4
ZWUzZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL01vZHVsZVNjcmlw
dExvYWRlckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL01vZHVsZVNj
cmlwdExvYWRlckNsaWVudC5oCkBAIC0yNSwxNCArMjUsMTIgQEAKIAogI3ByYWdtYSBvbmNlCiAK
LSNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IE1vZHVsZVNjcmlwdExvYWRlcjsKIGNsYXNzIERlZmVycmVkUHJvbWlzZTsKIAotY2xhc3MgTW9k
dWxlU2NyaXB0TG9hZGVyQ2xpZW50IDogcHVibGljIENhbk1ha2VXZWFrUHRyPE1vZHVsZVNjcmlw
dExvYWRlckNsaWVudD4geworY2xhc3MgTW9kdWxlU2NyaXB0TG9hZGVyQ2xpZW50IHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5Nb2R1bGVTY3JpcHRMb2FkZXJDbGllbnQoKSA9IGRlZmF1bHQ7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVm
YXVsdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVT
dHJlYW1EZWZhdWx0Q29udHJvbGxlci5jcHAKaW5kZXggMmFkM2JlMzgwZTUyLi41NGFiZTJiMDc5
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Jl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuY3BwCkBAIC00MSwyMCArNDEsMjAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBpbnZva2VSZWFkYWJsZVN0cmVhbURlZmF1
bHRDb250cm9sbGVyRnVuY3Rpb24oSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9i
amVjdCwgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBKU0M6Ok1hcmtl
ZEFyZ3VtZW50QnVmZmVyJiBhcmd1bWVudHMpCiB7Ci0gICAgUmVmIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpOworICAgIEpTQzo6Vk0mIHZtID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgp
OwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgYXV0byBzY29wZSA9IERF
Q0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGF1dG8gZnVuY3Rpb24gPSBsZXhpY2FsR2xvYmFs
T2JqZWN0LmdldCgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaWRlbnRpZmllcik7CiAKLSAgICBFWENF
UFRJT05fQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSB8fCB2bS0+aGFzUGVuZGluZ1Rlcm1pbmF0
aW9uRXhjZXB0aW9uKCkpOworICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigp
IHx8IHZtLmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCBmYWxzZSk7CiAKICAgICBBU1NFUlQoZnVuY3Rpb24uaXNDYWxsYWJs
ZSgpKTsKIAogICAgIGF1dG8gY2FsbERhdGEgPSBKU0M6OmdldENhbGxEYXRhKGZ1bmN0aW9uKTsK
ICAgICBjYWxsKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBmdW5jdGlvbiwgY2FsbERhdGEsIEpTQzo6
anNVbmRlZmluZWQoKSwgYXJndW1lbnRzKTsKLSAgICBFWENFUFRJT05fQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSB8fCB2bS0+aGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOworICAg
IEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHZtLmhhc1BlbmRpbmdUZXJt
aW5hdGlvbkV4Y2VwdGlvbigpKTsKICAgICByZXR1cm4gIXNjb3BlLmV4Y2VwdGlvbigpOwogfQog
CkBAIC03NCwxMyArNzQsMTMgQEAgdm9pZCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
OjpjbG9zZSgpCiB2b2lkIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6OmVycm9yKGNv
bnN0IEV4Y2VwdGlvbiYgZXhjZXB0aW9uKQogewogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKLSAgICBSZWYgdm0gPSBs
ZXhpY2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGF1dG8gdmFsdWUgPSBjcmVhdGVET01F
eGNlcHRpb24oJmxleGljYWxHbG9iYWxPYmplY3QsIGV4Y2VwdGlvbi5jb2RlKCksIGV4Y2VwdGlv
bi5tZXNzYWdlKCkpOwogCiAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkgewot
ICAgICAgICBBU1NFUlQodm0tPmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigpKTsKKyAg
ICAgICAgQVNTRVJUKHZtLmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtODksNyArODksNyBAQCB2b2lkIFJlYWRhYmxlU3RyZWFt
RGVmYXVsdENvbnRyb2xsZXI6OmVycm9yKGNvbnN0IEV4Y2VwdGlvbiYgZXhjZXB0aW9uKQogICAg
IGFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwogICAgIEFTU0VSVCghYXJndW1lbnRzLmhhc092ZXJm
bG93ZWQoKSk7CiAKLSAgICBhdXRvKiBjbGllbnREYXRhID0gc3RhdGljX2Nhc3Q8SlNWTUNsaWVu
dERhdGEqPih2bS0+Y2xpZW50RGF0YSk7CisgICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19j
YXN0PEpTVk1DbGllbnREYXRhKj4odm0uY2xpZW50RGF0YSk7CiAgICAgYXV0byYgcHJpdmF0ZU5h
bWUgPSBjbGllbnREYXRhLT5idWlsdGluRnVuY3Rpb25zKCkucmVhZGFibGVTdHJlYW1JbnRlcm5h
bHNCdWlsdGlucygpLnJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvclByaXZhdGVO
YW1lKCk7CiAKICAgICBpbnZva2VSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRnVuY3Rp
b24oZ2xvYmFsT2JqZWN0KCksIHByaXZhdGVOYW1lLCBhcmd1bWVudHMpOwpAQCAtOTgsNyArOTgs
NyBAQCB2b2lkIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6OmVycm9yKGNvbnN0IEV4
Y2VwdGlvbiYgZXhjZXB0aW9uKQogYm9vbCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVy
OjplbnF1ZXVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0
JiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gdGhpcy0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgUmVmIHZt
ID0gbGV4aWNhbEdsb2JhbE9iamVjdC52bSgpOworICAgIGF1dG8mIHZtID0gbGV4aWNhbEdsb2Jh
bE9iamVjdC52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9sZGVyIGxvY2sodm0pOwogCiAgICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmd1bWVudHM7CkBAIC0xMDYsNyArMTA2LDcgQEAgYm9v
bCBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyOjplbnF1ZXVlKEpTQzo6SlNWYWx1ZSB2
YWx1ZSkKICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICBBU1NFUlQoIWFyZ3VtZW50
cy5oYXNPdmVyZmxvd2VkKCkpOwogCi0gICAgYXV0byogY2xpZW50RGF0YSA9IHN0YXRpY19jYXN0
PEpTVk1DbGllbnREYXRhKj4odm0tPmNsaWVudERhdGEpOworICAgIGF1dG8qIGNsaWVudERhdGEg
PSBzdGF0aWNfY2FzdDxKU1ZNQ2xpZW50RGF0YSo+KGxleGljYWxHbG9iYWxPYmplY3Qudm0oKS5j
bGllbnREYXRhKTsKICAgICBhdXRvJiBwcml2YXRlTmFtZSA9IGNsaWVudERhdGEtPmJ1aWx0aW5G
dW5jdGlvbnMoKS5yZWFkYWJsZVN0cmVhbUludGVybmFsc0J1aWx0aW5zKCkucmVhZGFibGVTdHJl
YW1EZWZhdWx0Q29udHJvbGxlckVucXVldWVQcml2YXRlTmFtZSgpOwogCiAgICAgcmV0dXJuIGlu
dm9rZVJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJGdW5jdGlvbihnbG9iYWxPYmplY3Qo
KSwgcHJpdmF0ZU5hbWUsIGFyZ3VtZW50cyk7CkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBib29sIFJl
YWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI6OmVucXVldWUoUmVmUHRyPEpTQzo6QXJyYXlC
dWZmZXI+JiYgYnVmZmVyKQogICAgIH0KIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QgPSB0aGlzLT5nbG9iYWxPYmplY3QoKTsKLSAgICBSZWYgdm0gPSBsZXhp
Y2FsR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgYXV0byYgdm0gPSBsZXhpY2FsR2xvYmFsT2JqZWN0
LnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwogICAgIGF1dG8gbGVuZ3RoID0gYnVmZmVyLT5ieXRl
TGVuZ3RoKCk7CiAgICAgYXV0byBjaHVuayA9IEpTQzo6VWludDhBcnJheTo6Y3JlYXRlKFdURk1v
dmUoYnVmZmVyKSwgMCwgbGVuZ3RoKTsKICAgICBhdXRvIHZhbHVlID0gdG9KUygmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmxleGljYWxHbG9iYWxPYmplY3QsIGNodW5rLmdldCgpKTsKIAotICAgIEVY
Q0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8IHZtLT5oYXNQZW5kaW5nVGVybWlu
YXRpb25FeGNlcHRpb24oKSk7CisgICAgRVhDRVBUSU9OX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9u
KCkgfHwgdm0uaGFzUGVuZGluZ1Rlcm1pbmF0aW9uRXhjZXB0aW9uKCkpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIGZhbHNlKTsKIAogICAgIHJldHVybiBlbnF1ZXVlKHZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCmluZGV4
IDVjMjliM2IwNjIzZi4uMjAwNzEwYjJkYjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY2hlZHVsZWRBY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjaGVkdWxlZEFjdGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBTY2hlZHVs
ZWRBY3Rpb246OmV4ZWN1dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIHZvaWQg
U2NoZWR1bGVkQWN0aW9uOjpleGVjdXRlRnVuY3Rpb25JbkNvbnRleHQoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSB0aGlzVmFsdWUsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG1fZnVuY3Rpb24pOwotICAgIFJlZiB2bSA9IGNvbnRl
eHQudm0oKTsKKyAgICBWTSYgdm0gPSBjb250ZXh0LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwogICAgIGF1dG8gY2F0Y2hTY29wZSA9IERFQ0xBUkVfQ0FUQ0hfU0NPUEUodm0pOwog
CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoRG9jdW1l
bnQmIGRvY3VtZW50KQogICAgIGlmIChtX2Z1bmN0aW9uKQogICAgICAgICBleGVjdXRlRnVuY3Rp
b25JbkNvbnRleHQod2luZG93LCAmd2luZG93LT5wcm94eSgpLCBkb2N1bWVudCk7CiAgICAgZWxz
ZQotICAgICAgICBmcmFtZS0+Y2hlY2tlZFNjcmlwdCgpLT5leGVjdXRlU2NyaXB0SW5Xb3JsZEln
bm9yaW5nRXhjZXB0aW9uKG1faXNvbGF0ZWRXb3JsZCwgbV9jb2RlLCBtX3NvdXJjZVRhaW50ZWRP
cmlnaW4pOworICAgICAgICBmcmFtZS0+c2NyaXB0KCkuZXhlY3V0ZVNjcmlwdEluV29ybGRJZ25v
cmluZ0V4Y2VwdGlvbihtX2lzb2xhdGVkV29ybGQsIG1fY29kZSwgbV9zb3VyY2VUYWludGVkT3Jp
Z2luKTsKIH0KIAogdm9pZCBTY2hlZHVsZWRBY3Rpb246OmV4ZWN1dGUoV29ya2VyR2xvYmFsU2Nv
cGUmIHdvcmtlckdsb2JhbFNjb3BlKQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgU2NoZWR1bGVk
QWN0aW9uOjpleGVjdXRlKFdvcmtlckdsb2JhbFNjb3BlJiB3b3JrZXJHbG9iYWxTY29wZSkKICAg
ICAvLyBJbiBhIFdvcmtlciwgdGhlIGV4ZWN1dGlvbiBzaG91bGQgYWx3YXlzIGhhcHBlbiBvbiBh
IHdvcmtlciB0aHJlYWQuCiAgICAgQVNTRVJUKHdvcmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLnRo
cmVhZCgpID09ICZUaHJlYWQ6OmN1cnJlbnQoKSk7CiAKLSAgICBDaGVja2VkUHRyIHNjcmlwdENv
bnRyb2xsZXIgPSB3b3JrZXJHbG9iYWxTY29wZS5zY3JpcHQoKTsKKyAgICBhdXRvKiBzY3JpcHRD
b250cm9sbGVyID0gd29ya2VyR2xvYmFsU2NvcGUuc2NyaXB0KCk7CiAKICAgICBpZiAobV9mdW5j
dGlvbikgewogICAgICAgICBhdXRvKiBjb250ZXh0V3JhcHBlciA9IHNjcmlwdENvbnRyb2xsZXIt
Pmdsb2JhbFNjb3BlV3JhcHBlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0Q2FjaGVkRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENhY2hlZEZyYW1lRGF0YS5jcHAKaW5kZXggZWUwZTc4OWViMDA0Li5jMmM1ZjEx
MmI4YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENhY2hl
ZEZyYW1lRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q2Fj
aGVkRnJhbWVEYXRhLmNwcApAQCAtNTcsNyArNTcsNyBAQCBTY3JpcHRDYWNoZWRGcmFtZURhdGE6
OlNjcmlwdENhY2hlZEZyYW1lRGF0YShMb2NhbEZyYW1lJiBmcmFtZSkKICAgICAgICAgd2luZG93
LT5zZXRDb25zb2xlQ2xpZW50KG51bGxwdHIpOwogICAgIH0KIAotICAgIGZyYW1lLnByb3RlY3Rl
ZFdpbmRvd1Byb3h5KCktPmF0dGFjaERlYnVnZ2VyKG51bGxwdHIpOworICAgIGZyYW1lLndpbmRv
d1Byb3h5KCkuYXR0YWNoRGVidWdnZXIobnVsbHB0cik7CiB9CiAKIFNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6flNjcmlwdENhY2hlZEZyYW1lRGF0YSgpCkBAIC02OSwxNyArNjksMTcgQEAgdm9pZCBT
Y3JpcHRDYWNoZWRGcmFtZURhdGE6OnJlc3RvcmUoTG9jYWxGcmFtZSYgZnJhbWUpCiB7CiAgICAg
SlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0oKSk7CiAKLSAgICBSZWZQdHIgcGFnZSA9IGZyYW1l
LnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUucGFnZSgpOwogCi0gICAgZm9yIChhdXRv
JiB3aW5kb3dQcm94eSA6IGZyYW1lLndpbmRvd1Byb3h5KCkuanNXaW5kb3dQcm94aWVzQXNWZWN0
b3IoKSkgewotICAgICAgICBSZWYgd29ybGQgPSB3aW5kb3dQcm94eS0+d29ybGQoKTsKKyAgICBm
b3IgKGF1dG8gd2luZG93UHJveHkgOiBmcmFtZS53aW5kb3dQcm94eSgpLmpzV2luZG93UHJveGll
c0FzVmVjdG9yKCkpIHsKKyAgICAgICAgYXV0byogd29ybGQgPSAmd2luZG93UHJveHktPndvcmxk
KCk7CiAKLSAgICAgICAgaWYgKGF1dG8qIHdpbmRvdyA9IG1fd2luZG93cy5nZXQod29ybGQucHRy
KCkpLmdldCgpKQotICAgICAgICAgICAgd2luZG93UHJveHktPnNldFdpbmRvdyhSZWYgeyB3aW5k
b3ctPnZtKCkgfSwgKndpbmRvdyk7CisgICAgICAgIGlmIChhdXRvKiB3aW5kb3cgPSBtX3dpbmRv
d3MuZ2V0KHdvcmxkKS5nZXQoKSkKKyAgICAgICAgICAgIHdpbmRvd1Byb3h5LT5zZXRXaW5kb3co
d2luZG93LT52bSgpLCAqd2luZG93KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBBU1NF
UlQoZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpOwotICAgICAgICAgICAgUmVmIGRvbVdp
bmRvdyA9ICpmcmFtZS5kb2N1bWVudCgpLT5kb21XaW5kb3coKTsKLSAgICAgICAgICAgIGlmICgm
d2luZG93UHJveHktPndyYXBwZWQoKSA9PSBkb21XaW5kb3cucHRyKCkpCisgICAgICAgICAgICBh
dXRvJiBkb21XaW5kb3cgPSAqZnJhbWUuZG9jdW1lbnQoKS0+ZG9tV2luZG93KCk7CisgICAgICAg
ICAgICBpZiAoJndpbmRvd1Byb3h5LT53cmFwcGVkKCkgPT0gJmRvbVdpbmRvdykKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgd2luZG93UHJveHktPnNldFdpbmRvdyhk
b21XaW5kb3cpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9s
bGVyLmNwcAppbmRleCAzMTZlMjNlYzFiMzguLjA4YmVlZTYzZTZjNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTExMyw5ICsxMTMs
OSBAQCBTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiB7CiAgICAgZGlzY29u
bmVjdFBsYXRmb3JtU2NyaXB0T2JqZWN0cygpOwogCi0gICAgaWYgKFJlZlB0ciBjYWNoZWFibGVC
aW5kaW5nUm9vdE9iamVjdCA9IG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAg
ICAgSlNMb2NrSG9sZGVyIGxvY2socHJvdGVjdGVkQ29tbW9uVk0oKSk7Ci0gICAgICAgIGNhY2hl
YWJsZUJpbmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CisgICAgaWYgKG1fY2FjaGVhYmxl
QmluZGluZ1Jvb3RPYmplY3QpIHsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29tbW9uVk0o
KSk7CisgICAgICAgIG1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QtPmludmFsaWRhdGUoKTsK
ICAgICAgICAgbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVjdCA9IG51bGxwdHI7CiAgICAgfQog
fQpAQCAtMTI4LDEwICsxMjgsMTAgQEAgSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2
YWx1YXRlSW5Xb3JsZElnbm9yaW5nRXhjZXB0aW9uKGNvbnN0IFNjcmlwdFNvdXIKIAogVmFsdWVP
ckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluV29ybGQoY29uc3QgU2NyaXB0
U291cmNlQ29kZSYgc291cmNlQ29kZSwgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKIHsKLSAgICBS
ZWYgdm0gPSB3b3JsZC52bSgpOworICAgIGF1dG8mIHZtID0gd29ybGQudm0oKTsKICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBpZiAodm0tPmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4
Y2VwdGlvbigpKSB7CisgICAgaWYgKHZtLmhhc1BlbmRpbmdUZXJtaW5hdGlvbkV4Y2VwdGlvbigp
KSB7CiAgICAgICAgIEV4Y2VwdGlvbkRldGFpbHMgZGV0YWlsczsKICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGRldGFpbHMpOwogICAgIH0KQEAgLTE0OSwxNSArMTQ5LDE1IEBAIFZhbHVl
T3JFeGNlcHRpb24gU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGNvbnN0IFNjcmlw
dFNvdXJjZUNvZGUmIHNvdXJjCiAgICAgYXV0byYgcHJveHkgPSBqc1dpbmRvd1Byb3h5KHdvcmxk
KTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqcHJveHkud2luZG93KCk7CiAKLSAgICBSZWYg
ZnJhbWUgPSBtX2ZyYW1lLmdldCgpOworICAgIFJlZiBwcm90ZWN0b3IgeyBtX2ZyYW1lIH07CiAg
ICAgU2V0Rm9yU2NvcGUgc291cmNlVVJMU2NvcGUobV9zb3VyY2VVUkwsICZzb3VyY2VVUkwpOwog
Ci0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQoZnJhbWUs
IHNvdXJjZVVSTC5zdHJpbmcoKSwgc291cmNlQ29kZS5zdGFydExpbmUoKSwgc291cmNlQ29kZS5z
dGFydENvbHVtbigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJjZUNvZGUuc3RhcnRMaW5l
KCksIHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKSk7CiAKICAgICBOYWtlZFB0cjxKU0M6OkV4Y2Vw
dGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBKU1ZhbHVlIHJldHVyblZhbHVlID0gSlNF
eGVjU3RhdGU6OnByb2ZpbGVkRXZhbHVhdGUoJmdsb2JhbE9iamVjdCwgSlNDOjpQcm9maWxpbmdS
ZWFzb246Ok90aGVyLCBqc1NvdXJjZUNvZGUsICZwcm94eSwgZXZhbHVhdGlvbkV4Y2VwdGlvbik7
CiAKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KGZyYW1l
KTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KG1fZnJh
bWUpOwogCiAgICAgc3RkOjpvcHRpb25hbDxFeGNlcHRpb25EZXRhaWxzPiBvcHRpb25hbERldGFp
bHM7CiAgICAgaWYgKGV2YWx1YXRpb25FeGNlcHRpb24pIHsKQEAgLTIxMSw3ICsyMTEsNyBAQCB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmxvYWRNb2R1bGVTY3JpcHQoTG9hZGFibGVNb2R1bGVTY3Jp
cHQmIG1vZHVsZVNjcmlwdCwgY29ucwogCiBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6
bGlua0FuZEV2YWx1YXRlTW9kdWxlU2NyaXB0SW5Xb3JsZChMb2FkYWJsZU1vZHVsZVNjcmlwdCYg
bW9kdWxlU2NyaXB0LCBET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewotICAgIFJlZiB2bSA9IHdv
cmxkLnZtKCk7CisgICAgSlNDOjpWTSYgdm0gPSB3b3JsZC52bSgpOwogICAgIEpTTG9ja0hvbGRl
ciBsb2NrKHZtKTsKIAogICAgIGF1dG8mIHByb3h5ID0ganNXaW5kb3dQcm94eSh3b3JsZCk7CkBA
IC0yMTksNyArMjE5LDcgQEAgSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRF
dmFsdWF0ZU1vZHVsZVNjcmlwdEluV29ybGQoTG9hZGFibGVNb2R1bGUKIAogICAgIC8vIEZJWE1F
OiBQcmV2ZW50aW5nIEZyYW1lIGZyb20gYmVpbmcgZGVzdHJveWVkIGlzIGVzc2VudGlhbGx5IHVu
bmVjZXNzYXJ5LgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjQ3NjMKLSAgICBSZWYgcHJvdGVjdGVkRnJhbWUgPSBtX2ZyYW1lLmdldCgpOworICAgIFJl
ZiBwcm90ZWN0ZWRGcmFtZSB7IG1fZnJhbWUgfTsKIAogICAgIE5ha2VkUHRyPEpTQzo6RXhjZXB0
aW9uPiBldmFsdWF0aW9uRXhjZXB0aW9uOwogICAgIGF1dG8gcmV0dXJuVmFsdWUgPSBKU0V4ZWNT
dGF0ZTo6bGlua0FuZEV2YWx1YXRlTW9kdWxlKGxleGljYWxHbG9iYWxPYmplY3QsIElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIG1vZHVsZVNjcmlwdC5tb2R1bGVLZXkoKSksIGpzVW5kZWZpbmVkKCks
IGV2YWx1YXRpb25FeGNlcHRpb24pOwpAQCAtMjQwLDEzICsyNDAsMTMgQEAgSlNDOjpKU1ZhbHVl
IFNjcmlwdENvbnRyb2xsZXI6OmxpbmtBbmRFdmFsdWF0ZU1vZHVsZVNjcmlwdChMb2FkYWJsZU1v
ZHVsZVNjcmlwdCYKIAogSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlTW9k
dWxlKGNvbnN0IFVSTCYgc291cmNlVVJMLCBBYnN0cmFjdE1vZHVsZVJlY29yZCYgbW9kdWxlUmVj
b3JkLCBET01XcmFwcGVyV29ybGQmIHdvcmxkLCBKU0M6OkpTVmFsdWUgYXdhaXRlZFZhbHVlLCBK
U0M6OkpTVmFsdWUgcmVzdW1lTW9kZSkKIHsKLSAgICBSZWYgdm0gPSB3b3JsZC52bSgpOworICAg
IEpTQzo6Vk0mIHZtID0gd29ybGQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAK
ICAgICBhdXRvJiBwcm94eSA9IGpzV2luZG93UHJveHkod29ybGQpOwogICAgIGF1dG8mIGxleGlj
YWxHbG9iYWxPYmplY3QgPSAqcHJveHkud2luZG93KCk7CiAKLSAgICBSZWYgZnJhbWUgPSBtX2Zy
YW1lLmdldCgpOworICAgIFJlZiBwcm90ZWN0b3IgeyBtX2ZyYW1lIH07CiAgICAgU2V0Rm9yU2Nv
cGUgc291cmNlVVJMU2NvcGUobV9zb3VyY2VVUkwsICZzb3VyY2VVUkwpOwogCiAjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQpAQCAtMjU2LDQ4ICsyNTYsNDggQEAgSlNDOjpKU1ZhbHVlIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlTW9kdWxlKGNvbnN0IFVSTCYgc291cmNlVVJMLCBBYnN0cmFjdE1v
ZHUKICNlbmRpZgogICAgIGlmIChpc1dhc21Nb2R1bGUpIHsKICAgICAgICAgLy8gRklYTUU6IFBy
b3ZpZGUgYmV0dGVyIGluc3BlY3RvciBzdXBwb3J0IGZvciBXYXNtIHNjcmlwdHMuCi0gICAgICAg
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEV2YWx1YXRlU2NyaXB0KGZyYW1lLCBzb3Vy
Y2VVUkwuc3RyaW5nKCksIDEsIDEpOworICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246
OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIDEsIDEpOwog
ICAgIH0gZWxzZSBpZiAobW9kdWxlUmVjb3JkLmluaGVyaXRzPEpTQzo6U3ludGhldGljTW9kdWxl
UmVjb3JkPigpKQotICAgICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0
ZVNjcmlwdChmcmFtZSwgc291cmNlVVJMLnN0cmluZygpLCAxLCAxKTsKKyAgICAgICAgSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQobV9mcmFtZSwgc291cmNlVVJM
LnN0cmluZygpLCAxLCAxKTsKICAgICBlbHNlIHsKICAgICAgICAgYXV0byoganNNb2R1bGVSZWNv
cmQgPSBqc0Nhc3Q8SlNNb2R1bGVSZWNvcmQqPigmbW9kdWxlUmVjb3JkKTsKICAgICAgICAgY29u
c3QgYXV0byYganNTb3VyY2VDb2RlID0ganNNb2R1bGVSZWNvcmQtPnNvdXJjZUNvZGUoKTsKLSAg
ICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVhdGVTY3JpcHQoZnJhbWUs
IHNvdXJjZVVSTC5zdHJpbmcoKSwganNTb3VyY2VDb2RlLmZpcnN0TGluZSgpLm9uZUJhc2VkSW50
KCksIGpzU291cmNlQ29kZS5zdGFydENvbHVtbigpLm9uZUJhc2VkSW50KCkpOworICAgICAgICBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3Vy
Y2VVUkwuc3RyaW5nKCksIGpzU291cmNlQ29kZS5maXJzdExpbmUoKS5vbmVCYXNlZEludCgpLCBq
c1NvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKS5vbmVCYXNlZEludCgpKTsKICAgICB9CiAgICAgYXV0
byByZXR1cm5WYWx1ZSA9IG1vZHVsZVJlY29yZC5ldmFsdWF0ZSgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgYXdhaXRlZFZhbHVlLCByZXN1bWVNb2RlKTsKLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEV2YWx1YXRlU2NyaXB0KGZyYW1lKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUpOwogCiAgICAgcmV0dXJuIHJldHVyblZhbHVl
OwogfQogCiBKU0M6OkpTVmFsdWUgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVNb2R1bGUoY29u
c3QgVVJMJiBzb3VyY2VVUkwsIEFic3RyYWN0TW9kdWxlUmVjb3JkJiBtb2R1bGVSZWNvcmQsIEpT
Qzo6SlNWYWx1ZSBhd2FpdGVkVmFsdWUsIEpTQzo6SlNWYWx1ZSByZXN1bWVNb2RlKQogewotICAg
IHJldHVybiBldmFsdWF0ZU1vZHVsZShzb3VyY2VVUkwsIG1vZHVsZVJlY29yZCwgcHJvdGVjdGVk
TWFpblRocmVhZE5vcm1hbFdvcmxkKCksIGF3YWl0ZWRWYWx1ZSwgcmVzdW1lTW9kZSk7CisgICAg
cmV0dXJuIGV2YWx1YXRlTW9kdWxlKHNvdXJjZVVSTCwgbW9kdWxlUmVjb3JkLCBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKSwgYXdhaXRlZFZhbHVlLCByZXN1bWVNb2RlKTsKIH0KIAogUmVmPERPTVdy
YXBwZXJXb3JsZD4gU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlV29ybGQoY29uc3QgU3RyaW5nJiBu
YW1lLCBXb3JsZFR5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVh
dGUocHJvdGVjdGVkQ29tbW9uVk0oKSwgdHlwZSA9PSBXb3JsZFR5cGU6OlVzZXIgPyBET01XcmFw
cGVyV29ybGQ6OlR5cGU6OlVzZXIgOiBET01XcmFwcGVyV29ybGQ6OlR5cGU6OkludGVybmFsLCBu
YW1lKTsKKyAgICByZXR1cm4gRE9NV3JhcHBlcldvcmxkOjpjcmVhdGUoY29tbW9uVk0oKSwgdHlw
ZSA9PSBXb3JsZFR5cGU6OlVzZXIgPyBET01XcmFwcGVyV29ybGQ6OlR5cGU6OlVzZXIgOiBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OkludGVybmFsLCBuYW1lKTsKIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpnZXRBbGxXb3JsZHMoVmVjdG9yPFJlZjxET01XcmFwcGVyV29ybGQ+PiYgd29ybGRz
KQogewotICAgIHN0YXRpY19jYXN0PEpTVk1DbGllbnREYXRhKj4ocHJvdGVjdGVkQ29tbW9uVk0o
KS0+Y2xpZW50RGF0YSktPmdldEFsbFdvcmxkcyh3b3JsZHMpOworICAgIHN0YXRpY19jYXN0PEpT
Vk1DbGllbnREYXRhKj4oY29tbW9uVk0oKS5jbGllbnREYXRhKS0+Z2V0QWxsV29ybGRzKHdvcmxk
cyk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdFNjcmlwdEZvcldpbmRvd1Byb3h5
KEpTV2luZG93UHJveHkmIHdpbmRvd1Byb3h5KQogewotICAgIFJlZiB3b3JsZCA9IHdpbmRvd1By
b3h5LndvcmxkKCk7Ci0gICAgUmVmIHZtID0gd29ybGQtPnZtKCk7CisgICAgYXV0byYgd29ybGQg
PSB3aW5kb3dQcm94eS53b3JsZCgpOworICAgIEpTQzo6Vk0mIHZtID0gd29ybGQudm0oKTsKICAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRDSF9TQ09QRSh2bSk7CiAKICAgICBqc0Nhc3Q8SlNM
b2NhbERPTVdpbmRvdyo+KHdpbmRvd1Byb3h5LndpbmRvdygpKS0+dXBkYXRlRG9jdW1lbnQoKTsK
ICAgICBFWENFUFRJT05fQVNTRVJUX1VOVVNFRChzY29wZSwgIXNjb3BlLmV4Y2VwdGlvbigpKTsK
IAotICAgIGlmIChSZWZQdHIgZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlm
IChSZWZQdHIgZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50
LT5jaGVja2VkQ29udGVudFNlY3VyaXR5UG9saWN5KCktPmRpZENyZWF0ZVdpbmRvd1Byb3h5KHdp
bmRvd1Byb3h5KTsKIAotICAgIGlmIChSZWZQdHIgcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKSkgewor
ICAgIGlmIChSZWZQdHIgcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7CiAgICAgICAgIHdpbmRvd1By
b3h5LmF0dGFjaERlYnVnZ2VyKHBhZ2UtPmRlYnVnZ2VyKCkpOwogICAgICAgICB3aW5kb3dQcm94
eS53aW5kb3coKS0+c2V0UHJvZmlsZUdyb3VwKHBhZ2UtPmdyb3VwKCkuaWRlbnRpZmllcigpKTsK
ICAgICAgICAgd2luZG93UHJveHkud2luZG93KCktPnNldENvbnNvbGVDbGllbnQocGFnZS0+Y29u
c29sZSgpKTsKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmluaXRT
Y3JpcHRGb3JXaW5kb3dQcm94eShKU1dpbmRvd1Byb3h5JiB3aW5kb3dQcm94eSkKIAogUmVmPExv
Y2FsRnJhbWU+IFNjcmlwdENvbnRyb2xsZXI6OnByb3RlY3RlZEZyYW1lKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gbV9mcmFtZS5nZXQoKTsKKyAgICByZXR1cm4gbV9mcmFtZTsKIH0KIAogc3RhdGlj
IElkZW50aWZpZXIganNWYWx1ZVRvTW9kdWxlS2V5KEpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQpAQCAtMzI4LDEwICszMjgsMTAgQEAgdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpzZXR1cE1vZHVsZVNjcmlwdEhhbmRsZXJzKExvYWRhYmxlTW9kdWxlU2Ny
aXB0JiBtb2R1bGVTY3IKICAgICAvLyBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhZ2UgbG9hZCBpcyBj
YW5jZWxlZCwgdGhlIERlZmVycmVkUHJvbWlzZSB1c2VkIGluIHRoZSBtb2R1bGUgbG9hZGVyIHBp
cGVsaW5lIHdpbGwgc3RvcCBleGVjdXRpbmcgSlMgY29kZS4KICAgICAvLyBUaHVzIHRoZSBwcm9t
aXNlIHJldHVybmVkIGZyb20gdGhpcyBmdW5jdGlvbiBjb3VsZCByZW1haW4gdW5yZXNvbHZlZC4K
IAotICAgIFJlZiBtb2R1bGVTY3JpcHQgPSBtb2R1bGVTY3JpcHRSZWY7CisgICAgUmVmUHRyPExv
YWRhYmxlTW9kdWxlU2NyaXB0PiBtb2R1bGVTY3JpcHQoJm1vZHVsZVNjcmlwdFJlZik7CiAKICAg
ICBhdXRvJiBmdWxmaWxsSGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUobGV4
aWNhbEdsb2JhbE9iamVjdC52bSgpLCBwcm94eS53aW5kb3coKSwgMSwgU3RyaW5nKCksIFttb2R1
bGVTY3JpcHRdKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSAtPiBKU0M6OkVuY29kZWRKU1ZhbHVlIHsKLSAgICAgICAgUmVmIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICAgICAgSWRlbnRpZmll
ciBtb2R1bGVLZXkgPSBqc1ZhbHVlVG9Nb2R1bGVLZXkoZ2xvYmFsT2JqZWN0LCBjYWxsRnJhbWUt
PmFyZ3VtZW50KDApKTsKICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
QEAgLTM0MCw3ICszNDAsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldHVwTW9kdWxlU2Ny
aXB0SGFuZGxlcnMoTG9hZGFibGVNb2R1bGVTY3JpcHQmIG1vZHVsZVNjcgogICAgIH0pOwogCiAg
ICAgYXV0byYgcmVqZWN0SGFuZGxlciA9ICpKU05hdGl2ZVN0ZEZ1bmN0aW9uOjpjcmVhdGUobGV4
aWNhbEdsb2JhbE9iamVjdC52bSgpLCBwcm94eS53aW5kb3coKSwgMSwgU3RyaW5nKCksIFttb2R1
bGVTY3JpcHRdKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7Ci0gICAgICAgIFJlZiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICAgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBKU1ZhbHVlIGVycm9yVmFsdWUgPSBj
YWxsRnJhbWUtPmFyZ3VtZW50KDApOwogICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9DQVRD
SF9TQ09QRSh2bSk7CiAgICAgICAgIGlmIChlcnJvclZhbHVlLmlzT2JqZWN0KCkpIHsKQEAgLTQw
OSwxMiArNDA5LDEyIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0dXBNb2R1bGVTY3JpcHRI
YW5kbGVycyhMb2FkYWJsZU1vZHVsZVNjcmlwdCYgbW9kdWxlU2NyCiAKIFdpbmRvd1Byb3h5JiBT
Y3JpcHRDb250cm9sbGVyOjp3aW5kb3dQcm94eSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUtPndp
bmRvd1Byb3h5KCk7CisgICAgcmV0dXJuIG1fZnJhbWUud2luZG93UHJveHkoKTsKIH0KIAogSlNX
aW5kb3dQcm94eSYgU2NyaXB0Q29udHJvbGxlcjo6anNXaW5kb3dQcm94eShET01XcmFwcGVyV29y
bGQmIHdvcmxkKQogewotICAgIGF1dG8qIGpzV2luZG93UHJveHkgPSBtX2ZyYW1lLT53aW5kb3dQ
cm94eSgpLmpzV2luZG93UHJveHkod29ybGQpOworICAgIGF1dG8qIGpzV2luZG93UHJveHkgPSBt
X2ZyYW1lLndpbmRvd1Byb3h5KCkuanNXaW5kb3dQcm94eSh3b3JsZCk7CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShqc1dpbmRvd1Byb3h5LCAiVGhlIEpTV2luZG93UHJveHkgY2FuIG9ubHkgYmUg
bnVsbCBpZiB0aGUgZnJhbWUgaGFzIGJlZW4gZGVzdHJveWVkIik7CiAgICAgcmV0dXJuICpqc1dp
bmRvd1Byb3h5OwogfQpAQCAtNDI2LDcgKzQyNiw3IEBAIFRleHRQb3NpdGlvbiBTY3JpcHRDb250
cm9sbGVyOjpldmVudEhhbmRsZXJQb3NpdGlvbigpIGNvbnN0CiAKICAgICAvLyBGSVhNRTogVGhp
cyBsb2NhdGlvbiBtYXBzIHRvIHRoZSBlbmQgb2YgdGhlIEhUTUwgdGFnLCBhbmQgbm90IHRvIHRo
ZQogICAgIC8vIGV4YWN0IGNvbHVtbiBudW1iZXIgYmVsb25naW5nIHRvIHRoZSBldmVudCBoYW5k
bGVyIGF0dHJpYnV0ZS4KLSAgICBSZWZQdHIgcGFyc2VyID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCk7CisgICAgYXV0byogcGFyc2VyID0gbV9mcmFtZS5k
b2N1bWVudCgpLT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKTsKICAgICBpZiAocGFyc2VyKQog
ICAgICAgICByZXR1cm4gcGFyc2VyLT50ZXh0UG9zaXRpb24oKTsKICAgICByZXR1cm4gVGV4dFBv
c2l0aW9uKCk7CkBAIC00NTUsNyArNDU1LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpjYW5B
Y2Nlc3NGcm9tQ3VycmVudE9yaWdpbihMb2NhbEZyYW1lKiBmcmFtZSwgRG9jdW1lbnQmIGEKICAg
ICAvLyBJZiB0aGUgY3VycmVudCBsZXhpY2FsR2xvYmFsT2JqZWN0IGlzIG51bGwgd2Ugc2hvdWxk
IHVzZSB0aGUgYWNjZXNzaW5nIGRvY3VtZW50IGZvciB0aGUgc2VjdXJpdHkgY2hlY2suCiAgICAg
aWYgKCFsZXhpY2FsR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgIGF1dG8qIHRhcmdldERvY3VtZW50
ID0gZnJhbWUgPyBmcmFtZS0+ZG9jdW1lbnQoKSA6IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0
YXJnZXREb2N1bWVudCAmJiBhY2Nlc3NpbmdEb2N1bWVudC5wcm90ZWN0ZWRTZWN1cml0eU9yaWdp
bigpLT5pc1NhbWVPcmlnaW5Eb21haW4odGFyZ2V0RG9jdW1lbnQtPnByb3RlY3RlZFNlY3VyaXR5
T3JpZ2luKCkpOworICAgICAgICByZXR1cm4gdGFyZ2V0RG9jdW1lbnQgJiYgYWNjZXNzaW5nRG9j
dW1lbnQuc2VjdXJpdHlPcmlnaW4oKS5pc1NhbWVPcmlnaW5Eb21haW4odGFyZ2V0RG9jdW1lbnQt
PnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIH0KIAogICAgIHJldHVybiBCaW5kaW5nU2VjdXJpdHk6
OnNob3VsZEFsbG93QWNjZXNzVG9GcmFtZShsZXhpY2FsR2xvYmFsT2JqZWN0LCBmcmFtZSk7CkBA
IC00NzUsNyArNDc1LDcgQEAgQmluZGluZ3M6OlJvb3RPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6
OmNhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0KCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpZiAoIW1fY2FjaGVhYmxlQmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgSlNMb2Nr
SG9sZGVyIGxvY2socHJvdGVjdGVkQ29tbW9uVk0oKSk7CisgICAgICAgIEpTTG9ja0hvbGRlciBs
b2NrKGNvbW1vblZNKCkpOwogICAgICAgICBtX2NhY2hlYWJsZUJpbmRpbmdSb290T2JqZWN0ID0g
QmluZGluZ3M6OlJvb3RPYmplY3Q6OmNyZWF0ZShudWxscHRyLCBnbG9iYWxPYmplY3QocGx1Z2lu
V29ybGQoKSkpOwogICAgIH0KICAgICByZXR1cm4gbV9jYWNoZWFibGVCaW5kaW5nUm9vdE9iamVj
dC5nZXQoKTsKQEAgLTQ4Nyw3ICs0ODcsNyBAQCBCaW5kaW5nczo6Um9vdE9iamVjdCogU2NyaXB0
Q29udHJvbGxlcjo6YmluZGluZ1Jvb3RPYmplY3QoKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGlmICghbV9iaW5kaW5nUm9vdE9iamVjdCkgewotICAgICAgICBKU0xvY2tIb2xkZXIg
bG9jayhwcm90ZWN0ZWRDb21tb25WTSgpKTsKKyAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soY29t
bW9uVk0oKSk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmplY3QgPSBCaW5kaW5nczo6Um9vdE9i
amVjdDo6Y3JlYXRlKG51bGxwdHIsIGdsb2JhbE9iamVjdChwbHVnaW5Xb3JsZCgpKSk7CiAgICAg
fQogICAgIHJldHVybiBtX2JpbmRpbmdSb290T2JqZWN0LmdldCgpOwpAQCAtNTcwLDE1ICs1NzAs
MTUgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVjdHMoKQogCiAgICAg
bV9yb290T2JqZWN0cy5jbGVhcigpOwogCi0gICAgaWYgKFJlZlB0ciBiaW5kaW5nUm9vdE9iamVj
dCA9IG1fYmluZGluZ1Jvb3RPYmplY3QpIHsKLSAgICAgICAgYmluZGluZ1Jvb3RPYmplY3QtPmlu
dmFsaWRhdGUoKTsKKyAgICBpZiAobV9iaW5kaW5nUm9vdE9iamVjdCkgeworICAgICAgICBtX2Jp
bmRpbmdSb290T2JqZWN0LT5pbnZhbGlkYXRlKCk7CiAgICAgICAgIG1fYmluZGluZ1Jvb3RPYmpl
Y3QgPSBudWxscHRyOwogICAgIH0KIH0KIAogSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6
OmV4ZWN1dGVTY3JpcHRJZ25vcmluZ0V4Y2VwdGlvbihjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlND
OjpTb3VyY2VUYWludGVkT3JpZ2luIHRhaW50ZWRuZXNzLCBib29sIGZvcmNlVXNlckdlc3R1cmUp
CiB7Ci0gICAgcmV0dXJuIGV4ZWN1dGVTY3JpcHRJbldvcmxkSWdub3JpbmdFeGNlcHRpb24ocHJv
dGVjdGVkTWFpblRocmVhZE5vcm1hbFdvcmxkKCksIHNjcmlwdCwgdGFpbnRlZG5lc3MsIGZvcmNl
VXNlckdlc3R1cmUpOworICAgIHJldHVybiBleGVjdXRlU2NyaXB0SW5Xb3JsZElnbm9yaW5nRXhj
ZXB0aW9uKG1haW5UaHJlYWROb3JtYWxXb3JsZCgpLCBzY3JpcHQsIHRhaW50ZWRuZXNzLCBmb3Jj
ZVVzZXJHZXN0dXJlKTsKIH0KIAogSlNDOjpKU1ZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1
dGVTY3JpcHRJbldvcmxkSWdub3JpbmdFeGNlcHRpb24oRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwg
Y29uc3QgU3RyaW5nJiBzY3JpcHQsIEpTQzo6U291cmNlVGFpbnRlZE9yaWdpbiB0YWludGVkbmVz
cywgYm9vbCBmb3JjZVVzZXJHZXN0dXJlKQpAQCAtNTg5LDIzICs1ODksMjIgQEAgSlNDOjpKU1Zh
bHVlIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJbldvcmxkSWdub3JpbmdFeGNlcHRp
b24oRE9NV3JhcHBlclcKIAogVmFsdWVPckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpleGVj
dXRlU2NyaXB0SW5Xb3JsZChET01XcmFwcGVyV29ybGQmIHdvcmxkLCBSdW5KYXZhU2NyaXB0UGFy
YW1ldGVycyYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgUmVmIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsK
ICNpZiBFTkFCTEUoQVBQX0JPVU5EX0RPTUFJTlMpCi0gICAgaWYgKGZyYW1lLT5sb2FkZXIoKS5j
bGllbnQoKS5zaG91bGRFbmFibGVJbkFwcEJyb3dzZXJQcml2YWN5UHJvdGVjdGlvbnMoKSkgewot
ICAgICAgICBpZiAoUmVmUHRyIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYg
KG1fZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuc2hvdWxkRW5hYmxlSW5BcHBCcm93c2VyUHJpdmFj
eVByb3RlY3Rpb25zKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudCgpKQogICAgICAgICAgICAgZG9jdW1lbnQtPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsICJJZ25vcmluZyB1c2Vy
IHNjcmlwdCBpbmplY3Rpb24gZm9yIG5vbi1hcHAgYm91bmQgZG9tYWluLiJfcyk7CiAgICAgICAg
IFNDUklQVENPTlRST0xMRVJfUkVMRUFTRV9MT0dfRVJST1IoTG9hZGluZywgImV4ZWN1dGVTY3Jp
cHRJbldvcmxkOiBJZ25vcmluZyB1c2VyIHNjcmlwdCBpbmplY3Rpb24gZm9yIG5vbiBhcHAtYm91
bmQgZG9tYWluIik7CiAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFeGNlcHRpb25EZXRh
aWxzIHsgIklnbm9yaW5nIHVzZXIgc2NyaXB0IGluamVjdGlvbiBmb3Igbm9uLWFwcCBib3VuZCBk
b21haW4iX3MgfSk7CiAgICAgfQotICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5ub3RpZnlQ
YWdlT2ZBcHBCb3VuZEJlaGF2aW9yKCk7CisgICAgbV9mcmFtZS5sb2FkZXIoKS5jbGllbnQoKS5u
b3RpZnlQYWdlT2ZBcHBCb3VuZEJlaGF2aW9yKCk7CiAjZW5kaWYKIAotICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IocGFyYW1ldGVycy5mb3JjZVVzZXJHZXN0dXJlID09
IEZvcmNlVXNlckdlc3R1cmU6OlllcyA/IHN0ZDo6b3B0aW9uYWw8SXNQcm9jZXNzaW5nVXNlckdl
c3R1cmU+KElzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlOjpZZXMpIDogc3RkOjpudWxsb3B0LCBmcmFt
ZS0+cHJvdGVjdGVkRG9jdW1lbnQoKS5nZXQoKSwgVXNlckdlc3R1cmVUeXBlOjpBY3RpdmF0aW9u
VHJpZ2dlcmluZywgVXNlckdlc3R1cmVJbmRpY2F0b3I6OlByb2Nlc3NJbnRlcmFjdGlvblN0eWxl
OjpOZXZlcik7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihwYXJh
bWV0ZXJzLmZvcmNlVXNlckdlc3R1cmUgPT0gRm9yY2VVc2VyR2VzdHVyZTo6WWVzID8gc3RkOjpv
cHRpb25hbDxJc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZT4oSXNQcm9jZXNzaW5nVXNlckdlc3R1cmU6
OlllcykgOiBzdGQ6Om51bGxvcHQsIG1fZnJhbWUuZG9jdW1lbnQoKSwgVXNlckdlc3R1cmVUeXBl
OjpBY3RpdmF0aW9uVHJpZ2dlcmluZywgVXNlckdlc3R1cmVJbmRpY2F0b3I6OlByb2Nlc3NJbnRl
cmFjdGlvblN0eWxlOjpOZXZlcik7CiAKICAgICBpZiAocGFyYW1ldGVycy5mb3JjZVVzZXJHZXN0
dXJlID09IEZvcmNlVXNlckdlc3R1cmU6OlllcyAmJiBVc2VyR2VzdHVyZUluZGljYXRvcjo6Y3Vy
cmVudFVzZXJHZXN0dXJlKCkgJiYgcGFyYW1ldGVycy5yZW1vdmVUcmFuc2llbnRBY3RpdmF0aW9u
ID09IFJlbW92ZVRyYW5zaWVudEFjdGl2YXRpb246OlllcykgewogICAgICAgICBVc2VyR2VzdHVy
ZUluZGljYXRvcjo6Y3VycmVudFVzZXJHZXN0dXJlKCktPmFkZERlc3RydWN0aW9uT2JzZXJ2ZXIo
W10oVXNlckdlc3R1cmVUb2tlbiYgdG9rZW4pIHsKICAgICAgICAgICAgIHRva2VuLmZvckVhY2hJ
bXBhY3RlZERvY3VtZW50KFtdKERvY3VtZW50JiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAg
IGlmIChSZWZQdHIgd2luZG93ID0gZG9jdW1lbnQuZG9tV2luZG93KCkpCisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHdpbmRvdyA9IGRvY3VtZW50LmRvbVdpbmRvdygpKQogICAgICAgICAgICAg
ICAgICAgICB3aW5kb3ctPmNvbnN1bWVUcmFuc2llbnRBY3RpdmF0aW9uKCk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfSk7CkBAIC02MTcsMTIgKzYxNiwxMiBAQCBWYWx1ZU9yRXhjZXB0aW9u
IFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVTY3JpcHRJbldvcmxkKERPTVdyYXBwZXJXb3JsZCYg
d29ybGQsCiAgICAgYXV0byBzb3VyY2VVUkwgPSBwYXJhbWV0ZXJzLnNvdXJjZVVSTDsKICAgICBp
ZiAoIXNvdXJjZVVSTC5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgZ3Jv
c3MsIGJ1dCB3aGVuIHNldFRpbWVvdXQoKSBhbmQgc2V0SW50ZXJ2YWwoKSBhcmUgcGFzc2VkIEpT
IHN0cmluZ3MsIHRoZSB0aHJvd24gZXJyb3JzIHNob3VsZCB1c2UgdGhlIGZyYW1lIGRvY3VtZW50
IFVSTCAoYWNjb3JkaW5nIHRvIFdQVCkuCi0gICAgICAgIHNvdXJjZVVSTCA9IGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKTsKKyAgICAgICAgc291cmNlVVJMID0gbV9mcmFtZS5kb2N1bWVudCgpLT51
cmwoKTsKICAgICB9CiAKICAgICBzd2l0Y2ggKHBhcmFtZXRlcnMucnVuQXNBc3luY0Z1bmN0aW9u
KSB7CiAgICAgY2FzZSBSdW5Bc0FzeW5jRnVuY3Rpb246Ok5vOgotICAgICAgICByZXR1cm4gZXZh
bHVhdGVJbldvcmxkKFNjcmlwdFNvdXJjZUNvZGUgeyBwYXJhbWV0ZXJzLnNvdXJjZSwgcGFyYW1l
dGVycy50YWludGVkbmVzcywgV1RGTW92ZShzb3VyY2VVUkwpLCBUZXh0UG9zaXRpb24oKSwgSlND
OjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW0sIENhY2hlZFNjcmlwdEZldGNoZXI6
OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKS0+Y2hhcnNldCgpKSB9LCB3b3JsZCk7CisgICAgICAg
IHJldHVybiBldmFsdWF0ZUluV29ybGQoU2NyaXB0U291cmNlQ29kZSB7IHBhcmFtZXRlcnMuc291
cmNlLCBwYXJhbWV0ZXJzLnRhaW50ZWRuZXNzLCBXVEZNb3ZlKHNvdXJjZVVSTCksIFRleHRQb3Np
dGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6UHJvZ3JhbSwgQ2FjaGVkU2Ny
aXB0RmV0Y2hlcjo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+Y2hhcnNldCgpKSB9LCB3b3Js
ZCk7CiAgICAgY2FzZSBSdW5Bc0FzeW5jRnVuY3Rpb246OlllczoKICAgICAgICAgcmV0dXJuIGNh
bGxJbldvcmxkKFdURk1vdmUocGFyYW1ldGVycyksIHdvcmxkKTsKICAgICBkZWZhdWx0OgpAQCAt
NjY3LDE1ICs2NjYsMTUgQEAgVmFsdWVPckV4Y2VwdGlvbiBTY3JpcHRDb250cm9sbGVyOjpjYWxs
SW5Xb3JsZChSdW5KYXZhU2NyaXB0UGFyYW1ldGVycyYmIHBhcmFtZXQKIAogICAgIGZ1bmN0aW9u
U3RyaW5nQnVpbGRlci5hcHBlbmQoIil7IiwgcGFyYW1ldGVycy5zb3VyY2UsICJ9KSIpOwogCi0g
ICAgUmVmIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsKLSAgICBhdXRvIHNvdXJjZUNvZGUgPSBTY3Jp
cHRTb3VyY2VDb2RlIHsgZnVuY3Rpb25TdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCksIHBhcmFtZXRl
cnMudGFpbnRlZG5lc3MsIFdURk1vdmUocGFyYW1ldGVycy5zb3VyY2VVUkwpLCBUZXh0UG9zaXRp
b24oKSwgSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6OlByb2dyYW0sIENhY2hlZFNjcmlw
dEZldGNoZXI6OmNyZWF0ZShmcmFtZS0+ZG9jdW1lbnQoKS0+Y2hhcnNldCgpKSB9OworICAgIGF1
dG8gc291cmNlQ29kZSA9IFNjcmlwdFNvdXJjZUNvZGUgeyBmdW5jdGlvblN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSwgcGFyYW1ldGVycy50YWludGVkbmVzcywgV1RGTW92ZShwYXJhbWV0ZXJzLnNv
dXJjZVVSTCksIFRleHRQb3NpdGlvbigpLCBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6
UHJvZ3JhbSwgQ2FjaGVkU2NyaXB0RmV0Y2hlcjo6Y3JlYXRlKG1fZnJhbWUuZG9jdW1lbnQoKS0+
Y2hhcnNldCgpKSB9OwogICAgIGNvbnN0IGF1dG8mIGpzU291cmNlQ29kZSA9IHNvdXJjZUNvZGUu
anNTb3VyY2VDb2RlKCk7CiAKICAgICBjb25zdCBVUkwmIHNvdXJjZVVSTCA9IGpzU291cmNlQ29k
ZS5wcm92aWRlcigpLT5zb3VyY2VPcmlnaW4oKS51cmwoKTsKIAorICAgIFJlZiBwcm90ZWN0b3Ig
eyBtX2ZyYW1lIH07CiAgICAgU2V0Rm9yU2NvcGUgc291cmNlVVJMU2NvcGUobV9zb3VyY2VVUkws
ICZzb3VyY2VVUkwpOwogCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRXZhbHVh
dGVTY3JpcHQoZnJhbWUsIHNvdXJjZVVSTC5zdHJpbmcoKSwgc291cmNlQ29kZS5zdGFydExpbmUo
KSwgc291cmNlQ29kZS5zdGFydENvbHVtbigpKTsKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OndpbGxFdmFsdWF0ZVNjcmlwdChtX2ZyYW1lLCBzb3VyY2VVUkwuc3RyaW5nKCksIHNvdXJj
ZUNvZGUuc3RhcnRMaW5lKCksIHNvdXJjZUNvZGUuc3RhcnRDb2x1bW4oKSk7CiAKICAgICBOYWtl
ZFB0cjxKU0M6OkV4Y2VwdGlvbj4gZXZhbHVhdGlvbkV4Y2VwdGlvbjsKICAgICBzdGQ6Om9wdGlv
bmFsPEV4Y2VwdGlvbkRldGFpbHM+IG9wdGlvbmFsRGV0YWlsczsKQEAgLTcwMiw3ICs3MDEsNyBA
QCBWYWx1ZU9yRXhjZXB0aW9uIFNjcmlwdENvbnRyb2xsZXI6OmNhbGxJbldvcmxkKFJ1bkphdmFT
Y3JpcHRQYXJhbWV0ZXJzJiYgcGFyYW1ldAogICAgICAgICByZXR1cm5WYWx1ZSA9IEpTRXhlY1N0
YXRlOjpwcm9maWxlZENhbGwoJmdsb2JhbE9iamVjdCwgSlNDOjpQcm9maWxpbmdSZWFzb246Ok90
aGVyLCBmdW5jdGlvbk9iamVjdCwgY2FsbERhdGEsICZwcm94eSwgbWFya2VkQXJndW1lbnRzLCBl
dmFsdWF0aW9uRXhjZXB0aW9uKTsKICAgICB9IHdoaWxlIChmYWxzZSk7CiAKLSAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KGZyYW1lKTsKKyAgICBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OmRpZEV2YWx1YXRlU2NyaXB0KG1fZnJhbWUpOwogCiAgICAgaWYg
KGV2YWx1YXRpb25FeGNlcHRpb24gJiYgIW9wdGlvbmFsRGV0YWlscykgewogICAgICAgICBFeGNl
cHRpb25EZXRhaWxzIGRldGFpbHM7CkBAIC03OTQsMTggKzc5MywxNyBAQCBib29sIFNjcmlwdENv
bnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKFJlYXNvbkZvckNhbGxpbmdDYW5FeGVjdXRlU2Ny
aXB0cyByZWFzbwogICAgIGlmIChyZWFzb24gPT0gUmVhc29uRm9yQ2FsbGluZ0NhbkV4ZWN1dGVT
Y3JpcHRzOjpBYm91dFRvRXhlY3V0ZVNjcmlwdCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihTY3JpcHREaXNhbGxvd2VkU2NvcGU6OkluTWFpblRocmVh
ZDo6aXNTY3JpcHRBbGxvd2VkKCkpOwogCi0gICAgUmVmIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsK
LSAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkgJiYgZnJhbWUtPmRvY3VtZW50KCktPmlzU2FuZGJv
eGVkKFNhbmRib3hTY3JpcHRzKSkgeworICAgIGlmIChtX2ZyYW1lLmRvY3VtZW50KCkgJiYgbV9m
cmFtZS5kb2N1bWVudCgpLT5pc1NhbmRib3hlZChTYW5kYm94U2NyaXB0cykpIHsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbW92ZWQgb2ZmIHRoZSBjb25zb2xlIG9u
Y2UgYSBzb2x1dGlvbiB0byBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAzMjc0IGV4aXN0cy4KICAgICAgICAgaWYgKHJlYXNvbiA9PSBSZWFzb25Gb3JDYWxsaW5nQ2Fu
RXhlY3V0ZVNjcmlwdHM6OkFib3V0VG9FeGVjdXRlU2NyaXB0IHx8IHJlYXNvbiA9PSBSZWFzb25G
b3JDYWxsaW5nQ2FuRXhlY3V0ZVNjcmlwdHM6OkFib3V0VG9DcmVhdGVFdmVudExpc3RlbmVyKQot
ICAgICAgICAgICAgZnJhbWUtPnByb3RlY3RlZERvY3VtZW50KCktPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiQmxvY2tlZCBz
Y3JpcHQgZXhlY3V0aW9uIGluICciICsgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZ0Nl
bnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpICsgIicgYmVjYXVzZSB0aGUgZG9jdW1lbnQncyBmcmFt
ZSBpcyBzYW5kYm94ZWQgYW5kIHRoZSAnYWxsb3ctc2NyaXB0cycgcGVybWlzc2lvbiBpcyBub3Qg
c2V0LiIpOworICAgICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpTZWN1cml0eSwgTWVzc2FnZUxldmVsOjpFcnJvciwgIkJsb2NrZWQg
c2NyaXB0IGV4ZWN1dGlvbiBpbiAnIiArIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5n
Q2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiJyBiZWNhdXNlIHRoZSBkb2N1bWVudCdzIGZy
YW1lIGlzIHNhbmRib3hlZCBhbmQgdGhlICdhbGxvdy1zY3JpcHRzJyBwZXJtaXNzaW9uIGlzIG5v
dCBzZXQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIWZyYW1l
LT5wYWdlKCkpCisgICAgaWYgKCFtX2ZyYW1lLnBhZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1NjcmlwdChmcmFt
ZS0+c2V0dGluZ3MoKS5pc1NjcmlwdEVuYWJsZWQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUubG9h
ZGVyKCkuY2xpZW50KCkuYWxsb3dTY3JpcHQobV9mcmFtZS5zZXR0aW5ncygpLmlzU2NyaXB0RW5h
YmxlZCgpKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSmF2YVNjcmlwdFVS
TChjb25zdCBVUkwmIHVybCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
U2hvdWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMIHNob3VsZFJlcGxhY2VEb2N1bWVu
dElmSmF2YVNjcmlwdFVSTCkKQEAgLTgyMCw4ICs4MTgsOCBAQCB2b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV4ZWN1dGVKYXZhU2NyaXB0VVJMKGNvbnN0IFVSTCYgdXJsLCBSZWZQdHI8U2VjdXJpdHlP
cmlnaQogCiAgICAgLy8gV2UgbmVlZCB0byBob2xkIG9udG8gdGhlIEZyYW1lIGhlcmUgYmVjYXVz
ZSBleGVjdXRpbmcgc2NyaXB0IGNhbgogICAgIC8vIGRlc3Ryb3kgdGhlIGZyYW1lLgotICAgIFJl
ZiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7Ci0gICAgUmVmUHRyIG93bmVyRG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICBSZWYgZnJhbWUgPSBtX2ZyYW1lOworICAgIFJlZlB0ciBvd25l
ckRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwogCiAgICAgaWYgKHJlcXVlc3RlclNlY3Vy
aXR5T3JpZ2luICYmICFyZXF1ZXN0ZXJTZWN1cml0eU9yaWdpbi0+aXNTYW1lT3JpZ2luRG9tYWlu
KG93bmVyRG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpKQogICAgICAgICByZXR1cm47CkBAIC04
MzIsMTMgKzgzMCwxMyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV4ZWN1dGVKYXZhU2NyaXB0
VVJMKGNvbnN0IFVSTCYgdXJsLCBSZWZQdHI8U2VjdXJpdHlPcmlnaQogICAgIGNvbnN0IGludCBq
YXZhc2NyaXB0U2NoZW1lTGVuZ3RoID0gc2l6ZW9mKCJqYXZhc2NyaXB0OiIpIC0gMTsKIAogICAg
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBqc1dpbmRvd1Byb3h5KG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpKS53aW5kb3coKTsKLSAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgU3RyaW5nIGRlY29kZWRVUkwgPSBQ
QUw6OmRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh1cmwuc3RyaW5nKCkpOwogICAgIC8vIEZJWE1F
OiBUaGlzIHByb2JhYmx5IG5lZWRzIHRvIGZpZ3VyZSBvdXQgaWYgdGhlIG9yaWdpbiBpcyBjb25z
aWRlcmVkIHRhbml0ZWQuCiAgICAgYXV0byByZXN1bHQgPSBleGVjdXRlU2NyaXB0SWdub3JpbmdF
eGNlcHRpb24oZGVjb2RlZFVSTC5zdWJzdHJpbmcoamF2YXNjcmlwdFNjaGVtZUxlbmd0aCksIEpT
Qzo6U291cmNlVGFpbnRlZE9yaWdpbjo6VW50YWludGVkKTsKLSAgICBSRUxFQVNFX0FTU0VSVCh2
bS5wdHIoKSA9PSAmanNXaW5kb3dQcm94eShtYWluVGhyZWFkTm9ybWFsV29ybGQoKSkud2luZG93
KCktPnZtKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCZ2bSA9PSAmanNXaW5kb3dQcm94eShtYWlu
VGhyZWFkTm9ybWFsV29ybGQoKSkud2luZG93KCktPnZtKCkpOwogCiAgICAgLy8gSWYgZXhlY3V0
aW5nIHNjcmlwdCBjYXVzZWQgdGhpcyBmcmFtZSB0byBiZSByZW1vdmVkIGZyb20gdGhlIHBhZ2Us
IHdlCiAgICAgLy8gZG9uJ3Qgd2FudCB0byB0cnkgdG8gcmVwbGFjZSBpdHMgZG9jdW1lbnQhCkBA
IC04NjAsNyArODU4LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSmF2YVNjcmlw
dFVSTChjb25zdCBVUkwmIHVybCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2kKICAgICAvLyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3ODIKICAgICBpZiAoc2hv
dWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0VVJMID09IFJlcGxhY2VEb2N1bWVudElmSmF2
YVNjcmlwdFVSTCkgewogICAgICAgICAvLyBXZSdyZSBzdGlsbCBpbiBhIGZyYW1lLCBzbyB0aGVy
ZSBzaG91bGQgYmUgYSBEb2N1bWVudExvYWRlci4KLSAgICAgICAgQVNTRVJUKGZyYW1lLT5kb2N1
bWVudCgpLT5sb2FkZXIoKSk7CisgICAgICAgIEFTU0VSVChtX2ZyYW1lLmRvY3VtZW50KCktPmxv
YWRlcigpKTsKIAogICAgICAgICAvLyBTaWduYWwgdG8gRnJhbWVMb2FkZXIgdG8gZGlzYWJsZSBu
YXZpZ2F0aW9ucyB3aXRoaW4gdGhpcyBmcmFtZSB3aGlsZSByZXBsYWNpbmcgaXQgd2l0aCB0aGUg
cmVzdWx0IG9mIGV4ZWN1dGluZyBqYXZhc2NyaXB0CiAgICAgICAgIC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAwNTIzCkBAIC04NzAsNyArODY4LDcg
QEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSmF2YVNjcmlwdFVSTChjb25zdCBVUkwm
IHVybCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2kKIAogICAgICAgICAvLyBEb2N1bWVudFdyaXRlcjo6
cmVwbGFjZURvY3VtZW50V2l0aFJlc3VsdE9mRXhlY3V0aW5nSmF2YXNjcmlwdFVSTCBjYW4gY2F1
c2UgdGhlIERvY3VtZW50TG9hZGVyIHRvIGdldCBkZXJlZidlZCBhbmQgcG9zc2libGUgZGVzdHJv
eWVkLAogICAgICAgICAvLyBzbyBwcm90ZWN0IGl0IHdpdGggYSBSZWZQdHIuCi0gICAgICAgIGlm
IChSZWZQdHIgbG9hZGVyID0gZnJhbWUtPmRvY3VtZW50KCktPmxvYWRlcigpKSB7CisgICAgICAg
IGlmIChSZWZQdHIgbG9hZGVyID0gbV9mcmFtZS5kb2N1bWVudCgpLT5sb2FkZXIoKSkgewogICAg
ICAgICAgICAgbG9hZGVyLT53cml0ZXIoKS5yZXBsYWNlRG9jdW1lbnRXaXRoUmVzdWx0T2ZFeGVj
dXRpbmdKYXZhc2NyaXB0VVJMKHNjcmlwdFJlc3VsdCwgb3duZXJEb2N1bWVudC5nZXQoKSk7CiAg
ICAgICAgICAgICBkaWRSZXBsYWNlRG9jdW1lbnQgPSB0cnVlOwogICAgICAgICB9CkBAIC04Nzks
OCArODc3LDggQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpleGVjdXRlSmF2YVNjcmlwdFVSTChj
b25zdCBVUkwmIHVybCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2kKIAogdm9pZCBTY3JpcHRDb250cm9s
bGVyOjpyZXBvcnRFeGNlcHRpb25Gcm9tU2NyaXB0RXJyb3IoTG9hZGFibGVTY3JpcHQ6OkVycm9y
IGVycm9yLCBib29sIGlzTW9kdWxlKQogewotICAgIFJlZiB3b3JsZCA9IG1haW5UaHJlYWROb3Jt
YWxXb3JsZCgpOwotICAgIFJlZiB2bSA9IHdvcmxkLT52bSgpOworICAgIGF1dG8mIHdvcmxkID0g
bWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisgICAgSlNDOjpWTSYgdm0gPSB3b3JsZC52bSgpOwog
ICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAogICAgIGF1dG8mIHByb3h5ID0ganNXaW5kb3dQ
cm94eSh3b3JsZCk7CkBAIC05MDgsNDUgKzkwNiw0NSBAQCBwcml2YXRlOgogCiB2b2lkIFNjcmlw
dENvbnRyb2xsZXI6OnJlZ2lzdGVySW1wb3J0TWFwKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmIHNv
dXJjZUNvZGUsIGNvbnN0IFVSTCYgYmFzZVVSTCkKIHsKLSAgICBSZWYgd29ybGQgPSBtYWluVGhy
ZWFkTm9ybWFsV29ybGQoKTsKLSAgICBSZWYgdm0gPSB3b3JsZC0+dm0oKTsKKyAgICBhdXRvJiB3
b3JsZCA9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOworICAgIEpTQzo6Vk0mIHZtID0gd29ybGQu
dm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGpzV2luZG93UHJveHkod29ybGQpLndpbmRvdygpOwogICAgIEltcG9y
dE1hcFdhcm5pbmdSZXBvcnRlciByZXBvcnRlcihnbG9iYWxPYmplY3QpOwogICAgIGF1dG8gcmVz
dWx0ID0gZ2xvYmFsT2JqZWN0LT5pbXBvcnRNYXAoKS5yZWdpc3RlckltcG9ydE1hcChzb3VyY2VD
b2RlLmpzU291cmNlQ29kZSgpLCBiYXNlVVJMLCAmcmVwb3J0ZXIpOwogICAgIGlmICghcmVzdWx0
KQotICAgICAgICBnbG9iYWxPYmplY3QtPnByb3RlY3RlZFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJy
b3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdl
TGV2ZWw6OkVycm9yLCByZXN1bHQuZXJyb3IoKSk7CiAgICAgZ2xvYmFsT2JqZWN0LT5jbGVhclBl
bmRpbmdJbXBvcnRNYXBzKCk7CiB9CiAKIGJvb2wgU2NyaXB0Q29udHJvbGxlcjo6aXNBY3F1aXJp
bmdJbXBvcnRNYXBzKCkKIHsKLSAgICBSZWYgd29ybGQgPSBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KTsKLSAgICBSZWYgdm0gPSB3b3JsZC0+dm0oKTsKKyAgICBhdXRvJiB3b3JsZCA9IG1haW5UaHJl
YWROb3JtYWxXb3JsZCgpOworICAgIEpTQzo6Vk0mIHZtID0gd29ybGQudm0oKTsKICAgICBKU0xv
Y2tIb2xkZXIgbG9jayh2bSk7CiAgICAgcmV0dXJuIGpzV2luZG93UHJveHkod29ybGQpLndpbmRv
dygpLT5pc0FjcXVpcmluZ0ltcG9ydE1hcHMoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpzZXRBY3F1aXJpbmdJbXBvcnRNYXBzKCkKIHsKLSAgICBSZWYgd29ybGQgPSBtYWluVGhyZWFk
Tm9ybWFsV29ybGQoKTsKLSAgICBSZWYgdm0gPSB3b3JsZC0+dm0oKTsKKyAgICBhdXRvJiB3b3Js
ZCA9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpOworICAgIEpTQzo6Vk0mIHZtID0gd29ybGQudm0o
KTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAgICAganNXaW5kb3dQcm94eSh3b3JsZCku
d2luZG93KCktPnNldEFjcXVpcmluZ0ltcG9ydE1hcHMoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpzZXRQZW5kaW5nSW1wb3J0TWFwcygpCiB7Ci0gICAgUmVmIHdvcmxkID0gbWFpblRo
cmVhZE5vcm1hbFdvcmxkKCk7Ci0gICAgUmVmIHZtID0gd29ybGQtPnZtKCk7CisgICAgYXV0byYg
d29ybGQgPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsKKyAgICBKU0M6OlZNJiB2bSA9IHdvcmxk
LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIGpzV2luZG93UHJveHkod29y
bGQpLndpbmRvdygpLT5zZXRQZW5kaW5nSW1wb3J0TWFwcygpOwogfQogCiB2b2lkIFNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyUGVuZGluZ0ltcG9ydE1hcHMoKQogewotICAgIFJlZiB3b3JsZCA9IG1h
aW5UaHJlYWROb3JtYWxXb3JsZCgpOwotICAgIFJlZiB2bSA9IHdvcmxkLT52bSgpOworICAgIGF1
dG8mIHdvcmxkID0gbWFpblRocmVhZE5vcm1hbFdvcmxkKCk7CisgICAgSlNDOjpWTSYgdm0gPSB3
b3JsZC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBqc1dpbmRvd1Byb3h5
KHdvcmxkKS53aW5kb3coKS0+Y2xlYXJQZW5kaW5nSW1wb3J0TWFwcygpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDA2YzJlYjQzM2Ni
MC4uYjE0MzVmOTBkYWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0
Q29udHJvbGxlci5oCkBAIC0xODksOCArMTg5LDggQEAgcHJpdmF0ZToKIAogICAgIFJlZjxMb2Nh
bEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSgpIGNvbnN0OwogCi0gICAgV2Vha1JlZjxMb2NhbEZyYW1l
PiBtX2ZyYW1lOwotICAgIGNvbnN0IFVSTCogbV9zb3VyY2VVUkwgeyBudWxscHRyIH07IC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgdXNlIGEgcmF3IHBvaW50ZXIgaGVyZS4KKyAgICBMb2NhbEZyYW1l
JiBtX2ZyYW1lOworICAgIGNvbnN0IFVSTCogbV9zb3VyY2VVUkwgeyBudWxscHRyIH07CiAKICAg
ICBib29sIG1fcGF1c2VkOwogICAgIGJvb2wgbV93aWxsUmVwbGFjZVdpdGhSZXN1bHRPZkV4ZWN1
dGluZ0phdmFzY3JpcHRVUkwgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KaW5kZXggNTAzNTQ4MGNhNjM3Li45YTRkZWE2
Y2UzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJv
bGxlck1hYy5tbQpAQCAtMTA5LDggKzEwOSw4IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6dXBk
YXRlUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNj
b25uZWN0UGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKIHsKLSAgICBpZiAoUmV0YWluUHRyIHdpbmRv
d1NjcmlwdE9iamVjdCA9IG1fd2luZG93U2NyaXB0T2JqZWN0KQotICAgICAgICBkaXNjb25uZWN0
V2luZG93V3JhcHBlcih3aW5kb3dTY3JpcHRPYmplY3QuZ2V0KCkpOworICAgIGlmIChtX3dpbmRv
d1NjcmlwdE9iamVjdCkKKyAgICAgICAgZGlzY29ubmVjdFdpbmRvd1dyYXBwZXIobV93aW5kb3dT
Y3JpcHRPYmplY3QuZ2V0KCkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2NyaXB0TW9kdWxlTG9hZGVyLmNwcAppbmRleCA0MGY2NDgxZWNkYmYuLjZkMzcxN2Rj
MTE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0TW9kdWxl
TG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRNb2R1bGVM
b2FkZXIuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgc3RhdGljIEV4cGVjdGVkPFVSTCwgU3RyaW5n
PiByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnQKIAog
SlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2ZShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBqc0dsb2JhbE9iamVjdCwgSlNDOjpKU01vZHVsZUxvYWRlciosIEpTQzo6SlNWYWx1
ZSBtb2R1bGVOYW1lVmFsdWUsIEpTQzo6SlNWYWx1ZSBpbXBvcnRlck1vZHVsZUtleSwgSlNDOjpK
U1ZhbHVlKQogewotICAgIFJlZiB2bSA9IGpzR2xvYmFsT2JqZWN0LT52bSgpOworICAgIEpTQzo6
Vk0mIHZtID0ganNHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCiAgICAgLy8gV2UgdXNlIGEgU3ltYm9sIGFzIGEgc3BlY2lhbCBw
dXJwb3NlOyBJdCBtZWFucyB0aGlzIG1vZHVsZSBpcyBhbiBpbmxpbmUgbW9kdWxlLgpAQCAtMTM5
LDEwICsxMzksMTAgQEAgSlNDOjpJZGVudGlmaWVyIFNjcmlwdE1vZHVsZUxvYWRlcjo6cmVzb2x2
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBqc0dsb2JhbE9iamVjdCwKIAogc3RhdGljIHZvaWQgcmVq
ZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBkZWZlcnJlZCwgTW9kdWxlRmV0Y2hGYWlsdXJlS2lu
ZCBmYWlsdXJlS2luZCwgQVNDSUlMaXRlcmFsIG1lc3NhZ2UpCiB7Ci0gICAgY29udGV4dC5jaGVj
a2VkRXZlbnRMb29wKCktPnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbZGVmZXJy
ZWQgPSBXVEZNb3ZlKGRlZmVycmVkKSwgZmFpbHVyZUtpbmQsIG1lc3NhZ2VdKCkgeworICAgIGNv
bnRleHQuZXZlbnRMb29wKCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtkZWZl
cnJlZCA9IFdURk1vdmUoZGVmZXJyZWQpLCBmYWlsdXJlS2luZCwgbWVzc2FnZV0oKSB7CiAgICAg
ICAgIGRlZmVycmVkLT5yZWplY3RXaXRoQ2FsbGJhY2soWyZdIChKU0RPTUdsb2JhbE9iamVjdCYg
anNHbG9iYWxPYmplY3QpIHsKICAgICAgICAgICAgIC8vIFdlIGFubm90YXRlIGV4Y2VwdGlvbiB3
aXRoIHNwZWNpYWwgcHJpdmF0ZSBzeW1ib2wuIEl0IGFsbG93cyB1cyB0byBkaXN0aW5ndWlzaCB0
aGVzZSBlcnJvcnMgZnJvbSB0aGUgdXNlciB0aHJvd24gb25lcy4KLSAgICAgICAgICAgIFJlZiB2
bSA9IGpzR2xvYmFsT2JqZWN0LnZtKCk7CisgICAgICAgICAgICBKU0M6OlZNJiB2bSA9IGpzR2xv
YmFsT2JqZWN0LnZtKCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogUHJvcGFnYXRlIG1vcmUgZGVz
Y3JpcHRpdmUgZXJyb3IuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY3NTUzCiAgICAgICAgICAgICBhdXRvKiBlcnJvciA9IEpTQzo6Y3Jl
YXRlVHlwZUVycm9yKCZqc0dsb2JhbE9iamVjdCwgbWVzc2FnZSk7CkBAIC0xNTYsOSArMTU2LDkg
QEAgc3RhdGljIHZvaWQgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCwgUmVmPEQKIHN0YXRpYyB2b2lkIHJlamVjdFdpdGhGZXRjaEVy
cm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxEZWZlcnJlZFByb21pc2U+
JiYgZGVmZXJyZWQsIEV4Y2VwdGlvbkNvZGUgZWMsIFN0cmluZyYmIG1lc3NhZ2UpCiB7CiAgICAg
Ly8gVXNlZCB0byBzaWduYWwgdG8gdGhlIHByb21pc2UgY2xpZW50IHRoYXQgdGhlIGZhaWx1cmUg
d2FzIGZyb20gYSBmZXRjaCwgYnV0IG5vdCBvbmUgdGhhdCB3YXMgcHJvcGFnYXRlZCBmcm9tIGFu
b3RoZXIgY29udGV4dC4KLSAgICBjb250ZXh0LmNoZWNrZWRFdmVudExvb3AoKS0+cXVldWVUYXNr
KFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtkZWZlcnJlZCA9IFdURk1vdmUoZGVmZXJyZWQpLCBl
YywgbWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSldKCkgeworICAgIGNvbnRleHQuZXZlbnRMb29w
KCkucXVldWVUYXNrKFRhc2tTb3VyY2U6Ok5ldHdvcmtpbmcsIFtkZWZlcnJlZCA9IFdURk1vdmUo
ZGVmZXJyZWQpLCBlYywgbWVzc2FnZSA9IFdURk1vdmUobWVzc2FnZSldKCkgewogICAgICAgICBk
ZWZlcnJlZC0+cmVqZWN0V2l0aENhbGxiYWNrKFsmXSAoSlNET01HbG9iYWxPYmplY3QmIGpzR2xv
YmFsT2JqZWN0KSB7Ci0gICAgICAgICAgICBSZWYgdm0gPSBqc0dsb2JhbE9iamVjdC52bSgpOwor
ICAgICAgICAgICAgSlNDOjpWTSYgdm0gPSBqc0dsb2JhbE9iamVjdC52bSgpOwogICAgICAgICAg
ICAgSlNDOjpKU09iamVjdCogZXJyb3IgPSBKU0M6OmpzQ2FzdDxKU0M6OkpTT2JqZWN0Kj4oY3Jl
YXRlRE9NRXhjZXB0aW9uKCZqc0dsb2JhbE9iamVjdCwgZWMsIG1lc3NhZ2UpKTsKICAgICAgICAg
ICAgIEFTU0VSVChlcnJvcik7CiAgICAgICAgICAgICBlcnJvci0+cHV0RGlyZWN0KHZtLCBidWls
dGluTmFtZXModm0pLmZhaWx1cmVLaW5kUHJpdmF0ZU5hbWUoKSwgSlNDOjpqc051bWJlcihlbnVt
VG9VbmRlcmx5aW5nVHlwZShNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpXYXNGZXRjaEVycm9yKSkp
OwpAQCAtMTY5LDcgKzE2OSw3IEBAIHN0YXRpYyB2b2lkIHJlamVjdFdpdGhGZXRjaEVycm9yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIFJlZjxEZWZlcnJlZFByCiAKIEpTQzo6SlNJ
bnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6ZmV0Y2goSlNDOjpKU0dsb2JhbE9i
amVjdCoganNHbG9iYWxPYmplY3QsIEpTQzo6SlNNb2R1bGVMb2FkZXIqLCBKU0M6OkpTVmFsdWUg
bW9kdWxlS2V5VmFsdWUsIEpTQzo6SlNWYWx1ZSBwYXJhbWV0ZXJzVmFsdWUsIEpTQzo6SlNWYWx1
ZSBzY3JpcHRGZXRjaGVyKQogewotICAgIFJlZiB2bSA9IGpzR2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIEpTQzo6Vk0mIHZtID0ganNHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQVNTRVJUKEpTQzo6
anNEeW5hbWljQ2FzdDxKU0M6OkpTU2NyaXB0RmV0Y2hlcio+KHNjcmlwdEZldGNoZXIpKTsKIAog
ICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9ICpKU0M6OmpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KGpzR2xvYmFsT2JqZWN0KTsKQEAgLTE3OCw3ICsxNzgsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9t
aXNlKiBTY3JpcHRNb2R1bGVMb2FkZXI6OmZldGNoKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpzR2xv
YmFsTwogICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm4ganNQcm9taXNlOwogCi0g
ICAgUmVmIGRlZmVycmVkID0gRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUoZ2xvYmFsT2JqZWN0LCAq
anNQcm9taXNlKTsKKyAgICBhdXRvIGRlZmVycmVkID0gRGVmZXJyZWRQcm9taXNlOjpjcmVhdGUo
Z2xvYmFsT2JqZWN0LCAqanNQcm9taXNlKTsKICAgICBpZiAobW9kdWxlS2V5VmFsdWUuaXNTeW1i
b2woKSkgewogICAgICAgICByZWplY3RXaXRoRmV0Y2hFcnJvcigqbV9jb250ZXh0LCBXVEZNb3Zl
KGRlZmVycmVkKSwgRXhjZXB0aW9uQ29kZTo6VHlwZUVycm9yLCAiU3ltYm9sIG1vZHVsZSBrZXkg
c2hvdWxkIGJlIGFscmVhZHkgZnVsZmlsbGVkIHdpdGggdGhlIGlubGluZWQgcmVzb3VyY2UuIl9z
KTsKICAgICAgICAgcmV0dXJuIGpzUHJvbWlzZTsKQEAgLTIwMiwxOSArMjAyLDE4IEBAIEpTQzo6
SlNJbnRlcm5hbFByb21pc2UqIFNjcmlwdE1vZHVsZUxvYWRlcjo6ZmV0Y2goSlNDOjpKU0dsb2Jh
bE9iamVjdCoganNHbG9iYWxPCiAgICAgICAgIHBhcmFtZXRlcnMgPSAmc2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLT5wYXJhbWV0ZXJzKCk7CiAKICAgICBpZiAobV9vd25lclR5cGUgPT0gT3duZXJUeXBl
OjpEb2N1bWVudCkgewotICAgICAgICBSZWYgbG9hZGVyID0gQ2FjaGVkTW9kdWxlU2NyaXB0TG9h
ZGVyOjpjcmVhdGUoKnRoaXMsIGRlZmVycmVkLmdldCgpLCAqc3RhdGljX2Nhc3Q8Q2FjaGVkU2Ny
aXB0RmV0Y2hlcio+KEpTQzo6anNDYXN0PEpTQzo6SlNTY3JpcHRGZXRjaGVyKj4oc2NyaXB0RmV0
Y2hlciktPmZldGNoZXIoKSksIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICAgICBhdXRvIGxv
YWRlciA9IENhY2hlZE1vZHVsZVNjcmlwdExvYWRlcjo6Y3JlYXRlKCp0aGlzLCBkZWZlcnJlZC5n
ZXQoKSwgKnN0YXRpY19jYXN0PENhY2hlZFNjcmlwdEZldGNoZXIqPihKU0M6OmpzQ2FzdDxKU0M6
OkpTU2NyaXB0RmV0Y2hlcio+KHNjcmlwdEZldGNoZXIpLT5mZXRjaGVyKCkpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpKTsKICAgICAgICAgbV9sb2FkZXJzLmFkZChsb2FkZXIuY29weVJlZigpKTsKLSAg
ICAgICAgUmVmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX2NvbnRleHQpOwotICAg
ICAgICBpZiAoIWxvYWRlci0+bG9hZChkb2N1bWVudCwgV1RGTW92ZShjb21wbGV0ZWRVUkwpKSkg
eworICAgICAgICBpZiAoIWxvYWRlci0+bG9hZChkb3duY2FzdDxEb2N1bWVudD4oKm1fY29udGV4
dCksIFdURk1vdmUoY29tcGxldGVkVVJMKSkpIHsKICAgICAgICAgICAgIGxvYWRlci0+Y2xlYXJD
bGllbnQoKTsKICAgICAgICAgICAgIG1fbG9hZGVycy5yZW1vdmUoV1RGTW92ZShsb2FkZXIpKTsK
LSAgICAgICAgICAgIHJlamVjdFRvUHJvcGFnYXRlTmV0d29ya0Vycm9yKGRvY3VtZW50LCBXVEZN
b3ZlKGRlZmVycmVkKSwgTW9kdWxlRmV0Y2hGYWlsdXJlS2luZDo6V2FzUHJvcGFnYXRlZEVycm9y
LCAiSW1wb3J0aW5nIGEgbW9kdWxlIHNjcmlwdCBmYWlsZWQuIl9zKTsKKyAgICAgICAgICAgIHJl
amVjdFRvUHJvcGFnYXRlTmV0d29ya0Vycm9yKCptX2NvbnRleHQsIFdURk1vdmUoZGVmZXJyZWQp
LCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpXYXNQcm9wYWdhdGVkRXJyb3IsICJJbXBvcnRpbmcg
YSBtb2R1bGUgc2NyaXB0IGZhaWxlZC4iX3MpOwogICAgICAgICAgICAgcmV0dXJuIGpzUHJvbWlz
ZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gbG9hZGVyID0gV29ya2Vy
TW9kdWxlU2NyaXB0TG9hZGVyOjpjcmVhdGUoKnRoaXMsIGRlZmVycmVkLmdldCgpLCAqc3RhdGlj
X2Nhc3Q8V29ya2VyU2NyaXB0RmV0Y2hlcio+KEpTQzo6anNDYXN0PEpTQzo6SlNTY3JpcHRGZXRj
aGVyKj4oc2NyaXB0RmV0Y2hlciktPmZldGNoZXIoKSksIFdURk1vdmUocGFyYW1ldGVycykpOwog
ICAgICAgICBtX2xvYWRlcnMuYWRkKGxvYWRlci5jb3B5UmVmKCkpOwotICAgICAgICBsb2FkZXIt
PmxvYWQoUmVmIHsgKm1fY29udGV4dCB9LCBXVEZNb3ZlKGNvbXBsZXRlZFVSTCkpOworICAgICAg
ICBsb2FkZXItPmxvYWQoKm1fY29udGV4dCwgV1RGTW92ZShjb21wbGV0ZWRVUkwpKTsKICAgICB9
CiAKICAgICByZXR1cm4ganNQcm9taXNlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIFVSTCBTY3JpcHRN
b2R1bGVMb2FkZXI6Om1vZHVsZVVSTChKU0M6OkpTR2xvYmFsT2JqZWN0JiBqc0dsb2JhbE9iamVj
dCwgSlNDOjpKU1ZhCiAKIFVSTCBTY3JpcHRNb2R1bGVMb2FkZXI6OnJlc3BvbnNlVVJMRnJvbVJl
cXVlc3RVUkwoSlNDOjpKU0dsb2JhbE9iamVjdCYganNHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBtb2R1bGVLZXlWYWx1ZSkKIHsKLSAgICBSZWYgdm0gPSBqc0dsb2JhbE9iamVjdC52bSgpOwor
ICAgIEpTQzo6Vk0mIHZtID0ganNHbG9iYWxPYmplY3Qudm0oKTsKICAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBpZiAoaXNSb290TW9kdWxlKG1vZHVsZUtl
eVZhbHVlKSkgewpAQCAtMjU4LDcgKzI1Nyw3IEBAIFVSTCBTY3JpcHRNb2R1bGVMb2FkZXI6OnJl
c3BvbnNlVVJMRnJvbVJlcXVlc3RVUkwoSlNDOjpKU0dsb2JhbE9iamVjdCYganNHbG9iYWxPCiAK
IEpTQzo6SlNWYWx1ZSBTY3JpcHRNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEpTQzo6SlNHbG9iYWxP
YmplY3QqIGpzR2xvYmFsT2JqZWN0LCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1ZhbHVl
IG1vZHVsZUtleVZhbHVlLCBKU0M6OkpTVmFsdWUgbW9kdWxlUmVjb3JkVmFsdWUsIEpTQzo6SlNW
YWx1ZSwgSlNDOjpKU1ZhbHVlIGF3YWl0ZWRWYWx1ZSwgSlNDOjpKU1ZhbHVlIHJlc3VtZU1vZGUp
CiB7Ci0gICAgUmVmIHZtID0ganNHbG9iYWxPYmplY3QtPnZtKCk7CisgICAgSlNDOjpWTSYgdm0g
PSBqc0dsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKICAgICAvLyBGSVhNRTogQ3VycmVudGx5LCB3ZSBvbmx5IHN1cHBvcnQgSlNN
b2R1bGVSZWNvcmQgYW5kIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLgpAQCAtMjgxLDcgKzI4MCw3
IEBAIEpTQzo6SlNWYWx1ZSBTY3JpcHRNb2R1bGVMb2FkZXI6OmV2YWx1YXRlKEpTQzo6SlNHbG9i
YWxPYmplY3QqIGpzR2xvYmFsT2JqZWN0LCBKCiAgICAgICAgIGlmIChSZWZQdHIgZnJhbWUgPSBk
b3duY2FzdDxEb2N1bWVudD4oKm1fY29udGV4dCkuZnJhbWUoKSkKICAgICAgICAgICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgZnJhbWUtPnNjcmlwdCgpLmV2YWx1YXRlTW9kdWxlKHNvdXJj
ZVVSTCwgKm1vZHVsZVJlY29yZCwgYXdhaXRlZFZhbHVlLCByZXN1bWVNb2RlKSk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKENoZWNrZWRQdHIgc2NyaXB0ID0gZG93bmNhc3Q8V29ya2VyT3JX
b3JrbGV0R2xvYmFsU2NvcGU+KCptX2NvbnRleHQpLnNjcmlwdCgpKQorICAgICAgICBpZiAoYXV0
byogc2NyaXB0ID0gZG93bmNhc3Q8V29ya2VyT3JXb3JrbGV0R2xvYmFsU2NvcGU+KCptX2NvbnRl
eHQpLnNjcmlwdCgpKQogICAgICAgICAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBzY3Jp
cHQtPmV2YWx1YXRlTW9kdWxlKCptb2R1bGVSZWNvcmQsIGF3YWl0ZWRWYWx1ZSwgcmVzdW1lTW9k
ZSkpOwogICAgIH0KICAgICByZXR1cm4gSlNDOjpqc1VuZGVmaW5lZCgpOwpAQCAtMjk3LDcgKzI5
Niw3IEBAIHN0YXRpYyBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiByZWplY3RQcm9taXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTCiAKIEpTQzo6SlNJbnRlcm5hbFByb21pc2Uq
IFNjcmlwdE1vZHVsZUxvYWRlcjo6aW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpz
R2xvYmFsT2JqZWN0LCBKU0M6OkpTTW9kdWxlTG9hZGVyKiwgSlNDOjpKU1N0cmluZyogbW9kdWxl
TmFtZSwgSlNDOjpKU1ZhbHVlIHBhcmFtZXRlcnNWYWx1ZSwgY29uc3QgSlNDOjpTb3VyY2VPcmln
aW4mIHNvdXJjZU9yaWdpbikKIHsKLSAgICBSZWYgdm0gPSBqc0dsb2JhbE9iamVjdC0+dm0oKTsK
KyAgICBKU0M6OlZNJiB2bSA9IGpzR2xvYmFsT2JqZWN0LT52bSgpOwogICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAgICBhdXRvJiBnbG9iYWxPYmplY3QgPSAqSlND
Ojpqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihqc0dsb2JhbE9iamVjdCk7CiAKQEAgLTMwOCw3
ICszMDcsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBTY3JpcHRNb2R1bGVMb2FkZXI6Omlt
cG9ydE1vZHVsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBqcwogICAgIC8vIElmIHNldHRpbmdzIG9i
amVjdCdzIGdsb2JhbCBvYmplY3QgaW1wbGVtZW50cyBXb3JrbGV0R2xvYmFsU2NvcGUgb3IgU2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlLCB0aGVuOgogICAgIGlmIChpczxXb3JrbGV0R2xvYmFsU2Nv
cGU+KCptX2NvbnRleHQpIHx8IGlzPFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKm1fY29udGV4
dCkpIHsKICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICByZXR1cm4gcmVqZWN0UHJv
bWlzZShSZWYgeyAqbV9jb250ZXh0IH0sIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uQ29kZTo6VHlw
ZUVycm9yLCAiRHluYW1pYy1pbXBvcnQgaXMgbm90IGF2YWlsYWJsZSBpbiBXb3JrbGV0cyBvciBT
ZXJ2aWNlV29ya2VycyJfcyk7CisgICAgICAgIHJldHVybiByZWplY3RQcm9taXNlKCptX2NvbnRl
eHQsIGdsb2JhbE9iamVjdCwgRXhjZXB0aW9uQ29kZTo6VHlwZUVycm9yLCAiRHluYW1pYy1pbXBv
cnQgaXMgbm90IGF2YWlsYWJsZSBpbiBXb3JrbGV0cyBvciBTZXJ2aWNlV29ya2VycyJfcyk7CiAg
ICAgfQogCiAgICAgYXV0byByZWplY3QgPSBbJl0oYXV0byYgc2NvcGUpIHsKQEAgLTMxOSw3ICsz
MTgsNyBAQCBKU0M6OkpTSW50ZXJuYWxQcm9taXNlKiBTY3JpcHRNb2R1bGVMb2FkZXI6OmltcG9y
dE1vZHVsZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBqcwogICAgIGF1dG8gZ2V0VHlwZUZyb21Bc3Nl
cnRpb25zID0gWyZdKCkgLT4gSlNDOjpTY3JpcHRGZXRjaFBhcmFtZXRlcnM6OlR5cGUgewogICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICAgICAgYXV0
byBhc3NlcnRpb25zID0gSlNDOjpyZXRyaWV2ZUltcG9ydEF0dHJpYnV0ZXNGcm9tRHluYW1pY0lt
cG9ydE9wdGlvbnMoJmdsb2JhbE9iamVjdCwgcGFyYW1ldGVyc1ZhbHVlLCB7IHZtLT5wcm9wZXJ0
eU5hbWVzLT50eXBlLmltcGwoKSB9KTsKKyAgICAgICAgYXV0byBhc3NlcnRpb25zID0gSlNDOjpy
ZXRyaWV2ZUltcG9ydEF0dHJpYnV0ZXNGcm9tRHluYW1pY0ltcG9ydE9wdGlvbnMoJmdsb2JhbE9i
amVjdCwgcGFyYW1ldGVyc1ZhbHVlLCB7IHZtLnByb3BlcnR5TmFtZXMtPnR5cGUuaW1wbCgpIH0p
OwogICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwogCiAgICAgICAgIGF1
dG8gdHlwZSA9IEpTQzo6cmV0cmlldmVUeXBlSW1wb3J0QXR0cmlidXRlKCZnbG9iYWxPYmplY3Qs
IGFzc2VydGlvbnMpOwpAQCAtMzU3LDcgKzM1Niw3IEBAIEpTQzo6SlNJbnRlcm5hbFByb21pc2Uq
IFNjcmlwdE1vZHVsZUxvYWRlcjo6aW1wb3J0TW9kdWxlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGpz
CiAgICAgICAgIGJhc2VVUkwgPSBVUkwgeyBzb3VyY2VPcmlnaW4uc3RyaW5nKCkgfTsKICAgICAg
ICAgaWYgKCFiYXNlVVJMLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgp
OwotICAgICAgICAgICAgcmV0dXJuIHJlamVjdFByb21pc2UoUmVmIHsgKm1fY29udGV4dCB9LCBn
bG9iYWxPYmplY3QsIEV4Y2VwdGlvbkNvZGU6OlR5cGVFcnJvciwgIkltcG9ydGVyIG1vZHVsZSBr
ZXkgaXMgbm90IGEgU3ltYm9sIG9yIGEgU3RyaW5nLiJfcyk7CisgICAgICAgICAgICByZXR1cm4g
cmVqZWN0UHJvbWlzZSgqbV9jb250ZXh0LCBnbG9iYWxPYmplY3QsIEV4Y2VwdGlvbkNvZGU6OlR5
cGVFcnJvciwgIkltcG9ydGVyIG1vZHVsZSBrZXkgaXMgbm90IGEgU3ltYm9sIG9yIGEgU3RyaW5n
LiJfcyk7CiAgICAgICAgIH0KIAogICAgICAgICBhdXRvIHR5cGUgPSBnZXRUeXBlRnJvbUFzc2Vy
dGlvbnMoKTsKQEAgLTM5NSw3ICszOTQsNyBAQCBKU0M6OkpTT2JqZWN0KiBTY3JpcHRNb2R1bGVM
b2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVzKEpTQzo6SlNHbG9iYWxPYmplYwogewog
ICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMu
aHRtbCNob3N0Z2V0aW1wb3J0bWV0YXByb3BlcnRpZXMKIAotICAgIFJlZiB2bSA9IGpzR2xvYmFs
T2JqZWN0LT52bSgpOworICAgIGF1dG8mIHZtID0ganNHbG9iYWxPYmplY3QtPnZtKCk7CiAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgYXV0byogbWV0YVBy
b3BlcnRpZXMgPSBKU0M6OmNvbnN0cnVjdEVtcHR5T2JqZWN0KHZtLCBqc0dsb2JhbE9iamVjdC0+
bnVsbFByb3RvdHlwZU9iamVjdFN0cnVjdHVyZSgpKTsKQEAgLTQxMCw3ICs0MDksNyBAQCBKU0M6
OkpTT2JqZWN0KiBTY3JpcHRNb2R1bGVMb2FkZXI6OmNyZWF0ZUltcG9ydE1ldGFQcm9wZXJ0aWVz
KEpTQzo6SlNHbG9iYWxPYmplYwogICAgIFN0cmluZyByZXNvbHZlTmFtZSA9ICJyZXNvbHZlIl9z
OwogICAgIE93bmVyVHlwZSBvd25lclR5cGUgPSBtX293bmVyVHlwZTsKICAgICBhdXRvKiBmdW5j
dGlvbiA9IEpTQzo6SlNOYXRpdmVTdGRGdW5jdGlvbjo6Y3JlYXRlKHZtLCBqc0dsb2JhbE9iamVj
dCwgMSwgcmVzb2x2ZU5hbWUsIFtvd25lclR5cGUsIHJlc3BvbnNlVVJMXShKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQzo6Q2FsbEZyYW1lKiBjYWxsRnJhbWUpIC0+IEpTQzo6
RW5jb2RlZEpTVmFsdWUgewotICAgICAgICBSZWYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICAgICAgYXV0byBzcGVjaWZpZXIg
PSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CkBAIC00
MjAsNyArNDE5LDcgQEAgSlNDOjpKU09iamVjdCogU2NyaXB0TW9kdWxlTG9hZGVyOjpjcmVhdGVJ
bXBvcnRNZXRhUHJvcGVydGllcyhKU0M6OkpTR2xvYmFsT2JqZWMKICAgICAgICAgaWYgKFVOTElL
RUxZKCFkb21HbG9iYWxPYmplY3QpKQogICAgICAgICAgICAgcmV0dXJuIEpTQzo6dGhyb3dWTVR5
cGVFcnJvcihnbG9iYWxPYmplY3QsIHNjb3BlKTsKIAotICAgICAgICBSZWZQdHIgY29udGV4dCA9
IGRvbUdsb2JhbE9iamVjdC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgICAgICBhdXRv
KiBjb250ZXh0ID0gZG9tR2xvYmFsT2JqZWN0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CiAg
ICAgICAgIGlmIChVTkxJS0VMWSghY29udGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gSlNDOjp0
aHJvd1ZNVHlwZUVycm9yKGdsb2JhbE9iamVjdCwgc2NvcGUpOwogCkBAIC00NjQsMTcgKzQ2Mywx
NyBAQCB2b2lkIFNjcmlwdE1vZHVsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoTW9kdWxlU2NyaXB0
TG9hZGVyJiBtb2R1bGVTY3JpcHRMb2FkZXIsCiAgICAgICAgIGF1dG8mIGNhY2hlZFNjcmlwdCA9
ICpsb2FkZXIuY2FjaGVkU2NyaXB0KCk7CiAKICAgICAgICAgaWYgKGNhY2hlZFNjcmlwdC5yZXNv
dXJjZUVycm9yKCkuaXNBY2Nlc3NDb250cm9sKCkpIHsKLSAgICAgICAgICAgIHJlamVjdFRvUHJv
cGFnYXRlTmV0d29ya0Vycm9yKFJlZiB7ICptX2NvbnRleHQgfSwgV1RGTW92ZShwcm9taXNlKSwg
TW9kdWxlRmV0Y2hGYWlsdXJlS2luZDo6V2FzUHJvcGFnYXRlZEVycm9yLCAiQ3Jvc3Mtb3JpZ2lu
IHNjcmlwdCBsb2FkIGRlbmllZCBieSBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyBwb2xp
Y3kuIl9zKTsKKyAgICAgICAgICAgIHJlamVjdFRvUHJvcGFnYXRlTmV0d29ya0Vycm9yKCptX2Nv
bnRleHQsIFdURk1vdmUocHJvbWlzZSksIE1vZHVsZUZldGNoRmFpbHVyZUtpbmQ6Oldhc1Byb3Bh
Z2F0ZWRFcnJvciwgIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQgYnkgQ3Jvc3MtT3Jp
Z2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiJfcyk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBpZiAoY2FjaGVkU2NyaXB0LmVycm9yT2NjdXJyZWQoKSkgewot
ICAgICAgICAgICAgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoUmVmIHsgKm1fY29udGV4
dCB9LCBXVEZNb3ZlKHByb21pc2UpLCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpXYXNQcm9wYWdh
dGVkRXJyb3IsICJJbXBvcnRpbmcgYSBtb2R1bGUgc2NyaXB0IGZhaWxlZC4iX3MpOworICAgICAg
ICAgICAgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoKm1fY29udGV4dCwgV1RGTW92ZShw
cm9taXNlKSwgTW9kdWxlRmV0Y2hGYWlsdXJlS2luZDo6V2FzUHJvcGFnYXRlZEVycm9yLCAiSW1w
b3J0aW5nIGEgbW9kdWxlIHNjcmlwdCBmYWlsZWQuIl9zKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIGlmIChjYWNoZWRTY3JpcHQud2FzQ2FuY2VsZWQoKSkgewot
ICAgICAgICAgICAgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoUmVmIHsgKm1fY29udGV4
dCB9LCBXVEZNb3ZlKHByb21pc2UpLCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpXYXNDYW5jZWxl
ZCwgIkltcG9ydGluZyBhIG1vZHVsZSBzY3JpcHQgaXMgY2FuY2VsZWQuIl9zKTsKKyAgICAgICAg
ICAgIHJlamVjdFRvUHJvcGFnYXRlTmV0d29ya0Vycm9yKCptX2NvbnRleHQsIFdURk1vdmUocHJv
bWlzZSksIE1vZHVsZUZldGNoRmFpbHVyZUtpbmQ6Oldhc0NhbmNlbGVkLCAiSW1wb3J0aW5nIGEg
bW9kdWxlIHNjcmlwdCBpcyBjYW5jZWxlZC4iX3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTQ5Miw3ICs0OTEsNyBAQCB2b2lkIFNjcmlwdE1vZHVsZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQoTW9kdWxlU2NyaXB0TG9hZGVyJiBtb2R1bGVTY3JpcHRMb2FkZXIsCiAgICAg
ICAgICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBh
cGlzLmh0bWwjZmV0Y2gtYS1zaW5nbGUtbW9kdWxlLXNjcmlwdAogICAgICAgICAgICAgLy8gVGhl
IHJlc3VsdCBvZiBleHRyYWN0aW5nIGEgTUlNRSB0eXBlIGZyb20gcmVzcG9uc2UncyBoZWFkZXIg
bGlzdCAoaWdub3JpbmcgcGFyYW1ldGVycykgaXMgbm90IGEgSmF2YVNjcmlwdCBNSU1FIHR5cGUu
CiAgICAgICAgICAgICAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBmZXRjaGluZyBhIGNsYXNz
aWMgc2NyaXB0IGRvZXMgbm90IGluY2x1ZGUgTUlNRSB0eXBlIGNoZWNraW5nLiBJbiBjb250cmFz
dCwgbW9kdWxlIHNjcmlwdHMgd2lsbCBmYWlsIHRvIGxvYWQgaWYgdGhleSBhcmUgbm90IG9mIGEg
Y29ycmVjdCBNSU1FIHR5cGUuCi0gICAgICAgICAgICByZWplY3RXaXRoRmV0Y2hFcnJvcihSZWYg
eyAqbV9jb250ZXh0IH0sIFdURk1vdmUocHJvbWlzZSksIEV4Y2VwdGlvbkNvZGU6OlR5cGVFcnJv
ciwgbWFrZVN0cmluZygiJyIsIGNhY2hlZFNjcmlwdC5yZXNwb25zZSgpLm1pbWVUeXBlKCksICIn
IGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgTUlNRSB0eXBlLiIpKTsKKyAgICAgICAgICAgIHJl
amVjdFdpdGhGZXRjaEVycm9yKCptX2NvbnRleHQsIFdURk1vdmUocHJvbWlzZSksIEV4Y2VwdGlv
bkNvZGU6OlR5cGVFcnJvciwgbWFrZVN0cmluZygiJyIsIGNhY2hlZFNjcmlwdC5yZXNwb25zZSgp
Lm1pbWVUeXBlKCksICInIGlzIG5vdCBhIHZhbGlkIEphdmFTY3JpcHQgTUlNRSB0eXBlLiIpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01MDAsOSArNDk5LDggQEAgdm9p
ZCBTY3JpcHRNb2R1bGVMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKE1vZHVsZVNjcmlwdExvYWRlciYg
bW9kdWxlU2NyaXB0TG9hZGVyLAogICAgICAgICAgICAgU3RyaW5nIGludGVncml0eSA9IHBhcmFt
ZXRlcnMtPmludGVncml0eSgpOwogICAgICAgICAgICAgaWYgKCFpbnRlZ3JpdHkuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaEludGVncml0eU1ldGFkYXRhKGNhY2hlZFNj
cmlwdCwgaW50ZWdyaXR5KSkgewotICAgICAgICAgICAgICAgICAgICBSZWZQdHIgY29udGV4dCA9
IG1fY29udGV4dC5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+YWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6U2VjdXJpdHksIE1lc3NhZ2VMZXZlbDo6RXJyb3IsIG1h
a2VTdHJpbmcoIkNhbm5vdCBsb2FkIHNjcmlwdCAiLCBpbnRlZ3JpdHlNaXNtYXRjaERlc2NyaXB0
aW9uKGNhY2hlZFNjcmlwdCwgaW50ZWdyaXR5KSkpOwotICAgICAgICAgICAgICAgICAgICByZWpl
Y3RXaXRoRmV0Y2hFcnJvcigqY29udGV4dCwgV1RGTW92ZShwcm9taXNlKSwgRXhjZXB0aW9uQ29k
ZTo6VHlwZUVycm9yLCAiQ2Fubm90IGxvYWQgc2NyaXB0IGR1ZSB0byBpbnRlZ3JpdHkgbWlzbWF0
Y2giX3MpOworICAgICAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFkZENvbnNvbGVNZXNzYWdl
KE1lc3NhZ2VTb3VyY2U6OlNlY3VyaXR5LCBNZXNzYWdlTGV2ZWw6OkVycm9yLCBtYWtlU3RyaW5n
KCJDYW5ub3QgbG9hZCBzY3JpcHQgIiwgaW50ZWdyaXR5TWlzbWF0Y2hEZXNjcmlwdGlvbihjYWNo
ZWRTY3JpcHQsIGludGVncml0eSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVqZWN0V2l0aEZl
dGNoRXJyb3IoKm1fY29udGV4dCwgV1RGTW92ZShwcm9taXNlKSwgRXhjZXB0aW9uQ29kZTo6VHlw
ZUVycm9yLCAiQ2Fubm90IGxvYWQgc2NyaXB0IGR1ZSB0byBpbnRlZ3JpdHkgbWlzbWF0Y2giX3Mp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtNTMzLDE2ICs1MzEsMTYgQEAgdm9pZCBTY3JpcHRNb2R1bGVMb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKE1vZHVsZVNjcmlwdExvYWRlciYgbW9kdWxlU2NyaXB0TG9hZGVyLAogICAg
ICAgICAgICAgYXV0byYgd29ya2VyU2NyaXB0TG9hZGVyID0gbG9hZGVyLnNjcmlwdExvYWRlcigp
OwogICAgICAgICAgICAgQVNTRVJUKHdvcmtlclNjcmlwdExvYWRlci5mYWlsZWQoKSk7CiAgICAg
ICAgICAgICBpZiAod29ya2VyU2NyaXB0TG9hZGVyLmVycm9yKCkuaXNBY2Nlc3NDb250cm9sKCkp
IHsKLSAgICAgICAgICAgICAgICByZWplY3RUb1Byb3BhZ2F0ZU5ldHdvcmtFcnJvcihSZWYgeyAq
bV9jb250ZXh0IH0sIFdURk1vdmUocHJvbWlzZSksIE1vZHVsZUZldGNoRmFpbHVyZUtpbmQ6Oldh
c1Byb3BhZ2F0ZWRFcnJvciwgIkNyb3NzLW9yaWdpbiBzY3JpcHQgbG9hZCBkZW5pZWQgYnkgQ3Jv
c3MtT3JpZ2luIFJlc291cmNlIFNoYXJpbmcgcG9saWN5LiJfcyk7CisgICAgICAgICAgICAgICAg
cmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoKm1fY29udGV4dCwgV1RGTW92ZShwcm9taXNl
KSwgTW9kdWxlRmV0Y2hGYWlsdXJlS2luZDo6V2FzUHJvcGFnYXRlZEVycm9yLCAiQ3Jvc3Mtb3Jp
Z2luIHNjcmlwdCBsb2FkIGRlbmllZCBieSBDcm9zcy1PcmlnaW4gUmVzb3VyY2UgU2hhcmluZyBw
b2xpY3kuIl9zKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmICh3b3JrZXJTY3JpcHRMb2FkZXIuZXJyb3IoKS5pc0NhbmNlbGxhdGlvbigp
KSB7Ci0gICAgICAgICAgICAgICAgcmVqZWN0VG9Qcm9wYWdhdGVOZXR3b3JrRXJyb3IoUmVmIHsg
Km1fY29udGV4dCB9LCBXVEZNb3ZlKHByb21pc2UpLCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpX
YXNDYW5jZWxlZCwgIkltcG9ydGluZyBhIG1vZHVsZSBzY3JpcHQgaXMgY2FuY2VsZWQuIl9zKTsK
KyAgICAgICAgICAgICAgICByZWplY3RUb1Byb3BhZ2F0ZU5ldHdvcmtFcnJvcigqbV9jb250ZXh0
LCBXVEZNb3ZlKHByb21pc2UpLCBNb2R1bGVGZXRjaEZhaWx1cmVLaW5kOjpXYXNDYW5jZWxlZCwg
IkltcG9ydGluZyBhIG1vZHVsZSBzY3JpcHQgaXMgY2FuY2VsZWQuIl9zKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHJlamVjdFRvUHJvcGFn
YXRlTmV0d29ya0Vycm9yKFJlZiB7ICptX2NvbnRleHQgfSwgV1RGTW92ZShwcm9taXNlKSwgTW9k
dWxlRmV0Y2hGYWlsdXJlS2luZDo6V2FzUHJvcGFnYXRlZEVycm9yLCAiSW1wb3J0aW5nIGEgbW9k
dWxlIHNjcmlwdCBmYWlsZWQuIl9zKTsKKyAgICAgICAgICAgIHJlamVjdFRvUHJvcGFnYXRlTmV0
d29ya0Vycm9yKCptX2NvbnRleHQsIFdURk1vdmUocHJvbWlzZSksIE1vZHVsZUZldGNoRmFpbHVy
ZUtpbmQ6Oldhc1Byb3BhZ2F0ZWRFcnJvciwgIkltcG9ydGluZyBhIG1vZHVsZSBzY3JpcHQgZmFp
bGVkLiJfcyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNTYwLDcgKzU1
OCw3IEBAIHZvaWQgU2NyaXB0TW9kdWxlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChNb2R1bGVTY3Jp
cHRMb2FkZXImIG1vZHVsZVNjcmlwdExvYWRlciwKICAgICAgICAgICAgIC8vIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNmZXRjaC1hLXNpbmds
ZS1tb2R1bGUtc2NyaXB0CiAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IG9mIGV4dHJhY3Rpbmcg
YSBNSU1FIHR5cGUgZnJvbSByZXNwb25zZSdzIGhlYWRlciBsaXN0IChpZ25vcmluZyBwYXJhbWV0
ZXJzKSBpcyBub3QgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZS4KICAgICAgICAgICAgIC8vIEZvciBo
aXN0b3JpY2FsIHJlYXNvbnMsIGZldGNoaW5nIGEgY2xhc3NpYyBzY3JpcHQgZG9lcyBub3QgaW5j
bHVkZSBNSU1FIHR5cGUgY2hlY2tpbmcuIEluIGNvbnRyYXN0LCBtb2R1bGUgc2NyaXB0cyB3aWxs
IGZhaWwgdG8gbG9hZCBpZiB0aGV5IGFyZSBub3Qgb2YgYSBjb3JyZWN0IE1JTUUgdHlwZS4KLSAg
ICAgICAgICAgIHJlamVjdFdpdGhGZXRjaEVycm9yKFJlZiB7ICptX2NvbnRleHQgfSwgV1RGTW92
ZShwcm9taXNlKSwgRXhjZXB0aW9uQ29kZTo6VHlwZUVycm9yLCBtYWtlU3RyaW5nKCInIiwgbG9h
ZGVyLnJlc3BvbnNlTUlNRVR5cGUoKSwgIicgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlwdCBNSU1F
IHR5cGUuIikpOworICAgICAgICAgICAgcmVqZWN0V2l0aEZldGNoRXJyb3IoKm1fY29udGV4dCwg
V1RGTW92ZShwcm9taXNlKSwgRXhjZXB0aW9uQ29kZTo6VHlwZUVycm9yLCBtYWtlU3RyaW5nKCIn
IiwgbG9hZGVyLnJlc3BvbnNlTUlNRVR5cGUoKSwgIicgaXMgbm90IGEgdmFsaWQgSmF2YVNjcmlw
dCBNSU1FIHR5cGUuIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU3
Myw3ICs1NzEsNyBAQCB2b2lkIFNjcmlwdE1vZHVsZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoTW9k
dWxlU2NyaXB0TG9hZGVyJiBtb2R1bGVTY3JpcHRMb2FkZXIsCiAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFdvcmtlclNjcmlwdEZldGNoZXImPihsb2FkZXIuc2NyaXB0RmV0Y2hlcigp
KS5zZXRSZWZlcnJlclBvbGljeShsb2FkZXIucmVmZXJyZXJQb2xpY3koKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByZXNwb25zZVVSTCA9IGNhbm9uaWNhbGl6ZUFuZFJlZ2lzdGVyUmVz
cG9uc2VVUkwocmVzcG9uc2VVUkwsIHdvcmtlclNjcmlwdExvYWRlci5pc1JlZGlyZWN0ZWQoKSwg
d29ya2VyU2NyaXB0TG9hZGVyLnJlc3BvbnNlU291cmNlKCkpOwotICAgICAgICAgICAgaWYgKFJl
ZlB0ciBnbG9iYWxTY29wZSA9IGR5bmFtaWNEb3duY2FzdDxTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU+KCptX2NvbnRleHQpKQorICAgICAgICAgICAgaWYgKGF1dG8qIGdsb2JhbFNjb3BlID0gZHlu
YW1pY0Rvd25jYXN0PFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZT4oKm1fY29udGV4dCkpCiAgICAg
ICAgICAgICAgICAgZ2xvYmFsU2NvcGUtPnNldFNjcmlwdFJlc291cmNlKHNvdXJjZVVSTCwgU2Vy
dmljZVdvcmtlckNvbnRleHREYXRhOjpJbXBvcnRlZFNjcmlwdCB7IGxvYWRlci5zY3JpcHQoKSwg
cmVzcG9uc2VVUkwsIGxvYWRlci5yZXNwb25zZU1JTUVUeXBlKCkgfSk7CiAgICAgICAgIH0KICAg
ICAgICAgbV9yZXF1ZXN0VVJMVG9SZXNwb25zZVVSTE1hcC5hZGQoc291cmNlVVJMLnN0cmluZygp
LCByZXNwb25zZVVSTCk7CkBAIC01OTUsNyArNTkzLDcgQEAgdm9pZCBTY3JpcHRNb2R1bGVMb2Fk
ZXI6Om5vdGlmeUZpbmlzaGVkKE1vZHVsZVNjcmlwdExvYWRlciYgbW9kdWxlU2NyaXB0TG9hZGVy
LAogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmIHsgKm1fY29udGV4dCB9LT5jaGVja2VkRXZl
bnRMb29wKCktPnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5nLCBbcHJvbWlzZSA9IFdU
Rk1vdmUocHJvbWlzZSksIHNvdXJjZUNvZGUgPSBXVEZNb3ZlKHNvdXJjZUNvZGUpXSgpIHsKKyAg
ICBtX2NvbnRleHQtPmV2ZW50TG9vcCgpLnF1ZXVlVGFzayhUYXNrU291cmNlOjpOZXR3b3JraW5n
LCBbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHNvdXJjZUNvZGUgPSBXVEZNb3ZlKHNvdXJj
ZUNvZGUpXSgpIHsKICAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZVdpdGhDYWxsYmFjayhbJiwgc291
cmNlQ29kZV0oSlNET01HbG9iYWxPYmplY3QmIGpzR2xvYmFsT2JqZWN0KSB7CiAgICAgICAgICAg
ICByZXR1cm4gSlNDOjpKU1NvdXJjZUNvZGU6OmNyZWF0ZShqc0dsb2JhbE9iamVjdC52bSgpLCBK
U0M6OlNvdXJjZUNvZGUgeyBzb3VyY2VDb2RlIH0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVjdHVyZWRDbG9uZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJ1Y3R1cmVkQ2xvbmUuY3BwCmluZGV4IGZkYTNhNzdlMjJl
MS4uMTc1YmNlZjlkYWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
dHJ1Y3R1cmVkQ2xvbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cnVj
dHVyZWRDbG9uZS5jcHAKQEAgLTczLDcgKzczLDcgQEAgSlNDX0RFRklORV9IT1NUX0ZVTkNUSU9O
KHN0cnVjdHVyZWRDbG9uZUZvclN0cmVhbSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QK
ICAgICBBU1NFUlQoY2FsbEZyYW1lKTsKICAgICBBU1NFUlQoY2FsbEZyYW1lLT5hcmd1bWVudENv
dW50KCkpOwogCi0gICAgUmVmIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gY2FsbEZyYW1lLT51bmNoZWNrZWRBcmd1bWVu
dCgwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkFzc2VtYmx5
Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1dlYkFzc2VtYmx5Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaAppbmRleCAwNzFjMjhhNWNm
ODQuLmY2YjdmNzI5ZjQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
V2ViQXNzZW1ibHlDYWNoZWRTY3JpcHRTb3VyY2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1dlYkFzc2VtYmx5Q2FjaGVkU2NyaXB0U291cmNlUHJvdmlkZXIuaApA
QCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5XZWJBc3NlbWJseUNhY2hl
ZFNjcmlwdFNvdXJjZVByb3ZpZGVyKCkKICAgICB7Ci0gICAgICAgIENhY2hlZFJlc291cmNlSGFu
ZGxlIHsgbV9jYWNoZWRTY3JpcHQgfS0+cmVtb3ZlQ2xpZW50KCp0aGlzKTsKKyAgICAgICAgbV9j
YWNoZWRTY3JpcHQtPnJlbW92ZUNsaWVudCgqdGhpcyk7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2FjaGVkU2NyaXB0LT5zY3JpcHRIYXNoKCk7
IH0KQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAgICAgaWYgKCFtX2J1ZmZlci0+aXNDb250aWd1b3VzKCkpCi0gICAgICAgICAgICBt
X2J1ZmZlciA9IFJlZiB7ICptX2J1ZmZlciB9LT5tYWtlQ29udGlndW91cygpOworICAgICAgICAg
ICAgbV9idWZmZXIgPSBtX2J1ZmZlci0+bWFrZUNvbnRpZ3VvdXMoKTsKIAogICAgICAgICByZXR1
cm4gZG93bmNhc3Q8U2hhcmVkQnVmZmVyPigqbV9idWZmZXIpLmRhdGEoKTsKICAgICB9CkBAIC04
Myw3ICs4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICwgbV9jYWNoZWRTY3JpcHQoY2FjaGVkU2Ny
aXB0KQogICAgICAgICAsIG1fYnVmZmVyKG51bGxwdHIpCiAgICAgewotICAgICAgICBDYWNoZWRS
ZXNvdXJjZUhhbmRsZSB7IG1fY2FjaGVkU2NyaXB0IH0tPmFkZENsaWVudCgqdGhpcyk7CisgICAg
ICAgIG1fY2FjaGVkU2NyaXB0LT5hZGRDbGllbnQoKnRoaXMpOwogICAgIH0KIAogICAgIENhY2hl
ZFJlc291cmNlSGFuZGxlPENhY2hlZFNjcmlwdD4gbV9jYWNoZWRTY3JpcHQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJBc3NlbWJseVNjcmlwdEJ1ZmZlclNvdXJj
ZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJBc3NlbWJseVNjcmlw
dEJ1ZmZlclNvdXJjZVByb3ZpZGVyLmgKaW5kZXggZDA1NWE5M2U4MjE4Li44OGU0NDIzODAxNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkFzc2VtYmx5U2NyaXB0
QnVmZmVyU291cmNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9X
ZWJBc3NlbWJseVNjcmlwdEJ1ZmZlclNvdXJjZVByb3ZpZGVyLmgKQEAgLTcwLDcgKzcwLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghbV9idWZmZXItPmlz
Q29udGlndW91cygpKQotICAgICAgICAgICAgbV9idWZmZXIgPSBSZWZQdHIgeyBtX2J1ZmZlciB9
LT5tYWtlQ29udGlndW91cygpOworICAgICAgICAgICAgbV9idWZmZXIgPSBtX2J1ZmZlci0+bWFr
ZUNvbnRpZ3VvdXMoKTsKICAgICB9CiAKICAgICB2b2lkIHVubG9ja1VuZGVybHlpbmdCdWZmZXIo
KSBmaW5hbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpT
Q2xpZW50RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlSlNDbGll
bnREYXRhLmNwcAppbmRleCA4YzQ0ZDE5MTEzMDYuLmMwODhkZTM1ZjZjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5jcHAKQEAgLTE0
MSw3ICsxNDEsNyBAQCBKU1ZNQ2xpZW50RGF0YTo6fkpTVk1DbGllbnREYXRhKCkKICAgICAgICAg
Y2xpZW50LndpbGxEZXN0cm95Vk0oKTsKICAgICB9KTsKIAotICAgIEFTU0VSVChtX3dvcmxkU2V0
LmNvbnRhaW5zKCptX25vcm1hbFdvcmxkKSk7CisgICAgQVNTRVJUKG1fd29ybGRTZXQuY29udGFp
bnMobV9ub3JtYWxXb3JsZC5nZXQoKSkpOwogICAgIEFTU0VSVChtX3dvcmxkU2V0LnNpemUoKSA9
PSAxKTsKICAgICBBU1NFUlQobV9ub3JtYWxXb3JsZC0+aGFzT25lUmVmKCkpOwogICAgIG1fbm9y
bWFsV29ybGQgPSBudWxscHRyOwpAQCAtMTU5LDI2ICsxNTksMjYgQEAgdm9pZCBKU1ZNQ2xpZW50
RGF0YTo6Z2V0QWxsV29ybGRzKFZlY3RvcjxSZWY8RE9NV3JhcHBlcldvcmxkPj4mIHdvcmxkcykK
ICAgICAvLyBpcyByZWFkeSB0byBzdGFydCBldmFsdWF0aW5nIEphdmFTY3JpcHQuIEZvciBleGFt
cGxlLCBXZWIgSW5zcGVjdG9yIHdhaXRzIGZvciB0aGUgbWFpbiB3b3JsZAogICAgIC8vIGNoYW5n
ZSB0byBjbGVhciBhbnkgaW5qZWN0ZWQgc2NyaXB0cyBhbmQgZGVidWdnZXIvYnJlYWtwb2ludCBz
dGF0ZS4KIAotICAgIFJlZiBtYWluTm9ybWFsV29ybGQgPSBtYWluVGhyZWFkTm9ybWFsV29ybGQo
KTsKKyAgICBhdXRvJiBtYWluTm9ybWFsV29ybGQgPSBtYWluVGhyZWFkTm9ybWFsV29ybGQoKTsK
IAogICAgIC8vIEFkZCBtYWluIG5vcm1hbCB3b3JsZC4KLSAgICBpZiAobV93b3JsZFNldC5jb250
YWlucyhtYWluTm9ybWFsV29ybGQpKQorICAgIGlmIChtX3dvcmxkU2V0LmNvbnRhaW5zKCZtYWlu
Tm9ybWFsV29ybGQpKQogICAgICAgICB3b3JsZHMuYXBwZW5kKG1haW5Ob3JtYWxXb3JsZCk7CiAK
ICAgICAvLyBBZGQgb3RoZXIgbm9ybWFsIHdvcmxkcy4KLSAgICBmb3IgKGF1dG8mIHdvcmxkIDog
bV93b3JsZFNldCkgeworICAgIGZvciAoYXV0byogd29ybGQgOiBtX3dvcmxkU2V0KSB7CiAgICAg
ICAgIGlmICh3b3JsZC0+dHlwZSgpICE9IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICh3b3JsZC5wdHIoKSA9PSBtYWluTm9y
bWFsV29ybGQucHRyKCkpCisgICAgICAgIGlmICh3b3JsZCA9PSAmbWFpbk5vcm1hbFdvcmxkKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHdvcmxkcy5hcHBlbmQod29ybGQuZ2V0KCkp
OworICAgICAgICB3b3JsZHMuYXBwZW5kKCp3b3JsZCk7CiAgICAgfQogCiAgICAgLy8gQWRkIG5v
bi1ub3JtYWwgd29ybGRzLgotICAgIGZvciAoYXV0byYgd29ybGQgOiBtX3dvcmxkU2V0KSB7Cisg
ICAgZm9yIChhdXRvKiB3b3JsZCA6IG1fd29ybGRTZXQpIHsKICAgICAgICAgaWYgKHdvcmxkLT50
eXBlKCkgPT0gRE9NV3JhcHBlcldvcmxkOjpUeXBlOjpOb3JtYWwpCiAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgd29ybGRzLmFwcGVuZCh3b3JsZC5nZXQoKSk7CisgICAgICAgIHdvcmxk
cy5hcHBlbmQoKndvcmxkKTsKICAgICB9CiB9CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBTdHJpbmcg
SlNWTUNsaWVudERhdGE6Om92ZXJyaWRlU291cmNlVVJMKGNvbnN0IEpTQzo6U3RhY2tGcmFtZSYg
ZnJhbWUsIGNvbnN0IFN0cgogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pbmhlcml0czxKU0RPTVdp
bmRvd0Jhc2U+KCkpCiAgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiAKLSAgICBSZWZQdHIg
ZG9jdW1lbnQgPSBqc0Nhc3Q8Y29uc3QgSlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KS0+
d3JhcHBlZCgpLmRvY3VtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnQgPSBqc0Nhc3Q8Y29uc3Qg
SlNET01XaW5kb3dCYXNlKj4oZ2xvYmFsT2JqZWN0KS0+d3JhcHBlZCgpLmRvY3VtZW50KCk7CiAg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCmluZGV4IDAx
ZmE1MDFlYTYyMS4uN2NmMThiMTliMjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9XZWJDb3JlSlNDbGllbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvV2ViQ29yZUpTQ2xpZW50RGF0YS5oCkBAIC0xMjAsMTQgKzEyMCwxNCBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHJlbWVtYmVyV29ybGQoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVCghbV93b3JsZFNldC5jb250YWlucyh3b3JsZCkpOwotICAgICAgICBt
X3dvcmxkU2V0LmFkZCh3b3JsZCk7CisgICAgICAgIEFTU0VSVCghbV93b3JsZFNldC5jb250YWlu
cygmd29ybGQpKTsKKyAgICAgICAgbV93b3JsZFNldC5hZGQoJndvcmxkKTsKICAgICB9CiAKICAg
ICB2b2lkIGZvcmdldFdvcmxkKERPTVdyYXBwZXJXb3JsZCYgd29ybGQpCiAgICAgewotICAgICAg
ICBBU1NFUlQobV93b3JsZFNldC5jb250YWlucyh3b3JsZCkpOwotICAgICAgICBtX3dvcmxkU2V0
LnJlbW92ZSh3b3JsZCk7CisgICAgICAgIEFTU0VSVChtX3dvcmxkU2V0LmNvbnRhaW5zKCZ3b3Js
ZCkpOworICAgICAgICBtX3dvcmxkU2V0LnJlbW92ZSgmd29ybGQpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgU3RyaW5nIG92ZXJyaWRlU291cmNlVVJMKGNvbnN0IEpTQzo6U3RhY2tGcmFtZSYsIGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxTb3VyY2VVUkwpIGNvbnN0OwpAQCAtMTU4LDcgKzE1OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZENsaWVudChDbGllbnQmIGNsaWVudCkgeyBtX2NsaWVudHMu
YWRkKGNsaWVudCk7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoU2V0PFNpbmdsZVRocmVhZFdlYWtS
ZWY8RE9NV3JhcHBlcldvcmxkPj4gbV93b3JsZFNldDsKKyAgICBIYXNoU2V0PERPTVdyYXBwZXJX
b3JsZCo+IG1fd29ybGRTZXQ7CiAgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV9ub3JtYWxX
b3JsZDsKIAogICAgIEpTQnVpbHRpbkZ1bmN0aW9ucyBtX2J1aWx0aW5GdW5jdGlvbnM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5jcHAKaW5kZXggMzllM2EwMzE3OTA4
Li45OTI3YWVkMzk3MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dp
bmRvd1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94
eS5jcHAKQEAgLTY5LDExICs2OSw2IEBAIEZyYW1lKiBXaW5kb3dQcm94eTo6ZnJhbWUoKSBjb25z
dAogICAgIHJldHVybiBtX2ZyYW1lLmdldCgpOwogfQogCi1SZWZQdHI8RnJhbWU+IFdpbmRvd1By
b3h5Ojpwcm90ZWN0ZWRGcmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhbWUuZ2V0KCk7
Ci19Ci0KIHZvaWQgV2luZG93UHJveHk6OmRldGFjaEZyb21GcmFtZSgpCiB7CiAgICAgQVNTRVJU
KG1fZnJhbWUpOwpAQCAtODUsNyArODAsNyBAQCB2b2lkIFdpbmRvd1Byb3h5OjpkZXRhY2hGcm9t
RnJhbWUoKQogICAgICAgICB3aGlsZSAoIW1fanNXaW5kb3dQcm94aWVzLT5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgIGF1dG8gaXQgPSBtX2pzV2luZG93UHJveGllcy0+YmVnaW4oKTsKICAgICAg
ICAgICAgIGl0LT52YWx1ZS0+d2luZG93KCktPnNldENvbnNvbGVDbGllbnQobnVsbHB0cik7Ci0g
ICAgICAgICAgICBkZXN0cm95SlNXaW5kb3dQcm94eShSZWYgeyAqaXQtPmtleSB9KTsKKyAgICAg
ICAgICAgIGRlc3Ryb3lKU1dpbmRvd1Byb3h5KCppdC0+a2V5KTsKICAgICAgICAgfQogICAgICAg
ICBjb2xsZWN0R2FyYmFnZUFmdGVyV2luZG93UHJveHlEZXN0cnVjdGlvbigpOwogICAgIH0KQEAg
LTk2LDE0ICs5MSwxNCBAQCB2b2lkIFdpbmRvd1Byb3h5OjpyZXBsYWNlRnJhbWUoRnJhbWUmIGZy
YW1lKQogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBBU1NFUlQoaXM8TG9jYWxGcmFtZT4obV9m
cmFtZSkgIT0gaXM8TG9jYWxGcmFtZT4oZnJhbWUpKTsKICAgICBtX2ZyYW1lID0gZnJhbWU7Ci0g
ICAgc2V0RE9NV2luZG93KGZyYW1lLnByb3RlY3RlZFdpbmRvdygpLmdldCgpKTsKKyAgICBzZXRE
T01XaW5kb3coZnJhbWUud2luZG93KCkpOwogfQogCiB2b2lkIFdpbmRvd1Byb3h5OjpkZXN0cm95
SlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdvcmxkKQogewogICAgIEFTU0VSVChtX2pz
V2luZG93UHJveGllcy0+Y29udGFpbnMoJndvcmxkKSk7CiAgICAgbV9qc1dpbmRvd1Byb3hpZXMt
PnJlbW92ZSgmd29ybGQpOwotICAgIHdvcmxkLmRpZERlc3Ryb3lXaW5kb3dQcm94eSgqdGhpcyk7
CisgICAgd29ybGQuZGlkRGVzdHJveVdpbmRvd1Byb3h5KHRoaXMpOwogfQogCiBKU1dpbmRvd1By
b3h5JiBXaW5kb3dQcm94eTo6Y3JlYXRlSlNXaW5kb3dQcm94eShET01XcmFwcGVyV29ybGQmIHdv
cmxkKQpAQCAtMTEzLDExICsxMDgsMTEgQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJveHk6OmNy
ZWF0ZUpTV2luZG93UHJveHkoRE9NV3JhcHBlcldvcmxkJiB3b3JsZCkKICAgICBBU1NFUlQoIW1f
anNXaW5kb3dQcm94aWVzLT5jb250YWlucygmd29ybGQpKTsKICAgICBBU1NFUlQobV9mcmFtZS0+
d2luZG93KCkpOwogCi0gICAgUmVmIHZtID0gd29ybGQudm0oKTsKKyAgICBWTSYgdm0gPSB3b3Js
ZC52bSgpOwogCi0gICAgU3Ryb25nPEpTV2luZG93UHJveHk+IGpzV2luZG93UHJveHkodm0sICZK
U1dpbmRvd1Byb3h5OjpjcmVhdGUodm0sICptX2ZyYW1lLT5wcm90ZWN0ZWRXaW5kb3coKSwgd29y
bGQpKTsKKyAgICBTdHJvbmc8SlNXaW5kb3dQcm94eT4ganNXaW5kb3dQcm94eSh2bSwgJkpTV2lu
ZG93UHJveHk6OmNyZWF0ZSh2bSwgKm1fZnJhbWUtPndpbmRvdygpLCB3b3JsZCkpOwogICAgIG1f
anNXaW5kb3dQcm94aWVzLT5hZGQoJndvcmxkLCBqc1dpbmRvd1Byb3h5KTsKLSAgICB3b3JsZC5k
aWRDcmVhdGVXaW5kb3dQcm94eSgqdGhpcyk7CisgICAgd29ybGQuZGlkQ3JlYXRlV2luZG93UHJv
eHkodGhpcyk7CiAgICAgcmV0dXJuICpqc1dpbmRvd1Byb3h5LmdldCgpOwogfQogCkBAIC0xMzks
OCArMTM0LDggQEAgSlNXaW5kb3dQcm94eSYgV2luZG93UHJveHk6OmNyZWF0ZUpTV2luZG93UHJv
eHlXaXRoSW5pdGlhbGl6ZWRTY3JpcHQoRE9NV3JhcHBlclcKIAogICAgIEpTTG9ja0hvbGRlciBs
b2NrKHdvcmxkLnZtKCkpOwogICAgIGF1dG8mIHdpbmRvd1Byb3h5ID0gY3JlYXRlSlNXaW5kb3dQ
cm94eSh3b3JsZCk7Ci0gICAgaWYgKFJlZlB0ciBsb2NhbEZyYW1lID0gZHluYW1pY0Rvd25jYXN0
PExvY2FsRnJhbWU+KCptX2ZyYW1lKSkKLSAgICAgICAgbG9jYWxGcmFtZS0+Y2hlY2tlZFNjcmlw
dCgpLT5pbml0U2NyaXB0Rm9yV2luZG93UHJveHkod2luZG93UHJveHkpOworICAgIGlmIChhdXRv
KiBsb2NhbEZyYW1lID0gZHluYW1pY0Rvd25jYXN0PExvY2FsRnJhbWU+KCptX2ZyYW1lKSkKKyAg
ICAgICAgbG9jYWxGcmFtZS0+c2NyaXB0KCkuaW5pdFNjcmlwdEZvcldpbmRvd1Byb3h5KHdpbmRv
d1Byb3h5KTsKICAgICByZXR1cm4gd2luZG93UHJveHk7CiB9CiAKQEAgLTE4NSw4ICsxODAsOCBA
QCB2b2lkIFdpbmRvd1Byb3h5OjpzZXRET01XaW5kb3coRE9NV2luZG93KiBuZXdET01XaW5kb3cp
CiAKICAgICAgICAgd2luZG93UHJveHktPnNldFdpbmRvdygqbmV3RE9NV2luZG93KTsKIAotICAg
ICAgICBDaGVja2VkUHRyPFNjcmlwdENvbnRyb2xsZXI+IHNjcmlwdENvbnRyb2xsZXI7Ci0gICAg
ICAgIFJlZlB0cjxQYWdlPiBwYWdlOworICAgICAgICBTY3JpcHRDb250cm9sbGVyKiBzY3JpcHRD
b250cm9sbGVyID0gbnVsbHB0cjsKKyAgICAgICAgUGFnZSogcGFnZSA9IG51bGxwdHI7CiAgICAg
ICAgIGlmIChhdXRvKiBsb2NhbEZyYW1lID0gZHluYW1pY0Rvd25jYXN0PExvY2FsRnJhbWU+KCpt
X2ZyYW1lKSkgewogICAgICAgICAgICAgc2NyaXB0Q29udHJvbGxlciA9ICZsb2NhbEZyYW1lLT5z
Y3JpcHQoKTsKICAgICAgICAgICAgIHBhZ2UgPSBsb2NhbEZyYW1lLT5wYWdlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJveHkuaAppbmRleCBkNWE2ZDk1OGJmNDEuLmFmNzEw
OGFjNzk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2luZG93UHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XaW5kb3dQcm94eS5oCkBAIC0z
OCw3ICszOCw3IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgSlNET01HbG9iYWxPYmplY3Q7CiBjbGFz
cyBKU1dpbmRvd1Byb3h5OwogCi1jbGFzcyBXaW5kb3dQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVk
PFdpbmRvd1Byb3h5PiwgcHVibGljIENhbk1ha2VTaW5nbGVUaHJlYWRXZWFrUHRyPFdpbmRvd1By
b3h5PiB7CitjbGFzcyBXaW5kb3dQcm94eSA6IHB1YmxpYyBSZWZDb3VudGVkPFdpbmRvd1Byb3h5
PiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgdXNpbmcgUHJv
eHlNYXAgPSBIYXNoTWFwPFJlZlB0cjxET01XcmFwcGVyV29ybGQ+LCBKU0M6OlN0cm9uZzxKU1dp
bmRvd1Byb3h5Pj47CkBAIC01MSw3ICs1MSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCB+V2luZG93UHJveHkoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEZyYW1lKiBmcmFtZSgpIGNv
bnN0OwotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdGVkRnJhbWUoKSBjb25zdDsKICAgICB2b2lk
IGRldGFjaEZyb21GcmFtZSgpOwogICAgIHZvaWQgcmVwbGFjZUZyYW1lKEZyYW1lJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKaW5kZXggMjNjZjk2MTQ1NzBhLi4xNjhkMjIxNWYyNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCkBAIC02MCwxMSArNjAsNiBAQCBGcmFtZTo6fkZyYW1lKCkKICAgICBtX25h
dmlnYXRpb25TY2hlZHVsZXItPmNhbmNlbCgpOwogfQogCi1SZWZQdHI8RE9NV2luZG93PiBGcmFt
ZTo6cHJvdGVjdGVkV2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdmlydHVhbFdpbmRvdygp
OwotfQotCiBzdGQ6Om9wdGlvbmFsPFBhZ2VJZGVudGlmaWVyPiBGcmFtZTo6cGFnZUlEKCkgY29u
c3QKIHsKICAgICBpZiAoYXV0byogcGFnZSA9IHRoaXMtPnBhZ2UoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApp
bmRleCA3YzU2ZDgyMjBmNzkuLmYyOTJlNzE5Mjg3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtNjAs
NyArNjAsNiBAQCBwdWJsaWM6CiAgICAgUmVmPFdpbmRvd1Byb3h5PiBwcm90ZWN0ZWRXaW5kb3dQ
cm94eSgpIGNvbnN0OwogCiAgICAgRE9NV2luZG93KiB3aW5kb3coKSBjb25zdCB7IHJldHVybiB2
aXJ0dWFsV2luZG93KCk7IH0KLSAgICBSZWZQdHI8RE9NV2luZG93PiBwcm90ZWN0ZWRXaW5kb3co
KSBjb25zdDsKICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdCB7IHJldHVybiBtX3RyZWVOb2Rl
OyB9CiAgICAgRnJhbWVJZGVudGlmaWVyIGZyYW1lSUQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
SUQ7IH0KICAgICBpbmxpbmUgUGFnZSogcGFnZSgpIGNvbnN0OyAvLyBEZWZpbmVkIGluIFBhZ2Uu
aC4K
</data>

          </attachment>
      

    </bug>

</bugzilla>